> for more practice XD`);
+ },
+ },
+ ransei: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Ransei')}|Heyo, I'm hosting a program known as Pokémon Lore Tutoring this generation and I was wondering if any of you guys would be interested in tutoring. Every generation of Pokémon lore is available for tutoring, however we are in need of tutors to start off with. If you are interested let me know. Oh yeah I'm also hosting a program known as OM Tutoring.`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Ransei')}|A perfect world of Pokémon has everything balanced, whether it's truth and ideals, life and death, time and space, or the organisms of nature and the organisms of whom were genetically engineered. All Pokémon are welcomed as long as they help maintain this balance. Remember this. It's what Arceus always wanted.`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Ransei')}|Well, at least I tried. ripsei.`);
+ },
+ },
+ returntomonkey: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('ReturnToMonkey')}|Where banana`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('ReturnToMonkey')}|**Monkey Scream**`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('ReturnToMonkey')}|Reject the humanity...if you dare...`);
+ },
+ },
+ rissoux: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Rissoux')}|:squad:`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Rissoux')}|Welcome to the Family`);
+ },
+ },
+ rsb: {
+ noCopy: true,
+ onStart(pokemon) {
+ this.add(`c:|${getName('RSB')}|Time to take a bite out of crime!`);
+ const dog = (this.toID(enemyStaff(pokemon)));
+ if (dog === 'rsb' || dog === 'shiloh' || dog === 'valerian' || dog === 'breadey' || dog === 'yuki') {
+ this.add(`c:|${getName('RSB')}|DOGGO!`);
+ }
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('RSB')}|Requesting backup!`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('RSB')}|Officer down.`);
+ },
+ onBasePowerPriority: 19,
+ onBasePower(basePower, attacker, defender, move) {
+ if (!attacker.illusion && move.flags['bite']) {
+ return this.chainModify(1.5);
+ }
+ },
+ onTryHit(target, source, move) {
+ if (!target.illusion && target !== source && move.type === 'Fire') {
+ move.accuracy = true;
+ if (!target.addVolatile('flashfire')) {
+ this.add('-immune', target, '[from] ability: Flash Fire');
+ }
+ return null;
+ }
+ },
+ onEnd(pokemon) {
+ pokemon.removeVolatile('flashfire');
+ },
+ innateName: "Flash Fire + Strong Jaw",
+ shortDesc: "Flash Fire + Strong Jaw.",
+ },
+ rumia: {
+ noCopy: true,
+ onStart(pokemon) {
+ if (enemyStaff(pokemon) === 'kolohe') {
+ this.add(`c:|${getName('Rumia')}|OMG who could that be (●♡∀♡)`);
+ } else {
+ this.add(`c:|${getName('Rumia')}|is the mon in front of me the edible kind?`);
+ }
+ },
+ onSwitchOut(pokemon) {
+ if (enemyStaff(pokemon) === 'kolohe') {
+ this.add(`c:|${getName('Rumia')}|i cant bring myself to do this...`);
+ } else {
+ this.add(`c:|${getName('Rumia')}|brb ^_^`);
+ }
+ },
+ onFaint(pokemon) {
+ if (enemyStaff(pokemon) === 'kolohe') {
+ this.add(`c:|${getName('Rumia')}|this is the best way to go out...`);
+ } else {
+ this.add(`c:|${getName('Rumia')}|is that sooooo...`);
+ }
+ },
+ },
+ scotteh: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Scotteh')}|\`\`Compilation completed successfully. Executing...\`\``);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Scotteh')}|\`\`Execution temporarily paused.\`\``);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Scotteh')}|\`\`Segmentation fault (core dumped)\`\``);
+ },
+ },
+ sexymalasada: {
+ noCopy: true,
+ onStart(pokemon) {
+ switch (this.toID(enemyStaff(pokemon))) {
+ case 'wigglytree':
+ this.add(`c:|${getName('SexyMalasada')}|Hey Wiggles! I made pizza again! Wanna learn more RNG btw?`);
+ break;
+ case 'appletunalamode':
+ this.add(`c:|${getName('SexyMalasada')}|And now you must learn how to RNG with nothing but a sundial for a timer! __Trust me!__`);
+ break;
+ case 'loethalion':
+ this.add(`c:|${getName('SexyMalasada')}|For the hundredth time Loe, check. the. pins.`);
+ break;
+ case 'nicolic':
+ this.add(`c:|${getName('SexyMalasada')}|Hi Nic! Why you keep postponing learning old-gen RNG? q_q`);
+ break;
+ case 'swiffix':
+ this.add(`c:|${getName('SexyMalasada')}|....something smells in here`);
+ break;
+ case 'mex':
+ this.add(`c:|${getName('SexyMalasada')}|Today is the day you finally learn RNG Mex, deal with it!`);
+ break;
+ case 'clefable':
+ this.add(`c:|${getName('SexyMalasada')}|Oi! I'm not hacking, it's RNG!`);
+ break;
+ case 'billo':
+ this.add(`c:|${getName('SexyMalasada')}|Billo help! The tool isn't working again q_q`);
+ break;
+ default:
+ this.add(`c:|${getName('SexyMalasada')}|Hello! Do you have some time to talk about RNGesus and its awesome teachings: The Art of RNG abuse??`);
+ break;
+ }
+ },
+ onSwitchOut(pokemon) {
+ switch (this.toID(enemyStaff(pokemon))) {
+ case 'loethalion':
+ this.add(`c:|${getName('SexyMalasada')}|fricking heck`);
+ break;
+ case 'swiffix':
+ this.add(`c:|${getName('SexyMalasada')}|Just shower already!`);
+ break;
+ case 'billo':
+ this.add(`c:|${getName('SexyMalasada')}|Fiiiine I'll read the wiki...`);
+ break;
+ default:
+ this.add(`c:|${getName('SexyMalasada')}|Crap! I missed my frame... Resetting... q_q`);
+ break;
+ }
+ },
+ onFaint(pokemon) {
+ switch (this.toID(enemyStaff(pokemon))) {
+ case 'loethalion':
+ this.add(`c:|${getName('SexyMalasada')}|fricking heck`);
+ break;
+ case 'swiffix':
+ this.add(`c:|${getName('SexyMalasada')}|Just shower already!`);
+ break;
+ case 'billo':
+ this.add(`c:|${getName('SexyMalasada')}|Fiiiine I'll read the wiki...`);
+ break;
+ default:
+ this.add(`c:|${getName('SexyMalasada')}|Well then.. have fun soft-resetting for your shiny! >:( Cya on the flipside 🕶️`);
+ break;
+ }
+ },
+ },
+ sharpclaw: {
+ noCopy: true,
+ onStart(pokemon) {
+ if (pokemon.species.name === 'Sneasel') {
+ this.add(`c:|${getName('sharp_claw')}|Hi, I'm Tumble! hf :D`);
+ } else {
+ this.add(`c:|${getName('sharp_claw')}|Hi, I'm Rough! gl >:)`);
+ }
+ },
+ onSwitchOut(pokemon) {
+ if (pokemon.species.name === 'Sneasel') {
+ this.add(`c:|${getName('sharp_claw')}|brb, getting my brother :3`);
+ if (pokemon.illusion) return;
+ changeSet(this, pokemon, ssbSets['sharp_claw-Rough']);
+ } else {
+ this.add(`c:|${getName('sharp_claw')}|brb, getting my sister c:`);
+ if (pokemon.illusion) return;
+ changeSet(this, pokemon, ssbSets['sharp_claw']);
+ }
+ },
+ onFaint(pokemon) {
+ if (pokemon.species.name === 'Sneasel') {
+ this.add(`c:|${getName('sharp_claw')}|ur no fun ;~;`);
+ } else {
+ this.add(`c:|${getName('sharp_claw')}|ur no fun T_T`);
+ }
+ },
+ innateName: "Rough and Tumble",
+ shortDesc: "Changes Sneasel forme on switch out.",
+ },
+ siegfried: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Siegfried')}|You say goodbye and I say hello`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Siegfried')}|Oh, I get by with a little help from my friends.`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Siegfried')}|Living is easy with eyes closed.`);
+ },
+ },
+ sificon: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Sificon~')}|gm (it's 4pm and I woke up just now)`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Sificon~')}|guess I'll go to bed (we all know that I won't)`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Sificon~')}|oop`);
+ },
+ },
+ skies: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('skies')}|the baddest in the room, so tell em to make room... `);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('skies')}|u thought i was feelin u?`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('skies')}|what did i do? like?`);
+ },
+ },
+ snake: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('snake')}|CAP Concept: Pure Utility Pokemon`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('snake')}|CAP is a community focused project that creates singular Pokemon through structured Smogon based discussion threads. We define a concept to build around and proceed through various stages to determine typing, ability, stats, and movepool to complement that concept. We also run stages to determine a CAP's art, name, Pokedex entry, and sprite, so even if you're not a competitive Pokemon person you can get involved. At the end of each process we implement each CAP here on Pokemon Showdown!, where they are made available with the rest of our creations in the CAP metagame, found under 'S/V Singles'.`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('snake')}|CAP does not accept personal creations. This refers to any idea for a Pokemon that already has predefined typing, stats, abilities, movepool, name, art, pokedex entries, weight, height, or even generic themes such as "rabbit" or "angry". These facets of a Pokemon are all decided through community discussion in CAP during the CAP process. If you think you have an idea for a Pokemon that does not define these features, you may have a concept. CAP bases our Pokemon around concepts that look to explore the mechanics behind Pokemon and we take open submissions whenever we start a new project. Examples of past concepts include Perfect Sketch User, Momentum, Trapping mechanics, delayed move user, and weather enabler.`);
+ },
+ },
+ softflex: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Soft Flex')}|*beep beep beep*`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Soft Flex')}|*whrrrr*`);
+ },
+ },
+ solaroslunaris: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Solaros & Lunaris')}|Get a taste of this!`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Solaros & Lunaris')}|Too hot to handle!`);
+ },
+ },
+ spiderz: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Spiderz')}|whats good gangy`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Spiderz')}|im moving DIFFERENT`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Spiderz')}|fuck 12`);
+ },
+ },
+ spoo: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('spoo')}|hemogoblin`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('spoo')}|danger`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('spoo')}|dies`);
+ },
+ },
+ steorra: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Steorra')}|BOO`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Steorra')}|Into the shadows I go`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Steorra')}|I'm dead but not really (lol ghost)`);
+ },
+ },
+ struchni: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Struchni')}|~tt newgame`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Struchni')}|~tt endgame`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Struchni')}|**selfveto**`);
+ },
+ },
+ sulo: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Sulo')}|everybody is so damn dramatic. me included.`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Sulo')}|afk sorry guys brb`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Sulo')}|Charon, take me home...`);
+ },
+ },
+ swiffix: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Swiffix')}|:uwupip:`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Swiffix')}|brb, gonna get some ketchup for my pizza`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Swiffix')}|Remember: it's pp, not pfp!`);
+ },
+ innateName: "Skill Link",
+ onModifyMove(move, pokemon, target) {
+ if (pokemon.illusion) return;
+ if (move.multihit && Array.isArray(move.multihit) && move.multihit.length) {
+ move.multihit = move.multihit[1];
+ }
+ if (move.multiaccuracy) {
+ delete move.multiaccuracy;
+ }
+ },
+ },
+ syrinix: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Syrinix')}|You kept me like a secret but I kept you like an oath`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Syrinix')}|They don't think it be like it is, but it do`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Syrinix')}|Aight Imma head out`);
+ },
+ },
+ teclis: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Teclis')}|Thanks for having me.`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Teclis')}|Until next time!`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Teclis')}|This was my last dance.`);
+ },
+ },
+ tenshi: {
+ noCopy: true,
+ onStart(pokemon) {
+ switch (this.toID(enemyStaff(pokemon))) {
+ case 'blitz':
+ this.add(`c:|${getName('Tenshi')}|le fishe`);
+ break;
+ case 'ut':
+ case 'clouds':
+ this.add(`c:|${getName('Tenshi')}|birbs cannot save u from SAND`);
+ break;
+ default:
+ this.add(`c:|${getName('Tenshi')}|he SLEUTHING`);
+ }
+ },
+ onSwitchOut(pokemon) {
+ this.add(`c:|${getName('Tenshi')}|omg no SAND save him! :(`);
+ const replacementIndex = Math.max(
+ pokemon.moves.indexOf('pyroball'),
+ pokemon.moves.indexOf('aquatail'),
+ pokemon.moves.indexOf('tripleaxel'),
+ pokemon.moves.indexOf('stoneedge')
+ );
+ if (replacementIndex < 0) {
+ return;
+ }
+ const replacement = this.dex.moves.get('dynamicpunch');
+ const replacementMove = {
+ move: replacement.name,
+ id: replacement.id,
+ pp: replacement.pp,
+ maxpp: replacement.pp,
+ target: replacement.target,
+ disabled: false,
+ used: false,
+ };
+ pokemon.moveSlots[replacementIndex] = replacementMove;
+ pokemon.baseMoveSlots[replacementIndex] = replacementMove;
+ },
+ onFaint(pokemon) {
+ switch (this.toID(enemyStaff(pokemon))) {
+ case 'blitz':
+ this.add(`c:|${getName('Tenshi')}|YOU KILLED YOUR SON`);
+ break;
+ case 'ut':
+ this.add(`c:|${getName('Tenshi')}|worryrex`);
+ break;
+ case 'clouds':
+ this.add(`c:|${getName('Tenshi')}|SAND is no longer in the air tonight :(`);
+ break;
+ default:
+ this.add(`c:|${getName('Tenshi')}|Wait no that's illegal`);
+ }
+ },
+ },
+ tico: {
+ noCopy: true,
+ onStart(pokemon) {
+ this.add(`c:|${getName('Tico')}|oie`);
+ if (pokemon.illusion) return;
+ this.add('-ability', pokemon, 'Mold Breaker');
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Tico')}|t+`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Tico')}|It's been 3,000 years…`);
+ },
+ onModifyMove(move, pokemon) {
+ if (pokemon.illusion) return;
+ move.ignoreAbility = true;
+ },
+ innateName: "Mold Breaker",
+ },
+ thejesucristoosama: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('TheJesucristoOsAma')}|In the name of the Father, the Son and the Holy Spirit. I bless you, Amen.`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('TheJesucristoOsAma')}|Oh well, I think it's time to call my apostles.`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('TheJesucristoOsAma')}|And that's how I've died for the third time, I'll go to host a game at eventos.`);
+ },
+ },
+ traceuser: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('trace')}|I'm both the beginning and the end.`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('trace')}|Why does the violence never end?`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('trace')}|How disappointingly short a dream lasts.`);
+ },
+ },
+ tuthur: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Tuthur')}|QUEUE !`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Tuthur')}|feur`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Tuthur')}|this wouldn't have gone like this if we'd played kunc`);
+ },
+ },
+ twoofroses: {
+ noCopy: true,
+ onStart(pokemon) {
+ this.add(`c:|${getName('Two of Roses')}|I'm here! I'm uhh- Yes! Also hi! Happy to be here.`);
+ this.singleEvent('WeatherChange', this.effect, this.effectState, pokemon);
+ this.singleEvent('TerrainChange', this.effect, this.effectState, pokemon);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Two of Roses')}|Pfft! I prefer lurking anyway.`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Two of Roses')}|It matters not how much we try but only that we try. For if the tides swell the dunes of a timeless existence, and our strength wanes in the coming unlight- And if we are to be as the forsaken namesakes before us, for the yesterday that never came and the tomorrow that is forever promised, know this; We dilly, so they do not dally...`);
+ },
+ innateName: "Wonderer",
+ shortDesc: "This Pokemon's secondary type changes based on the active weather or terrain, monotype if neither.",
+ onWeatherChange(target, source, sourceEffect) {
+ const currentWeather = this.field.getWeather().id;
+ const currentTerrain = this.field.getTerrain().id;
+ let type;
+ if (!currentWeather && !target.hasType('Dark')) {
+ if (currentTerrain) {
+ this.singleEvent('TerrainChange', this.effect, this.effectState, target);
+ return;
+ }
+ type = 'Dark';
+ } else if (currentWeather) {
+ if (['raindance', 'primordialsea'].includes(currentWeather) && !target.hasType('Water')) {
+ type = 'Water';
+ } else if (['sunnyday', 'desolateland'].includes(currentWeather) && !target.hasType('Fire')) {
+ type = 'Fire';
+ } else if (['sandstorm', 'deserteddunes'].includes(currentWeather) && !target.hasType('Rock')) {
+ type = 'Rock';
+ } else if (['hail', 'snow'].includes(currentWeather) && !target.hasType('Ice')) {
+ type = 'Ice';
+ } else {
+ // do nothing if it's not the 4 primary weathers...unless there are more?
+ }
+ }
+ if (type && !target.terastallized) {
+ target.addType(type);
+ this.add('-start', target, 'typeadd', type, '[from] ability: Wonderer');
+ }
+ },
+ onTerrainChange(target, source, sourceEffect) {
+ const currentWeather = this.field.getWeather().id;
+ const currentTerrain = this.field.getTerrain().id;
+ let type;
+ if (!currentTerrain && !target.hasType('Dark')) {
+ if (currentWeather) {
+ this.singleEvent('WeatherChange', this.effect, this.effectState, target);
+ return;
+ }
+ type = 'Dark';
+ } else if (currentTerrain) {
+ if (currentTerrain === 'electricterrain') {
+ target.setType('Electric');
+ type = '';
+ } else if (currentTerrain === 'psychicterrain' && !target.hasType('Psychic')) {
+ type = 'Psychic';
+ } else if (currentTerrain === 'grassyterrain' && !target.hasType('Grass')) {
+ type = 'Grass';
+ } else if (currentTerrain === 'mistyterrain' && !target.hasType('Fairy')) {
+ type = 'Fairy';
+ } else if (!target.hasType('Ghost')) { // custom terrains
+ type = 'Ghost';
+ }
+ }
+ if (type && !target.terastallized) {
+ target.addType(type);
+ this.add('-start', target, 'typeadd', type, '[from] ability: Wonderer');
+ }
+ },
+ },
+ ut: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('UT')}|__being this young is art, aquamarine__`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('UT')}|__make sure nobody sees you leave__`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('UT')}|__swaying as the room burnded down__`);
+ },
+ },
+ valerian: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Valerian ✿ ♡')}|Lucario's shiny should've been red.`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Valerian ✿ ♡')}|As a wise man once said, "I'll be back".`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Valerian ✿ ♡')}|My name is based on a flower, NOT the movie!`);
+ },
+ },
+ venous: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Venous')}|bro the flute on stal is bonkers`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('2013 hindi room')}|when i said tine wins i didnt mean now`);
+ this.add(`c:|${getName('Venous')}|dw watch this`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Venous')}|teachin bitches how to swim`);
+ },
+ },
+ violet: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Vio͜͡let')}|I'm not hating you just decided to be wrong`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Vio͜͡let')}|anyway…`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Vio͜͡let')}|blatantly carried by cheating but you'll still find a way to downplay`);
+ },
+ innateName: "Do No Evil",
+ shortDesc: "When this Pokemon uses an attacking move, it transforms into the Ogerpon form of the corresponding type.",
+ onModifyMove(move, attacker, defender) {
+ if (attacker.species.baseSpecies !== 'Ogerpon' || attacker.transformed) return;
+ let targetForme = 'Ogerpon';
+ switch (move.type) {
+ case 'Rock':
+ targetForme += '-Cornerstone';
+ break;
+ case 'Fire':
+ targetForme += '-Hearthflame';
+ break;
+ case 'Water':
+ targetForme += '-Wellspring';
+ break;
+ case 'Grass':
+ // Do nothing
+ break;
+ default:
+ return;
+ }
+ if (attacker.terastallized) targetForme += (targetForme === 'Ogerpon' ? '-Teal' : '') + '-Tera';
+ if (attacker.species.name !== targetForme) {
+ this.add('-activate', attacker, 'ability: Do No Evil');
+ attacker.formeChange(targetForme);
+ }
+ },
+ },
+ vistar: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Vistar')}|Oh hi! (0_0)/`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Vistar')}|I'll go on a break, wait for me!`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Vistar')}|So... this is how my career ends...`);
+ },
+ },
+ vmnunes: {
+ noCopy: true,
+ },
+ warriorgallade: {
+ noCopy: true,
+ onStart(pokemon) {
+ this.add(`c:|${getName('WarriorGallade')}|i wanted to proc berries, but it seems that i was better at proc rastinating instead. nom nom nom.`);
+ if (this.toID(enemyStaff(pokemon)) === 'aqrator') {
+ this.add(`c:|${getName('WarriorGallade')}|Hi Tori, how goes your conquest?`);
+ }
+ // innate
+ if (pokemon.illusion) return;
+ pokemon.abilityState.gluttony = true;
+ this.add('-activate', pokemon, 'ability: Nutrient Boost');
+ this.boost({def: 1, spd: 1}, pokemon);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('WarriorGallade')}|amidst this tactical retreat, you didn't think i forgot about the pokeradar, did you? you can bet that my return with even more questions will be __eventful__ :3`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('WarriorGallade')}|a wig flew, and now i must bid you adieu. farewell my berries accrued, for this is the end of my etude.`);
+ },
+ onSourceAfterFaint() {
+ this.add(`c:|${getName('WarriorGallade')}|Triumphant through trouncing tough, tenacious threats today, though testing 212 takeovers tarry. Theorizing these techniques tends to torrid, terribly tiresome tabulations, therefore torrential tactics traverse thorough thoughts.`);
+ },
+ innateName: "Nutrient Boost",
+ shortDesc: "Gluttony + Thick Fat + Neuroforce + +1 Def/Sp. Def boost.",
+ onDamage(item, pokemon) {
+ if (pokemon.illusion) return;
+ pokemon.abilityState.gluttony = true;
+ },
+ onSourceModifyAtkPriority: 6,
+ onSourceModifyAtk(atk, attacker, defender, move) {
+ if (defender.illusion) return;
+ if (move.type === 'Ice' || move.type === 'Fire') {
+ this.debug('Thick Fat weaken');
+ return this.chainModify(0.5);
+ }
+ },
+ onSourceModifySpAPriority: 5,
+ onSourceModifySpA(atk, attacker, defender, move) {
+ if (defender.illusion) return;
+ if (move.type === 'Ice' || move.type === 'Fire') {
+ this.debug('Thick Fat weaken');
+ return this.chainModify(0.5);
+ }
+ },
+ onModifyDamage(damage, source, target, move) {
+ if (source.illusion) return;
+ if (move && target.getMoveHitData(move).typeMod > 0) {
+ return this.chainModify([5120, 4096]);
+ }
+ },
+ },
+ waves: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Waves')}|Nice opinion, one small issue: 252+ SpA Wailord Water Spout (150 BP) vs. 0 HP / 0- SpD Your Argument in Rain: 1202-1416 (413 - 486.5%) -- guaranteed OHKO.`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Waves')}|Ocean man, take me by the hand.`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Waves')}|/me waves goodbye.`);
+ },
+ },
+ wigglytree: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('WigglyTree')}|hi ur qt :3`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('WigglyTree')}|Is that a watering can I see?`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('WigglyTree')}|Keep wiggling!`);
+ },
+ },
+ xprienzo: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('XpRienzo ☑◡☑')}|Would I lie to you?`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('XpRienzo ☑◡☑')}|What? You don't trust me? >.>`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('XpRienzo ☑◡☑')}|Bleh, lame.`);
+ },
+ },
+ xy01: {
+ noCopy: true,
+ },
+ yeetdabxd: {
+ noCopy: true,
+ onStart(pokemon) {
+ this.add(`c:|${getName('yeet dab xd')}|Ah, welcome~! The merchandise you have chosen will cost your soul. Is that acceptable?`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('yeet dab xd')}|brb mum's getting the camera`);
+ },
+ onFaint(pokemon) {
+ if (pokemon.m.seedActivated) return;
+ this.add(`c:|${getName('yeet dab xd')}|wait no you didn't join QW yet`);
+ },
+ },
+ yellowpaint: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Yellow Paint')}|cheers`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Yellow Paint')}|luckynbad`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Yellow Paint')}|The canvas is filled with different screams.`);
+ },
+ onModifyMove(move) {
+ if (move.id === 'iondeluge') {
+ move.onHitField = function () {
+ this.add(`c:|${getName('Yellow Paint')}|Paint it Yellow!`);
+ };
+ }
+ },
+ },
+ yuki: {
+ noCopy: true,
+ innateName: "Snow Warning",
+ onStart(source) {
+ if (source.illusion) return;
+ this.field.setWeather('snow', source, this.dex.abilities.get('snowwarning'));
+ },
+ },
+ yveltalnl: {
+ noCopy: true,
+ onStart(pokemon) {
+ this.add(`c:|${getName('YveltalNL')}|It's over ${pokemon.side.foe.name}, I have the high ground!`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('YveltalNL')}|brb playing a draft game rq`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('YveltalNL')}|whatever i'll go watch football`);
+ },
+ },
+ za: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('za')}|Benvenuto`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('za')}|mish`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('za')}|!track Between the Buried and Me - Sun Of Nothing - 2020 Remix / Remaster`);
+ },
+ },
+ zalm: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('Zalm')}|<(:O)00000>`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('Zalm')}|brb gonna check if my lasagne didn't explode e-e`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('Zalm')}|I should have picked an actual fish pokémon like veluza instead...`);
+ },
+ },
+ zarel: {
+ noCopy: true,
+ },
+ zee: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('zee')}|So is this your first VGC tournament?`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('zee')}|Sorry, I've got a plane to catch!`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('zee')}|Hey everyone it's been a great time working with you all in this Super Staff Bros battle but I think it's the right time for me to step down. Thank you all and see you around.`);
+ },
+ },
+ zoro: {
+ noCopy: true,
+ onStart() {
+ this.add(`c:|${getName('zoro')}|gmeow`);
+ },
+ onSwitchOut() {
+ this.add(`c:|${getName('zoro')}|brb I want to chase some yarn`);
+ },
+ onFaint() {
+ this.add(`c:|${getName('zoro')}|time to take a cat nap`);
+ },
+ },
+
+ // Custom effects
+
+ // Clementine
+ flipped: {
+ name: 'Flipped',
+ onStart(target) {
+ this.add('-start', target, 'flipped');
+ },
+ onEnd(target) {
+ this.add('-end', target, 'flipped');
+ },
+ },
+
+ // dhelmise
+ bioticorbself: {
+ name: "Biotic Orb (Self)",
+ // side condition
+ effectType: 'Condition',
+ duration: 4,
+ onSideStart(side, source) {
+ this.effectState.source = source;
+ this.add('-sidestart', side, 'move: Biotic Orb (Self)');
+ },
+ onResidualOrder: 5,
+ onResidualSubOrder: 1,
+ onResidual(target, pokemon, effect) {
+ const source = this.effectState.source;
+ const quotes: string[] = [
+ `A cure for all that ails.`,
+ `A sip for the parched.`,
+ `Be nourished!`,
+ `I offer something more.`,
+ `Receive my aid.`,
+ `Be nurtured.`,
+ `Know mother's kindness.`,
+ `A salve for all that ails.`,
+ `An eldritch blessing.`,
+ `Flourish.`,
+ `Now feast.`,
+ `Recover your strength.`,
+ ];
+ if (target.hp) {
+ let amount = 65;
+ if (this.effectState.duration === 4) amount = 40;
+ this.heal(amount, target, source, effect);
+ }
+ this.add(`c:|${getName((source.illusion || source).name)}|${this.sample(quotes)}`);
+ },
+ onSideResidualOrder: 26,
+ onSideResidualSubOrder: 5,
+ onSideEnd(side) {
+ this.add('-sideend', side, 'move: Biotic Orb (Self)');
+ },
+ },
+ bioticorbfoe: {
+ name: "Biotic Orb (Foe)",
+ // side condition
+ effectType: 'Condition',
+ duration: 4,
+ onSideStart(side, source) {
+ this.effectState.source = source;
+ this.add('-sidestart', side, 'move: Biotic Orb (Foe)');
+ },
+ onResidualOrder: 5,
+ onResidualSubOrder: 1,
+ onResidual(target, pokemon, effect) {
+ const source = this.effectState.source;
+ let quotes: string[] = [
+ `A taste of poison.`,
+ `Misery made manifest.`,
+ `Pain is inevitable.`,
+ `You cannot escape me!`,
+ `Your end is within my reach.`,
+ `Bí ag stangadh leat.`,
+ `Ruination is imminent.`,
+ `The weak can fend for themselves.`,
+ `Know darkness.`,
+ `Let shadow consume you.`,
+ `Your pain will be endless.`,
+ ];
+ if (target.hp) {
+ this.damage(50, target, source, effect);
+ }
+ if (target.fainted || target.hp <= 0) {
+ quotes = [
+ `Expect the unexpected.`,
+ `In chaos lies opportunity.`,
+ `Mind your surroundings.`,
+ `Perhaps next time you should not stand in the way of the orb.`,
+ `A torturous gift.`,
+ `The darkness will find them.`,
+ `The gloom takes you.`,
+ ];
+ }
+ this.add(`c:|${getName((source.illusion || source).name)}|${this.sample(quotes)}`);
+ },
+ onSideResidualOrder: 26,
+ onSideResidualSubOrder: 5,
+ onSideEnd(side) {
+ this.add('-sideend', side, 'move: Biotic Orb (Foe)');
+ },
+ },
+
+ // EasyOnTheHills
+ snack: {
+ name: "Snack",
+ duration: 3,
+ onStart(target) {
+ this.add('-start', target, 'snack');
+ },
+ onEnd(target) {
+ this.add('-end', target, 'snack');
+ },
+ onResidualOrder: 5,
+ onResidualSubOrder: 4,
+ onResidual(target, source, effect) {
+ this.heal(target.baseMaxhp / 4);
+ },
+ },
+
+ // Elliot
+ beefed: {
+ name: "Beefed",
+ onStart(target) {
+ this.add('-start', target, 'beefed');
+ },
+ onEnd(target) {
+ this.add('-end', target, 'beefed');
+ },
+ onModifyMovePriority: -1,
+ onModifyMove(move, pokemon, target) {
+ if (!target || !this.checkMoveMakesContact(move, pokemon, target) || move.category === "Status") return;
+ if (!move.secondaries) move.secondaries = [];
+ move.secondaries.push({
+ chance: 30,
+ status: 'brn',
+ });
+ },
+ onDamagingHitOrder: 1,
+ onDamagingHit(damage, target, source, move) {
+ if (this.checkMoveMakesContact(move, source, target, true)) {
+ this.damage(source.baseMaxhp / 8, source, target);
+ }
+ if (this.checkMoveMakesContact(move, source, target) && this.randomChance(3, 10)) {
+ source.trySetStatus('brn', target);
+ }
+ },
+ onResidual(target, source, effect) {
+ this.heal(target.baseMaxhp / 8);
+ },
+ onSourceAfterFaint(length, target, source, effect) {
+ this.add(`c:|${getName('Elliot')}|Get Bovriled`);
+ },
+ },
+ boiled: {
+ name: "Boiled",
+ onStart(target) {
+ this.add('-start', target, 'boiled');
+ },
+ onEnd(target) {
+ this.add('-end', target, 'boiled');
+ },
+ onModifySpAPriority: 5,
+ onModifySpA(relayVar, source, target, move) {
+ return this.chainModify(1.5);
+ },
+ onModifyMovePriority: -1,
+ onModifyMove(move, pokemon, target) {
+ if (!target) return;
+ if (move.category !== "Status") {
+ if (!move.secondaries) move.secondaries = [];
+ move.secondaries.push({
+ chance: 30,
+ status: 'brn',
+ });
+ }
+ },
+ },
+
+ // Elly
+ stormsurge: {
+ name: 'StormSurge',
+ effectType: 'Weather',
+ duration: 5,
+ durationCallback(source, effect) {
+ if (source?.hasItem('damprock')) {
+ return 8;
+ }
+ return 5;
+ },
+ onEffectivenessPriority: -1,
+ onEffectiveness(typeMod, target, type, move) {
+ if (move?.effectType === 'Move' && move.category !== 'Status' && type === 'Flying' && typeMod > 0) {
+ this.add('-fieldactivate', 'Storm Surge');
+ return 0;
+ }
+ },
+ onWeatherModifyDamage(damage, attacker, defender, move) {
+ if (defender.hasItem('utilityumbrella')) return;
+ if (move.flags['wind']) {
+ this.debug('Storm Surge wind boost');
+ return this.chainModify(1.2);
+ }
+ if (move.type === 'Water') {
+ this.debug('Storm Surge water boost');
+ return this.chainModify(1.5);
+ }
+ if (move.type === 'Fire') {
+ this.debug('Storm Surge fire suppress');
+ return this.chainModify(0.5);
+ }
+ },
+ onAccuracy(accuracy, attacker, defender, move) {
+ if (move?.flags['wind'] && !attacker.hasItem('utilityumbrella')) return true;
+ return accuracy;
+ },
+ onFieldStart(battle, source, effect) {
+ if (effect?.effectType === 'Ability') {
+ if (this.gen <= 5) this.effectState.duration = 0;
+ this.add('-weather', 'StormSurge', '[from] ability: ' + effect.name, '[of] ' + source);
+ } else {
+ this.add('-weather', 'StormSurge');
+ }
+ },
+ onImmunity(type, pokemon) {
+ if (pokemon.hasItem('utilityumbrella')) return;
+ if (type === 'frz') return false;
+ },
+ onFieldResidualOrder: 1,
+ onFieldResidual() {
+ this.add('-weather', 'StormSurge', '[upkeep]');
+ this.eachEvent('Weather');
+ },
+ onFieldEnd() {
+ this.add('-weather', 'none');
+ },
+ },
+
+ // kenn
+ deserteddunes: {
+ name: 'DesertedDunes',
+ effectType: 'Weather',
+ duration: 0,
+ onEffectivenessPriority: -1,
+ onEffectiveness(typeMod, target, type, move) {
+ if (move?.effectType === 'Move' && move.category !== 'Status' && type === 'Rock' && typeMod > 0) {
+ this.add('-fieldactivate', 'Deserted Dunes');
+ return 0;
+ }
+ },
+ onModifySpDPriority: 10,
+ onModifySpD(spd, pokemon) {
+ if (pokemon.hasType('Rock') && this.field.isWeather('deserteddunes')) {
+ return this.modify(spd, 1.5);
+ }
+ },
+ onFieldStart(field, source, effect) {
+ this.add('-weather', 'DesertedDunes', '[from] ability: ' + effect.name, '[of] ' + source);
+ },
+ onFieldResidualOrder: 1,
+ onFieldResidual() {
+ this.add('-weather', 'DesertedDunes', '[upkeep]');
+ this.eachEvent('Weather');
+ },
+ onWeather(target) {
+ this.damage(target.baseMaxhp / 16);
+ },
+ onFieldEnd() {
+ this.add('-weather', 'none');
+ },
+ },
+
+ // Neko
+ catstampofapproval: {
+ name: "Cat Stamp of Approval",
+ noCopy: true,
+ onStart(target) {
+ this.add('-start', target, 'Cat Stamp of Approval');
+ this.effectState.bestStat = target.getBestStat(false, true);
+ },
+ onEnd(target) {
+ this.add('-end', target, 'Cat Stamp of Approval');
+ },
+ onModifyAtkPriority: 5,
+ onModifyAtk(atk, pokemon) {
+ if (this.effectState.bestStat !== 'atk' || pokemon.ignoringAbility()) return;
+ this.debug('Cat Stamp of Approval atk boost');
+ return this.chainModify([5325, 4096]);
+ },
+ onModifyDefPriority: 6,
+ onModifyDef(def, pokemon) {
+ if (this.effectState.bestStat !== 'def' || pokemon.ignoringAbility()) return;
+ this.debug('Cat Stamp of Approval def boost');
+ return this.chainModify([5325, 4096]);
+ },
+ onModifySpAPriority: 5,
+ onModifySpA(spa, pokemon) {
+ if (this.effectState.bestStat !== 'spa' || pokemon.ignoringAbility()) return;
+ this.debug('Cat Stamp of Approval spa boost');
+ return this.chainModify([5325, 4096]);
+ },
+ onModifySpDPriority: 6,
+ onModifySpD(spd, pokemon) {
+ if (this.effectState.bestStat !== 'spd' || pokemon.ignoringAbility()) return;
+ this.debug('Cat Stamp of Approval spd boost');
+ return this.chainModify([5325, 4096]);
+ },
+ onModifySpe(spe, pokemon) {
+ if (this.effectState.bestStat !== 'spe' || pokemon.ignoringAbility()) return;
+ this.debug('Cat Stamp of Approval spe boost');
+ return this.chainModify(1.5);
+ },
+ },
+
+ // Effects needed to be overriden for things to happen
+ attract: {
+ onStart(pokemon, source, effect) {
+ if (!(pokemon.gender === 'M' && source.gender === 'F') && !(pokemon.gender === 'F' && source.gender === 'M')) {
+ if (!['The Love Of Christ', ':3'].includes(effect.name)) {
+ this.debug('incompatible gender');
+ return false;
+ }
+ }
+ if (!this.runEvent('Attract', pokemon, source)) {
+ this.debug('Attract event failed');
+ return false;
+ }
+
+ if (effect.name === 'Cute Charm') {
+ this.add('-start', pokemon, 'Attract', '[from] ability: Cute Charm', '[of] ' + source);
+ } else if (effect.name === 'Destiny Knot') {
+ this.add('-start', pokemon, 'Attract', '[from] item: Destiny Knot', '[of] ' + source);
+ } else {
+ this.add('-start', pokemon, 'Attract');
+ }
+ },
+ onUpdate(pokemon) {
+ if (this.effectState.source && !this.effectState.source.isActive && pokemon.volatiles['attract']) {
+ this.debug('Removing Attract volatile on ' + pokemon);
+ pokemon.removeVolatile('attract');
+ }
+ },
+ onBeforeMovePriority: 2,
+ onBeforeMove(pokemon, target, move) {
+ this.add('-activate', pokemon, 'move: Attract', '[of] ' + this.effectState.source);
+ if (this.randomChance(1, 2)) {
+ this.add('cant', pokemon, 'Attract');
+ return false;
+ }
+ },
+ onEnd(pokemon) {
+ this.add('-end', pokemon, 'Attract', '[silent]');
+ },
+ },
+
+ gravity: {
+ duration: 5,
+ durationCallback(source, effect) {
+ if (source?.hasAbility('persistent')) {
+ this.add('-activate', source, 'ability: Persistent', '[move] Gravity');
+ return 7;
+ }
+ return 5;
+ },
+ onFieldStart(target, source) {
+ if (source?.hasAbility('persistent')) {
+ this.add('-fieldstart', 'move: Gravity', '[persistent]');
+ } else {
+ this.add('-fieldstart', 'move: Gravity');
+ }
+ for (const pokemon of this.getAllActive()) {
+ let applies = false;
+ if (pokemon.removeVolatile('bounce') || pokemon.removeVolatile('fly')) {
+ applies = true;
+ this.queue.cancelMove(pokemon);
+ pokemon.removeVolatile('twoturnmove');
+ }
+ if (pokemon.volatiles['skydrop']) {
+ applies = true;
+ this.queue.cancelMove(pokemon);
+
+ if (pokemon.volatiles['skydrop'].source) {
+ this.add('-end', pokemon.volatiles['twoturnmove'].source, 'Sky Drop', '[interrupt]');
+ }
+ pokemon.removeVolatile('skydrop');
+ pokemon.removeVolatile('twoturnmove');
+ }
+ if (pokemon.volatiles['magnetrise']) {
+ applies = true;
+ delete pokemon.volatiles['magnetrise'];
+ }
+ if (pokemon.volatiles['telekinesis']) {
+ applies = true;
+ delete pokemon.volatiles['telekinesis'];
+ }
+ if (applies) this.add('-activate', pokemon, 'move: Gravity');
+ }
+ },
+ onModifyAccuracy(accuracy) {
+ if (typeof accuracy !== 'number') return;
+ return this.chainModify([6840, 4096]);
+ },
+ onDisableMove(pokemon) {
+ for (const moveSlot of pokemon.moveSlots) {
+ if (this.dex.moves.get(moveSlot.id).flags['gravity']) {
+ pokemon.disableMove(moveSlot.id);
+ }
+ }
+ },
+ // groundedness implemented in battle.engine.js:BattlePokemon#isGrounded
+ onBeforeMovePriority: 6,
+ onBeforeMove(pokemon, target, move) {
+ if (move.flags['gravity'] && !move.isZ) {
+ this.add('cant', pokemon, 'move: Gravity', move);
+ return false;
+ }
+ },
+ onModifyMove(move, pokemon, target) {
+ if (move.flags['gravity'] && !move.isZ) {
+ this.add('cant', pokemon, 'move: Gravity', move);
+ return false;
+ }
+ },
+ onFieldResidualOrder: 27,
+ onFieldResidualSubOrder: 2,
+ onFieldEnd() {
+ this.add('-fieldend', 'move: Gravity');
+ const activePokemon = this.getAllActive();
+ for (const a of activePokemon) {
+ if (a.name === "Lunell") {
+ this.add(`c:|${getName('Lunell')}|ope there goes gravity`);
+ break;
+ }
+ }
+ },
+ },
+ raindance: {
+ inherit: true,
+ onWeatherModifyDamage(damage, attacker, defender, move) {
+ if (defender.hasItem('utilityumbrella') || move.id === 'geyserblast') return;
+ if (move.type === 'Water') {
+ this.debug('rain water boost');
+ return this.chainModify(1.5);
+ }
+ if (move.type === 'Fire') {
+ this.debug('rain fire suppress');
+ return this.chainModify(0.5);
+ }
+ },
+ },
+ sunnyday: {
+ inherit: true,
+ onWeatherModifyDamage(damage, attacker, defender, move) {
+ if (defender.hasItem('utilityumbrella') || move.id === 'geyserblast') return;
+ if (move.type === 'Fire') {
+ this.debug('Sunny Day fire boost');
+ return this.chainModify(1.5);
+ }
+ if (move.type === 'Water' && move.id !== 'hydrosteam') {
+ this.debug('Sunny Day water suppress');
+ return this.chainModify(0.5);
+ }
+ },
+ },
+ confusion: {
+ inherit: true,
+ onBeforeMove(pokemon) {
+ pokemon.volatiles['confusion'].time--;
+ if (!pokemon.volatiles['confusion'].time) {
+ pokemon.removeVolatile('confusion');
+ return;
+ }
+ this.add('-activate', pokemon, 'confusion');
+ if (!this.randomChance(33, 100)) {
+ return;
+ }
+ this.activeTarget = pokemon;
+ const damage = this.actions.getConfusionDamage(pokemon, 40);
+ if (typeof damage !== 'number') throw new Error("Confusion damage not dealt");
+ const activeMove = {id: this.toID('confused'), effectType: 'Move', type: '???'};
+ this.damage(damage, pokemon, pokemon, activeMove as ActiveMove);
+ if (this.effectState.sourceEffect?.id === 'cringedadjoke') {
+ for (const target of this.getAllActive()) {
+ if (target === pokemon) continue;
+ if (target.volatiles['cringedadjoke']) {
+ this.boost({atk: 1, def: 1}, target);
+ }
+ }
+ }
+ return false;
+ },
+ },
+};
diff --git a/data/mods/gen9ssb/items.ts b/data/mods/gen9ssb/items.ts
new file mode 100644
index 000000000000..ba538d227f08
--- /dev/null
+++ b/data/mods/gen9ssb/items.ts
@@ -0,0 +1,145 @@
+export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
+ // Archas
+ lilligantiumz: {
+ name: "Lilligantium Z",
+ spritenum: 633,
+ onTakeItem: false,
+ zMove: "Aura Rain",
+ zMoveFrom: "Quiver Dance",
+ itemUser: ["Lilligant"],
+ desc: "If held by a Lilligant with Quiver Dance, it can use Aura Rain.",
+ },
+ // Arya
+ flygonite: {
+ name: "Flygonite",
+ spritenum: 111,
+ itemUser: ["Flygon"],
+ megaEvolves: "Flygon",
+ megaStone: "Trapinch",
+ onTakeItem(item, source) {
+ if (item.megaEvolves === source.baseSpecies.baseSpecies) return false;
+ return true;
+ },
+ desc: "If held by a Flygon, this item allows it to Mega Evolve in battle.",
+ },
+ // Irpachuza
+ irpatuziniumz: {
+ name: "Irpatuzinium Z",
+ spritenum: 648,
+ onTakeItem: false,
+ zMove: "Bibbidi-Bobbidi-Rands",
+ zMoveFrom: "Fleur Cannon",
+ itemUser: ["Mr. Mime"],
+ desc: "If held by a Mr. Mime with Fleur Cannon, it can use Bibbidi-Bobbidi-Rands.",
+ },
+ // Loethalion
+ gardevoirite: {
+ inherit: true,
+ itemUser: ["Ralts"],
+ megaEvolves: "Ralts",
+ desc: "If held by a Ralts, this item allows it to Mega Evolve in battle.",
+ },
+ // Peary
+ pearyumz: {
+ name: "Pearyum Z",
+ spritenum: 647,
+ onTakeItem: false,
+ zMove: "1000 Gears",
+ zMoveFrom: "Gear Grind",
+ itemUser: ["Klinklang"],
+ desc: "If held by a Klinklang with Gear Grind, it can use 1000 Gears.",
+ },
+ // Rainshaft
+ rainiumz: {
+ name: "Rainium Z",
+ spritenum: 652,
+ onTakeItem: false,
+ zMove: "Hatsune Miku's Lucky Orb",
+ zMoveFrom: "Sparkling Aria",
+ itemUser: ["Xerneas"],
+ desc: "If held by a Xerneas with Sparkling Aria, it can use Hatsune Miku's Lucky Orb.",
+ },
+
+ // Modified for other effects
+
+ eviolite: {
+ inherit: true,
+ onModifyDef(def, pokemon) {
+ // Added Pichu-Spiky-eared for Hydrostatics to use Eviolite
+ if (pokemon.baseSpecies.nfe || pokemon.species.id === 'pichuspikyeared') {
+ return this.chainModify(1.5);
+ }
+ },
+ onModifySpD(spd, pokemon) {
+ // Added Pichu-Spiky-eared for Hydrostatics to use Eviolite
+ if (pokemon.baseSpecies.nfe || pokemon.species.id === 'pichuspikyeared') {
+ return this.chainModify(1.5);
+ }
+ },
+ },
+
+ // modified for nya's ability
+ focusband: {
+ inherit: true,
+ onDamage(damage, target, source, effect) {
+ const chance = target.hasAbility('adorablegrace') ? 2 : 1;
+ if (this.randomChance(chance, 10) && damage >= target.hp && effect && effect.effectType === 'Move') {
+ this.add("-activate", target, "item: Focus Band");
+ return target.hp - 1;
+ }
+ },
+ },
+ quickclaw: {
+ inherit: true,
+ onFractionalPriority(priority, pokemon) {
+ const chance = pokemon.hasAbility('adorablegrace') ? 2 : 1;
+ if (priority <= 0 && this.randomChance(chance, 5)) {
+ this.add('-activate', pokemon, 'item: Quick Claw');
+ return 0.1;
+ }
+ },
+ },
+
+ // modified for SexyMalasada's ability
+ lifeorb: {
+ inherit: true,
+ onAfterMoveSecondarySelf(source, target, move) {
+ if (source && source !== target && move && move.category !== 'Status' && !source.forceSwitchFlag) {
+ if (source.hasAbility('Ancestry Ritual')) {
+ this.heal(source.baseMaxhp / 10, source, source, this.dex.items.get('lifeorb'));
+ } else {
+ this.damage(source.baseMaxhp / 10, source, source, this.dex.items.get('lifeorb'));
+ }
+ }
+ },
+ },
+
+ safetygoggles: {
+ inherit: true,
+ onImmunity(type, pokemon) {
+ if (type === 'sandstorm' || type === 'deserteddunes' || type === 'hail' || type === 'powder') return false;
+ },
+ },
+ utilityumbrella: {
+ inherit: true,
+ onStart(pokemon) {
+ if (!pokemon.ignoringItem()) return;
+ if (['sunnyday', 'raindance', 'desolateland', 'primordialsea', 'stormsurge'].includes(this.field.effectiveWeather())) {
+ this.runEvent('WeatherChange', pokemon, pokemon, this.effect);
+ }
+ },
+ onUpdate(pokemon) {
+ if (!this.effectState.inactive) return;
+ this.effectState.inactive = false;
+ if (['sunnyday', 'raindance', 'desolateland', 'primordialsea', 'stormsurge'].includes(this.field.effectiveWeather())) {
+ this.runEvent('WeatherChange', pokemon, pokemon, this.effect);
+ }
+ },
+ onEnd(pokemon) {
+ if (['sunnyday', 'raindance', 'desolateland', 'primordialsea', 'stormsurge'].includes(this.field.effectiveWeather())) {
+ this.runEvent('WeatherChange', pokemon, pokemon, this.effect);
+ }
+ this.effectState.inactive = true;
+ },
+ },
+};
diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts
new file mode 100644
index 000000000000..35c1284202f1
--- /dev/null
+++ b/data/mods/gen9ssb/moves.ts
@@ -0,0 +1,7101 @@
+import {ssbSets} from "./random-teams";
+import {PSEUDO_WEATHERS, changeSet, getName} from "./scripts";
+import {Teams} from '../../../sim/teams';
+
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
+ /*
+ // Example
+ moveid: {
+ accuracy: 100, // a number or true for always hits
+ basePower: 100, // Not used for Status moves, base power of the move, number
+ category: "Physical", // "Physical", "Special", or "Status"
+ shortDesc: "", // short description, shows up in /dt
+ desc: "", // long description
+ name: "Move Name",
+ gen: 8,
+ pp: 10, // unboosted PP count
+ priority: 0, // move priority, -6 -> 6
+ flags: {}, // Move flags https://github.com/smogon/pokemon-showdown/blob/master/data/moves.js#L1-L27
+ onTryMove() {
+ this.attrLastMove('[still]'); // For custom animations
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Move Name 1', source);
+ this.add('-anim', source, 'Move Name 2', source);
+ }, // For custom animations
+ secondary: {
+ status: "tox",
+ chance: 20,
+ }, // secondary, set to null to not use one. Exact usage varies, check data/moves.js for examples
+ target: "normal", // What does this move hit?
+ // normal = the targeted foe, self = the user, allySide = your side (eg light screen), foeSide = the foe's side (eg spikes), all = the field (eg raindance). More can be found in data/moves.js
+ type: "Water", // The move's type
+ // Other useful things
+ noPPBoosts: true, // add this to not boost the PP of a move, not needed for Z moves, dont include it otherwise
+ isZ: "crystalname", // marks a move as a z move, list the crystal name inside
+ zMove: {effect: ''}, // for status moves, what happens when this is used as a Z move? check data/moves.js for examples
+ zMove: {boost: {atk: 2}}, // for status moves, stat boost given when used as a z move
+ critRatio: 2, // The higher the number (above 1) the higher the ratio, lowering it lowers the crit ratio
+ drain: [1, 2], // recover first num / second num % of the damage dealt
+ heal: [1, 2], // recover first num / second num % of the target's HP
+ },
+ */
+ // Please keep sets organized alphabetically based on staff member name!
+ // aegii
+ equipaegislash: {
+ accuracy: 100,
+ basePower: 80,
+ category: "Physical",
+ shortDesc: "50% +1 Atk, 50% +1 Def, eats berry.",
+ desc: "This move has a 50% chance to raise the user's Attack by 1 stage and a 50% chance to raise the user's Defense by 1 stage. After using the move, the user eats its berry if holding one.",
+ name: "Equip Aegislash",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Shadow Sneak', target);
+ this.add('-anim', source, 'Swords Dance', source);
+ this.add('-anim', source, 'Iron Defense', source);
+ },
+ secondaries: [
+ {
+ chance: 50,
+ self: {
+ boosts: {
+ atk: 1,
+ },
+ },
+ }, {
+ chance: 50,
+ self: {
+ boosts: {
+ def: 1,
+ },
+ },
+ },
+ ],
+ self: {
+ onHit(target, source) {
+ if (!source.getItem().isBerry) return;
+ source.eatItem(true);
+ },
+ },
+ secondary: null,
+ target: "normal",
+ type: "Steel",
+ },
+
+ // Aelita
+ smelt: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "User burns itself and gains +2 Spe/+1 Atk.",
+ desc: "This move burns the user, raises their Speed by 2 stages, and raises their Attack by 1 stage.",
+ name: "Smelt",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {},
+ onPrepareHit(pokemon) {
+ this.attrLastMove('[still]');
+ },
+ onHit(pokemon) {
+ pokemon.trySetStatus('brn');
+ this.add('-anim', pokemon, 'Shift Gear', pokemon);
+ this.boost({spe: 2, atk: 1});
+ },
+ secondary: null,
+ target: "self",
+ type: "Steel",
+ },
+
+ // Aethernum
+ iamatomic: {
+ accuracy: 100,
+ basePower: 140,
+ category: "Special",
+ shortDesc: "Lowers user's Def, Sp. Atk and Speed by 2 stages.",
+ desc: "Lowers the user's Defense, Special Attack, and Speed by 2 stages.",
+ name: "I. AM. ATOMIC.",
+ gen: 9,
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1},
+ onPrepareHit(target, source, move) {
+ this.add('-anim', source, 'Trick Room', target);
+ this.add('-anim', source, 'Clangerous Soul', source);
+ this.add('-anim', source, 'Flash', target);
+ this.add(`c:|${getName((source.illusion || source).name)}|I`);
+ this.add(`c:|${getName((source.illusion || source).name)}|AM`);
+ this.add(`c:|${getName((source.illusion || source).name)}|ATOMIC.`);
+ },
+ self: {
+ boosts: {
+ spe: -2,
+ def: -2,
+ spa: -2,
+ },
+ },
+ secondary: null,
+ target: "normal",
+ type: "Ghost",
+ },
+
+ // Akir
+ freeswitchbutton: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Haze + Parting Shot + Replacement heals 33%.",
+ desc: "Resets the stat stages of all active Pokemon to 0, then lowers the foe's Attack and Special Attack by 1 stage each while switching out. The Pokemon that switches in heals 33% of its maximum HP. This move bypasses all Protect-like effects.",
+ name: "Free Switch Button",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onHit(target, source, move) {
+ this.add('-clearallboost');
+ for (const pokemon of this.getAllActive()) {
+ pokemon.clearBoosts();
+ }
+ const foe = source.foes()[0];
+ if (!foe) return;
+ const success = this.boost({atk: -1, spa: -1}, foe, source);
+ if (!success && !foe.hasAbility('mirrorarmor')) {
+ delete move.selfSwitch;
+ }
+ },
+ // the foe cannot be set as the target in move properties because it breaks the 33% replacement heal
+ selfSwitch: true,
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Haze', source);
+ },
+ slotCondition: 'freeswitchbutton',
+ condition: {
+ onSwap(target) {
+ if (!target.fainted && (target.hp < target.maxhp)) {
+ target.heal(target.maxhp / 3);
+ this.add('-heal', target, target.getHealth, '[from] move: Free Switch Button');
+ target.side.removeSlotCondition(target, 'freeswitchbutton');
+ }
+ },
+ },
+ secondary: null,
+ target: "self",
+ type: "Water",
+ },
+
+ // Alex
+ spicierextract: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Leech Seed + Heal Block + Infestation",
+ desc: "Applies the effects of Leech Seed, Heal Block, and partial trapping to the target, causing the user to steal 1/8 of the target's maximum HP at the end of each turn until the target switches out, preventing the target from using any moves, items, or Abilities that heal HP for 5 turns, and preventing the target from switching out while damaging it for an additional 1/8 of its maximum HP at the end of each turn for 4-5 turns. If the target uses Baton Pass, the effects of Leech Seed, Heal Block, and partial trapping will remain in effect for the replacement.",
+ name: "Spicier Extract",
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1, reflectable: 1, mirror: 1, powder: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Leafage', target);
+ this.add('-anim', source, 'Stun Spore', target);
+ },
+ onHit(target, source) {
+ let success = false;
+ if (target.addVolatile('partiallytrapped', source)) success = true;
+ if (target.addVolatile('leechseed', source)) success = true;
+ if (target.addVolatile('healblock', source)) success = true;
+ return success;
+ },
+ secondary: null,
+ target: "normal",
+ type: "Grass",
+ },
+
+ // Alexander489
+ scumhunt: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Uses a random damaging, non-resisted move.",
+ desc: "A random damaging non-resisted move is selected for use, other than moves uncallable by Metronome and moves originating from Super Staff Bros Ultimate.",
+ name: "Scumhunt",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source, move) {
+ const nresTypes = [];
+ for (const i of this.dex.types.names()) {
+ if (i === "Stellar") continue;
+ if (target) {
+ const effect = this.dex.getEffectiveness(i, target);
+ const immune = !this.dex.getImmunity(i, target);
+ if (effect >= 0 && !immune) {
+ nresTypes.push(i);
+ }
+ }
+ }
+ if (!nresTypes.length) return;
+ const netType = this.sample(nresTypes);
+ const moves = this.dex.moves.all().filter(m => (
+ (![2, 4].includes(this.gen) || !source.moves.includes(m.id)) &&
+ (!m.isNonstandard || m.isNonstandard === 'Unobtainable') &&
+ m.flags['metronome'] && m.type === netType && m.category !== "Status"
+ ));
+ let randomMove = '';
+ if (moves.length) {
+ moves.sort((a, b) => a.num - b.num);
+ randomMove = this.sample(moves).id;
+ }
+ if (!randomMove) return false;
+ source.side.lastSelectedMove = this.toID(randomMove);
+ this.add('-anim', source, 'Spite', target);
+ this.add('-anim', source, 'Grudge', target);
+ this.add('-anim', source, 'Metronome', source);
+ this.actions.useMove(randomMove, source);
+ },
+ target: "normal",
+ type: "???",
+ },
+
+ // Apple
+ woppleorflopple: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Confuse; +2 SpA/D. Fail=Confuse self; -1 SpA/D.",
+ desc: "Usually moves first. This move has a 50% chance of confusing the target and raising the user's Special Attack and Special Defense by 2 stages. Otherwise, it will confuse the user and lower the user's Special Attack and Special Defense by 1 stage.",
+ name: "Wopple or Flopple",
+ gen: 9,
+ pp: 10,
+ priority: 1,
+ flags: {protect: 1, reflectable: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Moonlight', source);
+ },
+ onHit(target, source, move) {
+ if (this.randomChance(1, 2)) {
+ target.addVolatile('confusion');
+ this.boost({spa: 2, spd: 2}, source);
+ } else {
+ source.addVolatile('confusion');
+ this.boost({spa: -1, spd: -1}, source);
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Normal",
+ },
+
+ // Appletun a la Mode
+ extracourse: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Recycles berry, +1 to 2 random stats (-acc/eva).",
+ desc: "The user regains the item it last used, and then boosts two random stats by 1 stage each, except Accuracy and Evasion. If the user is currently holding an item or has had their item forcibly removed, the stat boosts occur without the Recycle effect.",
+ name: "Extra Course",
+ gen: 9,
+ pp: 5,
+ priority: 0,
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Recycle', target);
+ },
+ flags: {snatch: 1},
+ onHit(pokemon) {
+ if (!pokemon.item && pokemon.lastItem) {
+ const item = pokemon.lastItem;
+ pokemon.lastItem = '';
+ this.add('-item', pokemon, this.dex.items.get(item), '[from] move: Extra Course');
+ pokemon.setItem(item);
+ }
+ let stats: BoostID[] = [];
+ const boost: SparseBoostsTable = {};
+ let statPlus: BoostID;
+ for (statPlus in pokemon.boosts) {
+ if (statPlus === 'accuracy' || statPlus === 'evasion') continue;
+ if (pokemon.boosts[statPlus] < 6) {
+ stats.push(statPlus);
+ }
+ }
+ let randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined;
+ if (randomStat) boost[randomStat] = 1;
+ stats = [];
+ for (statPlus in pokemon.boosts) {
+ if (statPlus === 'accuracy' || statPlus === 'evasion') continue;
+ if (pokemon.boosts[statPlus] < 6 && statPlus !== randomStat) {
+ stats.push(statPlus);
+ }
+ }
+ randomStat = stats.length ? this.sample(stats) : undefined;
+ if (randomStat) boost[randomStat] = 1;
+ this.boost(boost, pokemon, pokemon);
+ },
+ target: "self",
+ type: "Normal",
+ },
+
+ // aQrator
+ torisstori: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Confuses foe & deals 1/6th max HP for 4-5 turns.",
+ desc: "Causes the target to become confused. If this move is successful, the target takes damage equal to 1/6th of its maximum HP at the end of each turn for 4-5 turns.",
+ name: "Tori's Stori",
+ gen: 9,
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1, reflectable: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Water Spout', target);
+ this.add('-anim', source, 'Confuse Ray', target);
+ },
+ volatileStatus: 'torisstori',
+ condition: {
+ duration: 5,
+ durationCallback(target, source) {
+ if (source?.hasItem('gripclaw')) return 8;
+ return this.random(5, 6);
+ },
+ onStart(target) {
+ this.add('-start', target, 'Tori\'s Stori');
+ },
+ onResidualOrder: 6,
+ onResidual(pokemon) {
+ this.damage(pokemon.baseMaxhp / 6);
+ },
+ onEnd(target) {
+ this.add('-end', target, 'Tori\'s Stori');
+ },
+ },
+ secondary: {
+ chance: 100,
+ volatileStatus: 'confusion',
+ },
+ target: "normal",
+ type: "Water",
+ },
+
+ // A Quag To The Past
+ sireswitch: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Quag: Protect; Clod: Recover. Switch sires.",
+ desc: "Nearly always moves first. If the user is Quagsire, the user is protected from most attacks made by other Pokemon during this turn and then transforms into Clodsire. If the user is Clodsire, the user recovers 1/2 of its maximum HP and then transforms into Quagsire. This move fails if the user is neither Quagsire nor Clodsire.",
+ name: "Sire Switch",
+ gen: 9,
+ pp: 20,
+ priority: 4,
+ onTry(source) {
+ if (['Quagsire', 'Clodsire'].includes(source.species.name)) {
+ return;
+ }
+ this.hint("Only Clodsire and Quagsire can use this move.");
+ this.attrLastMove('[still]');
+ this.add('-fail', source, 'move: Sire Switch');
+ return null;
+ },
+ onModifyPriority(relayVar, source, target, move) {
+ if (source.species.name === 'Clodsire') {
+ return -6;
+ }
+ },
+ flags: {failcopycat: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Max Guard', source);
+ if (source.species.name === 'Quagsire') {
+ this.add('-anim', source, 'Protect', source);
+ return !!this.queue.willAct() && this.runEvent('StallMove', source);
+ } else {
+ this.add('-anim', source, 'Recover', source);
+ }
+ },
+ volatileStatus: 'protect',
+ onModifyMove(move, pokemon) {
+ if (pokemon.species.name === 'Clodsire') {
+ move.flags['heal'] = 1;
+ move.heal = [1, 2];
+ delete move.volatileStatus;
+ }
+ },
+ onHit(pokemon) {
+ if (pokemon.species.name === 'Quagsire') {
+ pokemon.addVolatile('stall');
+ changeSet(this, pokemon, ssbSets['A Quag To The Past-Clodsire'], true);
+ } else {
+ changeSet(this, pokemon, ssbSets['A Quag To The Past'], true);
+ }
+ },
+ secondary: null,
+ target: "self",
+ type: "Ground",
+ },
+
+ // Archas
+ aurarain: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Cures team status, all but user heal 50% max HP.",
+ desc: "Z-Move that requires Lilligantium Z. Every Pokemon in the user's party is cured of its non-volatile status condition. With the exception of the user, every Pokemon in the user's party heals for 1/2 of their maximum HP. This effect cannot revive fainted Pokemon.",
+ name: "Aura Rain",
+ pp: 1,
+ priority: 0,
+ flags: {},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Rain Dance', source);
+ this.add('-anim', source, 'Water Sport', source);
+ this.add('-anim', source, 'Aromatherapy', source);
+ },
+ onHit(pokemon) {
+ this.add('-message', 'An alleviating aura rains down on the field!');
+ let success = false;
+ const allies = [...pokemon.side.pokemon, ...pokemon.side.allySide?.pokemon || []];
+ for (const ally of allies) {
+ if (ally === pokemon) continue;
+ if (ally.heal(this.modify(ally.maxhp, 0.5))) {
+ this.add('-heal', ally, ally.getHealth);
+ success = true;
+ }
+ if (ally.cureStatus()) success = true;
+ }
+ return success;
+ },
+ isZ: "lilligantiumz",
+ secondary: null,
+ target: "self",
+ type: "Grass",
+ },
+
+ // Arcueid
+ funnyvamp: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Changes user's forme, effects vary with forme.",
+ desc: "If the user is Deoxys-Defense, it transforms into Deoxys-Attack and uses a random move from its moveset. If the user is Deoxys-Attack, it transforms into Deoxys-Defense and boosts two random stats by 1 stage each, except Accuracy and Evasion.",
+ name: "Funny Vamp",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, failcopycat: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Moonlight', target);
+ this.add('-anim', source, 'Quiver Dance', target);
+ this.add('-anim', source, 'Geomancy', target);
+ this.add(`c:|${getName('Arcueid')}|I've got nine lives 🐈. You knew that about cats, right, 😹? That means I haven't lost until you beat me nine times 🙀!`);
+ },
+ onHit(target, source, move) {
+ if (source.species.name === "Deoxys-Defense") {
+ changeSet(this, source, ssbSets['Arcueid-Attack'], true);
+ let randMove = this.random(3) - 1;
+ if (randMove < 0) randMove = 0;
+ this.actions.useMove(source.moveSlots[randMove].id, target);
+ } else {
+ changeSet(this, source, ssbSets['Arcueid'], true);
+ for (let i = 0; i < 2; i++) {
+ const stats: BoostID[] = [];
+ const boost: SparseBoostsTable = {};
+ let statPlus: BoostID;
+ for (statPlus in source.boosts) {
+ if (statPlus === 'accuracy' || statPlus === 'evasion') continue;
+ if (source.boosts[statPlus] < 6) {
+ stats.push(statPlus);
+ }
+ }
+ const randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined;
+ if (randomStat) boost[randomStat] = 1;
+ this.boost(boost, source, source);
+ }
+ this.heal(source.baseMaxhp / 2, source);
+ }
+ },
+ secondary: null,
+ target: "self",
+ type: "Psychic",
+ },
+
+ // Arsenal
+ megidolaon: {
+ accuracy: 100,
+ basePower: 255,
+ category: "Special",
+ shortDesc: "Flinches if resulting in a critical hit.",
+ name: "Megidolaon",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Hyper Beam', target);
+ this.add('-anim', source, 'Earthquake', target);
+ },
+ volatileStatus: 'flinch',
+ secondary: null,
+ target: "normal",
+ type: "???",
+ },
+
+ // Artemis
+ automatedresponse: {
+ accuracy: 100,
+ basePower: 80,
+ category: "Special",
+ shortDesc: "Change move/user's type to SE. 25% NVE instead.",
+ desc: "Randomly changes the move's and user's type to deal super effective damage. There is a 25% chance that this move has a false positive and changes the move's and user's type to deal not very effective damage instead.",
+ name: "Automated Response",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ beforeTurnCallback(source, target) {
+ const seTypes = [];
+ const nveTypes = [];
+ let netType = "";
+ for (const i of this.dex.types.names()) {
+ if (target) {
+ const effect = this.dex.getEffectiveness(i, target);
+ const isImmune = !this.dex.getImmunity(i, target);
+ if (effect > 0 && !isImmune) {
+ seTypes.push(i);
+ } else if (effect < 0 && !isImmune) {
+ nveTypes.push(i);
+ }
+ }
+ }
+ let falsePositive = false;
+ if (!seTypes.length) seTypes.push('Electric');
+ if (!nveTypes.length) nveTypes.push('Electric');
+ if (this.randomChance(75, 100)) {
+ netType = this.sample(seTypes);
+ } else { // false positive
+ falsePositive = true;
+ netType = this.sample(nveTypes);
+ }
+ if (falsePositive) {
+ this.add('-message', `${(target.illusion || target).name} triggered a false-positive and caused Automated Response to become not-very effective!`);
+ }
+ if (source.setType(netType)) {
+ this.add('-start', source, 'typechange', netType);
+ }
+ source.m.artemisMoveType = netType;
+ },
+ onPrepareHit(target, source, move) {
+ this.add('-anim', source, 'Techno Blast', target);
+ },
+ onModifyType(move, pokemon, target) {
+ if (pokemon.m.artemisMoveType) {
+ move.type = pokemon.m.artemisMoveType;
+ }
+ },
+ self: {
+ boosts: {
+ spa: -2,
+ },
+ },
+ target: "normal",
+ type: "Electric",
+ },
+
+ // Arya
+ anyonecanbekilled: {
+ accuracy: 95,
+ basePower: 80,
+ category: "Special",
+ shortDesc: "+2 SpA for 2 turns.",
+ desc: "The user's Special Attack is boosted by 2 stages for 2 turns and is restored to its original value at the end. Does not stack with itself.",
+ name: "Anyone can be killed",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, sound: 1, bypasssub: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ self: {
+ volatileStatus: 'anyonecanbekilled',
+ },
+ condition: {
+ duration: 3,
+ onResidualOrder: 3,
+ onStart(target, source, sourceEffect) {
+ this.boost({spa: 2}, source);
+ },
+ onEnd(target) {
+ this.boost({spa: -2}, target);
+ },
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Dragon Dance', target);
+ this.add('-anim', source, 'Earth Power', target);
+ },
+ target: "normal",
+ type: "Ground",
+ },
+
+ // Audiino
+ thinkinginprogress: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Cure status, +1 Def/SpA/SpD.",
+ name: "Thinking In Progress",
+ gen: 9,
+ pp: 20,
+ priority: 0,
+ flags: {snatch: 1, metronome: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Calm Mind', source);
+ },
+ onHit(target, source, move) {
+ source.cureStatus();
+ },
+ boosts: {
+ def: 1,
+ spa: 1,
+ spd: 1,
+ },
+ secondary: null,
+ target: "self",
+ type: "Psychic",
+ },
+
+ // autumn
+ seasonssmite: {
+ accuracy: 100,
+ basePower: 90,
+ category: "Special",
+ shortDesc: "+1 Defense if Protosynthesis is active.",
+ desc: "Raises the user's Defense by 1 stage if the user is under the effect of the Protosynthesis Ability.",
+ name: "Season's Smite",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', target, 'Morning Sun', target);
+ },
+ secondary: {
+ chance: 100,
+ onHit(target, source, move) {
+ if (source.volatiles['protosynthesis']) {
+ this.boost({def: 1}, source, source, move);
+ }
+ },
+ },
+ target: "normal",
+ type: "Ghost",
+ },
+
+ // ausma
+ sigilsstorm: {
+ accuracy: 100,
+ basePower: 123,
+ category: "Special",
+ shortDesc: "If hit, Trick Room. Else, attack+random effect.",
+ desc: "Begins to charge an attack at the start of the turn. Nearly always moves last. If the user is directly damaged while charging, Trick Room is set instead, making the slower Pokemon move first for 5 turns. The Trick Room effect occurs before Cascade if both would activate on the same turn. If the user was not directly damaged while charging, the attack executes and one random effect will occur from the following: poison; burn; paralysis; confusion; the user recovers HP equal to 75% of damage dealt; all entry hazards are removed from the field; a random entry hazard is set, except G-Max Steelsurge; two random stats of the user are raised by 1 stage each, except Accuracy and Evasion; two random stats of the target are lowered by 1 stage each, except Accuracy and Evasion; or the target transforms into a Fennekin with Ember, Scratch, and Growl until they switch out.",
+ name: "Sigil's Storm",
+ pp: 20,
+ priority: -6,
+ onModifyPriority(priority, source, target, move) {
+ if (source.species.id === 'mismagius') return priority + 6;
+ },
+ flags: {snatch: 1, metronome: 1, protect: 1, failcopycat: 1},
+ priorityChargeCallback(pokemon) {
+ if (pokemon.species.id === 'mismagius') return;
+ pokemon.addVolatile('sigilsstorm');
+ this.add('-anim', pokemon, 'Calm Mind', pokemon);
+ },
+ beforeMoveCallback(pokemon) {
+ if (pokemon.species.id === 'mismagius') return;
+ if (pokemon.volatiles['sigilsstorm']?.lostFocus) {
+ this.add('cant', pokemon, 'sigilsstorm', 'sigilsstorm');
+ this.actions.useMove('trickroom', pokemon);
+ this.add(`c:|${getName('ausma')}|dog can you not`);
+ return true;
+ }
+ },
+ onModifyType(move, pokemon, target) {
+ if (pokemon.species.id === 'mismagius') {
+ move.type = 'Ghost';
+ }
+ },
+ condition: {
+ duration: 1,
+ onStart(pokemon) {
+ this.add('-singleturn', pokemon, 'move: Sigil\'s Storm');
+ },
+ onHit(pokemon, source, move) {
+ if (move.category !== 'Status') {
+ this.effectState.lostFocus = true;
+ }
+ },
+ onTryAddVolatile(status, pokemon) {
+ if (status.id === 'flinch') return null;
+ },
+ },
+ onTry(source) {
+ if (source.illusion || source.name === 'ausma') {
+ return;
+ }
+ this.attrLastMove('[still]');
+ this.add('-fail', source, 'move: Sigil\'s Storm');
+ this.hint("Only a Pokemon whose nickname is \"ausma\" can use this move.");
+ return null;
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Geomancy', source);
+ this.add('-anim', source, 'Blood Moon', target);
+ },
+ secondary: {
+ chance: 100,
+ onHit(target, source, move) {
+ const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
+ const chance = this.random(100);
+ if (chance <= 10) {
+ target.trySetStatus('psn', target);
+ } else if (chance <= 20) {
+ target.trySetStatus('par', target);
+ } else if (chance <= 30) {
+ target.trySetStatus('brn', target);
+ } else if (chance <= 50) {
+ const stats: BoostID[] = [];
+ const boost: SparseBoostsTable = {};
+ let statPlus: BoostID;
+ const statTarget = chance <= 40 ? target : source;
+ for (statPlus in statTarget.boosts) {
+ if (statPlus === 'accuracy' || statPlus === 'evasion') continue;
+ if (chance <= 40 && statTarget.boosts[statPlus] > -6) {
+ stats.push(statPlus);
+ } else if (chance <= 50 && statTarget.boosts[statPlus] < 6) {
+ stats.push(statPlus);
+ }
+ }
+ const randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined;
+ const randomStat2: BoostID | undefined = stats.length ? this.sample(stats.filter(s => s !== randomStat)) : undefined;
+ if (randomStat && randomStat2) {
+ if (chance <= 40) {
+ boost[randomStat] = -1;
+ boost[randomStat2] = -1;
+ } else {
+ boost[randomStat] = 1;
+ boost[randomStat2] = 1;
+ }
+ this.boost(boost, statTarget, statTarget);
+ }
+ } else if (chance <= 60) {
+ target.addVolatile('confusion', source);
+ } else if (chance <= 70) {
+ for (const condition of sideConditions) {
+ if (source.side.removeSideCondition(condition)) {
+ this.add('-sideend', source.side, this.dex.conditions.get(condition).name, '[from] move: Sigil\'s Storm', '[of] ' + source);
+ }
+ }
+ } else if (chance <= 80) {
+ target.side.addSideCondition(this.sample(sideConditions.filter(hazard => !target.side.getSideCondition(hazard))));
+ } else if (chance <= 90) {
+ move.drain = [3, 4];
+ } else {
+ changeSet(this, target, ssbSets["ausma-Fennekin"], true);
+ this.add(`c:|${getName('ausma')}|oh shit i posted to the wrong account`);
+ }
+ },
+ },
+ target: "normal",
+ type: "Psychic",
+ },
+
+ // AuzBat
+ preptime: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Raises the user's Sp. Atk by 2 and Speed by 1.",
+ desc: "The user's Special Attack is boosted by 2 stages and its Speed is boosted by 1 stage.",
+ name: "Prep Time",
+ pp: 5,
+ priority: 0,
+ flags: {snatch: 1, metronome: 1},
+ boosts: {
+ spa: 2,
+ spe: 1,
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Tidy Up', source);
+ },
+ target: "self",
+ type: "Psychic",
+ },
+
+ // avarice
+ yugiohreference: {
+ accuracy: 90,
+ basePower: 105,
+ category: "Special",
+ shortDesc: "40% chance to force the foe out.",
+ desc: "Nearly always moves last. If this attack is successful, there is a 40% chance that the target is forced to switch out and be replaced with a random unfainted ally.",
+ name: "yu-gi-oh reference",
+ pp: 5,
+ priority: -6,
+ flags: {protect: 1, bullet: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Never-Ending Nightmare', target);
+ },
+ secondary: {
+ chance: 40,
+ onHit(target, source, move) {
+ move.forceSwitch = true;
+ },
+ },
+ target: "normal",
+ type: "Ghost",
+ },
+
+ // Beowulf
+ buzzerstingercounter: {
+ accuracy: 100,
+ basePower: 50,
+ category: "Physical",
+ shortDesc: "+3 prio if foe uses custom move. +3 Atk on KO.",
+ desc: "This move will nearly always move first (+3 priority) if the target would use a custom move from Super Staff Bros Ultimate this turn. Raises the user's Attack by 3 stages if this move knocks out the target.",
+ name: "Buzzer Stinger Counter",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onModifyPriority(priority, pokemon, target) {
+ if (!target) return;
+ const move = this.queue.willMove(target)?.moveid;
+ if (move && target.moves.indexOf(move) === target.moves.length - 1) {
+ this.debug('BSC priority boost');
+ return priority + 3;
+ }
+ },
+ onAfterMoveSecondarySelf(pokemon, target, move) {
+ if (!target || target.fainted || target.hp <= 0) this.boost({atk: 3}, pokemon, pokemon, move);
+ },
+ secondary: null,
+ target: "normal",
+ type: "Bug",
+ },
+
+ // berry
+ whatkind: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Eats berry, gives random new berry, heals 25%.",
+ desc: "The user consumes its held berry if it is holding one, heals 25% of its maximum HP, and then gains a random item from the following: Iapapa Berry, Leppa Berry, Lum Berry, Maranga Berry, Ganlon Berry, Starf Berry, Liechi Berry, or Enigma Berry.",
+ name: "what kind",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Nasty Plot');
+ },
+ onHit(pokemon, qwerty, move) {
+ if (pokemon.item && pokemon.getItem().isBerry) {
+ pokemon.eatItem(true);
+ }
+ pokemon.lastItem = '';
+ const berries = ['iapapa', 'leppa', 'lum', 'maranga', 'ganlon', 'starf', 'liechi', 'enigma'];
+ const item = this.dex.items.get(this.sample(berries) + 'berry');
+ pokemon.setItem(item, pokemon, move);
+ this.add('-item', pokemon, item, '[from] move: what kind');
+ this.heal(pokemon.baseMaxhp / 4, pokemon);
+ },
+ secondary: null,
+ target: "self",
+ type: "Water",
+ },
+
+ // Bert122
+ shatterandscatter: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Protect, hit=-2 Atk/SpA/or Spe, user swap.",
+ desc: "Nearly always moves first. This move can only be used by Mega Sableye. The user is protected from most attacks made by other Pokemon during this turn. If a targeted move is blocked during this effect, the attacker's stats are lowered depending on the move used. If the attacker used a physical attack, their Attack is lowered by 2 stages. If the attacker used a special attack, their Special Attack is lowere dby 2 stages. If the attacker used a status move, their Speed is lowered by 2 stages. If this move successfully decreases a Pokemon's stat stages, this Pokemon's Mega Evolution is removed, and it immediately switches out and is replaced by a selected party member. This move fails if the user moves last, and has an increasing chance to fail when used consecutively.",
+ name: "Shatter and Scatter",
+ pp: 10,
+ priority: 4,
+ flags: {failinstruct: 1, failcopycat: 1},
+ stallingMove: true,
+ volatileStatus: 'shatterandscatter',
+ onTry(source) {
+ if (source.species.name === 'Sableye-Mega') {
+ return;
+ }
+ this.hint("Only Sableye-Mega can use this move.");
+ this.attrLastMove('[still]');
+ this.add('-fail', source, 'move: Shatter and Scatter');
+ return null;
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(pokemon) {
+ this.add('-anim', pokemon, 'Protect', pokemon);
+ this.add('-anim', pokemon, 'Rock Polish', pokemon);
+ return !!this.queue.willAct() && this.runEvent('StallMove', pokemon);
+ },
+ onHit(pokemon) {
+ pokemon.addVolatile('stall');
+ },
+ condition: {
+ duration: 1,
+ onStart(target) {
+ this.add('-singleturn', target, 'Protect');
+ },
+ onTryHitPriority: 3,
+ onTryHit(target, source, move) {
+ if (!move.flags['protect']) {
+ if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
+ if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
+ return;
+ }
+ if (move.smartTarget) {
+ move.smartTarget = false;
+ } else {
+ this.add('-activate', target, 'move: Protect');
+ }
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ let statDebuff = 'spe';
+ if (move.category === 'Special') statDebuff = 'spa';
+ if (move.category === 'Physical') statDebuff = 'atk';
+ const success = this.boost({[statDebuff]: -2}, source, target, this.dex.getActiveMove("Shatter and Scatter"));
+ if (success) {
+ target.formeChange('Sableye', this.dex.getActiveMove('Shatter and Scatter'), true);
+ target.canMegaEvo = 'Sableye-Mega';
+ target.switchFlag = 'shatterandscatter' as ID;
+ }
+ return this.NOT_FAIL;
+ },
+ onHit(target, source, move) {
+ if (move.isZOrMaxPowered) {
+ let statDebuff = 'spe';
+ if (move.category === 'Special') statDebuff = 'spa';
+ if (move.category === 'Physical') statDebuff = 'atk';
+ const success = this.boost({[statDebuff]: -2}, source, target, this.dex.getActiveMove("Shatter and Scatter"));
+ if (success) {
+ target.formeChange('Sableye', this.dex.getActiveMove('Shatter and Scatter'), true);
+ target.canMegaEvo = 'Sableye-Mega';
+ target.switchFlag = 'shatterandscatter' as ID;
+ }
+ }
+ },
+ },
+ secondary: null,
+ target: "self",
+ type: "Dark",
+ },
+
+ // Billo
+ hackcheck: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Cosmog: 80%: Change into Lunala, else Solgaleo.",
+ desc: "This move has an 80% chance of transforming the user into Lunala. It has a 20% chance of instead transforming the user into Solgaleo, boosting its Attack by 1 stage, preventing it from switching out, and causing it to faint after three turns, akin to Perish Song. This move cannot be used successfully unless the user's current form, while considering Transform, is Cosmog.",
+ name: "Hack Check",
+ gen: 9,
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, bypasssub: 1, failcopycat: 1},
+ onTry(source) {
+ if (source.species.name === 'Cosmog') {
+ return;
+ }
+ this.hint("Only Cosmog can use this move.");
+ this.attrLastMove('[still]');
+ this.add('-fail', source, 'move: Hack Check');
+ return null;
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onHit(target, source, move) {
+ if (this.randomChance(1, 5)) {
+ changeSet(this, source, ssbSets['Billo-Solgaleo'], true);
+ source.addVolatile('trapped', source, move, 'trapper');
+ source.addVolatile('perishsong');
+ this.add('-start', source, 'perish3', '[silent]');
+ this.boost({atk: 1}, source, source, move);
+ this.add(`c:|${getName('Billo')}|This is a streamer mon, you're banned from the room.`);
+ } else {
+ changeSet(this, source, ssbSets['Billo-Lunala'], true);
+ this.add(`c:|${getName('Billo')}|Everything checks out, remember to report any suspicious mons to staff!`);
+ }
+ },
+ target: "self",
+ type: "Normal",
+ },
+
+ // blazeofvictory
+ veto: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Protects user, Disables attackers.",
+ desc: "Nearly always moves first. The user is protected from most attacks made by other Pokemon during this turn. If a targeted move is blocked during this effect, the move used by the target is disabled and cannot be selected for 4 turns. This move cannot disable more than one move at a time. This move fails if the user moves last, and has an increasing chance to fail when used consecutively.",
+ name: "Veto",
+ gen: 9,
+ pp: 10,
+ priority: 3,
+ flags: {noassist: 1, failcopycat: 1},
+ stallingMove: true,
+ volatileStatus: 'veto',
+ onPrepareHit(pokemon) {
+ return !!this.queue.willAct() && this.runEvent('StallMove', pokemon);
+ },
+ onHit(pokemon) {
+ pokemon.addVolatile('stall');
+ },
+ condition: {
+ duration: 1,
+ onStart(target) {
+ this.add('-singleturn', target, 'move: Protect');
+ },
+ onTryHitPriority: 3,
+ onTryHit(target, source, move) {
+ if (!move.flags['protect']) {
+ if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
+ if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
+ return;
+ }
+ if (move.smartTarget) {
+ move.smartTarget = false;
+ } else {
+ this.add('-activate', target, 'move: Protect');
+ }
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ if (!source.volatiles['disable']) {
+ source.addVolatile('disable', this.effectState.target);
+ }
+ return this.NOT_FAIL;
+ },
+ onHit(target, source, move) {
+ if (move.isZOrMaxPowered && !source.volatiles['disable']) {
+ source.addVolatile('disable', this.effectState.target);
+ }
+ },
+ },
+ secondary: null,
+ target: "self",
+ type: "Normal",
+ },
+
+ // Blitz
+ geyserblast: {
+ accuracy: 95,
+ basePower: 100,
+ category: "Special",
+ shortDesc: "Fire + Water-type attack. Ignores weather.",
+ desc: "This move combines Fire in its type effectiveness against the target and does not increase or decrease damage dealt based on the current weather condition.",
+ name: "Geyser Blast",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Steam Eruption');
+ },
+ onEffectiveness(typeMod, target, type, move) {
+ return typeMod + this.dex.getEffectiveness('Fire', type);
+ },
+ secondary: null,
+ target: "normal",
+ type: "Water",
+ },
+
+ // Breadey
+ bakersdouzeoff: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Wake up -> Wish + Substitute -> Baton Pass.",
+ desc: "The user wakes up if it is asleep. Then, the user uses the moves Wish, Substitute, and Baton Pass in that order. If the user does not have enough HP to set a Substitute, the rest of the effects of the move will still occur.",
+ name: "Baker's Douze Off",
+ gen: 9,
+ pp: 15,
+ priority: 1,
+ flags: {},
+ sleepUsable: true,
+ slotCondition: 'Wish',
+ volatileStatus: 'substitute',
+ onPrepareHit(pokemon) {
+ this.attrLastMove('[anim] Teleport');
+ if (pokemon.status === 'slp') pokemon.cureStatus();
+ },
+ onTry(source, target, move) {
+ if (source.volatiles['substitute'] ||
+ source.hp <= source.maxhp / 4 || source.maxhp === 1) { // Shedinja clause
+ delete move.volatileStatus;
+ }
+ },
+ onHit(target, source, move) {
+ if (move.volatileStatus) this.directDamage(target.maxhp / 4);
+ },
+ onAfterMoveSecondarySelf(source) {
+ if (this.canSwitch(source.side)) {
+ this.actions.useMove('batonpass', source);
+ source.skipBeforeSwitchOutEventFlag = false;
+ }
+ },
+ secondary: null,
+ target: "self",
+ type: "Normal",
+ },
+
+ // Cake
+ rolesystem: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Protects, changes set. Can't use twice in a row.",
+ // it was easier to do it this way rather than implement failing on consecutive uses
+ desc: "Nearly always moves first. This move cannot be selected if it was the last move used by this Pokemon. The user is protected from most attacks made by other Pokemon during this turn, and all of the user's stat changes are set to 0. Then, the user gains varying stat boosts and changes its moveset based on the role it picks. Fast Attacker: +2 Attack, +4 Speed with Hyper Drill, Combat Torque, and Extreme Speed. Bulky Setup: +1 Attack, +1 Defense, +2 Special Defense with Coil, Body Slam, and Heal Order. Bulky Support: +2 Defense, +2 Special Defense with Heal Order and any two of Ceaseless Edge, Stone Axe, Mortal Spin, and G-Max Steelsurge. Wallbreaker: +6 Special Attack with Blood Moon.",
+ name: "Role System",
+ gen: 9,
+ pp: 40,
+ priority: 6,
+ flags: {protect: 1, mirror: 1, cantusetwice: 1, failcopycat: 1},
+ onTry(source) {
+ if (source.species.baseSpecies === 'Dunsparce') {
+ return;
+ }
+ this.attrLastMove('[still]');
+ this.add('-fail', source, 'move: Role System');
+ this.hint("Only a Pokemon whose form is Dunsparce can use this move.");
+ return null;
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Haze', target);
+ },
+ onHit(target, source, move) {
+ if (this.randomChance(1, 256)) {
+ this.add('-activate', target, 'move: Celebrate');
+ } else {
+ target.clearBoosts();
+ this.add('-clearboost', target);
+ target.addVolatile('protect');
+ const set = Math.floor(Math.random() * 4);
+ const newMoves = [];
+ let role = '';
+ switch (set) {
+ case 0:
+ newMoves.push('hyperdrill', 'combattorque', 'extremespeed');
+ role = 'Fast Attacker';
+ this.boost({atk: 2, spe: 4});
+ break;
+ case 1:
+ newMoves.push('coil', 'bodyslam', 'healorder');
+ role = 'Bulky Setup';
+ this.boost({atk: 1, def: 1, spd: 2});
+ break;
+ case 2:
+ const varMoves = ['Ceaseless Edge', 'Stone Axe', 'Mortal Spin', 'G-Max Steelsurge'];
+ const move1 = this.sample(varMoves);
+ const move2 = this.sample(varMoves.filter(i => i !== move1));
+ newMoves.push('healorder', move1, move2);
+ role = 'Bulky Support';
+ this.boost({def: 2, spd: 2});
+ break;
+ case 3:
+ newMoves.push('bloodmoon', 'bloodmoon', 'bloodmoon');
+ role = 'Wallbreaker';
+ this.boost({spa: 6});
+ break;
+ // removing moveslots becomes very messy so this was the next best thing
+ }
+ this.add('-message', `Cake takes up the role of ${role}!`);
+ for (let i = 0; i < 3; i++) {
+ const replacement = this.dex.moves.get(newMoves[i]);
+ const replacementMove = {
+ move: replacement.name,
+ id: replacement.id,
+ pp: replacement.pp,
+ maxpp: replacement.pp,
+ target: replacement.target,
+ disabled: false,
+ used: false,
+ };
+ source.moveSlots[i] = replacementMove;
+ source.baseMoveSlots[i] = replacementMove;
+ }
+ }
+ },
+ secondary: null,
+ target: "self",
+ type: "Normal",
+ // bird type crashes during testing (runStatusImmunity for Bird at sim\pokemon.ts:2101:10). no-go.
+ },
+
+ // chaos
+ outage: {
+ accuracy: 95,
+ basePower: 110,
+ category: "Special",
+ shortDesc: "Clear Smog + Taunt + Embargo.",
+ desc: "If this move is successful, the target has all stat stages reset to 0, cannot use status moves for the next 3 turns, and cannot gain any effect from held items for 5 turns. Z-Crystals and forme-changing items are unaffected.",
+ name: "Outage",
+ gen: 9,
+ pp: 5,
+ priority: 0,
+ flags: {contact: 1, protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Dark Pulse', target);
+ },
+ secondaries: [
+ {
+ chance: 100,
+ volatileStatus: 'taunt',
+ }, {
+ chance: 100,
+ volatileStatus: 'embargo',
+ },
+ {
+ chance: 100,
+ onHit(target) {
+ target.clearBoosts();
+ this.add('-clearboost', target);
+ },
+ },
+ ],
+ target: "normal",
+ type: "Dark",
+ },
+
+ // Chloe
+ detodaslasflores: {
+ accuracy: 90,
+ basePower: 90,
+ category: "Physical",
+ shortDesc: "Sets Grassy Terrain before. -50% HP on miss.",
+ desc: "Before attacking, this move will set Grassy Terrain for 5 turns. If the attack is not successful, the user loses half of its maximum HP, rounded down, as crash damage.",
+ name: "De Todas las Flores",
+ gen: 9,
+ pp: 15,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1, gravity: 1},
+ hasCrashDamage: true,
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.field.setTerrain('grassyterrain');
+ this.add('-anim', source, 'High Jump Kick', target);
+ },
+ onMoveFail(target, source, move) {
+ this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick'));
+ },
+ secondary: null,
+ target: "normal",
+ type: "Grass",
+ },
+
+ // Chris
+ antidote: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Antidote",
+ shortDesc: "Heal 50% HP + 3 turn Magnet Rise.",
+ desc: "The user restores 1/2 of its maximum HP, rounded half up. If the user is not currently under the effect of Magnet Rise, it gains the effect of Magnet Rise for 3 turns, causing it to be immune to all Ground-type moves except Thousand Arrows for the duration.",
+ pp: 10,
+ priority: 0,
+ flags: {snatch: 1, heal: 1, gravity: 1, metronome: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(pokemon) {
+ this.add('-anim', pokemon, 'Recover', pokemon);
+ this.add('-anim', pokemon, 'Magnet Rise', pokemon);
+ },
+ onTry(source, target, move) {
+ if (target.volatiles['smackdown'] || target.volatiles['ingrain']) return false;
+
+ // Additional Gravity check for Z-move variant
+ if (this.field.getPseudoWeather('Gravity')) {
+ this.add('cant', source, 'move: Gravity', move);
+ return null;
+ }
+ },
+ onHit(target, source, move) {
+ const success = !!this.heal(this.modify(source.maxhp, 0.25));
+ return source.addVolatile('magnetrise', source, move) || success;
+ },
+ secondary: null,
+ target: "self",
+ type: "Normal",
+ },
+
+ // ciran
+ summonmonsterviiifiendishmonstrouspiplupedecolossal: {
+ accuracy: 90,
+ basePower: 60,
+ basePowerCallback(pokemon, target, move) {
+ if (move.hit === 1) return 60;
+ if (move.hit === 2) return 0;
+ return 20;
+ },
+ category: "Physical",
+ shortDesc: "60 BP Bite->Toxic->2-5 multihit w/ 20 BP each.",
+ desc: "The user calls the following effects in order: a 100% accurate 60 Base Power Poison-type attack with a 20% chance to cause the target to flinch; 100% accurate Toxic; and 2-5 90% accurate 20 Base Power Poison-type attacks.",
+ name: "Summon Monster VIII: Fiendish monstrous Piplupede, Colossal",
+ gen: 9,
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1, contact: 1, mirror: 1},
+ multihit: [3, 7],
+ self: {
+ volatileStatus: 'summonmonsterviiifiendishmonstrouspiplupedecolossal',
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Crunch', target);
+ this.add('-anim', source, 'Fury Swipes', target);
+ },
+ condition: {
+ duration: 1,
+ noCopy: true,
+ onAccuracy(accuracy, target, source, move) {
+ if (move.hit <= 2) return 100;
+ return 90;
+ },
+ },
+ secondaries: [
+ {
+ chance: 20,
+ onHit(target, source, move) {
+ if (move.hit !== 1) return;
+ target.addVolatile('flinch', source, move);
+ },
+ },
+ {
+ chance: 100,
+ onHit(target, source, move) {
+ if (move.hit !== 2) return;
+ target.trySetStatus('tox', source, move);
+ },
+ },
+ ],
+ onAfterMove(source, target, move) {
+ this.add(`c:|${getName((source.illusion || source).name)}|There's no way this'll faint in one punch!`);
+ },
+ target: "allAdjacentFoes",
+ type: "Poison",
+ },
+
+ // Clefable
+ giveaway: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "User switches, passing stat changes and more.",
+ desc: "The user is replaced with another Pokemon in its party. The selected Pokemon has the user's stat stage changes, confusion, and certain move effects transferred to it.",
+ name: "Giveaway!",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {metronome: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Teleport', target);
+ this.add('-anim', source, 'Baton Pass', target);
+ },
+ // Baton Pass clones are stupid client side so we're doing this
+ onHit(target) {
+ this.actions.useMove('batonpass', target);
+ },
+ secondary: null,
+ target: "self",
+ type: "Normal",
+ },
+
+ // Clementine
+ o: {
+ accuracy: 100,
+ basePower: 100,
+ category: "Special",
+ shortDesc: "Phys if Atk > SpA. Flips user.",
+ desc: "This move becomes a physical attack if the user's Attack is greater than its Special Attack, including stat stage changes. This move's type depends on the user's primary type. If this move is successful and the user is an Avalugg, it either gains or loses the Flipped condition, changing its moveset and base stats. When under the Flipped condition, Avalugg's Base Stats are 95/46/44/184/116/95 and its moveset changes to Earth Power, Volt Switch, and Heal Pulse. This move is super effective against Kennedy.",
+ name: "(╯°o°)╯︵ ┻━┻",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, failcopycat: 1, nosketch: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Malicious Moonsault', target);
+ this.add('-anim', source, 'Blizzard', target);
+ },
+ onModifyMove(move, pokemon) {
+ if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) move.category = 'Physical';
+ },
+ onModifyType(move, pokemon) {
+ let type = pokemon.getTypes()[0];
+ if (type === "Bird") type = "???";
+ if (type === "Stellar") type = pokemon.getTypes(false, true)[0];
+ move.type = type;
+ },
+ onEffectiveness(typeMod, target, type) {
+ if (target?.name === 'Kennedy') return 1;
+ },
+ onHit(target, source, move) {
+ if (source.illusion || source.baseSpecies.baseSpecies !== 'Avalugg') return;
+ if (source.volatiles['flipped']) {
+ source.removeVolatile('flipped');
+ changeSet(this, source, ssbSets['Clementine']);
+ } else {
+ source.addVolatile('flipped', source, move);
+ changeSet(this, source, ssbSets['Clementine-Flipped']);
+ }
+ },
+ target: "normal",
+ type: "Normal",
+ },
+
+ // clerica
+ stockholmsyndrome: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Curses and traps foe. User loses 1/2 HP.",
+ desc: "The user loses 1/2 of its maximum HP, rounded down and even if it would cause fainting, in exchange for the target losing 1/4 of its maximum HP, rounded down, at the end of each turn while it is active and becoming unable to switch out.",
+ name: "Stockholm Syndrome",
+ pp: 5,
+ priority: 0,
+ flags: {bypasssub: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Curse', target);
+ this.add('-anim', source, 'Block', target);
+ },
+ onHit(target, source, move) {
+ let success = false;
+ if (!target.volatiles['curse']) {
+ this.directDamage(source.maxhp / 2, source, source);
+ target.addVolatile('curse');
+ success = true;
+ }
+ return target.addVolatile('trapped', source, move, 'trapper') || success;
+ },
+ zMove: {effect: 'heal'},
+ secondary: null,
+ target: "normal",
+ type: "Ghost",
+ },
+
+ // Clouds
+ windsofchange: {
+ accuracy: 100,
+ basePower: 70,
+ category: "Physical",
+ shortDesc: "User sets Tailwind and switches out.",
+ desc: "If this attack is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member, and its party members have their Speed doubled for 4 turns.",
+ name: "Winds of Change",
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1},
+ self: {
+ sideCondition: 'tailwind',
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Tailwind', target);
+ this.add('-anim', source, 'U-turn', target);
+ },
+ selfSwitch: true,
+ secondary: null,
+ target: "normal",
+ type: "Flying",
+ },
+
+ // Coolcodename
+ haxerswill: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "70% +1 SpA/Spe & Focus Energy, else lose boosts.",
+ desc: "This move has a 70% chance to boost the user's Special Attack and Speed by 1 stage and grant the user an increased chance of dealing critical hits. If it does not do this, the user's positive stat stage changes will instead be removed.",
+ name: "Haxer's Will",
+ gen: 9,
+ pp: 15,
+ priority: 0,
+ flags: {},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Clangorous Soul', source);
+ this.add('-anim', source, 'Focus Energy', source);
+ },
+ onHit(pokemon) {
+ if (this.randomChance(7, 10)) {
+ this.boost({spa: 1, spe: 1});
+ pokemon.addVolatile('focusenergy');
+ } else {
+ pokemon.clearBoosts();
+ this.add('-clearboost', pokemon);
+ }
+ },
+ target: "self",
+ type: "Normal",
+ },
+
+ // Corthius
+ monkeybeatup: {
+ accuracy: 100,
+ basePower: 20,
+ category: "Physical",
+ shortDesc: "Hits 4-5 times. +1 priority under Grassy Terrain.",
+ desc: "Usually moves first when Grassy Terrain is in effect. This move has a 50% chance to hit 4 times and a 50% chance to hit 5 times.",
+ name: "Monkey Beat Up",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ multihit: [4, 5],
+ flags: {protect: 1, contact: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Beat Up', target);
+ this.add('-anim', source, 'Wood Hammer', target);
+ },
+ onModifyPriority(priority, source, target, move) {
+ if (this.field.isTerrain('grassyterrain') && source.isGrounded()) {
+ return priority + 1;
+ }
+ },
+ target: "normal",
+ type: "Grass",
+ },
+
+ // Dawn of Artemis
+ magicalfocus: {
+ accuracy: 100,
+ basePower: 80,
+ category: "Special",
+ name: "Magical Focus",
+ shortDesc: "Move type cycles. Sets Reflect. Fail if Ultra.",
+ desc: "This move's type cycles between Fire, Electric, and Ice depending on the current turn number, starting at Fire on turn 1, Electric on turn 2, Ice on turn 3, and repeating this pattern on future turns. For 5 turns, all Pokemon on the user's side of the field take 0.5x damage from physical attacks. This move fails if the user is Necrozma-Ultra.",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove(target, source, move) {
+ switch (move.type) {
+ case 'Fire':
+ this.attrLastMove('[anim] Flamethrower');
+ break;
+ case 'Electric':
+ this.attrLastMove('[anim] Thunderbolt');
+ break;
+ case 'Ice':
+ this.attrLastMove('[anim] Ice Beam');
+ break;
+ default:
+ this.attrLastMove('[anim] Hyper Beam');
+ break;
+ }
+ },
+ onModifyType(move) {
+ if (this.turn % 3 === 1) {
+ move.type = 'Fire';
+ } else if (this.turn % 3 === 2) {
+ move.type = 'Electric';
+ } else {
+ move.type = 'Ice';
+ }
+ },
+ onDisableMove(pokemon) {
+ if (pokemon.species.id === 'necrozmaultra') pokemon.disableMove('magicalfocus');
+ },
+ self: {
+ sideCondition: 'reflect',
+ },
+ target: "normal",
+ type: "Normal",
+ },
+
+ // DaWoblefet
+ superegoinflation: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "User heals 25% HP; Target: +2 Atk/SpA + Taunt.",
+ desc: "The user heals 1/4 of its maximum HP. The target's Attack and Special Attack are raised by 2 stages each, and the target cannot use status moves for 3 turns.",
+ name: "Super Ego Inflation",
+ gen: 9,
+ pp: 5,
+ priority: -7,
+ flags: {protect: 1, mirror: 1, bypasssub: 1, reflectable: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Follow Me', source);
+ this.add('-anim', target, 'Swords Dance', target);
+ this.add('-anim', target, 'Nasty Plot', target);
+ },
+ onHit(target, source) {
+ this.heal(source.maxhp / 4, source);
+ this.boost({atk: 2, spa: 2});
+ target.addVolatile('taunt');
+ },
+ target: "normal",
+ type: "Normal",
+ },
+
+ // deftinwolf
+ trivialpursuit: {
+ accuracy: 100,
+ basePower: 70,
+ basePowerCallback(pokemon, target, move) {
+ // You can't get here unless the pursuit succeeds
+ if (target.beingCalledBack || target.switchFlag) {
+ this.debug('Trivial Pursuit damage boost');
+ return move.basePower * 2;
+ }
+ return move.basePower;
+ },
+ category: "Physical",
+ shortDesc: "If foe is switching out, 2x power. Doesn't KO.",
+ desc: "If an opposing Pokemon switches out this turn, this move hits that Pokemon before it leaves the field, even if it was not the original target. If the user moves after an opponent using Flip Turn, Parting Shot, Teleport, U-turn, or Volt Switch, but not Baton Pass, it will hit that opponent before it leaves the field. Power doubles and no accuracy check is done if the user hits an opponent switching out, and the user's turn is over. Leaves the target with at least 1 HP.",
+ name: "Trivial Pursuit",
+ pp: 5,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Pursuit');
+ },
+ beforeTurnCallback(pokemon) {
+ for (const side of this.sides) {
+ if (side.hasAlly(pokemon)) continue;
+ side.addSideCondition('trivialpursuit', pokemon);
+ const data = side.getSideConditionData('trivialpursuit');
+ if (!data.sources) {
+ data.sources = [];
+ }
+ data.sources.push(pokemon);
+ }
+ },
+ onModifyMove(move, source, target) {
+ if (target?.beingCalledBack || target?.switchFlag) move.accuracy = true;
+ },
+ onTryHit(target, pokemon) {
+ target.side.removeSideCondition('trivialpursuit');
+ },
+ condition: {
+ duration: 1,
+ onBeforeSwitchOut(pokemon) {
+ this.debug('Trivial Pursuit start');
+ let alreadyAdded = false;
+ pokemon.removeVolatile('destinybond');
+ for (const source of this.effectState.sources) {
+ if (!source.isAdjacent(pokemon) || !this.queue.cancelMove(source) || !source.hp) continue;
+ if (!alreadyAdded) {
+ this.add('-activate', pokemon, 'move: Pursuit');
+ alreadyAdded = true;
+ }
+ // Run through each action in queue to check if the Pursuit user is supposed to Mega Evolve this turn.
+ // If it is, then Mega Evolve before moving.
+ if (source.canMegaEvo || source.canUltraBurst) {
+ for (const [actionIndex, action] of this.queue.entries()) {
+ if (action.pokemon === source && action.choice === 'megaEvo') {
+ this.actions.runMegaEvo(source);
+ this.queue.list.splice(actionIndex, 1);
+ break;
+ }
+ }
+ }
+ this.actions.runMove('trivialpursuit', source, source.getLocOf(pokemon));
+ }
+ },
+ },
+ onDamagePriority: -20,
+ onDamage(damage, target, source, effect) {
+ if (damage >= target.hp) return target.hp - 1;
+ },
+ secondary: null,
+ target: "normal",
+ type: "Dark",
+ },
+
+ // dhelmise
+ bioticorb: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: ">50% HP:Set orb that damages foes.<50% heals you.",
+ desc: "If the user's HP is at or above 50% of its maximum HP, a damaging orb is set on the opponent's side of the field, dealing 50 points of damage at the end of each turn for 4 turns. If the user's HP is below 50% of its maximum HP, a healing orb is set on the user's side of the field, healing the active Pokemon for 65 HP at the end of each turn until it has healed a total of 300 HP. If the appropriate side already has its orb, this move will try to place the other orb down. This move fails if an orb is already in place on the side an orb would be set.",
+ name: "Biotic Orb",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {reflectable: 1, mustpressure: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ if (source.hp < source.maxhp / 2) {
+ this.add('-anim', source, 'Wish', source);
+ } else {
+ this.add('-anim', source, 'Shadow Ball', target);
+ }
+ },
+ // Volatiles implemented in conditions.ts
+ onHit(target, source, move) {
+ if (source.hp < source.maxhp / 2) {
+ if (!source.side.addSideCondition('bioticorbself', source, move)) {
+ if (!source.side.foe.addSideCondition('bioticorbfoe', source, move)) return null;
+ }
+ } else {
+ if (!source.side.foe.addSideCondition('bioticorbfoe', source, move)) {
+ if (!source.side.addSideCondition('bioticorbself', source, move)) return null;
+ }
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Poison",
+ },
+
+ // DianaNicole
+ breathoftiamat: {
+ accuracy: 95,
+ basePower: 20,
+ category: "Special",
+ shortDesc: "5 hits: Fire, Ice, Poison, Elec, Poison. Is STAB.",
+ desc: "This move hits 5 times. The first hit is Fire-type, the second is Ice-type, the third is Poison-type, the fourth is Electric-type, and the fifth is Poison-type. Each move checks accuracy individually, and if one hit misses, the attack stops. If the target is immune to one or more of the hits, the rest will still execute as normal. This move will always have Same-Type Attack Bonus.",
+ name: "Breath of Tiamat",
+ pp: 20,
+ priority: 0,
+ flags: {protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source, move) {
+ if (target.runImmunity('Fire')) {
+ this.add('-anim', source, 'Flamethrower', target);
+ }
+ },
+ onHit(target, source, move) {
+ const moveTypes = ['Fire', 'Ice', 'Poison', 'Electric', 'Poison'];
+ const hitTypes = moveTypes.filter(x => target.runImmunity(x));
+ if (move.hit >= hitTypes.length) {
+ move.basePower = 0;
+ move.category = 'Status';
+ /* Problem here - we can't retroactively change the multihit parameter.
+ With this specific code, the move functions as intended, but will display the incorrect
+ number of hits if a target is immune to any of them. Even if you try to return false, null, etc
+ during this step, it will not interrupt the move. Nor will a this.add(-fail) do so either.
+ This seems to be the only way to get it to work and is a decent enough compromise for now. */
+ } else {
+ move.type = hitTypes[move.hit];
+ const moveAnims = ['Flamethrower', 'Ice Beam', 'Gunk Shot', 'Charge Beam', 'Sludge Bomb'];
+ const hitAnims = [];
+ for (const [i, anim] of moveAnims.entries()) {
+ const index2 = Math.min(i, hitTypes.length - 1);
+ if (moveTypes[i] === hitTypes[index2]) {
+ hitAnims.push(anim);
+ }
+ }
+ this.add('-anim', source, hitAnims[move.hit], target);
+ }
+ },
+ multihit: 5,
+ multiaccuracy: true,
+ forceSTAB: true,
+ secondary: null,
+ target: 'normal',
+ type: "Fire",
+ },
+
+ // EasyOnTheHills
+ snacktime: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Charges.Turn 2: +2 Atk/Def, heal 25% for 3 turns.",
+ desc: "Boosts the user's Attack and Defense by 2 stages, and heals the user for 1/4 of its maximum HP at the end of each turn for 3 turns. This attack charges on the first turn and executes on the second. This move will fail if it is already in effect.",
+ name: "Snack Time",
+ pp: 10,
+ priority: 0,
+ flags: {},
+ volatileStatus: 'snack',
+ onTryMove(attacker, defender, move) {
+ if (attacker.volatiles['snack']) {
+ this.add('-fail', attacker, 'move: Snack Time');
+ this.attrLastMove('[still]');
+ return null;
+ }
+ if (attacker.removeVolatile(move.id)) {
+ this.attrLastMove('[still]');
+ this.add('-anim', attacker, 'Shell Smash', attacker);
+ return;
+ }
+ this.attrLastMove('[still]');
+ this.add('-anim', attacker, 'Geomancy', attacker);
+ if (!this.runEvent('ChargeMove', attacker, defender, move)) {
+ return;
+ }
+ attacker.addVolatile('twoturnmove', defender);
+ return null;
+ },
+ boosts: {
+ atk: 2,
+ def: 2,
+ },
+ // passive recovery implemented in conditions.ts
+ secondary: null,
+ target: "self",
+ type: "Normal",
+ },
+
+ // Elliot
+ teaparty: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Recover & Refresh. 7/8 get Boiled, 1/8 Beefed.",
+ desc: "The user heals 1/2 of its maximum HP and cures its non-volatile status condition. The user has a 7/8 chance of gaining the Boiled condition, removing all previously-added extra types, adding a Water typing to the user, replacing its ability with Speed Boost, and replacing Teatime or Body Press with Steam Eruption if it exists on the set; and a 1/8 chance of gaining the Beefed condition, removing all previously-added extra types, adding a Fighting typing to the user, replacing its ability with Stamina, and replacing Teatime or Steam Eruption with Body Press.",
+ name: "Tea Party",
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, heal: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Milk Drink', source);
+ },
+ onHit(pokemon) {
+ this.heal(pokemon.baseMaxhp / 2);
+ pokemon.cureStatus();
+ let newMove = "";
+ let backupMove = "";
+ if (this.randomChance(7, 8)) { // get boiled
+ pokemon.removeVolatile('beefed');
+ pokemon.addVolatile('boiled');
+ pokemon.setAbility("Speed Boost");
+ newMove = 'steameruption';
+ backupMove = 'bodypress';
+ if (!pokemon.hasType('Water') && pokemon.addType('Water')) {
+ this.add('-start', pokemon, 'typeadd', 'Water', '[from] move: Tea Party');
+ }
+ this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|Just tea, thank you`);
+ } else { // get beefed
+ pokemon.removeVolatile('boiled');
+ pokemon.addVolatile('beefed');
+ pokemon.setAbility("Stamina");
+ newMove = 'bodypress';
+ backupMove = 'steameruption';
+ if (!pokemon.hasType('Fighting') && pokemon.addType('Fighting')) {
+ this.add('-start', pokemon, 'typeadd', 'Fighting', '[from] move: Tea Party');
+ }
+ this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|BOVRIL TIME`);
+ }
+ // -start for beefed and boiled is not necessary, i put it in there for an indicator
+ // as to what form sinistea is currently using. backupMove also eases the form switch
+ let teaIndex = pokemon.moves.indexOf('teatime');
+ const replacement = this.dex.moves.get(newMove);
+ if (teaIndex < 0) {
+ if (pokemon.moves.includes(backupMove)) {
+ teaIndex = pokemon.moves.indexOf(backupMove);
+ } else {
+ return;
+ }
+ }
+ const newMoveSlot = {
+ move: replacement.name,
+ id: replacement.id,
+ pp: replacement.pp,
+ maxpp: replacement.pp,
+ target: replacement.target,
+ disabled: false,
+ used: false,
+ };
+ pokemon.moveSlots[teaIndex] = newMoveSlot;
+ },
+ secondary: null,
+ target: 'self',
+ type: "Flying",
+ },
+
+ // Elly
+ sustainedwinds: {
+ accuracy: 90,
+ basePower: 20,
+ category: "Special",
+ shortDesc: "Hits 5 times.",
+ name: "Sustained Winds",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, wind: 1},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Bleakwind Storm');
+ },
+ multihit: 5,
+ secondary: null,
+ target: 'normal',
+ type: "Flying",
+ },
+
+ // Emboar02
+ insertboarpunhere: {
+ accuracy: 100,
+ basePower: 80,
+ category: "Physical",
+ shortDesc: "Has 33% recoil. Switch after using.",
+ desc: "If the target lost HP, the user takes recoil damage equal to 33% of the HP lost by the target, rounded half up, but not less than 1 HP. If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button or through the effect of the Emergency Exit or Wimp Out Abilities.",
+ name: "Insert boar pun here",
+ pp: 20,
+ priority: 0,
+ flags: {protect: 1, contact: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Collision Course', target);
+ this.add('-anim', source, 'U-turn', target);
+ },
+ selfSwitch: true,
+ recoil: [33, 100],
+ secondary: null,
+ target: 'normal',
+ type: "Fighting",
+ },
+
+ // Fame
+ solidarity: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Creates a Substitute and sets Leech Seed.",
+ desc: "The user takes 1/4 of its maximum HP, rounded down, and puts it into a substitute to take its place in battle. The Pokemon at the user's position steals 1/8 of the target's maximum HP, rounded down, at the end of each turn. If either of the affected Pokemon uses Baton Pass, its respective effect will remain for its replacement.",
+ name: "Solidarity",
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1, reflectable: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Substitute');
+ this.add('-anim', source, 'Leech Seed', target);
+ },
+ onHit(target, source) {
+ if (target.hasType('Grass') || target.isProtected()) return null;
+ target.addVolatile('leechseed', source);
+ },
+ self: {
+ onHit(target, source) {
+ if (source.volatiles['substitute']) return;
+ if (source.hp <= source.maxhp / 4 || source.maxhp === 1) { // Shedinja clause
+ this.add('-fail', source, 'move: Substitute', '[weak]');
+ } else {
+ source.addVolatile('substitute');
+ this.directDamage(source.maxhp / 4);
+ }
+ },
+ },
+ secondary: null,
+ target: 'normal',
+ type: "Grass",
+ },
+
+ // Felucia
+ riggeddice: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Stat changes: inverts, else Taunt. User switches.",
+ desc: "If the target has any stat stage changes, the target's positive stat stages become negative and vice versa. If the target does not have any stat stage changes, the target cannot use status moves for 3 turns. If this move is successful, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members.",
+ name: "Rigged Dice",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, reflectable: 1},
+ selfSwitch: true,
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Smart Strike', source);
+ },
+ onHit(target, source) {
+ let success = false;
+ let i: BoostID;
+ for (i in target.boosts) {
+ if (target.boosts[i] === 0) continue;
+ target.boosts[i] = -target.boosts[i];
+ success = true;
+ }
+ if (success) {
+ this.add('-invertboost', target, '[from] move: Rigged Dice');
+ } else {
+ target.addVolatile('taunt', source);
+ }
+ },
+ secondary: null,
+ target: 'normal',
+ type: "Bug",
+ },
+
+ // Froggeh
+ cringedadjoke: {
+ accuracy: 90,
+ basePower: 90,
+ category: "Physical",
+ shortDesc: "Confuses the foe. Foe self-hits: +1 Atk/Def.",
+ desc: "Confuses the target. When the target hits itself in confusion from this move, the user's Attack and Defense are boosted by 1 stage.",
+ name: "Cringe Dad Joke",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Dizzy Punch', target);
+ this.add('-anim', source, 'Bulk Up', source);
+ },
+ self: {
+ volatileStatus: 'cringedadjoke',
+ },
+ secondary: {
+ chance: 100,
+ volatileStatus: 'confusion',
+ },
+ target: 'normal',
+ type: "Fighting",
+ // confusion self-hit stat bonus implemented as an innate because it doesn't work as a move effect
+ },
+
+ // Frostyicelad
+ puffyspikydestruction: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Turn 1 out: DDance, TSpikes, -Psn type.",
+ desc: "Nearly always moves first. Removes the user's Poison typing if it has one, and boosts the user's Attack and Speed by 1 stage. Sets one layer of Toxic Spikes on the opposing side of the field, poisoning all grounded, non-Poison-type Pokemon that switch in. Fails unless it's the user's first turn on the field.",
+ name: "Puffy Spiky Destruction",
+ pp: 5,
+ priority: 4,
+ flags: {},
+ onTry(source) {
+ if (source.activeMoveActions > 1) {
+ this.hint("Puffy Spiky Destruction only works on your first turn out.");
+ return false;
+ }
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Quiver Dance', source);
+ this.add('-anim', source, 'Spiky Shield', source);
+ this.add('-anim', source, 'Toxic Spikes', target);
+ },
+ onHit(target, source, move) {
+ source.setType(source.getTypes(true).filter(type => type !== "Poison"));
+ this.add('-start', source, 'typechange', source.getTypes().join('/'), '[from] move: Puffy Spiky Destruction');
+ const foeSide = source.side.foe;
+ if (!foeSide.sideConditions['toxicspikes'] || foeSide.sideConditions['toxicspikes'].layers < 2) {
+ foeSide.addSideCondition('toxicspikes', source, move);
+ }
+ },
+ boosts: {
+ spe: 1,
+ atk: 1,
+ },
+ secondary: null,
+ target: 'self',
+ type: "Poison",
+ },
+
+ // Frozoid
+ flatoutfalling: {
+ accuracy: 100,
+ basePower: 75,
+ category: "Physical",
+ shortDesc: "Sets Gravity.",
+ desc: "Sets Gravity for 5 turns, multiplying the evasiveness of all active Pokemon by 0.6 and grounding them.",
+ name: "Flat out falling",
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Head Smash', target);
+ this.add('-anim', source, 'Gravity', target);
+ },
+ self: {
+ onHit(source) {
+ this.field.addPseudoWeather('gravity', source);
+ },
+ },
+ secondary: null,
+ target: 'normal',
+ type: "???",
+ },
+
+ // Ganjafin
+ wigglingstrike: {
+ accuracy: 95,
+ basePower: 10,
+ category: "Physical",
+ shortDesc: "Applies Salt Cure and sets a layer of spikes.",
+ desc: "Causes damage to the target equal to 1/8 of its maximum HP (1/4 if the target is Steel or Water type), rounded down, at the end of each turn during effect. This effect ends when the target is no longer active. Sets a layer of Spikes on the target's side of the field, damaging grounded foes when they switch in.",
+ name: "Wiggling Strike",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Water Pulse', target);
+ this.add('-anim', target, 'Aqua Ring', target);
+ },
+ self: {
+ onHit(source) {
+ for (const side of source.side.foeSidesWithConditions()) {
+ side.addSideCondition('spikes');
+ }
+ },
+ },
+ secondary: {
+ chance: 100,
+ volatileStatus: 'saltcure',
+ },
+ target: "normal",
+ type: "Water",
+ },
+
+ // Haste Inky
+ hastyrevolution: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Clear foe stats+copies neg stats+inverts on user.",
+ desc: "Resets the stat stages of the target to 0. Then, the target receives a copy of the user's negative stat stage changes, and the user's negative stat stage changes become positive.",
+ name: "Hasty Revolution",
+ pp: 10,
+ priority: 4,
+ flags: {protect: 1, mirror: 1, noassist: 1, failcopycat: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Pain Split', target);
+ return !!this.queue.willAct() && this.runEvent('StallMove', source);
+ },
+ onHit(target, source, move) {
+ source.addVolatile('stall');
+ target.clearBoosts();
+ this.add('-clearboost', target);
+ let i: BoostID;
+ for (i in source.boosts) {
+ if (source.boosts[i] < 0) {
+ target.boosts[i] += source.boosts[i];
+ this.add('-setboost', target, i as string, target.boosts[i], '[silent]');
+ source.boosts[i] = -source.boosts[i];
+ this.add('-setboost', source, i as string, source.boosts[i], '[silent]');
+ }
+ }
+ this.add('-message', `${target.name} received ${source.name}'s negative stat boosts!'`);
+ this.add('-message', `${source.name} inverted their negative stat boosts!`);
+ },
+ stallingMove: true,
+ self: {
+ volatileStatus: 'protect',
+ },
+ secondary: null,
+ target: "normal",
+ type: "Normal",
+ },
+
+ // havi
+ augurofebrietas: {
+ accuracy: 100,
+ basePower: 70,
+ category: "Special",
+ shortDesc: "Disables the target's last move and switches.",
+ desc: "The target's last used move is disabled and cannot be selected for 4 turns. This move cannot disable more than one move at a time. The user then switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members.",
+ name: "Augur of Ebrietas",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Spirit Shackle');
+ },
+ onAfterHit(target, source, move) {
+ this.add(`c:|${getName((source.illusion || source).name)}|as you once did for the vacuous Rom,`);
+ },
+ selfSwitch: true,
+ volatileStatus: 'disable',
+ target: "normal",
+ type: "Ghost",
+ },
+
+ // Hecate
+ testinginproduction: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "+2, -2 to random stats, small chance of harm.",
+ desc: "The user boosts a random stat by 2 stages, and the user lowers a random stat by 2 stages. These can be the same stat, and cannot include Accuracy or Evasion. Independently, there is a 10% chance for the user to lose 10% of their maximum HP, and there is a 5% chance for the user to gain a random non-volatile status condition.",
+ name: "Testing in Production",
+ gen: 9,
+ pp: 5,
+ priority: 0,
+ flags: {},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Curse');
+ },
+ onHit(pokemon) {
+ this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|Please don't break...`);
+ let stats: BoostID[] = [];
+ const boost: SparseBoostsTable = {};
+ let statPlus: BoostID;
+ for (statPlus in pokemon.boosts) {
+ if (statPlus === 'accuracy' || statPlus === 'evasion') continue;
+ if (pokemon.boosts[statPlus] < 6) {
+ stats.push(statPlus);
+ }
+ }
+ let randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined;
+ if (randomStat) boost[randomStat] = 2;
+
+ stats = [];
+ let statMinus: BoostID;
+ for (statMinus in pokemon.boosts) {
+ if (statMinus === 'accuracy' || statMinus === 'evasion') continue;
+ if (pokemon.boosts[statMinus] > -6) {
+ stats.push(statMinus);
+ }
+ }
+ randomStat = stats.length ? this.sample(stats) : undefined;
+ if (randomStat) {
+ if (boost[randomStat]) {
+ boost[randomStat] = 0;
+ this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|Well. Guess that broke. Time to roll back.`);
+ return;
+ } else {
+ boost[randomStat] = -2;
+ }
+ }
+
+ this.boost(boost, pokemon, pokemon);
+ },
+ onAfterMove(pokemon) {
+ if (this.randomChance(1, 10)) {
+ this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|Ouch! That crash is really getting on my nerves...`);
+ this.damage(pokemon.baseMaxhp / 10);
+ if (pokemon.hp <= 0) return;
+ }
+
+ if (this.randomChance(1, 20)) {
+ const status = this.sample(['frz', 'brn', 'psn', 'par']);
+ let statusText = status;
+ if (status === 'frz') {
+ statusText = 'froze';
+ } else if (status === 'brn') {
+ statusText = 'burned';
+ } else if (status === 'par') {
+ statusText = 'paralyzed';
+ } else if (status === 'psn') {
+ statusText = 'poisoned';
+ }
+
+ this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|Darn. A bug ${statusText} me. Guess I should have tested this first.`);
+ pokemon.setStatus(status);
+ }
+ },
+ secondary: null,
+ target: "self",
+ type: "Electric",
+ },
+
+ // HiZo
+ scapegoat: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "KO a teammate; gain more Atk/SpA/Spe if healthy.",
+ desc: "A party member is selected and faints, raising the user's Attack, Special Attack, and Speed by 1 stage if the party member's HP is below 33%, by 2 stages if the party member's HP is between 33% and 66%, and by 3 stages if the party member's HP is above 66%. Fails if there are no non-fainted Pokemon on the user's side.",
+ name: "Scapegoat",
+ gen: 9,
+ pp: 5,
+ priority: 0,
+ flags: {},
+ onTryHit(source) {
+ if (!this.canSwitch(source.side)) {
+ this.attrLastMove('[still]');
+ this.add('-fail', source);
+ return this.NOT_FAIL;
+ }
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Swords Dance', source);
+ },
+ onHit(target, source) {
+ this.add(`c:|${getName((source.illusion || source).name)}|Ok I have a stupid idea, just hear me out`);
+ this.add('message', `A sacrifice is needed.`);
+ },
+ slotCondition: 'scapegoat',
+ // fake switch a la revival blessing
+ selfSwitch: true,
+ condition: {
+ duration: 1,
+ // reviving implemented in side.ts, kind of
+ },
+ secondary: null,
+ target: "self",
+ type: "Dark",
+ },
+
+
+ // HoeenHero
+ reprogram: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Rain Dance + Lock-On.",
+ name: "Re-Program",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Calm Mind', source);
+ this.add('-anim', source, 'Geomancy', target);
+ },
+ onHit(target, source, move) {
+ let success = false;
+ if (this.field.setWeather('raindance', source, move)) {
+ this.add('-message', 'HoeenHero made the environment easier to work with!');
+ success = true;
+ }
+ if (source.addVolatile('lockon', target)) {
+ this.add('-message', 'HoeenHero double checked their work and fixed any errors!');
+ this.add('-activate', source, 'move: Lock-On', '[of] ' + target);
+ success = true;
+ }
+ if (success) {
+ this.add('-message', 'HoeenHero reprograms the battle to be more beneficial to them!');
+ }
+ },
+ target: "normal",
+ type: "Psychic",
+ },
+
+ // hsy
+ wonderwing: {
+ accuracy: 90,
+ basePower: 150,
+ category: "Physical",
+ shortDesc: "No dmg rest of turn. Next turn user has -1 prio.",
+ desc: "Usually moves last. The user becomes immune to all damage sources for the rest of the turn. The turn after this move is used, the user's moves all gain -1 priority. This move ignores all negative effects associated with contact moves.",
+ name: "Wonder Wing",
+ pp: 5,
+ priority: 0,
+ flags: {contact: 1},
+ // No negative contact effects implemented in Battle#checkMovesMakeContact
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Electric Terrain', source);
+ this.add('-anim', source, 'Giga Impact', target);
+ },
+ self: {
+ volatileStatus: 'wonderwing',
+ },
+ condition: {
+ noCopy: true,
+ duration: 2,
+ onStart(pokemon) {
+ this.add('-start', pokemon, 'Wonder Wing');
+ },
+ onRestart(target, source, sourceEffect) {
+ target.removeVolatile('wonderwing');
+ },
+ onDamage(damage, target, source, effect) {
+ if (this.effectState.duration < 2) return;
+ this.add('-activate', source, 'move: Wonder Wing');
+ return false;
+ },
+ onModifyPriority(relayVar, source, target, move) {
+ return -1;
+ },
+ onEnd(pokemon) {
+ this.add('-end', pokemon, 'Wonder Wing', '[silent]');
+ },
+ },
+ target: "normal",
+ type: "Flying",
+ },
+
+ // Hydrostatics
+ hydrostatics: {
+ accuracy: 100,
+ basePower: 90,
+ category: "Special",
+ name: "Hydrostatics",
+ shortDesc: "70%:+1 SpA,50%:prz,Elec/Water. Differs when Tera.",
+ desc: "If the user has not Terastallized, this move has a 70% chance to raise the user's Special Attack by 1 stage, has a 50% chance to paralyze the target, and combines the Water type in its type effectiveness. When the user has Terastallized, this move is a purely Water-type attack that gains Same-Type Attack Bonus with Water-types, and it has an 80% chance to raise the user's Special Attack by 1 stage, has a 60% chance to change the target's typing to Water, and is super effective against Water.",
+ pp: 20,
+ priority: 1,
+ flags: {protect: 1, mirror: 1},
+ onModifyMove(move, source, target) {
+ if (source.terastallized) {
+ move.type = 'Water';
+ }
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ if (!source.terastallized) this.add('-anim', source, 'Charge Beam', source);
+ else this.add('-anim', source, 'Water Pulse', target);
+ },
+ onEffectiveness(typeMod, target, type, move) {
+ if (move.type === 'Electric') return typeMod + this.dex.getEffectiveness('Water', type);
+ else if (type === 'Water' && move.type === 'Water') return 1;
+ },
+ secondary: {
+ chance: 100,
+ onHit(target, source, move) {
+ // None of these stack with Serene Grace
+ if (!source.terastallized) {
+ if (this.randomChance(70, 100)) {
+ this.boost({spa: 1}, source);
+ }
+ if (this.randomChance(50, 100)) {
+ if (target.isActive) target.trySetStatus('par', source, this.effect);
+ }
+ } else {
+ if (this.randomChance(80, 100)) {
+ this.boost({spa: 1}, source);
+ }
+ if (this.randomChance(60, 100)) {
+ // Soak
+ if (target.getTypes().join() !== 'Water' && target.setType('Water')) {
+ this.add('-start', target, 'typechange', 'Water');
+ }
+ }
+ }
+ },
+ },
+ target: "normal",
+ type: "Electric",
+ },
+
+ // Imperial
+ stormshroud: {
+ accuracy: 100,
+ basePower: 95,
+ category: "Special",
+ name: "Storm Shroud",
+ shortDesc: "Physical + contact if stronger.",
+ desc: "This move becomes a physical attack that makes contact if the value of ((((2 * the user's level / 5 + 2) * 90 * X) / Y) / 50), where X is the user's Attack stat and Y is the target's Defense stat, is greater than the same value where X is the user's Special Attack stat and Y is the target's Special Defense stat. No stat modifiers other than stat stage changes are considered for this purpose. If the two values are equal, this move chooses a damage category at random.",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Clangorous Soulblaze', target);
+ },
+ onModifyMove(move, pokemon, target) {
+ if (!target) return;
+ const atk = pokemon.getStat('atk', false, true);
+ const spa = pokemon.getStat('spa', false, true);
+ const def = target.getStat('def', false, true);
+ const spd = target.getStat('spd', false, true);
+ const physical = Math.floor(Math.floor(Math.floor(Math.floor(2 * pokemon.level / 5 + 2) * 90 * atk) / def) / 50);
+ const special = Math.floor(Math.floor(Math.floor(Math.floor(2 * pokemon.level / 5 + 2) * 90 * spa) / spd) / 50);
+ if (physical > special || (physical === special && this.random(2) === 0)) {
+ move.category = 'Physical';
+ move.flags.contact = 1;
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Dragon",
+ },
+
+ // in the hills
+ "102040": {
+ accuracy: 100,
+ basePower: 10,
+ category: "Physical",
+ name: "10-20-40",
+ shortDesc: "Hits 3 times, 3rd hit crits. sets Safeguard.",
+ desc: "Hits three times. Power increases to 20 for the second hit and 40 for the third. The third hit is always a critical hit unless the target is under the effect of Lucky Chant or has the Battle Armor or Shell Armor Abilities. If this move deals damage, it applies the effect of Safeguard for 5 turns, protecting the user's team from confusion and non-volatile status conditions.",
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ basePowerCallback(pokemon, target, move) {
+ return [10, 20, 40][move.hit - 1];
+ },
+ onTryHit(target, source, move) {
+ if (move.hit === 3) {
+ move.willCrit = true;
+ }
+ },
+ onPrepareHit() {
+ this.attrLastMove('[anim] Triple Kick');
+ },
+ self: {
+ sideCondition: 'safeguard',
+ },
+ secondary: null,
+ multihit: 3,
+ target: "normal",
+ type: "Ground",
+ },
+
+ // ironwater
+ jirachibanhammer: {
+ accuracy: 100,
+ basePower: 120,
+ category: "Physical",
+ shortDesc: "Prevents the target from switching out.",
+ desc: "Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Flip Turn, Parting Shot, Teleport, U-turn, or Volt Switch. If the target leaves the field using Baton Pass, the replacement will remain trapped. The effect ends if the user leaves the field.",
+ name: "Jirachi Ban Hammer",
+ pp: 5,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Gigaton Hammer');
+ },
+ secondary: {
+ chance: 100,
+ onHit(target, source, move) {
+ if (source.isActive) target.addVolatile('trapped', source, move, 'trapper');
+ },
+ },
+ target: "normal",
+ type: "Steel",
+ },
+
+ // Irpachuza
+ bibbidibobbidirands: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Changes target to a Randbats set.",
+ desc: "Z-Move requiring Irpatuzinium Z. Nearly always moves first. Permanently transforms the target into a randomized Pokemon that would be generated in one of the following formats: Gen 9 Random Battle, Gen 9 Hackmons Cup, Gen 9 Challenge Cup, or Computer-Generated Teams. In the vast majority of circumstances, this also prevents the target from acting this turn.",
+ name: "Bibbidi-Bobbidi-Rands",
+ gen: 9,
+ pp: 1,
+ priority: 0,
+ flags: {protect: 1},
+ onPrepareHit(target, source) {
+ this.attrLastMove('[anim] Doom Desire');
+ },
+ onHit(target, source) {
+ const formats = ['gen9randombattle', 'gen9hackmonscup', 'gen9challengecup1v1', 'gen9computergeneratedteams'];
+ const randFormat = this.sample(formats);
+ let msg;
+ switch (randFormat) {
+ case 'gen9randombattle':
+ msg = "Ta-dah! You are now blessed with a set from the most popular format on the sim, hope you like it! n.n";
+ break;
+ case 'gen9hackmonscup':
+ msg = "Hackmons Cup is like Rands but scrambled eggs, cheese and pasta. I'm sure you'll love it too n.n";
+ break;
+ case 'gen9challengecup1v1':
+ msg = "The only difference between a Challenge Cup Pokémon and my in-game one is that the former actually surpassed lvl. 60, enjoy n.n";
+ break;
+ case 'gen9computergeneratedteams':
+ msg = "We asked an AI to make a randbats set. YOU WON'T BELIEVE WHAT IT CAME UP WITH N.N";
+ break;
+ }
+ let team = [] as PokemonSet[];
+ const unModdedDex = Dex.mod('base');
+ let depth = 0;
+ while (!team.length) {
+ team = Teams.generate(randFormat, {name: target.side.name});
+ if (depth >= 50) break; // Congrats you won the lottery!
+ team = team.filter(p => {
+ const baseSpecies = unModdedDex.species.get(p.species);
+ const curSpecies = this.dex.species.get(p.species);
+ if (Object.values(baseSpecies.baseStats).join() !== Object.values(curSpecies.baseStats).join()) {
+ return false;
+ }
+ if (Object.values(baseSpecies.abilities).join() !== Object.values(curSpecies.abilities).join()) {
+ return false;
+ }
+ if (baseSpecies.types.join() !== curSpecies.types.join()) {
+ return false;
+ }
+ return true;
+ });
+ depth++;
+ }
+
+ this.addMove('-anim', target, 'Wish', target);
+ target.clearBoosts();
+ this.add('-clearboost', target);
+ // @ts-ignore set wants a sig but randbats sets don't have one
+ changeSet(this, target, team[0], true);
+ this.add(`c:|${getName((source.illusion || source).name)}|${msg}`);
+ },
+ isZ: "irpatuziniumz",
+ secondary: null,
+ target: "normal",
+ type: "Fairy",
+ },
+
+ // Isaiah
+ simplegameplan: {
+ accuracy: 100,
+ basePower: 95,
+ category: "Physical",
+ name: "Simple Gameplan",
+ shortDesc: "No additional effect.",
+ pp: 10,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onPrepareHit(target, source) {
+ this.attrLastMove('[anim] High Jump Kick');
+ },
+ secondary: null,
+ target: "allAdjacent",
+ type: "Psychic",
+ },
+
+ // J0rdy004
+ snowysamba: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Snowy Samba",
+ shortDesc: "Sets Snow, +1 Sp. Atk, +2 Speed.",
+ desc: "Raises the user's Special Attack by 1 stage and Speed by 2 stages, and changes the weather to Snow, boosting the defense of Ice-types by 1.5x for 5 turns. Snow will not be set if the weather cannot be changed or if the weather is already Snow.",
+ pp: 15,
+ priority: 0,
+ flags: {snatch: 1, metronome: 1},
+ boosts: {
+ spe: 2,
+ spa: 1,
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Agility', target);
+ this.add('-anim', source, 'Snowscape', target);
+ },
+ weather: 'snow',
+ secondary: null,
+ target: "self",
+ type: "Ice",
+ },
+
+ // Kalalokki
+ knotweak: {
+ accuracy: 80,
+ basePower: 150,
+ category: "Physical",
+ name: "Knot Weak",
+ shortDesc: "Has 1/2 recoil.",
+ desc: "If the target lost HP, the user takes recoil damage equal to 1/2 the HP lost by the target, rounded half up, but not less than 1 HP.",
+ pp: 5,
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
+ recoil: [1, 2],
+ secondary: null,
+ priority: 0,
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Focus Punch', target);
+ },
+ target: "normal",
+ type: "Fighting",
+ },
+
+ // Karthik
+ salvagedsacrifice: {
+ accuracy: 100,
+ basePower: 0,
+ damageCallback(pokemon) {
+ this.add('-anim', pokemon, 'Roost', pokemon);
+ this.heal(this.modify(pokemon.maxhp, 0.25), pokemon, pokemon, this.dex.getActiveMove('Salvaged Sacrifice'));
+ const damage = pokemon.hp;
+ this.add('-anim', pokemon, 'Final Gambit', this.activeTarget);
+ pokemon.faint();
+ return damage;
+ },
+ selfdestruct: "ifHit",
+ category: "Physical",
+ name: "Salvaged Sacrifice",
+ shortDesc: "Heals 25% HP, then uses Final Gambit.",
+ desc: "The user heals 1/4 of its maximum HP, then deals damage to the target equal to the user's current HP. If this attack is successful, the user faints.",
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1, metronome: 1, noparentalbond: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ secondary: null,
+ target: "normal",
+ type: "Fighting",
+ },
+
+ // ken
+ ac: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Does something random.",
+ desc: "This move performs exactly one of the following at random, ignoring options that would do nothing: 10% chance to burn the target; 10% chance to paralyze the target; 10% chance to poison the target; 3% chance to put the target to sleep; 2% chance to freeze the target; 5% chance each to confuse, infatuate, Taunt, Encore, Torment, or Heal Block the target; 5% chance each to set Stealth Rock, Spikes, Toxic Spikes, or Sticky Web; 5% chance to remove entry hazards from the user's side of the field; 5% chance to lower the foe's highest stat by 1 stage; and a 5% chance to switch out.",
+ name: ", (ac)",
+ pp: 15,
+ priority: 0,
+ flags: {reflectable: 1, mustpressure: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Fling', target);
+ },
+ secondary: {
+ chance: 100,
+ onHit(target, source, move) {
+ let success = false;
+ while (!success) {
+ const effect = this.random(100);
+ if (effect < 10) {
+ if (target.trySetStatus('psn', target)) {
+ success = true;
+ }
+ } else if (effect < 20) {
+ if (target.trySetStatus('par', target)) {
+ success = true;
+ }
+ } else if (effect < 30) {
+ if (target.trySetStatus('par', target)) {
+ success = true;
+ }
+ } else if (effect < 33) {
+ if (target.trySetStatus('slp', target)) {
+ success = true;
+ }
+ } else if (effect < 35) {
+ if (target.trySetStatus('frz', target)) {
+ success = true;
+ }
+ } else if (effect < 40) {
+ if (!target.volatiles['confusion']) {
+ target.addVolatile('confusion', source);
+ success = true;
+ }
+ } else if (effect < 45) {
+ if (!target.volatiles['attract']) {
+ target.addVolatile('attract', source);
+ success = true;
+ }
+ } else if (effect < 50) {
+ if (!target.volatiles['taunt']) {
+ target.addVolatile('taunt', source);
+ success = true;
+ }
+ } else if (effect < 55) {
+ if (target.lastMove && !target.volatiles['encore']) {
+ target.addVolatile('encore', source);
+ success = true;
+ }
+ } else if (effect < 60) {
+ if (!target.volatiles['torment']) {
+ target.addVolatile('torment', source);
+ success = true;
+ }
+ } else if (effect < 65) {
+ if (!target.volatiles['healblock']) {
+ target.addVolatile('healblock', source);
+ success = true;
+ }
+ } else if (effect < 70) {
+ if (target.side.addSideCondition('stealthrock')) {
+ success = true;
+ }
+ } else if (effect < 75) {
+ if (target.side.addSideCondition('stickyweb')) {
+ success = true;
+ }
+ } else if (effect < 80) {
+ if (target.side.addSideCondition('spikes')) {
+ success = true;
+ }
+ } else if (effect < 85) {
+ if (target.side.addSideCondition('toxicspikes')) {
+ success = true;
+ }
+ } else if (effect < 90) {
+ const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
+ for (const condition of sideConditions) {
+ if (source.side.removeSideCondition(condition)) {
+ success = true;
+ this.add('-sideend', source.side, this.dex.conditions.get(condition).name, '[from] move: , (ac)', '[of] ' + source);
+ }
+ }
+ } else if (effect < 95) {
+ const bestStat = target.getBestStat(true, true);
+ this.boost({[bestStat]: -1}, target);
+ success = true;
+ } else {
+ if (this.canSwitch(source.side)) {
+ this.actions.useMove("teleport", source);
+ success = true;
+ }
+ }
+ }
+ },
+ },
+ target: "normal",
+ type: "Psychic",
+ },
+
+ // kenn
+ stonefaced: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Sets Stealth Rock. Target: -1 Defense/Speed.",
+ desc: "Lowers the target's Defense and Speed by 1 stage, and sets Stealth Rock on the target's side of the field, damaging Pokemon as they switch in. If Stealth Rock is already on the target's side of the field, the move will not set Stealth Rock but the other effects will still occur.",
+ name: "Stone Faced",
+ pp: 15,
+ priority: 0,
+ flags: {reflectable: 1, mustpressure: 1},
+ sideCondition: 'stealthrock',
+ onPrepareHit(target, source) {
+ this.attrLastMove('[anim] Scary Face');
+ this.attrLastMove('[anim] Stone Axe');
+ },
+ boosts: {
+ def: -1,
+ spe: -1,
+ },
+ secondary: null,
+ target: "normal",
+ type: "Rock",
+ },
+
+ // Kennedy
+ hattrick: {
+ accuracy: 98,
+ basePower: 19,
+ category: "Physical",
+ shortDesc: "3 hits. Third hit crits. 3.5% chance to curse.",
+ desc: "Hits three times. The third hit is always a critical hit unless the target is under the effect of Lucky Chant or has the Battle Armor or Shell Armor Abilities. Each hit has a 3.5% chance to apply the Curse effect to the target, causing them to take damage equal to 25% of their maximum HP at the end of each turn until they switch out.",
+ name: "Hat-Trick",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {contact: 1, protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Focus Energy', source);
+ this.add('-anim', source, 'High Jump Kick', target);
+ this.add('-anim', target, 'Boomburst', source);
+ this.add('-anim', source, 'Aqua Step', target);
+ this.add('-anim', source, 'Aqua Step', target);
+ },
+ onTryHit(target, source, move) {
+ if (move.hit === 3) {
+ move.willCrit = true;
+ }
+ },
+ secondary: {
+ chance: 3.5,
+ volatileStatus: 'curse',
+ },
+ multihit: 3,
+ target: "normal",
+ type: "Ice",
+ },
+ anfieldatmosphere: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Anfield Atmosphere",
+ shortDesc: "No weather/sleep,share statuses,halve hazard dmg.",
+ desc: "For 6 turns, sets a field effect. Negates all weather conditions. Prevents Pokemon from falling asleep. Any status conditions and volatile status conditions applied to one Pokemon will also apply to the all Pokemon on the field. Halves entry hazard damage.",
+ pp: 5,
+ priority: 0,
+ flags: {mirror: 1},
+ pseudoWeather: 'anfieldatmosphere',
+ condition: {
+ duration: 6,
+ durationCallback(source, effect) {
+ if (source?.hasAbility('persistent')) {
+ this.add('-activate', source, 'ability: Persistent', '[move] Anfield Atmosphere');
+ return 8;
+ }
+ return 6;
+ },
+ onUpdate(pokemon) {
+ if (pokemon.volatiles['confusion']) {
+ pokemon.removeVolatile('confusion');
+ }
+ },
+ onFieldStart(target, source) {
+ if (source?.hasAbility('persistent')) {
+ this.add('-fieldstart', 'move: Anfield Atmosphere', '[of] ' + source, '[persistent]');
+ } else {
+ this.add('-fieldstart', 'move: Anfield Atmosphere', '[of] ' + source);
+ }
+ for (const pokemon of this.getAllActive()) {
+ if (pokemon.volatiles['confusion']) {
+ pokemon.removeVolatile('confusion');
+ }
+ }
+ },
+ onFieldRestart(target, source) {
+ this.field.removePseudoWeather('anfieldatmosphere');
+ },
+ onAnySetWeather(target, source, weather) {
+ return false;
+ },
+ onSetStatus(status, target, source, effect) {
+ if (effect.id === 'anfieldatmosphere') return;
+ if (status.id === 'slp' && !target.isSemiInvulnerable()) {
+ this.add('-activate', target, 'move: Anfield Atmosphere');
+ return false;
+ }
+ for (const pokemon of this.getAllActive()) {
+ if (!pokemon.hp || pokemon.fainted) continue;
+ pokemon.trySetStatus(status, source, this.effect);
+ }
+ },
+ onTryAddVolatile(status, target) {
+ if (target.isSemiInvulnerable()) return;
+ if (status.id === 'yawn' || status.id === 'confusion') {
+ this.add('-activate', target, 'move: Anfield Atmosphere');
+ return null;
+ }
+ },
+ onDamage(damage, target, source, effect) {
+ if (effect && ['stealthrock', 'spikes', 'gmaxsteelsurge'].includes(effect.id)) {
+ return damage / 2;
+ }
+ },
+ onFieldResidualOrder: 27,
+ onFieldResidualSubOrder: 1,
+ onFieldEnd() {
+ this.add('-fieldend', 'move: Anfield Atmosphere');
+ },
+ },
+ secondary: null,
+ target: "all",
+ type: "Psychic",
+ },
+
+ // keys
+ protectoroftheskies: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Forces both Pokemon out. Can't be blocked.",
+ desc: "Both the target and the user are forced to switch out and be replaced with random unfainted allies. This effect cannot be blocked by any means other than having no valid allies that can be sent out.",
+ name: "Protector of the Skies",
+ pp: 10,
+ priority: -1,
+ flags: {},
+ onTryMove(source, target, move) {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source, move) {
+ for (const pokemon of this.getAllActive()) {
+ this.add('-anim', source, 'Whirlwind', pokemon);
+ }
+ },
+ onModifyPriority(priority, source, target, move) {
+ const foe = source.foes()[0];
+ if (foe && Object.values(foe.boosts).some(x => x !== 0)) {
+ return priority + 1;
+ }
+ },
+ onHitField(target, source, move) {
+ for (const pokemon of this.getAllActive()) {
+ if (pokemon.hp <= 0 || pokemon.fainted) continue;
+ pokemon.forceSwitchFlag = true;
+ }
+ },
+ secondary: null,
+ target: "all",
+ type: "Flying",
+ },
+
+ // kingbaruk
+ platinumrecord: {
+ accuracy: true,
+ basePower: 70,
+ category: "Special",
+ shortDesc: "Heals 50% HP, restores 1 PP for all other moves.",
+ desc: "Heals the user for 1/2 of their maximum HP, and restores 1 PP to all moves on the user's set other than Platinum Record.",
+ name: "Platinum Record",
+ pp: 5,
+ priority: 0,
+ flags: {sound: 1, heal: 1, protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Sing', target);
+ this.add('-anim', source, 'Iron Defense', target);
+ },
+ onHit(target, source, move) {
+ this.heal(source.maxhp / 2, source, source, move);
+ for (const moveSlot of source.moveSlots) {
+ if (moveSlot.id === move.id) continue;
+ if (moveSlot.pp < moveSlot.maxpp) moveSlot.pp += 1;
+ }
+ },
+ target: "normal",
+ type: "Fairy",
+
+ },
+
+ // Kiwi
+ madmanifest: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "User: +1 Spe, Foe:Free Curse, 50% brn/par/psn.",
+ desc: "Applies the Curse effect to the target, causing them to take damage equal to 25% of their maximum HP at the end of each turn until they switch out. Has a 50% chance to cause the target to either become burned, become poisoned, or become paralyzed. Raises the user's Speed by 1 stage.",
+ name: "Mad Manifest",
+ pp: 10,
+ priority: 0,
+ flags: {},
+ volatileStatus: 'curse',
+ onHit(target, source) {
+ const result = this.random(3);
+ if (result === 0) {
+ target.trySetStatus('psn', target);
+ } else if (result === 1) {
+ target.trySetStatus('par', target);
+ } else {
+ target.trySetStatus('brn', target);
+ }
+ this.boost({spe: 1}, source);
+ },
+ onPrepareHit(target, source) {
+ this.attrLastMove('[anim] Dark Void');
+ },
+ target: "normal",
+ type: "Fairy",
+
+ },
+
+ // Klmondo
+ thebetterwatershuriken: {
+ accuracy: 100,
+ basePower: 20,
+ category: "Physical",
+ shortDesc: "+1 Priority. Hits 2-5 times.",
+ desc: "Usually moves first. Hits two to five times. Has a 35% chance to hit two or three times and a 15% chance to hit four or five times. If one of the hits breaks the target's substitute, it will take damage for the remaining hits. If the user has the Skill Link Ability, this move will always hit five times.",
+ name: "The Better Water Shuriken",
+ pp: 30,
+ priority: 1,
+ flags: {protect: 1, mirror: 1, metronome: 1},
+ multihit: [2, 5],
+ secondary: null,
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Water Shuriken', target);
+ this.add('-anim', source, 'Electro Shot', target);
+ },
+ target: "normal",
+ type: "Water",
+ },
+
+ // kolohe
+ hangten: {
+ accuracy: 100,
+ basePower: 75,
+ category: "Special",
+ name: "Hang Ten",
+ shortDesc: "User sets Electric Terrain on hit.",
+ desc: "If this move is successful, the terrain becomes Electric Terrain.",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Stoked Sparksurfer', target);
+ this.add('-anim', source, 'Surf', target);
+ },
+ secondary: {
+ chance: 100,
+ self: {
+ onHit() {
+ this.field.setTerrain('electricterrain');
+ },
+ },
+ },
+ target: "normal",
+ type: "Water",
+ },
+
+ // Kry
+ attackofopportunity: {
+ accuracy: 100,
+ basePower: 60,
+ basePowerCallback(pokemon, target, move) {
+ if (target.beingCalledBack || target.switchFlag) {
+ this.debug('Attack of Opportunity damage boost');
+ return move.basePower * 1.5;
+ }
+ return move.basePower;
+ },
+ category: "Physical",
+ shortDesc: "Pursuit, +2 Attack when KOing on switch.",
+ desc: "If an opposing Pokemon switches out this turn, this move hits that Pokemon before it leaves the field. Power is multiplied by 1.5x and no accuracy check is done if the user hits an opponent switching out, and the user's turn is over; if an opponent faints from this, the user's Attack is boosted by 2 stages and the replacement Pokemon does not become active until the end of the turn. If the user moves after an opponent using Flip Turn, Parting Shot, Teleport, U-turn, or Volt Switch, but not Baton Pass, it will hit that opponent before it leaves the field.",
+ name: "Attack of Opportunity",
+ pp: 20,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Pursuit', target);
+ this.add('-anim', source, 'Behemoth Blade', target);
+ },
+ beforeTurnCallback(pokemon) {
+ for (const side of this.sides) {
+ if (side.hasAlly(pokemon)) continue;
+ side.addSideCondition('attackofopportunity', pokemon);
+ const data = side.getSideConditionData('attackofopportunity');
+ if (!data.sources) {
+ data.sources = [];
+ }
+ data.sources.push(pokemon);
+ }
+ },
+ onModifyMove(move, source, target) {
+ if (target?.beingCalledBack || target?.switchFlag) {
+ move.accuracy = true;
+ move.onAfterMoveSecondarySelf = function (s, t, m) {
+ if (!t || t.fainted || t.hp <= 0) {
+ this.boost({atk: 1}, s, s, m);
+ }
+ };
+ }
+ },
+ onTryHit(target, pokemon) {
+ target.side.removeSideCondition('attackofopportunity');
+ },
+ condition: {
+ duration: 1,
+ onBeforeSwitchOut(pokemon) {
+ this.debug('Attack of Opportunity start');
+ let alreadyAdded = false;
+ pokemon.removeVolatile('destinybond');
+ for (const source of this.effectState.sources) {
+ if (!source.isAdjacent(pokemon) || !this.queue.cancelMove(source) || !source.hp) continue;
+ if (!alreadyAdded) {
+ this.add('-activate', pokemon, 'move: Pursuit');
+ alreadyAdded = true;
+ }
+ if (source.canMegaEvo) {
+ for (const [actionIndex, action] of this.queue.entries()) {
+ if (action.pokemon === source && action.choice === 'megaEvo') {
+ this.actions.runMegaEvo(source);
+ this.queue.list.splice(actionIndex, 1);
+ break;
+ }
+ }
+ }
+ this.actions.runMove('attackofopportunity', source, source.getLocOf(pokemon));
+ }
+ },
+ },
+ secondary: null,
+ target: "normal",
+ type: "Steel",
+ contestType: "Clever",
+ },
+
+ // Lasen
+ riseabove: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Magnet Rise + Aqua Ring.",
+ desc: "For 5 turns, the user is immune to Ground-type attacks and effects as long as it remains active, and the user will recover 1/16th of their maximum HP at the end of each turn as long as it remains active. If the user uses Baton Pass, the replacement will gain the effects.",
+ name: "Rise Above",
+ gen: 9,
+ pp: 5,
+ priority: 0,
+ flags: {},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(pokemon) {
+ this.add('-anim', pokemon, 'Magnet Rise', pokemon);
+ this.add('-anim', pokemon, 'Quiver Dance', pokemon);
+ },
+ volatileStatus: 'riseabove',
+ onTry(source, target, move) {
+ if (target.volatiles['smackdown'] || target.volatiles['ingrain']) return false;
+
+ // Additional Gravity check for Z-move variant
+ if (this.field.getPseudoWeather('Gravity')) {
+ this.add('cant', source, 'move: Gravity', move);
+ return null;
+ }
+ },
+ condition: {
+ duration: 5,
+ onStart(target) {
+ this.add('-start', target, 'Rise Above');
+ },
+ onImmunity(type) {
+ if (type === 'Ground') return false;
+ },
+ onResidualOrder: 6,
+ onResidual(pokemon) {
+ this.heal(pokemon.baseMaxhp / 16);
+ },
+ onEnd(target) {
+ this.add('-end', target, 'Rise Above');
+ },
+ },
+ secondary: null,
+ target: "self",
+ type: "Electric",
+ },
+
+ // Lets go shuckles
+ shucklepower: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Trick Room + Power Trick.",
+ desc: "Until the user switches out, it swaps its Attack and Defense stats, and stat stage changes remain on their respective stats. Sets Trick Room for 5 turns, making the slower Pokemon move first.",
+ name: "Shuckle Power",
+ pp: 5,
+ priority: -6,
+ flags: {},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Power Trick', source);
+ },
+ pseudoWeather: 'trickroom',
+ volatileStatus: 'powertrick',
+ secondary: null,
+ target: "self",
+ type: "Psychic",
+ },
+
+ // Lily
+ powerup: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Power Up",
+ shortDesc: "Heals 50% HP. Heals 3% more per fainted ally.",
+ desc: "Heals the user for 50% of their maximum HP. Heals an additional 3% of the user's maximum HP for each team member on the user's side that has fainted.",
+ pp: 5,
+ priority: 0,
+ flags: {heal: 1},
+ onModifyMove(move, source, target) {
+ const fntAllies = source.side.pokemon.filter(ally => ally !== source && ally.fainted);
+ if (move.heal) move.heal[0] = 50 + (3 * fntAllies.length);
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(pokemon) {
+ this.add('-anim', pokemon, 'Shore Up', pokemon);
+ this.add('-anim', pokemon, 'Charge', pokemon);
+ this.add('-anim', pokemon, 'Moonlight', pokemon);
+ },
+ heal: [50, 100],
+ secondary: null,
+ target: "self",
+ type: "Electric",
+ },
+
+ // Loethalion
+ darkmooncackle: {
+ accuracy: 100,
+ basePower: 30,
+ basePowerCallback(pokemon, target, move) {
+ const bp = move.basePower + 20 * pokemon.positiveBoosts();
+ this.debug('BP: ' + bp);
+ return bp;
+ },
+ category: "Special",
+ desc: "Power is equal to 30+(X*20), where X is the user's total stat stage changes that are greater than 0. Has a 100% chance to raise the user's Special Attack by 1 stage.",
+ shortDesc: "+20 bp per stat boost. 100% chance +1 SpA.",
+ name: "Darkmoon Cackle",
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Bulk Up', source);
+ this.add('-anim', source, 'Cosmic Power', source);
+ this.add('-anim', source, 'Moonblast', target);
+ },
+ secondary: {
+ chance: 100,
+ self: {
+ boosts: {
+ spa: 1,
+ },
+ },
+ },
+ target: "normal",
+ type: "Normal",
+ },
+
+ // Lumari
+ mysticalbonfire: {
+ accuracy: 100,
+ basePower: 100,
+ basePowerCallback(pokemon, target, move) {
+ if (target.status || target.hasAbility(['comatose', 'mensiscage'])) {
+ this.debug('BP doubled from status condition');
+ return move.basePower * 1.5;
+ }
+ return move.basePower;
+ },
+ category: "Physical",
+ shortDesc: "50% burn. 1.5x power if target is already statused.",
+ desc: "This move has a 50% chance to give the target a burn. This move's power is 1.5x stronger if the target has a non-volatile status condition.",
+ name: "Mystical Bonfire",
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Infernal Parade', target);
+ this.add('-anim', source, 'Fury Attack', target);
+ },
+ secondary: {
+ chance: 50,
+ status: 'brn',
+ },
+ target: "normal",
+ type: "Psychic",
+ },
+
+ // Lunell
+ praisethemoon: {
+ accuracy: 90,
+ basePower: 120,
+ category: "Special",
+ shortDesc: "First turn: +1 SpA. No charge in Gravity.",
+ desc: "This attack charges on the first turn and executes on the second. Raises the user's Special Attack by 1 stage on the first turn. If the user is holding a Power Herb or Gravity is active, the move completes in one turn.",
+ name: "Praise the Moon",
+ pp: 10,
+ priority: 0,
+ flags: {charge: 1, protect: 1, mirror: 1},
+ onTryMove(attacker, defender, move) {
+ this.attrLastMove('[still]');
+ if (attacker.removeVolatile(move.id)) {
+ return;
+ }
+ this.boost({spa: 1}, attacker, attacker, move);
+ if (this.field.pseudoWeather['gravity']) {
+ this.attrLastMove('[still]');
+ this.addMove('-anim', attacker, move.name, defender);
+ return;
+ }
+ if (!this.runEvent('ChargeMove', attacker, defender, move)) {
+ return;
+ }
+ attacker.addVolatile('twoturnmove', defender);
+ return null;
+ },
+ secondary: null,
+ hasSheerForce: true,
+ onPrepareHit(target, source) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, 'Lunar Dance', target);
+ this.add('-anim', source, 'Moongeist Beam', target);
+ },
+ target: "normal",
+ type: "Fairy",
+ },
+
+ // Lyna
+ wrathoffrozenflames: {
+ accuracy: 100,
+ basePower: 100,
+ category: "Physical",
+ shortDesc: "80% gain Ice type, 20% gain Fire type.",
+ desc: "After using the move, there is an 80% chance the user gains an additional Ice typing, and a 20% chance the user gains an additional Fire typing.",
+ name: "Wrath of Frozen Flames",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Clangorous Soulblaze', target);
+ },
+ onHit(target, source, move) {
+ if (source.terastallized) return;
+ if (this.randomChance(8, 10)) {
+ source.addType('Ice');
+ this.add('-start', source, 'typeadd', 'Ice', '[from] move: Wrath of Frozen Flames');
+ } else {
+ source.addType('Fire');
+ this.add('-start', source, 'typeadd', 'Fire', '[from] move: Wrath of Frozen Flames');
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Dragon",
+ },
+
+ // Maia
+ bodycount: {
+ accuracy: 100,
+ basePower: 50,
+ basePowerCallback(pokemon, target, move) {
+ return 50 + 50 * pokemon.side.totalFainted;
+ },
+ category: "Special",
+ shortDesc: "+50 power for each time a party member fainted.",
+ desc: "Power is equal to 50+(X*50), where X is the total number of times any Pokemon has fainted on the user's side, and X cannot be greater than 100.",
+ name: "Body Count",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Core Enforcer');
+ },
+ secondary: null,
+ target: "normal",
+ type: "Ghost",
+ },
+
+ // marillvibes
+ goodvibesonly: {
+ accuracy: 100,
+ basePower: 90,
+ category: "Physical",
+ shortDesc: "Raises the user's Speed by 1 stage.",
+ desc: "Has a 100% chance to raise the user's Speed by 1 stage.",
+ name: "Good Vibes Only",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, contact: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Aqua Step', target);
+ },
+ secondary: {
+ chance: 100,
+ self: {
+ boosts: {
+ spe: 1,
+ },
+ },
+ },
+ target: "normal",
+ type: "Fairy",
+ },
+
+ // maroon
+ metalblast: {
+ accuracy: 90,
+ basePower: 90,
+ category: "Physical",
+ shortDesc: "Sets G-Max Steelsurge on the foe's side.",
+ desc: "If this move is successful, it sets up G-Max Steelsurge on the opposing side of the field, damaging each opposing Pokemon that switches in. Foes lose 1/32, 1/16, 1/8, 1/4, or 1/2 of their maximum HP, rounded down, based on their weakness to the Steel type; 0.25x, 0.5x, neutral, 2x, or 4x, respectively. Can be removed from the opposing side if any opposing Pokemon uses Rapid Spin or Defog successfully, or is hit by Defog.",
+ name: "Metal Blast",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Steel Beam', target);
+ this.add('-anim', source, 'G-max Steelsurge', target);
+ },
+ onAfterHit(target, source, move) {
+ if (!move.hasSheerForce && source.hp) {
+ for (const side of source.side.foeSidesWithConditions()) {
+ side.addSideCondition('gmaxsteelsurge');
+ }
+ }
+ },
+ onAfterSubDamage(damage, target, source, move) {
+ if (!move.hasSheerForce && source.hp) {
+ for (const side of source.side.foeSidesWithConditions()) {
+ side.addSideCondition('gmaxsteelsurge');
+ }
+ }
+ },
+ secondary: {}, // Sheer Force-boosted
+ target: "normal",
+ type: "Steel",
+ },
+
+ // Mathy
+ breakingchange: {
+ accuracy: 100,
+ basePower: 70,
+ category: "Physical",
+ shortDesc: "Ignores target's Ability; disables it on hit.",
+ desc: "This move and its effects ignore the Abilities of other Pokemon. When this move hits the target, the target's Ability is suppressed until it switches out. Innate Abilities are unaffected.",
+ name: "Breaking Change",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Salt Cure');
+ },
+ onHit(target, source) {
+ if (target.getAbility().flags['cantsuppress']) return;
+ if (!target.addVolatile('gastroacid')) return;
+ this.add(`c:|${getName((source.illusion || source).name)}|Sorry i tried to fix smth but accidentally broke your ability :( will fix it next week`);
+ },
+ ignoreAbility: true,
+ secondary: null,
+ target: "normal",
+ type: "Normal",
+ },
+
+ // Merritty
+ newbracket: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Forces both Pokemon out. Can't be blocked.",
+ desc: "Both the target and the user are forced to switch out and be replaced with random unfainted allies. This effect cannot be blocked by any means other than having no valid allies that can be sent out.",
+ name: "New Bracket",
+ pp: 10,
+ priority: 0,
+ flags: {},
+ onTryMove(source, target, move) {
+ this.attrLastMove('[still]');
+ if (source.side.pokemonLeft === 1) {
+ this.add('-fail', source);
+ return false;
+ }
+ if (!source.hasAbility('endround')) {
+ this.add('-fail', source);
+ this.hint(`The user's ability needs to be End Round for New Bracket to work.`);
+ return false;
+ }
+ this.attrLastMove(`[anim] Trick Room`);
+ },
+ onHitField(target, source, move) {
+ for (const pokemon of this.getAllActive()) {
+ if (pokemon.hp <= 0 || pokemon.fainted || pokemon.isSemiInvulnerable()) {
+ continue;
+ }
+ pokemon.forceSwitchFlag = true;
+ }
+ },
+ secondary: null,
+ target: "all",
+ type: "Electric",
+ },
+
+ // Meteordash
+ plagiarism: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ name: "Plagiarism",
+ shortDesc: "Steal+use foe sig move+imprison. Fail: +1 stats.",
+ desc: "User copies opponents signature move and adds it to its own movepool, replacing this move. The user then uses the copied move immediately and gains the Imprison condition, preventing foes from using moves in the user's moveset. The PP of the copied move will be adjusted to match the PP the copied signature move is supposed to have. If the copied custom move would fail if used in this manner, Plagiarism fails and the user boosts all stats by 1 stage, except Accuracy and Evasion.",
+ pp: 5,
+ priority: 1,
+ flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, nosketch: 1},
+ onTry(source) {
+ if (source.m.usedPlagiarism) {
+ this.hint("Plagiarism only works once per switch-in.");
+ return false;
+ }
+ },
+ onPrepareHit() {
+ this.attrLastMove('[anim] Mimic');
+ this.attrLastMove('[anim] Imprison');
+ },
+ onHit(target, source, m) {
+ let sigMoveName = ssbSets[(target.illusion || target).name]?.signatureMove;
+ if (!sigMoveName) sigMoveName = target.moveSlots[target.moveSlots.length - 1].id;
+ const move = this.dex.getActiveMove(sigMoveName);
+ if (!target || this.queue.willSwitch(target) || target.beingCalledBack ||
+ move.flags['failcopycat'] || move.flags['nosketch']) {
+ this.boost({spa: 1, spd: 1, spe: 1}, source, source, m);
+ return;
+ }
+ const plagiarismIndex = source.moves.indexOf('plagiarism');
+ if (plagiarismIndex < 0) return false;
+ this.add(`c:|${getName((source.illusion || source).name)}|yoink`);
+ const plagiarisedMove = {
+ move: move.name,
+ id: move.id,
+ pp: move.pp,
+ maxpp: move.pp,
+ target: move.target,
+ disabled: false,
+ used: false,
+ };
+ source.moveSlots[plagiarismIndex] = plagiarisedMove;
+ this.add('-activate', source, 'move: Plagiarism', move.name);
+ this.add('-message', `${source.name} plagiarised ${target.name}'s ${move.name}!`);
+ this.actions.useMove(move.id, source, {target});
+ delete target.volatiles['imprison'];
+ source.addVolatile('imprison', source);
+ source.m.usedPlagiarism = true;
+ },
+ secondary: null,
+ target: "normal",
+ type: "Dark",
+ },
+
+ // Mex
+ timeskip: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Time Skip",
+ shortDesc: "Clears hazards. +10 turns. +1 Spe.",
+ desc: "Removes all entry hazards from the user's side of the field, increases the turn counter by 10, and boosts the user's Speed by 1 stage.",
+ pp: 10,
+ priority: 0,
+ flags: {},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Trick Room');
+ },
+ self: {
+ onHit(pokemon) {
+ const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
+ for (const condition of sideConditions) {
+ if (pokemon.side.removeSideCondition(condition)) {
+ this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Time Skip', '[of] ' + pokemon);
+ }
+ }
+ // 9 turn addition so the +1 from endTurn totals to 10 turns
+ this.turn += 9;
+ },
+ boosts: {
+ spe: 1,
+ },
+ },
+ secondary: null,
+ target: "all",
+ type: "Dragon",
+ },
+
+ // Miojo
+ vruuuuuum: {
+ accuracy: 100,
+ basePower: 90,
+ category: "Physical",
+ shortDesc: "Super effective on Water.",
+ desc: "This move's type effectiveness against Water is changed to be super effective no matter what this move's type is.",
+ name: "vruuuuuum",
+ pp: 20,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Shift Gear', source);
+ this.add('-anim', source, 'Ice Spinner', target);
+ },
+ onEffectiveness(typeMod, target, type) {
+ if (type === 'Water') return 1;
+ },
+ secondary: null,
+ target: "normal",
+ type: "Ice",
+ },
+
+ // Monkey
+ bananabreakfast: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "2 random stats +1; Lock-On/Laser Focus/Charge.",
+ desc: "Boosts 2 random stats of the user by 1 stage each, except Accuracy and Evasion. These stats can be the same. Applies one of Lock-On, Laser Focus, or Charge to the user at random.",
+ name: "Banana Breakfast",
+ gen: 9,
+ pp: 10,
+ priority: 2,
+ flags: {mirror: 1, heal: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Fire Fang', target);
+ this.add('-anim', source, 'Belly Drum', target);
+ },
+ onHit(target, source) {
+ const stats: BoostID[] = [];
+ const boost: SparseBoostsTable = {};
+ let statPlus: BoostID;
+ for (statPlus in source.boosts) {
+ if (statPlus === 'accuracy' || statPlus === 'evasion') continue;
+ if (source.boosts[statPlus] < 6) {
+ stats.push(statPlus);
+ }
+ }
+ const randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined;
+ const randomStat2: BoostID | undefined = stats.length ? this.sample(stats) : undefined;
+ if (randomStat) boost[randomStat] = 1;
+ if (randomStat2 && randomStat === randomStat2) boost[randomStat] = 2;
+ else if (randomStat2) boost[randomStat2] = 1;
+ this.boost(boost, source);
+ const result = this.random(3);
+ if (result === 0) {
+ this.actions.useMove("laserfocus", target);
+ } else if (result === 1) {
+ this.actions.useMove("lockon", target);
+ } else {
+ this.actions.useMove("charge", target);
+ } // This is easier than implementing each condition manually
+ this.heal(target.maxhp / 4, target, target, this.effect);
+ },
+ secondary: null,
+ target: "self",
+ type: "Grass",
+ },
+
+ // MyPearl
+ eonassault: {
+ accuracy: 100,
+ basePower: 45,
+ category: "Special",
+ shortDesc: "Hits twice. 20% -1 Sp. Atk, 20% -1 Sp. Def.",
+ desc: "Hits 2 times. Each hit has a 20% chance to lower Special Attack by 1 stage, and a 20% chance to lower Special Defense by 1 stage.",
+ name: "Eon Assault",
+ gen: 9,
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1},
+ multihit: 2,
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Mist Ball', target);
+ this.add('-anim', source, 'Luster Purge', target);
+ },
+ secondaries: [
+ {
+ chance: 20,
+ boosts: {
+ spa: -1,
+ },
+ }, {
+ chance: 20,
+ boosts: {
+ spd: -1,
+ },
+ },
+ ],
+ target: "normal",
+ type: "Psychic",
+ },
+
+ // Neko
+ qualitycontrolzoomies: {
+ accuracy: 100,
+ basePower: 50,
+ basePowerCallback(pokemon, target, move) {
+ if (pokemon.side.pokemonLeft === 1) return move.basePower + 30;
+ return move.basePower;
+ },
+ category: "Physical",
+ shortDesc: "Pivot; switchin: Booster Energy. If last: 80BP.",
+ desc: "If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member. The replacement party member gains a Cat Stamp of Approval with the effect of Booster Energy, boosting its highest stat by 1.3x, or 1.5x in the case of Speed. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button or through the effect of the Emergency Exit or Wimp Out Abilities. If there are no unfainted party members, the move's Base Power is increased to 80 and the user gains the Cat Stamp of Approval boost instead.",
+ name: "Quality Control Zoomies",
+ gen: 9,
+ pp: 15,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Ice Spinner', target);
+ this.add('-anim', source, 'Chilly Reception', source);
+ },
+ self: {
+ slotCondition: 'qualitycontrolzoomies',
+ },
+ condition: {
+ onSwap(target) {
+ if (!target.fainted) {
+ target.addVolatile('catstampofapproval');
+ target.side.removeSlotCondition(target, 'qualitycontrolzoomies');
+ }
+ },
+ },
+ onHit(target, source, move) {
+ let message = 'Meow has no other options, so ;w;';
+ if (source.side.pokemonLeft > 1) {
+ message = 'Meow is not the right Pokemon to be an example here, swap meow out please.';
+ }
+ this.add(`c:|${getName('Neko')}|${message}`);
+ },
+ onModifyMove(move, pokemon, target) {
+ if (pokemon.side.pokemonLeft === 1) {
+ move.self = {
+ onHit(t, source, m) {
+ source.addVolatile('catstampofapproval');
+ },
+ };
+ delete move.condition;
+ }
+ },
+ selfSwitch: true,
+ secondary: null,
+ target: "normal",
+ type: "Ice",
+ },
+
+ // Ney
+ shadowdance: {
+ accuracy: 90,
+ basePower: 110,
+ category: "Physical",
+ shortDesc: "Raises the user's Attack by 1 stage.",
+ desc: "100% chance to raise the user's Attack by 1 stage.",
+ name: "Shadow Dance",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1, dance: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Poltergeist', target);
+ this.add('-anim', source, 'Dragon Dance', source);
+ },
+ secondary: {
+ chance: 100,
+ self: {
+ boosts: {
+ atk: 1,
+ },
+ },
+ },
+ target: "normal",
+ type: "Ghost",
+ },
+
+ // Notater517
+ nyaa: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Haze and then +1 Atk / Def.",
+ desc: "Resets the stat stages of all active Pokemon to 0, and then raises the user's Attack and Defense by 1 stage.",
+ name: "~nyaa",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {bypasssub: 1},
+ onPrepareHit(target, source) {
+ this.attrLastMove('[anim] Haze');
+ this.attrLastMove('[anim] Sweet Kiss');
+ this.attrLastMove('[anim] Baton Pass');
+ },
+ onHitField(target, source, move) {
+ this.add('-clearallboost');
+ for (const pokemon of this.getAllActive()) {
+ pokemon.clearBoosts();
+ }
+ this.boost({atk: 1, def: 1}, source, source, move);
+ },
+ slotCondition: 'nyaa',
+ condition: {
+ onSwap(target) {
+ const source = this.effectState.source;
+ if (!target.fainted) {
+ this.add(`c:|${getName((source.illusion || source).name)}|~nyaa ${target.name}`);
+ this.add(`c:|${getName('Jeopard-E')}|**It is now ${target.name}'s turn to ask a question.**`);
+ target.side.removeSlotCondition(target, 'nyaa');
+ }
+ },
+ },
+ secondary: null,
+ target: "all",
+ type: "Steel",
+ },
+
+ // nya
+ '3': {
+ accuracy: 100,
+ basePower: 70,
+ category: "Special",
+ shortDesc: "Moves first. 40% infatuates. 10% backfire chance.",
+ desc: "Usually moves first. This move has a 40% chance to infatuate the target, regardless of gender, but this move has a 10% chance to be used by the target at the user instead.",
+ name: ":3",
+ gen: 9,
+ pp: 5,
+ priority: 1,
+ flags: {protect: 1},
+ onTry(pokemon, target, move) {
+ if (move.sourceEffect !== '3' && this.randomChance(1, 10)) {
+ this.add('-message', "The move backfired!");
+ const activeMove = this.dex.getActiveMove(':3');
+ activeMove.hasBounced = true;
+ this.actions.useMove(activeMove, target, {target: pokemon});
+ return null;
+ }
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Attract', target);
+ },
+ secondary: {
+ volatileStatus: 'attract',
+ chance: 40,
+ },
+ target: "normal",
+ type: "Fairy",
+ },
+
+ // pants
+ eerieapathy: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ name: "Eerie Apathy",
+ shortDesc: "Wish + Taunts the foe.",
+ pp: 15,
+ priority: 0,
+ flags: {snatch: 1, heal: 1, protect: 1, reflectable: 1, mirror: 1, bypasssub: 1},
+ self: {
+ slotCondition: 'Wish',
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Memento', target);
+ },
+ onHit(target, source, move) {
+ if (!target.volatiles['taunt']) {
+ target.addVolatile('taunt', source, move);
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Ghost",
+ },
+
+ // PartMan
+ alting: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Alting",
+ shortDesc: "Switch+Protect, Shiny: 69BP ???-type atk instead.",
+ desc: "If the user is not shiny, it switches out even if it is trapped and is replaced immediately by a selected party member, and if the user moved first this turn, the selected party member will be protected from most attacks made by other Pokemon this turn. If the user is shiny, this move instead becomes a 69 Base Power ???-type special attack.",
+ pp: 5,
+ priority: 0,
+ flags: {snatch: 1},
+ stallingMove: true,
+ sideCondition: 'alting',
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Memento', target);
+
+ this.add(`l|${getName((source.illusion || source).name).split('|')[1]}`);
+ this.add(`j|FakePart`);
+ },
+ onModifyMove(move, source, target) {
+ move.type = "???";
+ if (source.set?.shiny) {
+ move.accuracy = 100;
+ move.basePower = 69;
+ move.category = "Special";
+ move.flags = {protect: 1, bypasssub: 1};
+ move.target = "normal";
+
+ delete move.selfSwitch;
+ delete move.stallingMove;
+ delete move.sideCondition;
+ delete move.condition;
+
+ // Note: Taunt will disable all forms of Alting, including the damaging one.
+ // This is intentional.
+ }
+ },
+ condition: {
+ duration: 1,
+ onSideStart(target, source) {
+ this.add('-singleturn', source, 'Alting');
+ },
+ onTryHitPriority: 3,
+ onTryHit(target, source, move) {
+ if (!move.flags['protect']) {
+ if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
+ if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
+ return;
+ }
+ if (move && (move.target === 'self' || move.category === 'Status')) return;
+ this.add('-activate', target, 'move: Alting', move.name);
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ return this.NOT_FAIL;
+ },
+ },
+ selfSwitch: true,
+ target: "allySide",
+ type: "Ghost", // Updated to ??? in onModifyMove
+ },
+
+ // Pastor Gigas
+ calltorepentance: {
+ accuracy: 100,
+ basePower: 80,
+ category: "Physical",
+ shortDesc: "Applies Heal Block and Taunt.",
+ desc: "If this move deals damage, the target is prevented from using any status moves for 3 turns or restoring any HP for 5 turns, with both effects ending if the target switches out. During the effect, status moves and draining moves are unusable, and Abilities and items that grant healing will not heal the user. If an affected Pokemon uses Baton Pass, the replacement will remain unable to restore its HP or use status moves. The Regenerator Ability is unaffected, and Pokemon with Oblivious are immune to the Taunt effect.",
+ name: "Call to Repentance",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Hyper Voice', target);
+ this.add('-anim', source, 'Judgment', target);
+ },
+ secondaries: [
+ {
+ chance: 100,
+ volatileStatus: 'healblock',
+ }, {
+ chance: 100,
+ volatileStatus: 'taunt',
+ },
+ ],
+ target: "normal",
+ type: "Normal",
+ },
+
+ // Peary
+ "1000gears": {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "1000 Gears",
+ shortDesc: "Heals 100% HP,cures status,+1 Def/SpD,+5 levels.",
+ desc: "Z-Move requiring Pearyum Z. Heals the user for 100% of its maximum HP, cures its non-volatile status effects, boosts its Defense and Special Defense by 1 stage, and raises its level by 5.",
+ pp: 1,
+ priority: 0,
+ flags: {},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(pokemon) {
+ this.add('-anim', pokemon, 'Shift Gear', pokemon);
+ this.add('-anim', pokemon, 'Belly Drum', pokemon);
+ },
+ onHit(target, pokemon, move) {
+ this.heal(pokemon.maxhp, pokemon, pokemon, move);
+ pokemon.cureStatus();
+ this.boost({def: 1, spd: 1});
+ (pokemon as any).level += 5;
+ pokemon.details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) +
+ (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : '');
+ this.add('-anim', pokemon, 'Geomancy', pokemon);
+ this.add('replace', pokemon, pokemon.details);
+ this.add('-message', `${pokemon.name} gained 5 levels!`);
+ },
+ isZ: "pearyumz",
+ secondary: null,
+ target: "self",
+ type: "Steel",
+ },
+
+ // phoopes
+ gen1blizzard: {
+ accuracy: 90,
+ basePower: 120,
+ category: "Special",
+ name: "Gen 1 Blizzard",
+ desc: "Has a 10% chance to freeze the target.",
+ shortDesc: "10% chance to freeze the target.",
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Blizzard');
+ },
+ secondary: {
+ chance: 10,
+ status: 'frz',
+ },
+ target: "normal",
+ type: "Ice",
+ },
+
+ // Pissog
+ asongoficeandfire: {
+ accuracy: 100,
+ basePower: 100,
+ category: "Special",
+ name: "A Song of Ice and Fire",
+ shortDesc: "Type depends on form. Switches form.",
+ desc: "If the user is Volcarona, this move is Ice-type and, after dealing damage, transforms the user into a Snow Warning Frosmoth with Blizzard, Chilly Reception, and Aurora Veil. If the user is Frosmoth, this move is Fire-type and, after dealing damage, transforms the user into a Drought Volcarona with Torch Song, Morning Sun, and Solar Beam. This move fails if the user is neither Frosmoth nor Volcarona.",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, failcopycat: 1, nosketch: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source, move) {
+ if (source.species.name === 'Volcarona') {
+ this.add('-anim', source, 'Blizzard', target);
+ } else {
+ this.add('-anim', source, 'Fiery Dance', target);
+ }
+ },
+ onModifyType(move, pokemon) {
+ if (pokemon.species.name === 'Volcarona') {
+ move.type = "Ice";
+ } else {
+ move.type = "Fire";
+ }
+ },
+ onHit(target, source, move) {
+ if (source.species.name === 'Volcarona') {
+ changeSet(this, source, ssbSets['Pissog-Frosmoth'], true);
+ } else if (source.species.name === 'Frosmoth') {
+ changeSet(this, source, ssbSets['Pissog'], true);
+ }
+ },
+ target: "normal",
+ type: "Fire",
+ },
+
+ // pokemonvortex
+ roulette: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Roulette",
+ shortDesc: "Use a random move, and get a random moveset.",
+ desc: "A random move is selected for use, and then the user's other three moves are replaced with random moves. Aura Wheel, Dark Void, Explosion, Final Gambit, Healing Wish, Hyperspace Fury, Lunar Dance, Memento, Misty Explosion, Revival Blessing, and Self-Destruct cannot be selected.",
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Nasty Plot', source);
+ this.add('-anim', source, 'Metronome', target);
+ this.add('-anim', source, 'Explosion', target);
+ },
+ onHit(target, source) {
+ const bannedList = [
+ 'aurawheel', 'darkvoid', 'explosion', 'finalgambit', 'healingwish', 'hyperspacefury',
+ 'lunardance', 'memento', 'mistyexplosion', 'revivalblessing', 'selfdestruct',
+ ];
+ const moves = this.dex.moves.all().filter(move => (
+ !source.moves.includes(move.id) &&
+ (!move.isNonstandard || move.isNonstandard === 'Unobtainable')
+ ));
+ this.actions.useMove(this.sample(moves.filter(x => !bannedList.includes(x.id))), target);
+ for (const i of target.moveSlots.keys()) {
+ if (i > 2) break;
+ const randomMove = this.sample(moves.filter(x => !bannedList.includes(x.id)));
+ bannedList.push(randomMove.id);
+ const replacement = {
+ move: randomMove.name,
+ id: randomMove.id,
+ pp: randomMove.pp,
+ maxpp: randomMove.pp,
+ target: randomMove.target,
+ disabled: false,
+ used: false,
+ };
+ target.moveSlots[i] = target.baseMoveSlots[i] = replacement;
+ }
+ },
+ target: "self",
+ type: "Normal",
+ },
+
+ // Princess Autumn
+ cottoncandycrush: {
+ accuracy: 100,
+ basePower: 80,
+ category: "Physical",
+ shortDesc: "Uses Sp. Def over Attack in damage calculation.",
+ desc: "Damage is calculated using the user's Special Defense stat as its Attack, including stat stage changes. Other effects that modify the Attack stat are used as normal.",
+ name: "Cotton Candy Crush",
+ overrideOffensiveStat: "spd",
+ gen: 9,
+ pp: 15,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Fusion Bolt', target);
+ this.add('-anim', source, 'Fleur Cannon', target);
+ },
+ target: "normal",
+ type: "Fairy",
+ },
+
+ // ptoad
+ pleek: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Pleek...",
+ shortDesc: "+4 Attack + inflict Perish Song on the user.",
+ desc: "Raises the user's Attack by 4 stages. Inflicts the Perish Song effect on the user, causing it to faint in three turns at the end of the turn.",
+ pp: 10,
+ priority: 0,
+ flags: {sound: 1, bypasssub: 1},
+ onTry(source) {
+ if (source.m.usedPleek) {
+ this.hint("Pleek... only works once per switch-in.");
+ return false;
+ }
+ },
+ onPrepareHit() {
+ this.attrLastMove('[anim] Hyper Voice');
+ this.attrLastMove('[anim] Splash');
+ },
+ onHit(target, source, move) {
+ this.add(`c:|${getName((source.illusion || source).name)}|Pleek...`);
+ this.boost({atk: 4}, source, source, move);
+ source.addVolatile('perishsong');
+ this.add('-start', source, 'perish3', '[silent]');
+ source.m.usedPleek = true;
+ },
+ target: "self",
+ type: "Fairy",
+ },
+
+ // Pulse_kS
+ luckpulse: {
+ accuracy: 100,
+ basePower: 90,
+ category: "Special",
+ name: "Luck Pulse",
+ shortDesc: "Random type. 40% random effect. High crit.",
+ desc: "This move's typing is chosen randomly between the 18 standard types, and each type has a 40% chance to apply a status effect to the target specific to that type. This move has an increased chance to result in a critical hit. The list of effects per type are as follows: Normal can apply drowsy; Fire can apply burn; Water can apply Aqua Ring; Grass can apply Leech Seed; Flying can apply confusion; Fighting can apply partial trapping; Poison can apply Toxic poison; Electric can apply paralysis; Ground can apply No Retreat, trapping the target without granting boosts; Rock can apply Salt Cure; Psychic can apply sleep; Ice can apply freeze; Bug can apply poison; Ghost can apply Disable; Steel can cause the target to flinch; Dragon can cause the target to recharge on their next turn, as if they had just used Hyper Beam; Dark can apply Taunt; and Fairy can apply infatuation.",
+ critRatio: 2,
+ pp: 10,
+ priority: 0,
+ flags: {pulse: 1, protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source, move) {
+ this.add('-anim', source, 'Tera Blast ' + move.type, target);
+ },
+ onModifyType(move, pokemon, target) {
+ const type = this.sample(this.dex.types.names().filter(i => i !== 'Stellar'));
+ move.type = type;
+ },
+ onTryHit(target, source, move) {
+ const messages = [
+ 'Kai Shinden',
+ 'Kaio Sama',
+ 'Kaiba, Seto',
+ 'Kairyu-Shin',
+ 'Kaito Shizuki',
+ 'Kanga Skhan',
+ 'KanSas',
+ 'Karakuri Shogun',
+ 'Kate Stewart',
+ 'Kendo Spirit',
+ 'Keratan sulfate',
+ 'Kernel streaming',
+ 'Key Stage',
+ 'Kids Suck',
+ 'KillSteal',
+ 'Kilometers / Second',
+ 'Kilosecond',
+ 'King of the Swamp',
+ 'King\'s Shield',
+ 'Kirk/Spock',
+ 'Klingon Security',
+ 'Kuroudo (Cloud) Strife',
+ 'Kyouko Sakura',
+ 'KyrgyzStan',
+ 'Kpop Star',
+ 'Kartana Swords dance',
+ ];
+ this.add(`c:|${getName((source.illusion || source).name)}|The kS stands for ${this.sample(messages)}`);
+ },
+ secondary: {
+ chance: 40,
+ onHit(target, source, move) {
+ const table: {[k: string]: {volatileStatus?: string, status?: string}} = {
+ Normal: {volatileStatus: 'yawn'},
+ Fire: {status: 'brn'},
+ Water: {volatileStatus: 'aquaring'},
+ Grass: {volatileStatus: 'leechseed'},
+ Flying: {volatileStatus: 'confusion'},
+ Fighting: {volatileStatus: 'partiallytrapped'},
+ Poison: {status: 'tox'},
+ Electric: {status: 'par'},
+ Ground: {volatileStatus: 'trapped'},
+ Rock: {volatileStatus: 'saltcure'},
+ Psychic: {status: 'slp'},
+ Ice: {status: 'frz'},
+ Bug: {status: 'psn'},
+ Ghost: {volatileStatus: 'disable'},
+ Steel: {volatileStatus: 'flinch'},
+ Dark: {volatileStatus: 'mustrecharge'},
+ Dragon: {volatileStatus: 'taunt'},
+ Fairy: {volatileStatus: 'attract'},
+ };
+ let condition = table[move.type];
+ if (!condition) condition = table['Normal'];
+ if (condition.status) {
+ target.trySetStatus(condition.status);
+ } else if (condition.volatileStatus) {
+ target.addVolatile(condition.volatileStatus);
+ }
+ },
+ },
+ target: "normal",
+ type: "???",
+ },
+
+ // PYRO
+ meatgrinder: {
+ accuracy: 100,
+ basePower: 60,
+ category: "Physical",
+ name: "Meat Grinder",
+ shortDesc: "User:+1/8 HP/turn;Foe:-1/8 HP/turn,Nrm/Fairy 1/4.",
+ desc: "Causes damage to the target equal to 1/8 of its maximum HP (1/4 if the target is Normal or Fairy type), rounded down, and heals the user equal to 1/8 of its maximum HP, both at the end of each turn during effect. This effect ends when the target is no longer active.",
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Guillotine');
+ },
+ condition: {
+ noCopy: true,
+ onStart(pokemon) {
+ this.add('-start', pokemon, 'Meat Grinder');
+ },
+ onResidualOrder: 13,
+ onResidual(pokemon, source) {
+ this.damage(pokemon.baseMaxhp / (pokemon.hasType(['Normal', 'Fairy']) ? 4 : 8));
+
+ const target = this.getAtSlot(pokemon.volatiles['meatgrinder'].sourceSlot);
+ if (!pokemon || pokemon.fainted || pokemon.hp <= 0) {
+ this.add(`c:|${getName((target.illusion || target).name)}|Tripping off the beat kinda, dripping off the meat grinder`);
+ }
+ if (!target || target.fainted || target.hp <= 0) {
+ this.debug('Nothing to heal');
+ return;
+ }
+ this.heal(target.baseMaxhp / 8, target, pokemon);
+ },
+ onEnd(pokemon) {
+ this.add('-end', pokemon, 'Meat Grinder');
+ },
+ },
+ secondary: {
+ chance: 100,
+ volatileStatus: 'meatgrinder',
+ },
+ target: "normal",
+ type: "Steel",
+ },
+
+ // Quite Quiet
+ worriednoises: {
+ accuracy: 100,
+ basePower: 90,
+ category: "Special",
+ name: "*Worried Noises*",
+ shortDesc: "+1 SpA. Type varies based on user's primary type.",
+ desc: "Has a 100% chance to raise the user's Special Attack by 1 stage. This move's type depends on the user's primary type. If the user's primary type is typeless, this move's type is the user's secondary type if it has one, otherwise the added type from effects that add extra typings. This move is typeless if the user's type is typeless alone.",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Tidy Up', source);
+ this.add('-anim', source, 'Bug Buzz', target);
+ },
+ onModifyType(move, pokemon) {
+ let type = pokemon.getTypes()[0];
+ if (type === "Bird") type = "???";
+ move.type = type;
+ },
+ secondary: {
+ chance: 100,
+ self: {
+ boosts: {
+ spa: 1,
+ },
+ },
+ },
+ target: "normal",
+ type: "Normal",
+ },
+
+ // quziel
+ reshape: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ name: "Reshape",
+ shortDesc: "User: +1 SpA. Target becomes a random monotype.",
+ desc: "Raises the user's Special Attack by 1 stage and changes the target's typing to any one of the 18 standard types at random, replacing their old typing.",
+ pp: 10,
+ priority: 0,
+ flags: {},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Reflect Type', target);
+ },
+ onHit(target, source, move) {
+ const type = this.sample(this.dex.types.names().filter(i => i !== 'Stellar'));
+ target.setType(type);
+ this.add('-start', target, 'typechange', type, '[from] move: Reshape');
+ this.boost({spa: 1}, source);
+ },
+ target: "normal",
+ type: "Normal",
+ },
+
+ // R8
+ magictrick: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Magic Trick",
+ shortDesc: "Teleport + Clears field effects.",
+ desc: "Removes any terrain, weather, entry hazard, or other removable field condition, and then causes the user to switch out out even if it is trapped and be replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members, and the user will still attempt to switch out if there are no active field conditions.",
+ pp: 5,
+ priority: 0,
+ flags: {bypasssub: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Explosion', target);
+ },
+ onHit(target, source, move) {
+ let success = false;
+ const displayText = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
+ for (const player of this.sides) {
+ for (const targetCondition of Object.keys(player.sideConditions)) {
+ if (player.removeSideCondition(targetCondition)) {
+ success = true;
+ if (displayText.includes(targetCondition)) {
+ this.add('-sideend', player, this.dex.conditions.get(targetCondition).name, '[from] move: Magic Trick', '[of] ' + source);
+ }
+ }
+ }
+ }
+ if (this.field.clearTerrain()) success = true;
+ if (this.field.clearWeather()) success = true;
+ for (const pseudoWeather of PSEUDO_WEATHERS) {
+ if (this.field.removePseudoWeather(pseudoWeather)) success = true;
+ }
+ return success || !!this.canSwitch(source.side);
+ },
+ selfSwitch: true,
+ secondary: null,
+ target: "self",
+ type: "Normal",
+ },
+
+ // Rainshaft
+ "hatsunemikusluckyorb": {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Hatsune Miku's Lucky Orb",
+ shortDesc: "Gains +3 to random stat, then uses Baton Pass.",
+ desc: "Z-Move requiring Rainium Z. Boosts a random stat (except Accuracy and Evasion) by 3 stages, then the user is replaced with another Pokemon in its party. The selected Pokemon has the user's stat stage changes, confusion, and certain move effects transferred to it.",
+ pp: 1,
+ priority: 0,
+ flags: {},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(pokemon) {
+ this.add('-anim', pokemon, 'Life Dew', pokemon);
+ this.add('-anim', pokemon, 'Geomancy', pokemon);
+ },
+ onHit(target, pokemon, move) {
+ const stats: BoostID[] = [];
+ let stat: BoostID;
+ for (stat in target.boosts) {
+ if (stat === 'accuracy' || stat === 'evasion') continue;
+ if (target.boosts[stat] < 6) {
+ stats.push(stat);
+ }
+ }
+ if (stats.length) {
+ const randomStat = this.sample(stats);
+ this.boost({[randomStat]: 3}, pokemon, pokemon, move);
+ this.actions.useMove('Baton Pass', target);
+ }
+ },
+ isZ: "rainiumz",
+ secondary: null,
+ target: "self",
+ type: "Water",
+ },
+
+ // Ransei
+ floodoflore: {
+ accuracy: 100,
+ basePower: 100,
+ category: "Special",
+ name: "Flood of Lore",
+ shortDesc: "Sets Psychic Terrain.",
+ desc: "If this move is successful, the terrain becomes Psychic Terrain.",
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1},
+ terrain: 'psychicterrain',
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Photon Geyser', target);
+ },
+ secondary: null,
+ target: "normal",
+ type: "Psychic",
+ },
+
+ // ReturnToMonkey
+ monkemagic: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Monke Magic",
+ shortDesc: "Sets Trick Room; user SpA +1.",
+ desc: "Nearly always goes last. Raises the user's Special Attack by 1 stage and sets Trick Room for 5 turns, making the slower Pokemon move first for the duration.",
+ pp: 5,
+ priority: -7,
+ flags: {},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Trick', target);
+ this.add('-anim', source, 'Trick Room', target);
+ this.add('-anim', source, 'Nasty Plot', target);
+ },
+ pseudoWeather: 'trickroom',
+ self: {
+ boosts: {
+ spa: 1,
+ },
+ },
+ target: "all",
+ type: "Psychic",
+ },
+
+ // Rissoux
+ callofthewild: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Call of the Wild",
+ shortDesc: "Boosts Atk, Spe, and accuracy by 1 stage.",
+ pp: 5,
+ priority: 0,
+ flags: {sound: 1},
+ boosts: {
+ atk: 1,
+ spe: 1,
+ accuracy: 1,
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Dragon Dance', source);
+ this.add('-anim', source, 'Lock-On', source);
+ },
+ secondary: null,
+ target: "self",
+ type: "Fire",
+ },
+
+ // RSB
+ confiscate: {
+ accuracy: 100,
+ basePower: 60,
+ category: "Physical",
+ name: "Confiscate",
+ shortDesc: "First turn only. Steals boosts and screens.",
+ desc: "Nearly always moves first. The target's stat stages greater than 0 are stolen from it and applied to the user, and any present effects of Reflect, Light Screen, and Aurora Veil are moved from the target's side of the field to the user's, before dealing damage. Fails unless it is the user's first turn on the field.",
+ pp: 5,
+ priority: 2,
+ flags: {contact: 1, protect: 1, mirror: 1, bite: 1},
+ onTry(source) {
+ if (source.activeMoveActions > 1) {
+ this.hint("Confiscate only works on your first turn out.");
+ return false;
+ }
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Crunch', target);
+ this.add('-anim', source, 'Thief', target);
+ },
+ onTryHit(target, source) {
+ this.add(`c:|${getName((source.illusion || source).name)}|Contraband detected, confiscating.`);
+ for (const condition of ['reflect', 'lightscreen', 'auroraveil']) {
+ if (target.side.removeSideCondition(condition)) {
+ source.side.addSideCondition(condition);
+ }
+ }
+ },
+ stealsBoosts: true,
+ target: "normal",
+ type: "Dark",
+ },
+
+ // Rumia
+ midnightbird: {
+ accuracy: 100,
+ basePower: 85,
+ category: "Special",
+ name: "Midnight Bird",
+ shortDesc: "100% chance to raise the user's Sp. Atk by 1.",
+ desc: "Has a 100% chance to raise the user's Special Attack by 1 stage.",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Memento', target);
+ this.add('-anim', source, 'Brutal Swing', target);
+ },
+ secondary: {
+ chance: 100,
+ self: {
+ boosts: {
+ spa: 1,
+ },
+ },
+ },
+ target: "normal",
+ type: "Dark",
+ },
+
+ // Scotteh
+ purification: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Heals 50% of max HP. Cures status.",
+ desc: "Heals the user for 1/2 of their maximum HP and removes any non-volatile status effect from the user.",
+ name: "Purification",
+ pp: 5,
+ priority: 0,
+ flags: {heal: 1, bypasssub: 1, allyanim: 1},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Moonlight');
+ },
+ onHit(pokemon) {
+ const success = !!this.heal(this.modify(pokemon.maxhp, 0.5));
+ return pokemon.cureStatus() || success;
+ },
+ secondary: null,
+ target: "self",
+ type: "Water",
+ },
+
+ // SexyMalasada
+ hexadecimalfire: {
+ accuracy: 100,
+ basePower: 75,
+ category: "Special",
+ shortDesc: "20% burn, 20% spite, 20% 1/4th recoil.",
+ desc: "This move independently has a 20% chance to leave the target with a burn, a 20% chance to reduce the PP of the target's last used move by 4, and a 20% chance to cause the user to take damage equal to 1/4 of the damage dealt to the target.",
+ name: "Hexadecimal Fire",
+ pp: 15,
+ priority: 0,
+ flags: {heal: 1, bypasssub: 1, allyanim: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Sacred Fire', target);
+ this.add('-anim', source, 'Hex', target);
+ },
+ secondaries: [
+ {
+ chance: 20,
+ status: 'brn',
+ },
+ {
+ chance: 20,
+ onHit(target) {
+ if (!target.hp) return;
+ let move: Move | ActiveMove | null = target.lastMove;
+ if (!move || move.isZ) return;
+ if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove);
+ const ppDeducted = target.deductPP(move.id, 4);
+ if (!ppDeducted) return;
+ this.add('-activate', target, 'move: Hexadecimal Fire', move.name, ppDeducted);
+ },
+ },
+ {
+ chance: 20,
+ onHit(target, source, move) {
+ move.recoil = [25, 100];
+ },
+ },
+ ],
+ target: "normal",
+ type: "Ghost",
+ },
+
+ // sharp_claw
+ treacheroustraversal: {
+ accuracy: 100,
+ basePower: 70,
+ category: "Physical",
+ shortDesc: "Clears hazards, sets spikes, switches out.",
+ desc: "Removes all entry hazards and active terrains from the field, then sets one layer of Spikes if the user is Sneasel or Toxic Spikes otherwise. If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button or through the effect of the Emergency Exit or Wimp Out Abilities.",
+ name: "Treacherous Traversal",
+ gen: 9,
+ pp: 20,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Defog', source);
+ this.add('-anim', source, 'Extreme Speed', target);
+ },
+ selfSwitch: true,
+ self: {
+ onHit(source) {
+ let success = false;
+ const removeTarget = [
+ 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
+ ];
+ const removeAll = [
+ 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
+ ];
+ const targetSide = source.side.foe;
+ for (const targetCondition of removeTarget) {
+ if (targetSide.removeSideCondition(targetCondition)) {
+ if (!removeAll.includes(targetCondition)) continue;
+ this.add('-sideend', targetSide, this.dex.conditions.get(targetCondition).name, '[from] move: Treacherous Traversal', '[of] ' + source);
+ success = true;
+ }
+ }
+ for (const sideCondition of removeAll) {
+ if (source.side.removeSideCondition(sideCondition)) {
+ this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Treacherous Traversal', '[of] ' + source);
+ success = true;
+ }
+ }
+ success = this.field.clearTerrain();
+ for (const side of source.side.foeSidesWithConditions()) {
+ if (source.species.name === 'Sneasel') {
+ success = side.addSideCondition('spikes');
+ } else {
+ success = side.addSideCondition('toxicspikes');
+ }
+ }
+ return success;
+ },
+ },
+ secondary: {}, // allows sheer force to trigger
+ target: "normal",
+ type: "Rock",
+ },
+
+ // Siegfried
+ boltbeam: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Calls 45 BP Thunderbolt + 45 BP Ice Beam.",
+ desc: "When used, calls a 45 Base Power Thunderbolt for use, and then calls a 45 Base Power Ice Beam for use. If one move fails, the other will still execute.",
+ name: "BoltBeam",
+ pp: 15,
+ priority: 0,
+ flags: {},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onTryHit(target) {
+ const tbolt = this.dex.getActiveMove('thunderbolt');
+ tbolt.basePower = 45;
+ const icebeam = this.dex.getActiveMove('icebeam');
+ icebeam.basePower = 45;
+ this.actions.useMove(tbolt, target);
+ this.actions.useMove(icebeam, target);
+ return null;
+ },
+ secondary: null,
+ target: "self",
+ type: "Electric",
+ },
+
+ // Sificon
+ grassgaming: {
+ accuracy: 100,
+ basePower: 100,
+ category: "Special",
+ shortDesc: "Remove item, Leech Seed, Psn if stat raised.",
+ desc: "If the user has not fainted, the target loses its held item. This move cannot cause Pokemon with the Sticky Hold Ability or Pokemon holding Z-Crystals or Mega Stones to lose their held items. This move summons Leech Seed on the foe. Has a 100% chance to poison the target if it had a stat stage raised this turn.",
+ name: "Grass Gaming",
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1, reflectable: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'G-Max Vine Lash', target);
+ },
+ onBasePower(basePower, source, target, move) {
+ const item = target.getItem();
+ if (!this.singleEvent('TakeItem', item, target.itemState, target, target, move, item)) return;
+ if (item.id) {
+ return this.chainModify(1.5);
+ }
+ },
+ onAfterHit(target, source) {
+ if (source.hp) {
+ const item = target.takeItem();
+ if (item) {
+ this.add('-enditem', target, item.name, '[from] move: Grass Gaming', '[of] ' + source);
+ }
+ }
+ },
+ onHit(target, source, move) {
+ if (target?.statsRaisedThisTurn) {
+ target.trySetStatus('psn', source, move);
+ }
+ if (!target.hasType('Grass')) {
+ target.addVolatile('leechseed', source);
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Grass",
+ },
+
+ // skies
+ like: {
+ accuracy: 100,
+ basePower: 80,
+ category: "Physical",
+ shortDesc: "The user recycles their item.",
+ desc: "If this attack is successful, the user regains its last used held item, unless it was forcibly removed.",
+ name: "Like..?",
+ pp: 5,
+ priority: 0,
+ flags: {reflectable: 1, protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Recycle', target);
+ this.add('-anim', source, 'Seed Bomb', target);
+ },
+ self: {
+ onHit(pokemon) {
+ if (!pokemon.item && pokemon.lastItem) {
+ const item = pokemon.lastItem;
+ pokemon.lastItem = '';
+ this.add('-item', pokemon, this.dex.items.get(item), '[from] move: Recycle');
+ pokemon.setItem(item);
+ }
+ },
+ },
+ secondary: null,
+ target: "normal",
+ type: "Grass",
+ },
+
+ // snake
+ conceptrelevant: {
+ accuracy: 100,
+ basePower: 70,
+ category: "Physical",
+ shortDesc: "Sets up 2 random hazards+psn foe. Switch.",
+ desc: "If this move is successful, all entry hazards are removed from the user's side of the field, the target becomes poisoned, and two random entry hazards are set on the target's side. If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button or through the effect of the Emergency Exit or Wimp Out Abilities.",
+ name: "Concept Relevant",
+ gen: 9,
+ pp: 15,
+ priority: 0,
+ flags: {contact: 1, protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Mortal Spin', target);
+ this.add('-anim', source, 'Spikes', target);
+ this.add('-anim', source, 'U-turn', target);
+ },
+ onAfterHit(target, pokemon) {
+ if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
+ this.add('-end', pokemon, 'Leech Seed', '[from] move: Concept Relevant', '[of] ' + pokemon);
+ }
+ const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
+ for (const condition of sideConditions) {
+ if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
+ this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Concept Relevant', '[of] ' + pokemon);
+ }
+ }
+ if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
+ pokemon.removeVolatile('partiallytrapped');
+ }
+ for (let i = 0; i < 2; i++) {
+ const usableSideConditions = sideConditions.filter(condition => {
+ if (condition === 'spikes') {
+ return !target.side.sideConditions[condition] || target.side.sideConditions[condition].layers < 3;
+ }
+ if (condition === 'toxicspikes') {
+ return !target.side.sideConditions[condition] || target.side.sideConditions[condition].layers < 2;
+ }
+ return !target.side.sideConditions[condition];
+ });
+ if (usableSideConditions.length) {
+ target.side.addSideCondition(this.sample(usableSideConditions));
+ }
+ }
+ },
+ onAfterSubDamage(damage, target, pokemon) {
+ if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
+ this.add('-end', pokemon, 'Leech Seed', '[from] move: Concept Relevant', '[of] ' + pokemon);
+ }
+ const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
+ for (const condition of sideConditions) {
+ if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
+ this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Concept Relevant', '[of] ' + pokemon);
+ }
+ }
+ if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
+ pokemon.removeVolatile('partiallytrapped');
+ }
+ for (let i = 0; i < 2; i++) {
+ const usableSideConditions = sideConditions.filter(condition => {
+ if (condition === 'spikes') {
+ return !target.side.sideConditions[condition] || target.side.sideConditions[condition].layers < 3;
+ }
+ if (condition === 'toxicspikes') {
+ return !target.side.sideConditions[condition] || target.side.sideConditions[condition].layers < 2;
+ }
+ return !target.side.sideConditions[condition];
+ });
+ if (usableSideConditions.length) {
+ target.side.addSideCondition(this.sample(usableSideConditions));
+ }
+ }
+ },
+ secondary: {
+ chance: 100,
+ status: 'psn',
+ },
+ selfSwitch: true,
+ target: "normal",
+ type: "Bug",
+ },
+
+ // Soft Flex
+ adaptivebeam: {
+ accuracy: 100,
+ basePower: 90,
+ category: "Special",
+ shortDesc: "If target has boosts, steals them, +1 prio, 0 BP.",
+ desc: "If the target of this move has positive stat stage changes, this move will usually move first, and on use the attack deals no damage and instead moves all positive stat stage changes from the target to the user.",
+ name: "Adaptive Beam",
+ pp: 15,
+ priority: 0,
+ flags: {sound: 1, protect: 1, bypasssub: 1},
+ stealsBoosts: true,
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Flash Cannon', target);
+ if (target.positiveBoosts()) {
+ this.add('-anim', source, 'Extreme Evoboost', source);
+ }
+ },
+ onModifyMove(move, pokemon, target) {
+ if (target?.positiveBoosts()) {
+ move.basePower = 0;
+ move.category = 'Status';
+ }
+ },
+ onModifyPriority(priority, source, target, move) {
+ if (target?.positiveBoosts()) return priority + 1;
+ return priority;
+ },
+ secondary: null,
+ target: "normal",
+ type: "Steel",
+ },
+
+ // Solaros & Lunaris
+ mindmelt: {
+ accuracy: 100,
+ basePower: 100,
+ category: "Special",
+ overrideDefensiveStat: 'def',
+ shortDesc: "Target's the foe's Def instead of Sp. Def.",
+ desc: "Deals damage to the target based on its Defense instead of Special Defense.",
+ name: "Mind Melt",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Burn Up', target);
+ },
+ secondary: null,
+ target: "normal",
+ type: "Fire",
+ },
+
+ // Spiderz
+ shepherdofthemafiaroom: {
+ accuracy: 90,
+ basePower: 65,
+ category: "Physical",
+ shortDesc: "Sets Sticky Web. 1.3x power if moves first.",
+ desc: "If this move deals damage, it sets up a hazard on the opposing side of the field. This hazard lowers the Speed of each opposing Pokemon that switches in by 1 stage, unless it is a Flying-type Pokemon or has the Levitate Ability. This move's damage is multiplied by 1.3 if the user is the first Pokemon to move during the turn.",
+ name: "Shepherd of the Mafia Room",
+ gen: 9,
+ pp: 15,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source, move) {
+ this.add('-anim', source, 'Explosion', source);
+ this.add('-anim', source, 'Explosion', source);
+ this.add('-anim', source, 'Explosion', source);
+ this.add('-anim', source, 'Explosion', source);
+ this.add('-anim', source, 'Explosion', source);
+ this.add('-anim', source, 'Explosion', source);
+ },
+ onBasePower(relayVar, source, target, move) {
+ if (source.getStat('spe', false, true) > target.getStat('spe', false, true)) {
+ return this.chainModify([5325, 4096]);
+ }
+ },
+ onAfterHit(target, source, move) {
+ if (!move.hasSheerForce && source.hp) {
+ for (const side of source.side.foeSidesWithConditions()) {
+ side.addSideCondition('stickyweb');
+ }
+ }
+ },
+ onAfterSubDamage(damage, target, source, move) {
+ if (!move.hasSheerForce && source.hp) {
+ for (const side of source.side.foeSidesWithConditions()) {
+ side.addSideCondition('stickyweb');
+ }
+ }
+ },
+ secondary: {}, // Sheer Force-boosted
+ target: "normal",
+ type: "Dark",
+ },
+
+ // spoo
+ cardiotraining: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Boosts Atk, Def, and Sp. Def by 1 stage.",
+ desc: "Boosts the user's Attack, Defense, and Special Defense by 1 stage.",
+ name: "Cardio Training",
+ gen: 9,
+ pp: 5,
+ priority: 0,
+ flags: {snatch: 1, dance: 1, metronome: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source, move) {
+ this.add('-anim', source, 'Geomancy', source);
+ },
+ boosts: {
+ atk: 1,
+ def: 1,
+ spd: 1,
+ },
+ secondary: null,
+ target: "self",
+ type: "Fire",
+ },
+
+ // Steorra
+ phantomweapon: {
+ accuracy: 100,
+ basePower: 65,
+ category: "Physical",
+ name: "Phantom Weapon",
+ shortDesc: "2x power if user is holding item; destroys item.",
+ desc: "If the user is holding an item, this move will deal double damage and the user's held item will be removed.",
+ pp: 20,
+ priority: 0,
+ onModifyPriority(priority, pokemon) {
+ if (!pokemon.item) return priority + 1;
+ },
+ flags: {protect: 1, mirror: 1},
+ onModifyMove(move, pokemon, target) {
+ if (!pokemon.item) {
+ move.flags['contact'] = 1;
+ move.flags['mirror'] = 1;
+ }
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source, move) {
+ this.add('-anim', source, 'Shadow Force', target);
+ if (!source.item || source.ignoringItem()) return;
+ const item = source.getItem();
+ if (!this.singleEvent('TakeItem', item, source.itemState, source, source, move, item)) return;
+ move.basePower *= 2;
+ source.addVolatile('phantomweapon');
+ },
+ condition: {
+ onUpdate(pokemon) {
+ const item = pokemon.getItem();
+ pokemon.setItem('');
+ pokemon.lastItem = item.id;
+ pokemon.usedItemThisTurn = true;
+ this.add('-enditem', pokemon, item.name, '[from] move: Phantom Weapon');
+ this.runEvent('AfterUseItem', pokemon, null, null, item);
+ pokemon.removeVolatile('phantomweapon');
+ },
+ },
+ secondary: null,
+ target: "normal",
+ type: "Ghost",
+ },
+
+ // Struchni
+ randfact: {
+ accuracy: 100,
+ basePower: 120,
+ category: "Physical",
+ shortDesc: "Random type.",
+ desc: "This move's typing is chosen randomly between the 18 standard types.",
+ name: "~randfact",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source, move) {
+ move.type = this.sample(this.dex.types.names().filter(i => i !== 'Stellar'));
+ this.add('-anim', source, 'Nasty Plot', source);
+ this.add('-anim', source, 'Head Smash', target);
+ },
+ secondary: null,
+ target: "normal",
+ type: "Steel",
+ },
+
+ // Sulo
+ vengefulmood: {
+ accuracy: 100,
+ basePower: 60,
+ basePowerCallback(pokemon) {
+ return Math.min(140, 60 + 20 * pokemon.timesAttacked);
+ },
+ category: "Special",
+ shortDesc: "+20 power for each time user was hit. Max 4 hits.",
+ desc: "Power is equal to 60+(X*20), where X is the total number of times the user has been hit by a damaging attack during the battle, even if the user did not lose HP from the attack. X cannot be greater than 4 and does not reset upon switching out or fainting. Each hit of a multi-hit attack is counted, but confusion damage is not counted.",
+ name: "Vengeful Mood",
+ gen: 9,
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Aura Sphere', source);
+ },
+ secondary: null,
+ target: "normal",
+ type: "Fighting",
+ },
+
+ // Swiffix
+ stinkbomb: {
+ accuracy: 85,
+ basePower: 10,
+ category: "Special",
+ shortDesc: "Hits 10 times. Each hit can miss.",
+ desc: "Hits ten times. This move checks accuracy for each hit, and the attack ends if the target avoids a hit. If one of the hits breaks the target's substitute, it will take damage for the remaining hits. If the user has the Skill Link Ability, this move will always hit ten times. If the user is holding Loaded Dice, this move hits four to ten times at random without checking accuracy between hits.",
+ name: "Stink Bomb",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Population Bomb', target);
+ this.add('-anim', source, 'Venoshock', target);
+ },
+ multihit: 10,
+ multiaccuracy: true,
+ secondary: null,
+ target: "normal",
+ type: "Poison",
+ },
+
+ // Syrinix
+ asoulforasoul: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Physical",
+ shortDesc: "KOes foe + user if ally was KOed prev. turn.",
+ desc: "If one of the user's party members fainted last turn, this move results in a guaranteed KO for both the target and the user. This move can hit Normal-type Pokemon. Fails if one of the user's party members did not faint last turn.",
+ name: "A Soul for a Soul",
+ pp: 5,
+ priority: 1,
+ flags: {protect: 1, contact: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Explosion', target);
+ this.add('-anim', source, 'Final Gambit', target);
+ },
+ onTry(source, target) {
+ if (!source.side.faintedLastTurn) return false;
+ source.faint(source);
+ target?.faint(source);
+ },
+ ignoreImmunity: true,
+ secondary: null,
+ target: "normal",
+ type: "Ghost",
+ },
+
+ // Teclis
+ risingsword: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Boosts Attack, Speed, and Crit ratio by 1.",
+ desc: "Boosts the user's Attack and Speed by 1 stage and increases the user's chance of landing a critical hit.",
+ name: "Rising Sword",
+ pp: 5,
+ priority: 0,
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onHit(pokemon) {
+ const success = !!this.boost({atk: 1, spe: 1});
+ return pokemon.addVolatile('risingsword') || success;
+ },
+ condition: {
+ onStart(pokemon, source) {
+ this.add('-start', pokemon, 'move: Rising Sword');
+ },
+ onModifyCritRatio(critRatio, source) {
+ return critRatio + 1;
+ },
+ },
+ flags: {},
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Focus Energy', target);
+ this.add('-anim', source, 'Agility', target);
+ },
+ secondary: null,
+ target: "self",
+ type: "Psychic",
+ },
+
+ // Tenshi
+ sandeat: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Protects user, changes type and gains a new move.",
+ desc: "Nearly always moves first. The user protects itself from most attacks made by other Pokemon this turn and gains a random type. If the user has Dynamic Punch, Pyro Ball, Triple Axel, Stone Edge, or Aqua Tail, it will also replace that move with a new move based on the type gained. It can gain Fire type and Pyro Ball, Ice type and Triple Axel, Rock type and Stone Edge, and Water type and Aqua Tail. This move fails entirely if the user moved last this turn or if the foe switches out, and this move has an increasing chance to fail when used consectively.",
+ name: "SAND EAT",
+ pp: 10,
+ priority: 4,
+ flags: {noassist: 1},
+ stallingMove: true,
+ volatileStatus: 'protect',
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onHit(pokemon) {
+ pokemon.addVolatile('stall');
+ const types = ['Fire', 'Water', 'Ice', 'Rock'];
+ const moves = ['pyroball', 'aquatail', 'tripleaxel', 'stoneedge'];
+ const newType = this.sample(types.filter(i => !pokemon.hasType(i)));
+ const newMove = moves[types.indexOf(newType)];
+ const replacementIndex = Math.max(
+ pokemon.moves.indexOf('dynamicpunch'),
+ pokemon.moves.indexOf('pyroball'),
+ pokemon.moves.indexOf('aquatail'),
+ pokemon.moves.indexOf('tripleaxel'),
+ pokemon.moves.indexOf('stoneedge')
+ );
+ if (replacementIndex < 0) {
+ return;
+ }
+ const replacement = this.dex.moves.get(newMove);
+ const replacementMove = {
+ move: replacement.name,
+ id: replacement.id,
+ pp: replacement.pp,
+ maxpp: replacement.pp,
+ target: replacement.target,
+ disabled: false,
+ used: false,
+ };
+ pokemon.moveSlots[replacementIndex] = replacementMove;
+ pokemon.baseMoveSlots[replacementIndex] = replacementMove;
+ pokemon.addType(newType);
+ this.add('-start', pokemon, 'typeadd', newType, '[from] move: SAND EAT');
+ this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|omg look HE EAT`);
+ },
+ onPrepareHit(pokemon, source) {
+ this.add('-anim', source, 'Dig', pokemon);
+ this.add('-anim', source, 'Odor Sleuth', pokemon);
+ this.add('-anim', source, 'Stuff Cheeks', pokemon);
+ this.add(`c:|${getName((pokemon.illusion || pokemon).name)}|he do be searching for rocks tho`);
+ return !!this.queue.willAct() && this.runEvent('StallMove', pokemon);
+ },
+ secondary: null,
+ target: "self",
+ type: "Ground",
+ },
+
+ // Tico
+ eternalwish: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Wish + Aromatherapy + Defog.",
+ desc: "Sets a Wish on the user's side, healing the active Pokemon for 50% of the user's maximum HP at the end of the next turn. Lowers the target's evasiveness by 1 stage. If this move is successful and whether or not the target's evasiveness was affected, the effects of Reflect, Light Screen, Aurora Veil, Safeguard, Mist, Spikes, Toxic Spikes, Stealth Rock, G-Max Steelsurge, and Sticky Web end for the target's side, and for the user's side all team members' non-volatile status conditions and the effects of Spikes, Toxic Spikes, Stealth Rock, G-Max Steelsurge, and Sticky Web are removed. Ignores a target's substitute, although a substitute will still block the lowering of evasiveness. If there is a terrain active and this move is successful, the terrain will be cleared.",
+ name: "Eternal Wish",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(source, target) {
+ this.add('-anim', target, 'Wish', target);
+ this.add('-anim', target, 'Aromatherapy', target);
+ this.add('-anim', target, 'Defog', target);
+ },
+ onHit(target, source, move) {
+ let success = false;
+ if (!target.volatiles['substitute'] || move.infiltrates) success = !!this.boost({evasion: -1});
+ const removeTarget = [
+ 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
+ ];
+ const removeAll = [
+ 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
+ ];
+ for (const targetCondition of removeTarget) {
+ if (target.side.removeSideCondition(targetCondition)) {
+ if (!removeAll.includes(targetCondition)) continue;
+ this.add('-sideend', target.side, this.dex.conditions.get(targetCondition).name, '[from] move: Eternal Wish', '[of] ' + source);
+ success = true;
+ }
+ }
+ for (const sideCondition of removeAll) {
+ if (source.side.removeSideCondition(sideCondition)) {
+ this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Eternal Wish', '[of] ' + source);
+ success = true;
+ }
+ }
+ this.field.clearTerrain();
+ return success;
+ },
+ self: {
+ slotCondition: 'Wish',
+ onHit(target, source, move) {
+ this.add('-activate', source, 'move: Eternal Wish');
+ let success = false;
+ const allies = [...source.side.pokemon, ...source.side.allySide?.pokemon || []];
+ for (const ally of allies) {
+ if (ally !== source && ((ally.hasAbility('sapsipper')) ||
+ (ally.volatiles['substitute'] && !move.infiltrates))) {
+ continue;
+ }
+ if (ally.cureStatus()) success = true;
+ }
+ return success;
+ },
+ },
+ secondary: null,
+ target: "normal",
+ type: "Ghost",
+ },
+
+ // TheJesucristoOsAma
+ theloveofchrist: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Infatuates and confuses the target.",
+ desc: "Causes the target to become confused and infatuated, regardless of gender. This move cannot ever have more than 1 PP.",
+ name: "The Love Of Christ",
+ gen: 9,
+ pp: 1,
+ noPPBoosts: true,
+ priority: 0,
+ flags: {protect: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Morning Sun', source);
+ this.add('-anim', source, 'Lovely Kiss', target);
+ },
+ onHit(target, source) {
+ target.addVolatile('attract', source);
+ target.addVolatile('confusion', source);
+ },
+ secondary: null,
+ target: "normal",
+ type: "Normal",
+ },
+
+ // trace
+ chronostasis: {
+ accuracy: 90,
+ basePower: 80,
+ category: "Special",
+ shortDesc: "If target is KOed, user boosts random stat by 2.",
+ desc: "If this move knocks out the target, the user boosts a random stat, except Accuracy and Evasion, by 2 stages.",
+ name: "Chronostasis",
+ gen: 9,
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Future Sight');
+ },
+ onAfterMoveSecondarySelf(pokemon, target, move) {
+ if (!target || target.fainted || target.hp <= 0) {
+ const stats: BoostID[] = [];
+ let stat: BoostID;
+ for (stat in target.boosts) {
+ if (stat === 'accuracy' || stat === 'evasion') continue;
+ if (target.boosts[stat] < 6) {
+ stats.push(stat);
+ }
+ }
+ if (stats.length) {
+ const randomStat = this.sample(stats);
+ this.boost({[randomStat]: 2}, pokemon, pokemon, move);
+ }
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Psychic",
+ },
+
+ // Tuthur
+ symphonieduzero: {
+ accuracy: 100,
+ basePower: 80,
+ category: "Special",
+ shortDesc: "Deals an additional 12.5% HP at end of turn.",
+ desc: "If this move deals damage, at the end of the turn, the target will take an additional 12.5% of its maximum HP in non-attack damage if it is still on the field.",
+ name: "Symphonie du Ze\u0301ro",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Alluring Voice', target);
+ },
+ volatileStatus: 'symphonieduzero',
+ condition: {
+ noCopy: true,
+ onStart(pokemon) {
+ this.add('-start', pokemon, 'Symphonie du Ze\u0301ro');
+ },
+ onResidualOrder: 13,
+ onResidual(pokemon) {
+ this.damage(pokemon.baseMaxhp / 8);
+ },
+ onEnd(pokemon) {
+ this.add('-end', pokemon, 'Symphonie du Ze\u0301ro');
+ },
+ },
+ secondary: null,
+ target: "normal",
+ type: "Fairy",
+ },
+
+ // Two of Roses
+ dillydally: {
+ accuracy: 90,
+ basePower: 40,
+ category: "Physical",
+ shortDesc: "2 hits, +1 random stat/hit. Type=User 2nd type.",
+ desc: "This move hits 2 times. For each successful hit, the user boosts a random stat, except Accuracy and Evasion, by 1 stage. The typing of this move is equal to the user's secondary type; it will instead use the user's primary type if the user lacks a secondary type.",
+ name: "Dilly Dally",
+ pp: 20,
+ priority: 0,
+ multihit: 2,
+ flags: {protect: 1, contact: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Volt Tackle', source);
+ this.add('-anim', source, 'Extreme Speed', target);
+ },
+ onModifyType(move, pokemon) {
+ let type = pokemon.getTypes()[pokemon.getTypes().length - 1];
+ if (type === "Bird" || type === undefined) type = "???";
+ if (type === "Stellar") type = pokemon.getTypes()[pokemon.getTypes(false, true).length - 1];
+ move.type = type;
+ },
+ secondary: {
+ chance: 100,
+ onHit(target, source, move) {
+ const stats: BoostID[] = [];
+ const boost: SparseBoostsTable = {};
+ let statPlus: BoostID;
+ for (statPlus in source.boosts) {
+ if (statPlus === 'accuracy' || statPlus === 'evasion') continue;
+ if (source.boosts[statPlus] < 6) {
+ stats.push(statPlus);
+ }
+ }
+ const randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined;
+ if (randomStat) boost[randomStat] = 1;
+ this.boost(boost, source, source);
+ },
+ },
+ target: "normal",
+ type: "???",
+ },
+
+
+ // UT
+ myboys: {
+ accuracy: 100,
+ basePower: 60,
+ category: "Physical",
+ shortDesc: "Uses two status moves, then switches out.",
+ desc: "The user uses two, at random, of: Feather Dance, Growl, Rain Dance, Sunny Day, Tailwind and Taunt. After these moves execute, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members out.",
+ name: "My Boys",
+ pp: 20,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ const varMoves = ['Feather Dance', 'Growl', 'Rain Dance', 'Sunny Day', 'Tailwind', 'Taunt', 'Will-O-Wisp'];
+ const move1 = this.sample(varMoves);
+ const move2 = this.sample(varMoves.filter(i => i !== move1));
+ this.add('-message', `Fletchling used ${move1}!`);
+ this.actions.useMove(move1, source);
+ this.add('-message', `Taillow used ${move2}!`);
+ this.actions.useMove(move2, source);
+ this.add('-message', `Talonflame attacked!`);
+ this.add('-anim', source, 'U-Turn', target);
+ },
+ selfSwitch: true,
+ secondary: null,
+ target: "normal",
+ type: "Flying",
+ },
+
+ // Valerian
+ firststrike: {
+ accuracy: 100,
+ basePower: 25,
+ category: "Physical",
+ name: "First Strike",
+ shortDesc: "Turn 1 only. Atk: +1 NVE, +2 NE, +3 SE.",
+ desc: "Boosts the user's Attack by 1 stage if the attack is not very effective, 2 stages if the attack is neutral, and 3 stages if the attack is super effective. Fails unless it is the user's first turn on the field.",
+ pp: 15,
+ priority: 3,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, "Fake Out", target);
+ },
+ onTry(source) {
+ if (source.activeMoveActions > 1) {
+ this.hint("First Strike only works on your first turn out.");
+ return false;
+ }
+ },
+ onAfterMoveSecondarySelf(pokemon, target, move) {
+ let boost = 2;
+ const typeMod = target.getMoveHitData(move).typeMod;
+ if (typeMod > 0) {
+ boost = 3;
+ } else if (typeMod < 0) {
+ boost = 1;
+ }
+ this.boost({atk: boost}, pokemon, pokemon, move);
+ },
+ secondary: null,
+ target: "normal",
+ type: "Steel",
+ },
+
+ // Venous
+ yourcripplinginterest: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Your Crippling Interest",
+ shortDesc: "Tox; clears terrain and hazards on both sides.",
+ desc: "The target becomes badly poisoned, and all entry hazards and terrain effects are removed from both sides of the field. If the target already has a non-volatile status condition, the removal effect can still occur.",
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, "Esper Wing", target);
+ this.add('-anim', source, "Defog", source);
+ },
+ onHit(target, source, move) {
+ let success = false;
+ if (!target.volatiles['substitute'] || move.infiltrates) success = !!target.trySetStatus('tox', source);
+ const removeTarget = [
+ 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
+ ];
+ const removeAll = [
+ 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
+ ];
+ for (const targetCondition of removeTarget) {
+ if (target.side.removeSideCondition(targetCondition)) {
+ if (!removeAll.includes(targetCondition)) continue;
+ this.add('-sideend', target.side, this.dex.conditions.get(targetCondition).name, '[from] move: Your Crippling Interest', '[of] ' + source);
+ success = true;
+ }
+ }
+ for (const sideCondition of removeAll) {
+ if (source.side.removeSideCondition(sideCondition)) {
+ this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Your Crippling Interest', '[of] ' + source);
+ success = true;
+ }
+ }
+ this.field.clearTerrain();
+ return success;
+ },
+ ignoreAbility: true,
+ secondary: null,
+ target: "normal",
+ type: "Flying",
+ },
+
+ // Violet
+ buildingcharacter: {
+ accuracy: 100,
+ basePower: 50,
+ basePowerCallback(pokemon, target, move) {
+ if (target?.terastallized) {
+ this.debug('BP doubled from tera');
+ return move.basePower * 2;
+ }
+ return move.basePower;
+ },
+ category: "Physical",
+ shortDesc: "Vs Tera'd target: 0 prio, 2x BP, removes Tera.",
+ desc: "Usually moves first. If the target has Terastallized, this move becomes +0 priority and does double damage. If this move is successful against a Terastallized target, the target's Terastallization effect is permanently removed.",
+ name: "building character",
+ gen: 9,
+ pp: 10,
+ priority: 1,
+ onModifyPriority(priority, pokemon, target, move) {
+ if (target?.terastallized) return 0;
+ },
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ if (target?.terastallized) this.add('-anim', source, "Block", target);
+ this.add('-anim', source, "Wicked Blow", target);
+ },
+ onHit(pokemon, source) {
+ if (pokemon?.terastallized) {
+ this.add(`c:|${getName((source.illusion || source).name)}|lol never do that ever again thanks`);
+ this.add('custom', '-endterastallize', pokemon);
+ delete pokemon.terastallized;
+ const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) +
+ (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : '');
+ this.add('detailschange', pokemon, details);
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Grass",
+ },
+
+ // Vistar
+ virtualavatar: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Changes to Idol forme and sets a substitute.",
+ desc: "If the user is a Zeraora, the user's ability changes to Virtual Idol and its full moveset becomes Overdrive, Sparkling Aria, Torch Song, and Teeter Dance, replacing every currently present move. The user takes 1/4 of its maximum HP, rounded down, and puts it into a substitute to take its place in battle.",
+ name: "Virtual Avatar",
+ pp: 10,
+ priority: 0,
+ flags: {sound: 1, failcopycat: 1},
+ secondary: null,
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onTry(source) {
+ if (source.species.name === 'Zeraora') {
+ return;
+ }
+ this.hint("Only Zeraora can use this move.");
+ this.attrLastMove('[still]');
+ this.add('-fail', source, 'move: Virtual Avatar');
+ return null;
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Morning Sun', source);
+ this.add('-anim', source, 'Seed Flare', target);
+ },
+ onHit(target, source) {
+ changeSet(this, target, ssbSets['Vistar-Idol'], true);
+ this.add(`c:|${getName((source.illusion || source).name)}|Finally, I'm making my debut`);
+ if (source.volatiles['substitute']) return;
+ if (source.hp <= source.maxhp / 4 || source.maxhp === 1) { // Shedinja clause
+ this.add('-fail', source, 'move: Substitute', '[weak]');
+ } else {
+ source.addVolatile('substitute');
+ this.directDamage(source.maxhp / 4);
+ }
+ },
+ target: "self",
+ type: "Normal",
+ },
+
+ // vmnunes
+ gracideasblessing: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Uses Wish, switches out. Recipient gets Aqua Ring.",
+ desc: "Sets a Wish on the user's side, healing the active Pokemon for 50% of the user's maximum HP at the end of the next turn. If this move is successful, the user switches out even if it is trapped and is replaced immediately by a selected party member, which will gain the Aqua Ring effect. The user does not switch out if there are no unfainted party members.",
+ name: "Gracidea's Blessing",
+ pp: 10,
+ priority: 0,
+ flags: {},
+ secondary: null,
+ selfSwitch: true,
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Morning Sun', source);
+ this.add('-anim', source, 'Seed Flare', target);
+ },
+ slotCondition: 'gracideasblessing',
+ condition: {
+ duration: 2,
+ onStart(pokemon, source) {
+ this.effectState.hp = source.maxhp / 2;
+ },
+ onSwap(target) {
+ if (!target.fainted) target.addVolatile('aquaring', target);
+ },
+ onResidualOrder: 4,
+ onEnd(target) {
+ if (target && !target.fainted) {
+ this.heal(this.effectState.hp, target, target);
+ }
+ },
+ },
+ target: "self",
+ type: "Grass",
+ },
+
+ // WarriorGallade
+ fruitfullongbow: {
+ accuracy: 90,
+ basePower: 160,
+ category: "Special",
+ shortDesc: "Hit off higher atk, eats berry, Dragon/Fly eff.",
+ desc: "Uses the user's higher attack stat in damage calculation. Does not need to charge in sun. If this move is successful and the user is holding a berry, the user consumed its held berry and restored 25% of the its maximum HP. This move combines Dragon in its type effectiveness.",
+ name: "Fruitful Longbow",
+ gen: 9,
+ pp: 15,
+ priority: 0,
+ flags: {charge: 1, protect: 1, mirror: 1, slicing: 1, wind: 1},
+ critRatio: 2,
+ onEffectiveness(typeMod, target, type, move) {
+ return typeMod + this.dex.getEffectiveness('Dragon', type);
+ },
+ onModifyMove(move, pokemon, target) {
+ if (pokemon.getStat('atk') > pokemon.getStat('spa')) {
+ move.overrideOffensiveStat = 'atk';
+ }
+ },
+ onTryMove(attacker, defender, move) {
+ if (attacker.removeVolatile(move.id)) {
+ this.attrLastMove('[still]');
+ this.add('-anim', attacker, 'Signal Beam', defender);
+ this.add('-anim', attacker, 'Twister', defender);
+ this.add('-anim', attacker, 'Psycho Cut', defender);
+ return;
+ }
+ this.add('-anim', attacker, 'Tailwind', attacker);
+ this.add('-message', `${attacker.name} whipped up an intense whirlwind and began to glow a vivine green!`);
+ if (attacker.getItem().isBerry) {
+ attacker.eatItem(true);
+ this.heal(attacker.maxhp / 4, attacker);
+ }
+ if (['sunnyday', 'desolateland'].includes(attacker.effectiveWeather())) {
+ this.attrLastMove('[still]');
+ this.add('-anim', attacker, 'Signal Beam', defender);
+ this.add('-anim', attacker, 'Twister', defender);
+ this.add('-anim', attacker, 'Psycho Cut', defender);
+ return;
+ }
+ if (!this.runEvent('ChargeMove', attacker, defender, move)) {
+ return;
+ }
+ attacker.addVolatile('twoturnmove', defender);
+ return null;
+ },
+ secondary: null,
+ target: "normal",
+ type: "Flying",
+ },
+
+ // Waves
+ torrentialdrain: {
+ accuracy: 100,
+ basePower: 60,
+ category: "Special",
+ shortDesc: "Recovers 50% of damage dealt.",
+ desc: "The user recovers 1/2 the HP lost by the target, rounded half up.",
+ name: "Torrential Drain",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, heal: 1, metronome: 1},
+ drain: [1, 2],
+ secondary: null,
+ target: "allAdjacent",
+ type: "Water",
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Aqua Ring', source);
+ this.add('-anim', source, 'Origin Pulse', target);
+ this.add('-anim', source, 'Parabolic Charge', target);
+ },
+ },
+
+ // WigglyTree
+ perfectmimic: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Endure + Me First. Copied move hits off Atk.",
+ desc: "Nearly always moves first. The user uses the move the target chose for use this turn against it, if possible, with its power multiplied by 1.5. The move must be a damaging move usable by Me First. The user also activates the Endure effect on itself, preventing it from falling below 1 HP through direct attacks this turn. Ignores the target's substitute for the purpose of copying the move. The move will fail entirely if the user did not move first this turn, or if the target switched out. If the target would use a move not usable by Me First, the Endure effect still occurs. This move has an increasing chance of failing when used in succession.",
+ name: "Perfect Mimic",
+ gen: 9,
+ pp: 10,
+ priority: 4,
+ flags: {},
+ volatileStatus: 'perfectmimic',
+ onTryMove() {
+ this.attrLastMove('[anim] Endure');
+ },
+ onDisableMove(pokemon) {
+ if (pokemon.lastMove?.id === 'perfectmimic') pokemon.disableMove('perfectmimic');
+ },
+ condition: {
+ duration: 1,
+ onStart(target) {
+ this.add('-singleturn', target, 'move: Endure');
+ },
+ onDamagePriority: -10,
+ onDamage(damage, target, source, effect) {
+ if (effect?.effectType === 'Move') {
+ this.effectState.move = effect.id;
+ if (damage >= target.hp) {
+ this.add('-activate', target, 'move: Endure');
+ return target.hp - 1;
+ }
+ }
+ },
+ onSourceAfterMove(target, source) {
+ if (target === this.effectState.target || source !== this.effectState.target) return;
+ if (!target.hp || !this.effectState.move) return;
+ const move = this.dex.getActiveMove(this.effectState.move);
+ if (move.isZ || move.isMax || move.category === 'Status') return;
+ this.add('-message', source.name + ' tried to copy the move!');
+ this.add('-anim', source, "Me First", target);
+ move.overrideOffensiveStat = 'atk';
+ this.actions.useMove(move, source, {target});
+ delete this.effectState.move;
+ },
+ onBasePowerPriority: 12,
+ onBasePower() {
+ return this.chainModify(1.5);
+ },
+ },
+ secondary: null,
+ target: "self",
+ type: "Normal",
+ },
+
+ // XpRienzo
+ scorchingtruth: {
+ accuracy: 100,
+ basePower: 80,
+ category: "Special",
+ desc: "Damage is doubled if this move is not very effective against the target.",
+ shortDesc: "Deals 2x damage with resisted hits.",
+ name: "Scorching Truth",
+ gen: 9,
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, 'Focus Energy', source);
+ this.add('-anim', source, 'Fusion Flare', target);
+ },
+ onBasePower(basePower, source, target, move) {
+ if (target.runEffectiveness(move) < 0) {
+ this.debug(`Scorching truth resisted buff`);
+ return this.chainModify(2);
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Fire",
+ },
+
+ // xy01
+ poisonouswind: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Poisonous Wind",
+ shortDesc: "Badly poisons the foe and forces them out.",
+ desc: "Badly poisons the target. If the infliction of status is successful, the target is forced to switch out and be replaced with a random unfainted ally. Fails if the target is the last unfainted Pokemon in its party, or if the target used Ingrain previously or has the Suction Cups Ability. This move will fail entirely if the target has a non-volatile status condition.",
+ pp: 10,
+ priority: -6,
+ flags: {reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1, noassist: 1, failcopycat: 1, wind: 1},
+ forceSwitch: true,
+ status: 'tox',
+ secondary: null,
+ target: "normal",
+ type: "Poison",
+ },
+
+ // yeet dab xd
+ topkek: {
+ accuracy: 100,
+ basePower: 70,
+ category: "Physical",
+ shortDesc: "Gives foe Miracle Seed. Cycles Treasure Bag.",
+ desc: "If the target is holding an item that can be removed from it, it is replaced with a Mircle Seed. Cycles Treasure Bag.",
+ name: "top kek",
+ pp: 15,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, "Thief", target);
+ this.add('-anim', source, "Trick", target);
+ this.add('-anim', source, "Nasty Plot", source);
+ },
+ onAfterHit(target, source, move) {
+ if (source.hp) {
+ if (!target.hasItem('Miracle Seed')) {
+ const item = target.takeItem();
+ if (item) {
+ this.add('-enditem', target, item.name, '[from] move: top kek', '[of] ' + source);
+ target.setItem('Miracle Seed', source, move);
+ }
+ }
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Dark",
+ },
+
+ // Yellow Paint
+ whiteout: {
+ accuracy: 85,
+ basePower: 70,
+ category: "Special",
+ shortDesc: "Sets up Snow. Target's ability becomes Normalize.",
+ desc: "If this move is successful, the current weather becomes snow, boosting the Defense of Ice-types by 1.5x for 5 turns, and the target's ability is replaced with Normalize.",
+ name: "Whiteout",
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, bullet: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, "Weather Ball", target);
+ this.add('-anim', source, "Snowscape", source);
+ },
+ onHit(target, source) {
+ this.field.setWeather('snow');
+ if (target.setAbility('normalize')) {
+ this.add('-ability', target, 'Normalize', '[from] move: Whiteout');
+ }
+ this.add(`c:|${getName((source.illusion || source).name)}|A blank canvas.`);
+ },
+ secondary: null,
+ target: "normal",
+ type: "Ice",
+ },
+
+ // yuki
+ tagyoureit: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Switch out; replacement: Focus Energy, +1 Spe.",
+ desc: "The user switches out even if it is trapped and is replaced immediately by a selected party member. The replacement's Speed is boosted by 1 stage, and its critical hit rate is boosted by 2 stages. The user does not switch out if there are no unfainted party members.",
+ name: "Tag, You're It!",
+ pp: 5,
+ priority: 0,
+ flags: {},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, "Baton Pass", target);
+ },
+ slotCondition: 'tagyoureit',
+ condition: {
+ onSwap(target) {
+ if (target && !target.fainted) {
+ this.add('-anim', target, "Baton Pass", target);
+ target.addVolatile('focusenergy');
+ this.boost({spe: 1}, target, this.effectState.source, this.dex.getActiveMove('tagyoureit'));
+ target.side.removeSlotCondition(target, 'tagyoureit');
+ }
+ },
+ },
+ selfSwitch: true,
+ secondary: null,
+ target: "self",
+ type: "Dark",
+ },
+
+ // YveltalNL
+ highground: {
+ accuracy: 100,
+ basePower: 90,
+ category: "Special",
+ shortDesc: "If the user is taller than the target, +1 SpA.",
+ desc: "If the user's height as listed on its Pokedex data is greater than the target's height, the user's Special Attack is boosted by 1 stage.",
+ name: "High Ground",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ secondary: {
+ chance: 100,
+ onHit(target, source, move) {
+ if (this.dex.species.get(source.species).heightm > this.dex.species.get(target.species).heightm) {
+ this.boost({spa: 1}, source);
+ }
+ },
+ },
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, "Dragon Ascent", target);
+ this.add('-anim', source, "Scorching Sands", target);
+ },
+ target: "normal",
+ type: "Ground",
+ },
+
+ // Zalm
+ dudurafish: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Heals 25% HP and sets Aqua Ring.",
+ desc: "The user recovers 1/4 of its maximum HP and gains the Aqua Ring effect, healing it for 1/16th of its maximum HP at the end of each turn. The healing effect will still occur if the user already has Aqua Ring active.",
+ name: "Dud ur a fish",
+ pp: 5,
+ priority: 0,
+ flags: {heal: 1, snatch: 1},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', target, "Recover", source);
+ this.add('-anim', target, "Aqua Ring", source);
+ },
+ onHit(pokemon) {
+ let didSomething: boolean;
+ if (pokemon.hasType("Water")) {
+ didSomething = !!this.heal(this.modify(pokemon.baseMaxhp, 1, 2));
+ didSomething = pokemon.cureStatus() || didSomething;
+ } else {
+ didSomething = !!this.heal(this.modify(pokemon.baseMaxhp, 1, 4));
+ }
+ didSomething = pokemon.addVolatile('aquaring') || didSomething;
+ return didSomething;
+ },
+ secondary: null,
+ target: "self",
+ type: "Water",
+ },
+
+ // za
+ shitpost: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ name: "Shitpost",
+ shortDesc: "Confuses and paralyzes the target.",
+ pp: 20,
+ priority: 0,
+ flags: {protect: 1, reflectable: 1},
+ onTryMove(pokemon, target, move) {
+ this.attrLastMove('[still]');
+ if (this.randomChance(1, 256)) {
+ this.add('-fail', pokemon);
+ this.add('-message', '(In Gen 1, moves with 100% accuracy have a 1/256 chance to miss.)');
+ return false;
+ }
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, "Hex", target);
+ },
+ onHit(target, source, move) {
+ if (!target.volatiles['confusion']) {
+ target.addVolatile('confusion', source, move);
+ }
+ target.trySetStatus('par', source, move);
+ },
+ secondary: null,
+ target: "normal",
+ type: "Normal",
+ },
+
+ // Zarel
+ tsignore: {
+ accuracy: 100,
+ basePower: 100,
+ category: "Special",
+ shortDesc: "Bypasses everything. Uses Higher Atk.",
+ desc: "This move will bypass any negative effect on the field or the target that would impede its ability to deal damage, including type-based immunities. This move is physical if the user's Attack is higher than its Special Attack.",
+ name: "@ts-ignore",
+ gen: 9,
+ pp: 5,
+ priority: 0,
+ flags: {},
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, "Conversion", source);
+ this.add('-anim', source, "Techno Blast", target);
+ },
+ onModifyMove(move, pokemon, target) {
+ if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) {
+ move.category = 'Physical';
+ }
+ },
+ onModifyType(move, pokemon) {
+ if (pokemon.species.baseSpecies === 'Meloetta' && pokemon.terastallized) {
+ move.type = 'Stellar';
+ }
+ },
+ ignoreAbility: true,
+ ignoreImmunity: true,
+ ignoreDefensive: true,
+ ignoreNegativeOffensive: true,
+ breaksProtect: true,
+ ignoreAccuracy: true,
+ secondary: null,
+ target: "normal",
+ type: "Normal",
+ },
+
+ // zee
+ solarsummon: {
+ accuracy: 100,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Sets up Sunny Day and creates a Substitute.",
+ desc: "Sets sun, powering up Fire-type moves and weakening Water-type moves for 5 turns. The user takes 1/4 of its maximum HP, rounded down, and puts it into a substitute to take its place in battle. If one part of this move is already in effect, the other part will still be attempted.",
+ name: "Solar Summon",
+ gen: 9,
+ pp: 5,
+ priority: 0,
+ flags: {},
+ onPrepareHit() {
+ this.attrLastMove('[anim] Sunny Day');
+ },
+ onHit(pokemon) {
+ let success = false;
+ if (this.field.setWeather('sunnyday')) success = true;
+ if (!pokemon.volatiles['substitute']) {
+ if (pokemon.hp <= pokemon.maxhp / 4 || pokemon.maxhp === 1) { // Shedinja clause
+ this.add('-fail', pokemon, 'move: Substitute', '[weak]');
+ } else {
+ pokemon.addVolatile('substitute');
+ this.directDamage(pokemon.maxhp / 4);
+ success = true;
+ }
+ }
+ return success;
+ },
+ secondary: null,
+ target: "self",
+ type: "Fire",
+ },
+
+ // zoro
+ darkestnight: {
+ accuracy: 100,
+ basePower: 95,
+ category: "Physical",
+ shortDesc: "Literally just Foul Play.",
+ desc: "Damage is calculated using the target's Attack stat, including stat stage changes. The user's Ability, item, and burn are used as normal.",
+ name: "Darkest Night",
+ pp: 15,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
+ overrideOffensivePokemon: 'target',
+ secondary: null,
+ target: "normal",
+ type: "Dark",
+ onTryMove() {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, "Foul Play", target);
+ },
+ },
+
+ // Modified moves
+ bleakwindstorm: {
+ inherit: true,
+ onModifyMove(move, pokemon, target) {
+ if (target && ['raindance', 'primordialsea', 'stormsurge'].includes(target.effectiveWeather())) {
+ move.accuracy = true;
+ }
+ },
+ },
+ dig: {
+ inherit: true,
+ condition: {
+ duration: 2,
+ onImmunity(type, pokemon) {
+ if (type === 'sandstorm' || type === 'deserteddunes' || type === 'hail') return false;
+ },
+ onInvulnerability(target, source, move) {
+ if (['earthquake', 'magnitude'].includes(move.id)) {
+ return;
+ }
+ return false;
+ },
+ onSourceModifyDamage(damage, source, target, move) {
+ if (move.id === 'earthquake' || move.id === 'magnitude') {
+ return this.chainModify(2);
+ }
+ },
+ },
+ },
+ dive: {
+ inherit: true,
+ condition: {
+ duration: 2,
+ onImmunity(type, pokemon) {
+ if (type === 'sandstorm' || type === 'deserteddunes' || type === 'hail') return false;
+ },
+ onInvulnerability(target, source, move) {
+ if (['surf', 'whirlpool'].includes(move.id)) {
+ return;
+ }
+ return false;
+ },
+ onSourceModifyDamage(damage, source, target, move) {
+ if (move.id === 'surf' || move.id === 'whirlpool') {
+ return this.chainModify(2);
+ }
+ },
+ },
+ },
+ dreameater: {
+ inherit: true,
+ onTryImmunity(target) {
+ return target.status === 'slp' || target.hasAbility(['comatose', 'mensiscage']);
+ },
+ },
+ electroshot: {
+ inherit: true,
+ onTryMove(attacker, defender, move) {
+ if (attacker.removeVolatile(move.id)) {
+ return;
+ }
+ this.add('-prepare', attacker, move.name);
+ this.boost({spa: 1}, attacker, attacker, move);
+ if (['raindance', 'primordialsea', 'stormsurge'].includes(attacker.effectiveWeather())) {
+ this.attrLastMove('[still]');
+ this.addMove('-anim', attacker, move.name, defender);
+ return;
+ }
+ if (!this.runEvent('ChargeMove', attacker, defender, move)) {
+ return;
+ }
+ attacker.addVolatile('twoturnmove', defender);
+ return null;
+ },
+ },
+ hex: {
+ inherit: true,
+ basePowerCallback(pokemon, target, move) {
+ if (target.status || target.hasAbility(['comatose', 'mensiscage'])) {
+ this.debug('BP doubled from status condition');
+ return move.basePower * 2;
+ }
+ return move.basePower;
+ },
+ },
+ hurricane: {
+ inherit: true,
+ onModifyMove(move, pokemon, target) {
+ switch (target?.effectiveWeather()) {
+ case 'raindance':
+ case 'primordialsea':
+ case 'stormsurge':
+ move.accuracy = true;
+ break;
+ case 'sunnyday':
+ case 'desolateland':
+ move.accuracy = 50;
+ break;
+ }
+ },
+ },
+ infernalparade: {
+ inherit: true,
+ basePowerCallback(pokemon, target, move) {
+ if (target.status || target.hasAbility(['comatose', 'mensiscage'])) return move.basePower * 2;
+ return move.basePower;
+ },
+ },
+ ingrain: {
+ inherit: true,
+ condition: {
+ onStart(pokemon) {
+ this.add('-start', pokemon, 'move: Ingrain');
+ },
+ onResidualOrder: 7,
+ onResidual(pokemon) {
+ this.heal(pokemon.baseMaxhp / 16);
+ },
+ onTrapPokemon(pokemon) {
+ pokemon.tryTrap();
+ },
+ // groundedness implemented in battle.engine.js:BattlePokemon#isGrounded
+ onDragOut(pokemon, source, move) {
+ if (source && this.queue.willMove(source)?.moveid === 'protectoroftheskies') return;
+ this.add('-activate', pokemon, 'move: Ingrain');
+ return null;
+ },
+ },
+ },
+ mistyterrain: {
+ inherit: true,
+ condition: {
+ duration: 5,
+ durationCallback(source, effect) {
+ if (source?.hasItem('terrainextender')) {
+ return 8;
+ }
+ return 5;
+ },
+ onSetStatus(status, target, source, effect) {
+ if (!target.isGrounded() || target.isSemiInvulnerable()) return;
+ if (effect && ((effect as Move).status || effect.id === 'yawn')) {
+ this.add('-activate', target, 'move: Misty Terrain');
+ }
+ return false;
+ },
+ onTryHitPriority: 4,
+ onTryHit(target, source, effect) {
+ if (effect && effect.name === "Puffy Spiky Destruction") {
+ this.add('-activate', target, 'move: Misty Terrain');
+ return null;
+ }
+ },
+ onTryAddVolatile(status, target, source, effect) {
+ if (!target.isGrounded() || target.isSemiInvulnerable()) return;
+ if (status.id === 'confusion') {
+ if (effect.effectType === 'Move' && !effect.secondaries) this.add('-activate', target, 'move: Misty Terrain');
+ return null;
+ }
+ },
+ onBasePowerPriority: 6,
+ onBasePower(basePower, attacker, defender, move) {
+ if (move.type === 'Dragon' && defender.isGrounded() && !defender.isSemiInvulnerable()) {
+ this.debug('misty terrain weaken');
+ return this.chainModify(0.5);
+ }
+ },
+ onFieldStart(field, source, effect) {
+ if (effect?.effectType === 'Ability') {
+ this.add('-fieldstart', 'move: Misty Terrain', '[from] ability: ' + effect.name, '[of] ' + source);
+ } else {
+ this.add('-fieldstart', 'move: Misty Terrain');
+ }
+ },
+ onFieldResidualOrder: 27,
+ onFieldResidualSubOrder: 7,
+ onFieldEnd() {
+ this.add('-fieldend', 'Misty Terrain');
+ },
+ },
+ },
+ moonlight: {
+ inherit: true,
+ onHit(pokemon) {
+ let factor = 0.5;
+ switch (pokemon.effectiveWeather()) {
+ case 'sunnyday':
+ case 'desolateland':
+ factor = 0.667;
+ break;
+ case 'raindance':
+ case 'primordialsea':
+ case 'stormsurge':
+ case 'sandstorm':
+ case 'deserteddunes':
+ case 'hail':
+ case 'snow':
+ factor = 0.25;
+ break;
+ }
+ const success = !!this.heal(this.modify(pokemon.maxhp, factor));
+ if (!success) {
+ this.add('-fail', pokemon, 'heal');
+ return this.NOT_FAIL;
+ }
+ return success;
+ },
+ },
+ morningsun: {
+ inherit: true,
+ onHit(pokemon) {
+ let factor = 0.5;
+ switch (pokemon.effectiveWeather()) {
+ case 'sunnyday':
+ case 'desolateland':
+ factor = 0.667;
+ break;
+ case 'raindance':
+ case 'primordialsea':
+ case 'stormsurge':
+ case 'sandstorm':
+ case 'deserteddunes':
+ case 'hail':
+ case 'snow':
+ factor = 0.25;
+ break;
+ }
+ const success = !!this.heal(this.modify(pokemon.maxhp, factor));
+ if (!success) {
+ this.add('-fail', pokemon, 'heal');
+ return this.NOT_FAIL;
+ }
+ return success;
+ },
+ },
+ nightmare: {
+ inherit: true,
+ condition: {
+ noCopy: true,
+ onStart(pokemon) {
+ if (pokemon.status !== 'slp' && !pokemon.hasAbility(['comatose', 'mensiscage'])) {
+ return false;
+ }
+ this.add('-start', pokemon, 'Nightmare');
+ },
+ onResidualOrder: 11,
+ onResidual(pokemon) {
+ this.damage(pokemon.baseMaxhp / 4);
+ },
+ },
+ },
+ psychicterrain: {
+ inherit: true,
+ condition: {
+ duration: 5,
+ durationCallback(source, effect) {
+ if (source?.hasItem('terrainextender')) {
+ return 8;
+ }
+ return 5;
+ },
+ onTryHitPriority: 4,
+ onTryHit(target, source, effect) {
+ if (effect && (effect.priority <= 0.1 || effect.target === 'self') && effect.name !== "Puffy Spiky Destruction") {
+ return;
+ }
+ if (target.isSemiInvulnerable() || target.isAlly(source)) return;
+ if (!target.isGrounded()) {
+ const baseMove = this.dex.moves.get(effect.id);
+ if (baseMove.priority > 0) {
+ this.hint("Psychic Terrain doesn't affect Pokémon immune to Ground.");
+ }
+ return;
+ }
+ this.add('-activate', target, 'move: Psychic Terrain');
+ return null;
+ },
+ onBasePowerPriority: 6,
+ onBasePower(basePower, attacker, defender, move) {
+ if (move.type === 'Psychic' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) {
+ this.debug('psychic terrain boost');
+ return this.chainModify([5325, 4096]);
+ }
+ },
+ onFieldStart(field, source, effect) {
+ if (effect?.effectType === 'Ability') {
+ this.add('-fieldstart', 'move: Psychic Terrain', '[from] ability: ' + effect.name, '[of] ' + source);
+ } else {
+ this.add('-fieldstart', 'move: Psychic Terrain');
+ }
+ },
+ onFieldResidualOrder: 27,
+ onFieldResidualSubOrder: 7,
+ onFieldEnd() {
+ this.add('-fieldend', 'move: Psychic Terrain');
+ },
+ },
+ },
+ rest: {
+ inherit: true,
+ onTry(source) {
+ if (source.status === 'slp' || source.hasAbility(['comatose', 'mensiscage'])) return false;
+
+ if (source.hp === source.maxhp) {
+ this.add('-fail', source, 'heal');
+ return null;
+ }
+ if (source.hasAbility(['insomnia', 'vitalspirit'])) {
+ this.add('-fail', source, '[from] ability: ' + source.getAbility().name, '[of] ' + source);
+ return null;
+ }
+ },
+ },
+ sandsearstorm: {
+ inherit: true,
+ onModifyMove(move, pokemon, target) {
+ if (target && ['raindance', 'primordialsea', 'stormsurge'].includes(target.effectiveWeather())) {
+ move.accuracy = true;
+ }
+ },
+ },
+ shoreup: {
+ inherit: true,
+ onHit(pokemon) {
+ let factor = 0.5;
+ if (this.field.isWeather(['sandstorm', 'deserteddunes'])) {
+ factor = 0.667;
+ }
+ const success = !!this.heal(this.modify(pokemon.maxhp, factor));
+ if (!success) {
+ this.add('-fail', pokemon, 'heal');
+ return this.NOT_FAIL;
+ }
+ return success;
+ },
+ },
+ sleeptalk: {
+ inherit: true,
+ onTry(source) {
+ return source.status === 'slp' || source.hasAbility(['comatose', 'mensiscage']);
+ },
+ },
+ snore: {
+ inherit: true,
+ onTry(source) {
+ return source.status === 'slp' || source.hasAbility(['comatose', 'mensiscage']);
+ },
+ },
+ solarbeam: {
+ inherit: true,
+ onBasePower(basePower, pokemon, target) {
+ const weakWeathers = ['raindance', 'primordialsea', 'stormsurge', 'sandstorm', 'deserteddunes', 'hail', 'snow'];
+ if (weakWeathers.includes(pokemon.effectiveWeather())) {
+ this.debug('weakened by weather');
+ return this.chainModify(0.5);
+ }
+ },
+ },
+ solarblade: {
+ inherit: true,
+ onBasePower(basePower, pokemon, target) {
+ const weakWeathers = ['raindance', 'primordialsea', 'stormsurge', 'sandstorm', 'deserteddunes', 'hail', 'snow'];
+ if (weakWeathers.includes(pokemon.effectiveWeather())) {
+ this.debug('weakened by weather');
+ return this.chainModify(0.5);
+ }
+ },
+ },
+ stickyweb: {
+ inherit: true,
+ condition: {
+ onSideStart(side) {
+ this.add('-sidestart', side, 'move: Sticky Web');
+ },
+ onEntryHazard(pokemon) {
+ if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('eternalgenerator')) return;
+ this.add('-activate', pokemon, 'move: Sticky Web');
+ this.boost({spe: -1}, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb'));
+ },
+ },
+ },
+ synthesis: {
+ inherit: true,
+ onHit(pokemon) {
+ let factor = 0.5;
+ switch (pokemon.effectiveWeather()) {
+ case 'sunnyday':
+ case 'desolateland':
+ factor = 0.667;
+ break;
+ case 'raindance':
+ case 'primordialsea':
+ case 'stormsurge':
+ case 'sandstorm':
+ case 'deserteddunes':
+ case 'hail':
+ case 'snow':
+ factor = 0.25;
+ break;
+ }
+ const success = !!this.heal(this.modify(pokemon.maxhp, factor));
+ if (!success) {
+ this.add('-fail', pokemon, 'heal');
+ return this.NOT_FAIL;
+ }
+ return success;
+ },
+ },
+ thunder: {
+ inherit: true,
+ onModifyMove(move, pokemon, target) {
+ switch (target?.effectiveWeather()) {
+ case 'raindance':
+ case 'primordialsea':
+ case 'stormsurge':
+ move.accuracy = true;
+ break;
+ case 'sunnyday':
+ case 'desolateland':
+ move.accuracy = 50;
+ break;
+ }
+ },
+ },
+ wakeupslap: {
+ inherit: true,
+ basePowerCallback(pokemon, target, move) {
+ if (target.status === 'slp' || target.hasAbility(['comatose', 'mensiscage'])) {
+ this.debug('BP doubled on sleeping target');
+ return move.basePower * 2;
+ }
+ return move.basePower;
+ },
+ },
+ weatherball: {
+ inherit: true,
+ onModifyType(move, pokemon) {
+ switch (pokemon.effectiveWeather()) {
+ case 'sunnyday':
+ case 'desolateland':
+ move.type = 'Fire';
+ break;
+ case 'raindance':
+ case 'primordialsea':
+ case 'stormsurge':
+ move.type = 'Water';
+ break;
+ case 'sandstorm':
+ case 'deserteddunes':
+ move.type = 'Rock';
+ break;
+ case 'hail':
+ case 'snow':
+ move.type = 'Ice';
+ break;
+ }
+ },
+ onModifyMove(move, pokemon) {
+ switch (pokemon.effectiveWeather()) {
+ case 'sunnyday':
+ case 'desolateland':
+ case 'raindance':
+ case 'primordialsea':
+ case 'stormsurge':
+ case 'sandstorm':
+ case 'deserteddunes':
+ case 'hail':
+ case 'snow':
+ move.basePower *= 2;
+ break;
+ }
+ this.debug('BP: ' + move.basePower);
+ },
+ },
+ wildboltstorm: {
+ inherit: true,
+ onModifyMove(move, pokemon, target) {
+ if (target && ['raindance', 'primordialsea', 'stormsurge'].includes(target.effectiveWeather())) {
+ move.accuracy = true;
+ }
+ },
+ },
+ gravity: {
+ inherit: true,
+ condition: {
+ duration: 5,
+ durationCallback(source, effect) {
+ if (source?.hasAbility('persistent')) {
+ this.add('-activate', source, 'ability: Persistent', '[move] Gravity');
+ return 7;
+ }
+ return 5;
+ },
+ onFieldStart(target, source) {
+ if (source?.hasAbility('persistent')) {
+ this.add('-fieldstart', 'move: Gravity', '[persistent]');
+ } else {
+ this.add('-fieldstart', 'move: Gravity');
+ }
+ for (const pokemon of this.getAllActive()) {
+ let applies = false;
+ if (pokemon.removeVolatile('bounce') || pokemon.removeVolatile('fly')) {
+ applies = true;
+ this.queue.cancelMove(pokemon);
+ pokemon.removeVolatile('twoturnmove');
+ }
+ if (pokemon.volatiles['skydrop']) {
+ applies = true;
+ this.queue.cancelMove(pokemon);
+
+ if (pokemon.volatiles['skydrop'].source) {
+ this.add('-end', pokemon.volatiles['twoturnmove'].source, 'Sky Drop', '[interrupt]');
+ }
+ pokemon.removeVolatile('skydrop');
+ pokemon.removeVolatile('twoturnmove');
+ }
+ if (pokemon.volatiles['magnetrise']) {
+ applies = true;
+ delete pokemon.volatiles['magnetrise'];
+ }
+ if (pokemon.volatiles['riseabove']) {
+ applies = true;
+ delete pokemon.volatiles['riseabove'];
+ }
+ if (pokemon.volatiles['telekinesis']) {
+ applies = true;
+ delete pokemon.volatiles['telekinesis'];
+ }
+ if (applies) this.add('-activate', pokemon, 'move: Gravity');
+ }
+ },
+ onModifyAccuracy(accuracy) {
+ if (typeof accuracy !== 'number') return;
+ return this.chainModify([6840, 4096]);
+ },
+ onDisableMove(pokemon) {
+ for (const moveSlot of pokemon.moveSlots) {
+ if (this.dex.moves.get(moveSlot.id).flags['gravity']) {
+ pokemon.disableMove(moveSlot.id);
+ }
+ }
+ },
+ // groundedness implemented in battle.engine.js:BattlePokemon#isGrounded
+ onBeforeMovePriority: 6,
+ onBeforeMove(pokemon, target, move) {
+ if (move.flags['gravity'] && !move.isZ) {
+ this.add('cant', pokemon, 'move: Gravity', move);
+ return false;
+ }
+ },
+ onModifyMove(move, pokemon, target) {
+ if (move.flags['gravity'] && !move.isZ) {
+ this.add('cant', pokemon, 'move: Gravity', move);
+ return false;
+ }
+ },
+ onFieldResidualOrder: 27,
+ onFieldResidualSubOrder: 2,
+ onFieldEnd() {
+ this.add('-fieldend', 'move: Gravity');
+ },
+ },
+ },
+ magnetrise: {
+ inherit: true,
+ condition: {
+ duration: 5,
+ durationCallback(target, source, effect) {
+ if (effect?.name === 'Antidote') return 3;
+ return 5;
+ },
+ onStart(target) {
+ this.add('-start', target, 'Magnet Rise');
+ },
+ onImmunity(type) {
+ if (type === 'Ground') return false;
+ },
+ onResidualOrder: 18,
+ onEnd(target) {
+ this.add('-end', target, 'Magnet Rise');
+ },
+ },
+ },
+
+ // Try playing Staff Bros with dynamax clause and see what happens
+ supermetronome: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ desc: "Uses 2-5 random moves. Does not include 1-Base Power Z-Moves, Super Metronome, Metronome, or 10-Base Power Max moves.",
+ shortDesc: "Uses 2-5 random moves.",
+ name: "Super Metronome",
+ isNonstandard: "Custom",
+ pp: 100,
+ noPPBoosts: true,
+ priority: 0,
+ flags: {},
+ onTryMove(pokemon) {
+ this.attrLastMove('[still]');
+ },
+ onPrepareHit(target, source) {
+ this.add('-anim', source, "Metronome", source);
+ },
+ onHit(target, source, effect) {
+ const moves = [];
+ for (const move of this.dex.moves.all()) {
+ if (move.realMove || move.id.includes('metronome')) continue;
+ // Calling 1 BP move is somewhat lame and disappointing. However,
+ // signature Z moves are fine, as they actually have a base power.
+ if (move.isZ && move.basePower === 1) continue;
+ if (move.gen > this.gen) continue;
+ if (move.isMax) continue;
+ moves.push(move.name);
+ }
+ let randomMove: string;
+ if (moves.length) {
+ randomMove = this.sample(moves);
+ } else {
+ return false;
+ }
+ this.actions.useMove(randomMove, target);
+ },
+ multihit: [2, 5],
+ secondary: null,
+ target: "self",
+ type: "???",
+ },
+};
diff --git a/data/mods/gen9ssb/pokedex.ts b/data/mods/gen9ssb/pokedex.ts
new file mode 100644
index 000000000000..a5ff11d6362e
--- /dev/null
+++ b/data/mods/gen9ssb/pokedex.ts
@@ -0,0 +1,1194 @@
+export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
+ /*
+ // Example
+ id: {
+ inherit: true, // Always use this, makes the pokemon inherit its default values from the parent mod (gen7)
+ baseStats: {hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100}, // the base stats for the pokemon
+ },
+ */
+ // aegii
+ scizor: {
+ inherit: true,
+ abilities: {0: "Unburden"},
+ },
+
+ // Aelita
+ melmetal: {
+ inherit: true,
+ abilities: {0: "Fortified Metal"},
+ },
+
+ // Aethernum
+ giratinaorigin: {
+ inherit: true,
+ abilities: {0: "The Eminence in the Shadow"},
+ },
+
+ // Akir
+ slowbro: {
+ inherit: true,
+ abilities: {0: "Take it Slow"},
+ },
+
+ // Alex
+ sprigatito: {
+ inherit: true,
+ baseStats: {hp: 90, atk: 61, def: 84, spa: 45, spd: 85, spe: 65},
+ abilities: {0: "Pawprints"},
+ },
+
+ // Alexander489
+ charizard: {
+ inherit: true,
+ abilities: {0: "Confirmed Town"},
+ },
+
+ // Apple
+ applin: {
+ inherit: true,
+ baseStats: {hp: 106, atk: 80, def: 110, spa: 120, spd: 80, spe: 44},
+ abilities: {0: "Orchard's Gift"},
+ },
+
+ // Appletun a la Mode
+ appletun: {
+ inherit: true,
+ abilities: {0: "Served Cold"},
+ },
+
+ // aQrator
+ totodile: {
+ inherit: true,
+ baseStats: {hp: 85, atk: 105, def: 100, spa: 79, spd: 83, spe: 78},
+ abilities: {0: "Neverending fHunt"},
+ },
+
+ // A Quag To The Past
+ quagsire: {
+ inherit: true,
+ baseStats: {hp: 130, atk: 100, def: 75, spa: 20, spd: 60, spe: 45},
+ abilities: {0: "Quag of Ruin"},
+ },
+ clodsire: {
+ inherit: true,
+ baseStats: {hp: 130, atk: 60, def: 75, spa: 40, spd: 100, spe: 20},
+ abilities: {0: "Clod of Ruin"},
+ },
+
+ // Archas
+ lilligant: {
+ inherit: true,
+ abilities: {0: "Saintly Bullet"},
+ },
+
+ // Arcueid
+ deoxysattack: {
+ inherit: true,
+ abilities: {0: "Marble Phantasm"},
+ },
+ deoxysdefense: {
+ inherit: true,
+ abilities: {0: "Marble Phantasm"},
+ },
+
+ // Arsenal
+ rabsca: {
+ inherit: true,
+ baseStats: {hp: 100, atk: 50, def: 100, spa: 115, spd: 100, spe: 45},
+ abilities: {0: "Absorb Phys"},
+ },
+
+ // Artemis
+ genesect: {
+ inherit: true,
+ abilities: {0: "Supervised Learning"},
+ },
+
+ // Arya
+ trapinch: {
+ inherit: true,
+ types: ["Ground", "Dragon"],
+ baseStats: {hp: 80, atk: 100, def: 90, spa: 120, spd: 100, spe: 130},
+ abilities: {0: "Punk Rock"},
+ },
+ flygon: {
+ inherit: true,
+ abilities: {0: "Tinted Lens"},
+ },
+
+ // Audiino
+ audino: {
+ inherit: true,
+ abilities: {0: "Mitosis"},
+ },
+
+ // ausma
+ hatterene: {
+ inherit: true,
+ abilities: {0: "Cascade"},
+ },
+
+ // AuzBat
+ swoobat: {
+ inherit: true,
+ abilities: {0: "Magic Guard"},
+ },
+
+ // avarice
+ sinistchamasterpiece: {
+ inherit: true,
+ abilities: {0: "Serene Grace"},
+ },
+
+ // Beowulf
+ beedrill: {
+ inherit: true,
+ abilities: {0: "Intrepid Sword"},
+ },
+
+ // berry
+ regirock: {
+ inherit: true,
+ abilities: {0: "Sturdy"},
+ },
+
+ // Bert122
+ sableye: {
+ inherit: true,
+ abilities: {0: "Prankster"},
+ },
+ sableyemega: {
+ inherit: true,
+ abilities: {0: "Pestering Assault"},
+ },
+
+ // Billo
+ cosmog: {
+ inherit: true,
+ abilities: {0: "Wonder Guard"},
+ },
+ solgaleo: {
+ inherit: true,
+ abilities: {0: "Magic Guard"},
+ },
+
+ // blazeofvictory
+ sylveon: {
+ inherit: true,
+ abilities: {0: "Prismatic Lens"},
+ },
+
+ // Blitz
+ chiyu: {
+ inherit: true,
+ types: ["Water", "Dark"],
+ abilities: {0: "Blitz of Ruin"},
+ },
+
+ // Breadey
+ dachsbun: {
+ inherit: true,
+ abilities: {0: "Painful Exit"},
+ },
+
+ // Cake
+ dunsparce: {
+ inherit: true,
+ abilities: {0: "Scrappy"},
+ },
+
+ // chaos
+ ironjugulis: {
+ inherit: true,
+ abilities: {0: "Transistor"},
+ },
+
+ // Chloe
+ tsareena: {
+ inherit: true,
+ abilities: {0: "Acetosa"},
+ },
+
+ // Chris
+ ragingbolt: {
+ inherit: true,
+ abilities: {0: "Astrothunder"},
+ },
+
+ // ciran
+ rapidash: {
+ inherit: true,
+ abilities: {0: "Defiant"},
+ },
+
+ // Clefable
+ clefable: {
+ inherit: true,
+ abilities: {0: "That's Hacked"},
+ },
+
+ // Clementine
+ avalugg: {
+ inherit: true,
+ abilities: {0: "Melting Point"},
+ },
+ avalugghisui: {
+ inherit: true,
+ types: ["Ice"],
+ baseStats: {hp: 95, atk: 46, def: 44, spa: 184, spd: 117, spe: 95},
+ abilities: {0: "Melting Point"},
+ },
+
+ // clerica
+ mimikyu: {
+ inherit: true,
+ abilities: {0: "Masquerade"},
+ },
+ mimikyubusted: {
+ inherit: true,
+ abilities: {0: "Masquerade"},
+ },
+
+ // Clouds
+ corvisquire: {
+ inherit: true,
+ baseStats: {hp: 98, atk: 87, def: 105, spa: 53, spd: 85, spe: 67},
+ abilities: {0: "Jet Stream"},
+ },
+
+ // Coolcodename
+ victini: {
+ inherit: true,
+ abilities: {0: "Firewall"},
+ },
+
+ // Corthius
+ thwackey: {
+ inherit: true,
+ abilities: {0: "Grassy Emperor"},
+ },
+
+ // Dawn of Artemis
+ necrozma: {
+ inherit: true,
+ abilities: {0: "Form Change"},
+ },
+ necrozmaultra: {
+ inherit: true,
+ abilities: {0: "Form Change"},
+ },
+
+ // DaWoblefet
+ wobbuffet: {
+ inherit: true,
+ abilities: {0: "Shadow Artifice"},
+ },
+
+ // deftinwolf
+ yveltal: {
+ inherit: true,
+ abilities: {0: "Sharpness"},
+ },
+
+ // dhelmise
+ slowkinggalar: {
+ inherit: true,
+ abilities: {0: "Coalescence"},
+ },
+
+ // DianaNicole
+ abomasnow: {
+ inherit: true,
+ abilities: {0: "Snow Warning"},
+ },
+ abomasnowmega: {
+ inherit: true,
+ abilities: {0: "Flash Fire"},
+ },
+
+ // EasyOnTheHills
+ snorlax: {
+ inherit: true,
+ abilities: {0: "Immunity"},
+ },
+
+ // Elliot
+ sinistea: {
+ inherit: true,
+ baseStats: {hp: 69, atk: 65, def: 114, spa: 134, spd: 65, spe: 70},
+ abilities: {0: "Natural Cure"},
+ },
+
+ // Elly
+ thundurus: {
+ inherit: true,
+ abilities: {0: "Storm Surge"},
+ },
+
+ // Emboar02
+ emboar: {
+ inherit: true,
+ abilities: {0: "Hogwash"},
+ },
+
+ // Fame
+ jumpluff: {
+ inherit: true,
+ abilities: {0: "Social Jumpluff Warrior"},
+ },
+
+ // Felucia
+ vespiquen: {
+ inherit: true,
+ abilities: {0: "Mountaineer"},
+ },
+
+ // Froggeh
+ toxicroak: {
+ inherit: true,
+ abilities: {0: "Super Luck"},
+ },
+
+ // Frostyicelad
+ qwilfishhisui: {
+ inherit: true,
+ abilities: {0: "Almost Frosty"},
+ },
+
+ // Frozoid
+ gible: {
+ inherit: true,
+ baseStats: {hp: 65, atk: 110, def: 55, spa: 50, spd: 55, spe: 108},
+ abilities: {0: "Snowballer"},
+ },
+
+ // Ganjafin
+ wiglett: {
+ inherit: true,
+ baseStats: {hp: 80, atk: 60, def: 80, spa: 60, spd: 80, spe: 100},
+ abilities: {0: "Gambling Addiction"},
+ },
+
+ // Haste Inky
+ falinks: {
+ inherit: true,
+ abilities: {0: "Simple"},
+ },
+
+ // havi
+ gastly: {
+ inherit: true,
+ baseStats: {hp: 60, atk: 65, def: 60, spa: 130, spd: 75, spe: 110},
+ abilities: {0: "Mensis Cage"},
+ },
+
+ // Hecate
+ mewtwo: {
+ inherit: true,
+ abilities: {0: "Hacking"},
+ },
+ mewtwomegax: {
+ inherit: true,
+ abilities: {0: "Hacking"},
+ },
+
+ // HiZo
+ zoroarkhisui: {
+ inherit: true,
+ abilities: {0: "Justified"},
+ },
+
+ // HoeenHero
+ ludicolo: {
+ inherit: true,
+ abilities: {0: "Misspelled"},
+ },
+
+ // hsy
+ ursaluna: {
+ inherit: true,
+ abilities: {0: "Hustle"},
+ },
+
+ // Hydrostatics
+ pichuspikyeared: {
+ inherit: true,
+ baseStats: {hp: 35, atk: 55, def: 40, spa: 50, spd: 50, spe: 90},
+ abilities: {0: 'Hydrostatic Positivity'},
+ types: ["Electric", "Water"],
+ },
+
+ // Imperial
+ kyurem: {
+ inherit: true,
+ abilities: {0: "Frozen Fortuity"},
+ },
+ kyuremblack: {
+ inherit: true,
+ abilities: {0: "Frozen Fortuity"},
+ },
+ kyuremwhite: {
+ inherit: true,
+ abilities: {0: "Frozen Fortuity"},
+ },
+
+ // in the hills
+ gligar: {
+ inherit: true,
+ abilities: {0: "Illterit"},
+ },
+
+ // ironwater
+ jirachi: {
+ inherit: true,
+ abilities: {0: "Good as Gold"},
+ },
+
+ // Irpachuza
+ mrmime: {
+ inherit: true,
+ abilities: {0: "Mime knows best"},
+ },
+
+ // Isaiah
+ medicham: {
+ inherit: true,
+ abilities: {0: "Psychic Surge"},
+ },
+
+ // J0rdy004
+ vulpixalola: {
+ inherit: true,
+ baseStats: {hp: 73, atk: 67, def: 75, spa: 81, spd: 100, spe: 109},
+ abilities: {0: "Fortifying Frost"},
+ },
+
+ // Kalalokki
+ flamigo: {
+ inherit: true,
+ abilities: {0: "Scrappy"},
+ },
+
+ // Karthik
+ staraptor: {
+ inherit: true,
+ abilities: {0: "Tough Claws"},
+ },
+
+ // ken
+ jigglypuff: {
+ inherit: true,
+ baseStats: {hp: 115, atk: 65, def: 99, spa: 65, spd: 115, spe: 111},
+ abilities: {0: "Aroma Veil"},
+ },
+
+ // kenn
+ larvitar: {
+ inherit: true,
+ baseStats: {hp: 100, atk: 84, def: 70, spa: 65, spd: 70, spe: 61},
+ abilities: {0: "Deserted Dunes"},
+ },
+
+ // Kennedy
+ cinderace: {
+ inherit: true,
+ abilities: {0: "Anfield"},
+ otherFormes: ["Cinderace-Gmax"],
+ },
+ cinderacegmax: {
+ inherit: true,
+ types: ["Fire", "Ice"],
+ baseStats: {hp: 84, atk: 119, def: 78, spa: 77, spd: 81, spe: 105},
+ abilities: {0: "You'll Never Walk Alone"},
+ weightkg: 103,
+ },
+
+ // keys
+ rayquaza: {
+ inherit: true,
+ abilities: {0: "Defeatist"},
+ },
+ rayquazamega: {
+ inherit: true,
+ abilities: {0: "Defeatist"},
+ requiredMove: "Protector of the Skies",
+ },
+
+ // kingbaruk
+ wigglytuff: {
+ inherit: true,
+ abilities: {0: "Peer Pressure"},
+ },
+
+ // Kiwi
+ minccino: {
+ inherit: true,
+ abilities: {0: "Sure Hit Sorcery"},
+ },
+
+ // Klmondo
+ cloyster: {
+ inherit: true,
+ abilities: {0: "Super Skilled"},
+ },
+
+ // kolohe
+ pikachu: {
+ inherit: true,
+ baseStats: {hp: 45, atk: 80, def: 50, spa: 75, spd: 60, spe: 120},
+ abilities: {0: "Soul Surfer"},
+ },
+
+ // Kry
+ mawile: {
+ inherit: true,
+ abilities: {0: "Flash Freeze"},
+ },
+
+ // Lasen
+ zekrom: {
+ inherit: true,
+ abilities: {0: "Idealized World"},
+ },
+
+ // Lets go shuckles
+ shuckle: {
+ inherit: true,
+ abilities: {0: "Persistent"},
+ },
+
+ // Lily
+ togedemaru: {
+ inherit: true,
+ abilities: {0: "Unaware"},
+ },
+
+ // Loethalion
+ ralts: {
+ inherit: true,
+ abilities: {0: "Psychic Surge"},
+ },
+
+ // Lumari
+ ponytagalar: {
+ inherit: true,
+ baseStats: {hp: 65, atk: 100, def: 70, spa: 80, spd: 80, spe: 105},
+ abilities: {0: "Pyrotechnic"},
+ },
+
+ // Lunell
+ vaporeon: {
+ inherit: true,
+ abilities: {0: "Low Tide, High Tide"},
+ },
+
+ // Lyna
+ dragonair: {
+ inherit: true,
+ baseStats: {hp: 82, atk: 80, def: 80, spa: 80, spd: 80, spe: 80},
+ abilities: {0: "Magic Aura"},
+ },
+
+ // Maia
+ litwick: {
+ inherit: true,
+ abilities: {0: "Power Abuse"},
+ },
+
+ // marillvibes
+ marill: {
+ inherit: true,
+ baseStats: {hp: 100, atk: 50, def: 80, spa: 60, spd: 80, spe: 50},
+ abilities: {0: "Huge Power"},
+ },
+
+ // maroon
+ archaludon: {
+ inherit: true,
+ abilities: {0: "Built Different"},
+ },
+
+ // Mathy
+ furret: {
+ inherit: true,
+ baseStats: {hp: 105, atk: 96, def: 84, spa: 45, spd: 75, spe: 110},
+ abilities: {0: "Dynamic Typing"},
+ },
+
+ // Merritty
+ torchic: {
+ inherit: true,
+ baseStats: {hp: 65, atk: 60, def: 60, spa: 80, spd: 70, spe: 85},
+ abilities: {0: "End Round"},
+ },
+
+ // Meteordash
+ tatsugiri: {
+ inherit: true,
+ abilities: {0: "TatsuGlare"},
+ },
+
+ // Mex
+ dialga: {
+ inherit: true,
+ abilities: {0: "Time Dilation"},
+ },
+
+ // Miojo
+ spheal: {
+ inherit: true,
+ baseStats: {hp: 110, atk: 95, def: 90, spa: 80, spd: 90, spe: 65},
+ abilities: {0: "The Rolling Spheal"},
+ },
+
+ // Monkey
+ infernape: {
+ inherit: true,
+ abilities: {0: "Harambe Hit"},
+ },
+
+ // MyPearl
+ latios: {
+ inherit: true,
+ abilities: {0: "Eon Call"},
+ },
+ latias: {
+ inherit: true,
+ abilities: {0: "Eon Call"},
+ },
+
+ // Neko
+ chienpao: {
+ inherit: true,
+ abilities: {0: "Weatherproof"},
+ },
+
+ // Ney
+ banette: {
+ inherit: true,
+ abilities: {0: "Insomnia"},
+ },
+ banettemega: {
+ inherit: true,
+ abilities: {0: "Prankster Plus"},
+ },
+
+ // Notater517
+ incineroar: {
+ inherit: true,
+ abilities: {0: "Vent Crosser"},
+ },
+
+ // nya
+ delcatty: {
+ inherit: true,
+ types: ["Fairy"],
+ baseStats: {hp: 80, atk: 65, def: 80, spa: 70, spd: 80, spe: 90},
+ abilities: {0: "Adorable Grace"},
+ },
+
+ // pants
+ annihilape: {
+ inherit: true,
+ abilities: {0: "Drifting"},
+ },
+
+ // PartMan
+ chandelure: {
+ inherit: true,
+ abilities: {0: "C- Tier Shitposter"},
+ },
+
+ // Pastor Gigas
+ regigigas: {
+ inherit: true,
+ abilities: {0: "God's Mercy"},
+ },
+
+ // Peary
+ klinklang: {
+ inherit: true,
+ abilities: {0: "Levitate"},
+ },
+
+ // phoopes
+ jynx: {
+ inherit: true,
+ baseStats: {hp: 65, atk: 50, def: 35, spa: 115, spd: 115, spe: 95},
+ abilities: {0: "I Did It Again"},
+ },
+
+ // Pissog
+ volcarona: {
+ inherit: true,
+ abilities: {0: "Drought"},
+ },
+ frosmoth: {
+ inherit: true,
+ abilities: {0: "Snow Warning"},
+ },
+
+ // pokemonvortex
+ pokestarsmeargle: {
+ inherit: true,
+ baseStats: {hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100},
+ abilities: {0: "Prankster"},
+ },
+
+ // Princess Autumn
+ altaria: {
+ inherit: true,
+ abilities: {0: "Last Hymn"},
+ },
+ altariamega: {
+ inherit: true,
+ abilities: {0: "Last Hymn"},
+ },
+
+ // ptoad
+ politoed: {
+ inherit: true,
+ abilities: {0: "Drizzle"},
+ },
+
+ // Pulse_kS
+ hydreigon: {
+ inherit: true,
+ abilities: {0: "Pulse Luck"},
+ },
+
+ // PYRO
+ kingambit: {
+ inherit: true,
+ abilities: {0: "Hardcore Hustle"},
+ },
+
+ // Quite Quiet
+ ribombee: {
+ inherit: true,
+ abilities: {0: "Fancy Scarf"},
+ },
+
+ // quziel
+ chromera: {
+ inherit: true,
+ abilities: {0: "High Performance Computing"},
+ },
+
+ // R8
+ chansey: {
+ inherit: true,
+ abilities: {0: "Anti-Pelau"},
+ },
+
+ // Rainshaft
+ xerneas: {
+ inherit: true,
+ abilities: {0: "Rainy's Aura"},
+ },
+
+ // Ransei
+ audinomega: {
+ inherit: true,
+ abilities: {0: "Healer", 1: "Ultra Mystik"},
+ },
+
+ // ReturnToMonkey
+ oranguru: {
+ inherit: true,
+ abilities: {0: "Monke See Monke Do"},
+ },
+
+ // Rissoux
+ arcaninehisui: {
+ inherit: true,
+ abilities: {0: "Hard Headed"},
+ },
+
+ // RSB
+ growlithe: {
+ inherit: true,
+ baseStats: {hp: 70, atk: 86, def: 60, spa: 86, spd: 66, spe: 76},
+ abilities: {0: "Hot Pursuit"},
+ },
+
+ // Rumia
+ duskull: {
+ inherit: true,
+ types: ["Ghost", "Dark"],
+ baseStats: {hp: 50, atk: 55, def: 90, spa: 90, spd: 55, spe: 55},
+ abilities: {0: "Youkai of the Dusk"},
+ },
+
+ // Scotteh
+ suicune: {
+ inherit: true,
+ abilities: {0: "Water Absorb"},
+ },
+
+ // SexyMalasada
+ typhlosion: {
+ inherit: true,
+ abilities: {0: "Ancestry Ritual"},
+ },
+ typhlosionhisui: {
+ inherit: true,
+ abilities: {0: "Ancestry Ritual"},
+ },
+
+ // sharp_claw
+ sneasel: {
+ inherit: true,
+ baseStats: {hp: 55, atk: 105, def: 95, spa: 35, spd: 95, spe: 135},
+ abilities: {0: "Regenerator"},
+ },
+ sneaselhisui: {
+ inherit: true,
+ baseStats: {hp: 55, atk: 135, def: 75, spa: 35, spd: 85, spe: 135},
+ abilities: {0: "Regenerator"},
+ },
+
+ // Siegfried
+ ampharos: {
+ inherit: true,
+ abilities: {0: "Static"},
+ },
+ ampharosmega: {
+ inherit: true,
+ abilities: {0: "Magical Mystery Charge"},
+ },
+
+ // Sificon
+ hoppip: {
+ inherit: true,
+ baseStats: {hp: 75, atk: 55, def: 70, spa: 55, spd: 95, spe: 110},
+ abilities: {0: "Perfectly Imperfect"},
+ },
+
+ // skies
+ chespin: {
+ inherit: true,
+ baseStats: {hp: 88, atk: 107, def: 122, spa: 74, spd: 75, spe: 64},
+ abilities: {0: "Spikes of Wrath"},
+ },
+
+ // snake
+ fidgit: {
+ inherit: true,
+ abilities: {0: "Persistent"},
+ },
+
+ // Soft Flex
+ magnezone: {
+ inherit: true,
+ abilities: {0: "Adaptive Engineering"},
+ },
+
+ // Solaros & Lunaris
+ scovillain: {
+ inherit: true,
+ abilities: {0: "Ride the Sun!"},
+ },
+
+ // Spiderz
+ ironthorns: {
+ inherit: true,
+ types: ['Dark', 'Ground'],
+ abilities: {0: "Poison Heal"},
+ },
+
+ // spoo
+ hemogoblin: {
+ inherit: true,
+ abilities: {0: "I Can Hear The Heart Beating As One"},
+ },
+
+ // Steorra
+ kitsunoh: {
+ inherit: true,
+ abilities: {0: "Ghostly Hallow"},
+ },
+
+ // Struchni
+ aggron: {
+ inherit: true,
+ abilities: {0: "Overasked Clause"},
+ },
+
+ // Sulo
+ reuniclus: {
+ inherit: true,
+ abilities: {0: "Protection of the Gelatin"},
+ },
+
+ // Swiffix
+ piplup: {
+ inherit: true,
+ baseStats: {hp: 64, atk: 66, def: 68, spa: 81, spd: 76, spe: 50},
+ abilities: {0: "Stinky"},
+ },
+
+ // Syrinix
+ ceruledge: {
+ inherit: true,
+ abilities: {0: "Sword of Ruin"},
+ },
+
+ // Teclis
+ gallade: {
+ inherit: true,
+ abilities: {0: "Sharpness"},
+ },
+
+ // Tenshi
+ sandshrew: {
+ inherit: true,
+ baseStats: {hp: 50, atk: 115, def: 130, spa: 50, spd: 65, spe: 98},
+ abilities: {0: "Sand Sleuth"},
+ },
+
+ // TheJesuchristoOsAma
+ arceus: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceusbug: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceusdark: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceusdragon: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceuselectric: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceusfairy: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceusfighting: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceusfire: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceusflying: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceusghost: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceusgrass: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceusground: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceusice: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceuspoison: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceuspsychic: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceusrock: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceussteel: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+ arceuswater: {
+ inherit: true,
+ abilities: {0: "The Grace of Jesus Christ"},
+ },
+
+ // Tico
+ floetteeternal: {
+ inherit: true,
+ abilities: {0: "Eternal Generator"},
+ },
+
+ // trace
+ delphox: {
+ inherit: true,
+ abilities: {0: "Eyes of Eternity"},
+ },
+
+ // Tuthur
+ screamtail: {
+ inherit: true,
+ abilities: {0: "Poison Heal"},
+ },
+
+ // Two of Roses
+ luxray: {
+ inherit: true,
+ abilities: {0: "As We See"},
+ },
+
+ // UT
+ talonflame: {
+ inherit: true,
+ abilities: {0: "Gale Guard"},
+ },
+
+ // Valerian
+ lucario: {
+ inherit: true,
+ abilities: {0: "Full Bloom"},
+ },
+
+ // Venous
+ mantine: {
+ inherit: true,
+ abilities: {0: "Concrete Over Water"},
+ },
+
+ // Violet
+ ogerpon: {
+ inherit: true,
+ abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"},
+ },
+ ogerpontealtera: {
+ inherit: true,
+ abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"},
+ },
+ ogerponcornerstone: {
+ inherit: true,
+ abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"},
+ },
+ ogerponcornerstonetera: {
+ inherit: true,
+ abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"},
+ },
+ ogerponhearthflame: {
+ inherit: true,
+ abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"},
+ },
+ ogerponhearthflametera: {
+ inherit: true,
+ abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"},
+ },
+ ogerponwellspring: {
+ inherit: true,
+ abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"},
+ },
+ ogerponwellspringtera: {
+ inherit: true,
+ abilities: {0: "See No Evil, Hear No Evil, Speak No Evil"},
+ },
+
+ // Vistar
+ zeraora: {
+ inherit: true,
+ abilities: {0: "Prankster"},
+ },
+
+ // vmnunes
+ shayminsky: {
+ inherit: true,
+ abilities: {0: "Wild Growth"},
+ },
+
+ // WarriorGallade
+ tropius: {
+ inherit: true,
+ abilities: {0: "Primeval Harvest"},
+ },
+
+ // Waves
+ wailord: {
+ inherit: true,
+ abilities: {0: "Primordial Sea"},
+ },
+
+ // WigglyTree
+ sudowoodo: {
+ inherit: true,
+ abilities: {0: "Tree Stance"},
+ baseStats: {hp: 70, atk: 100, def: 115, spa: 30, spd: 65, spe: 50},
+ },
+
+ // xy01
+ blissey: {
+ inherit: true,
+ abilities: {0: "Panic"},
+ },
+
+ // yeet dab xd
+ kecleon: {
+ inherit: true,
+ abilities: {0: "Treasure Bag"},
+ },
+
+ // Yellow Paint
+ rotomfrost: {
+ inherit: true,
+ abilities: {0: "Yellow Magic"},
+ },
+
+ ninetalesalola: {
+ inherit: true,
+ abilities: {0: "Party Up"},
+ },
+
+ // YveltalNL
+ farigiraf: {
+ inherit: true,
+ abilities: {0: "Height Advantage"},
+ },
+
+ // za
+ greedent: {
+ inherit: true,
+ abilities: {0: "Troll"},
+ },
+
+ // Zalm
+ weedle: {
+ inherit: true,
+ baseStats: {hp: 100, atk: 90, def: 100, spa: 35, spd: 90, spe: 100},
+ abilities: {0: "Water Bubble"},
+ },
+
+ // Zarel
+ meloetta: {
+ inherit: true,
+ abilities: {0: "Tempo Change"},
+ },
+ meloettapirouette: {
+ inherit: true,
+ abilities: {0: "Tempo Change"},
+ },
+
+ // zee
+ lilliganthisui: {
+ inherit: true,
+ abilities: {0: "Chlorophyll"},
+ },
+
+ // zoro
+ umbreon: {
+ inherit: true,
+ abilities: {0: "Nine Lives"},
+ },
+};
diff --git a/data/mods/gen9ssb/random-teams.ts b/data/mods/gen9ssb/random-teams.ts
new file mode 100644
index 000000000000..995a731f1f11
--- /dev/null
+++ b/data/mods/gen9ssb/random-teams.ts
@@ -0,0 +1,1250 @@
+import RandomTeams from '../../random-battles/gen9/teams';
+
+export interface SSBSet {
+ species: string;
+ ability: string | string[];
+ item: string | string[];
+ gender: GenderName | GenderName[];
+ moves: (string | string[])[];
+ signatureMove: string;
+ evs?: {hp?: number, atk?: number, def?: number, spa?: number, spd?: number, spe?: number};
+ ivs?: {hp?: number, atk?: number, def?: number, spa?: number, spd?: number, spe?: number};
+ nature?: string | string[];
+ shiny?: number | boolean;
+ level?: number;
+ happiness?: number;
+ skip?: string;
+ teraType?: string | string[];
+}
+interface SSBSets {[k: string]: SSBSet}
+
+export const ssbSets: SSBSets = {
+ /*
+ // Example:
+ Username: {
+ species: 'Species', ability: 'Ability', item: 'Item', gender: '',
+ moves: ['Move Name', ['Move Name', 'Move Name']],
+ signatureMove: 'Move Name',
+ evs: {stat: number}, ivs: {stat: number}, nature: 'Nature', teraType: 'Type',
+ },
+ // Species, ability, and item need to be captialized properly ex: Ludicolo, Swift Swim, Life Orb
+ // Gender can be M, F, N, or left as an empty string
+ // each slot in moves needs to be a string (the move name, captialized properly ex: Hydro Pump), or an array of strings (also move names)
+ // signatureMove also needs to be capitalized properly ex: Scripting
+ // You can skip Evs (defaults to 84 all) and/or Ivs (defaults to 31 all), or just skip part of the Evs (skipped evs are 0) and/or Ivs (skipped Ivs are 31)
+ // You can also skip shiny, defaults to false. Level can be skipped (defaults to 100).
+ // Nature needs to be a valid nature with the first letter capitalized ex: Modest
+ */
+ // Please keep sets organized alphabetically based on staff member name!
+ aegii: {
+ species: 'Scizor', ability: 'Unburden', item: 'Lansat Berry', gender: 'M',
+ moves: ['Acrobatics', 'Attack Order', ['Cross Chop', 'Night Slash']],
+ signatureMove: 'Equip Aegislash',
+ evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', teraType: 'Flying',
+ },
+ Aelita: {
+ species: 'Melmetal', ability: 'Fortified Metal', item: 'Leftovers', gender: '',
+ moves: ['Heavy Slam', 'Bitter Blade', 'Liquidation'],
+ signatureMove: 'Smelt',
+ evs: {hp: 252, atk: 4, spd: 252}, nature: 'Careful', teraType: 'Steel', shiny: true,
+ },
+ Aethernum: {
+ species: 'Giratina-Origin', ability: 'The Eminence in the Shadow', item: 'Griseous Core', gender: '',
+ moves: ['Fiery Wrath', 'Lunar Blessing', 'Dragon Energy'],
+ signatureMove: 'I. AM. ATOMIC.',
+ evs: {atk: 4, spa: 252, spe: 252}, nature: 'Hasty', teraType: 'Dark', shiny: true,
+ },
+ Akir: {
+ species: 'Slowbro', ability: 'Take it Slow', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Future Sight', 'Slack Off', 'Steam Eruption'],
+ signatureMove: 'Free Switch Button',
+ evs: {hp: 248, def: 8, spa: 252}, ivs: {spe: 0}, nature: 'Relaxed', teraType: 'Fairy',
+ },
+ Alex: {
+ species: 'Sprigatito', ability: 'Pawprints', item: 'Eviolite', gender: '',
+ moves: [['Charm', 'Tickle'], 'Protect', 'Soak'],
+ signatureMove: 'Spicier Extract',
+ evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', teraType: 'Water',
+ },
+ Alexander489: {
+ species: 'Charizard', ability: 'Confirmed Town', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['No Retreat', 'Bitter Blade', 'Dual Wingbeat'],
+ signatureMove: 'Scumhunt',
+ evs: {atk: 252, spa: 4, spe: 252}, nature: 'Naughty', teraType: 'Fire', shiny: true,
+ },
+ Apple: {
+ species: 'Applin', ability: 'Orchard\'s Gift', item: 'Lum Berry', gender: ['M', 'F'],
+ moves: ['Apple Acid', 'Leech Seed', 'Dragon Pulse'],
+ signatureMove: 'Wopple or Flopple',
+ evs: {hp: 252, spa: 4, spd: 252}, nature: 'Sassy', shiny: 2, teraType: 'Dragon',
+ },
+ 'Appletun a la Mode': {
+ species: 'Appletun', ability: 'Served Cold', item: 'Sitrus Berry', gender: 'F',
+ moves: ['Freeze-Dry', 'Apple Acid', 'Fickle Beam'],
+ signatureMove: "Extra Course",
+ evs: {hp: 252, spa: 4, spd: 252}, nature: 'Calm', teraType: 'Ground',
+ },
+ aQrator: {
+ species: 'Totodile', ability: 'Neverending fHunt', item: 'Eviolite', gender: 'F',
+ moves: ['Whirlpool', 'Noble Roar', 'Slack Off'],
+ signatureMove: "Tori's Stori",
+ evs: {hp: 252, def: 4, spd: 252}, nature: 'Sassy', teraType: 'Fighting',
+ },
+ 'A Quag To The Past': {
+ species: 'Quagsire', ability: 'Quag of Ruin', item: 'Leftovers', gender: 'M',
+ moves: ['Surging Strikes', 'Precipice Blades', 'Gunk Shot'],
+ signatureMove: 'Sire Switch',
+ evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', teraType: 'Water',
+ },
+ 'A Quag To The Past-Clodsire': {
+ species: 'Clodsire', ability: 'Clod of Ruin', item: 'Leftovers', gender: 'M',
+ moves: ['Coil', 'Strength Sap', 'Toxic'],
+ signatureMove: 'Sire Switch',
+ evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', teraType: 'Poison', skip: 'A Quag To The Past',
+ },
+ Archas: {
+ species: 'Lilligant', ability: 'Saintly Bullet', item: 'Lilligantium Z', gender: 'F',
+ moves: ['Giga Drain', 'Snipe Shot', 'Aeroblast'],
+ signatureMove: 'Quiver Dance',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid',
+ },
+ Arcueid: {
+ species: 'Deoxys-Defense', ability: 'Marble Phantasm', item: 'Heavy-Duty Boots', gender: 'N',
+ moves: [['Lunar Blessing', 'Jungle Healing'], 'Body Press', ['Toxic', 'Will-O-Wisp', 'Topsy-Turvy']],
+ signatureMove: 'Funny Vamp',
+ evs: {hp: 248, def: 252, spd: 8}, nature: 'Bold', teraType: 'Fairy', shiny: true,
+ },
+ 'Arcueid-Attack': {
+ species: 'Deoxys-Attack', ability: 'Marble Phantasm', item: 'Heavy-Duty Boots', gender: 'N',
+ moves: ['Moonblast', 'Photon Geyser', 'Flamethrower'],
+ signatureMove: 'Funny Vamp',
+ evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Fairy', shiny: true, skip: 'Arcueid',
+ },
+ Arsenal: {
+ species: 'Rabsca', ability: 'Absorb Phys', item: 'Covert Cloak', gender: 'N',
+ moves: ['Recover', 'Calm Mind', 'Speed Swap'],
+ signatureMove: 'Megidolaon',
+ evs: {hp: 4, spa: 252, spd: 252}, nature: 'Modest', teraType: 'Stellar', shiny: true,
+ },
+ Artemis: {
+ species: 'Genesect', ability: 'Supervised Learning', item: 'Choice Specs', gender: 'N',
+ moves: [],
+ signatureMove: 'Automated Response',
+ evs: {hp: 4, spa: 252, spe: 252}, nature: 'Serious', shiny: true,
+ },
+ Arya: {
+ species: 'Flygon', ability: 'Tinted Lens', item: 'Flygonite', gender: 'F',
+ moves: ['Clanging Scales', 'Roost', 'Bug Buzz'],
+ signatureMove: 'Anyone can be killed',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid',
+ },
+ Audiino: {
+ species: 'Audino', ability: 'Mitosis', item: 'Leftovers', gender: 'N',
+ moves: ['Recover', 'Moongeist Beam', 'Hyper Voice'],
+ signatureMove: 'Thinking In Progress',
+ evs: {hp: 252, def: 4, spa: 252}, nature: 'Modest', teraType: 'Ghost',
+ },
+ autumn: {
+ species: 'Flutter Mane', ability: 'Protosynthesis', item: 'Booster Energy', gender: 'N',
+ moves: ['Moonblast', 'Taunt', 'Strength Sap'],
+ signatureMove: 'Season\'s Smite',
+ evs: {def: 8, spa: 244, spe: 252}, nature: 'Timid', teraType: 'Fairy',
+ },
+ ausma: {
+ species: 'Hatterene', ability: 'Cascade', item: 'Leftovers', gender: 'F',
+ moves: ['Light of Ruin', 'Strength Sap', 'Substitute'],
+ signatureMove: 'Sigil\'s Storm',
+ evs: {hp: 252, def: 4, spa: 252}, ivs: {atk: 0, spe: 0}, nature: 'Modest', teraType: 'Fairy',
+ },
+ 'ausma-Mismagius': {
+ species: 'Mismagius', ability: 'Levitate', item: 'Leftovers', gender: 'F',
+ moves: ['Light of Ruin', 'Strength Sap', 'Substitute'],
+ signatureMove: 'Sigil\'s Storm',
+ evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest', teraType: 'Fairy', skip: 'ausma',
+ },
+ 'ausma-Fennekin': {
+ species: 'Fennekin', ability: 'Blaze', item: '', gender: '',
+ moves: ['Tackle', 'Growl'],
+ signatureMove: 'Ember',
+ evs: {}, skip: 'ausma',
+ },
+ AuzBat: {
+ species: 'Swoobat', ability: 'Magic Guard', item: 'Focus Sash', gender: 'M',
+ moves: ['Stored Power', 'Hurricane', ['Roost', 'Focus Blast']],
+ signatureMove: 'Prep Time',
+ evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Psychic', shiny: 8192,
+ },
+ avarice: {
+ species: 'Sinistcha-Masterpiece', ability: 'Serene Grace', item: ['Covert Cloak', 'Leftovers'], gender: 'N',
+ moves: ['Strength Sap', 'Calm Mind', 'Matcha Gotcha'],
+ signatureMove: 'yu-gi-oh reference',
+ evs: {hp: 252, def: 160, spe: 90}, nature: 'Bold', teraType: 'Steel',
+ },
+ Beowulf: {
+ species: 'Beedrill', ability: 'Intrepid Sword', item: 'Beedrillite', gender: 'M',
+ moves: ['Poison Jab', 'X-Scissor', ['Earthquake', 'Volt Tackle', 'Glacial Lance']],
+ signatureMove: 'Buzzer Stinger Counter',
+ evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', shiny: 2,
+ },
+ berry: {
+ species: 'Regirock', ability: 'Sturdy', item: 'Maranga Berry', gender: 'F',
+ moves: ['Curse', 'Salt Cure', 'Stone Axe'],
+ signatureMove: 'what kind',
+ evs: {hp: 252, atk: 4, spd: 252}, nature: 'Careful', teraType: 'Rock',
+ },
+ Bert122: {
+ species: 'Sableye', ability: 'Prankster', item: 'Sablenite', gender: '',
+ moves: ['Metal Burst', 'Recover', 'Will-O-Wisp'],
+ signatureMove: 'Shatter and Scatter',
+ evs: {hp: 252, def: 28, spd: 224}, ivs: {atk: 0, spe: 0}, nature: 'Relaxed',
+ },
+ Billo: {
+ species: 'Cosmog', ability: 'Wonder Guard', item: 'Eviolite', gender: 'N',
+ moves: [],
+ signatureMove: 'Hack Check',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid',
+ },
+ 'Billo-Solgaleo': {
+ species: 'Solgaleo', ability: 'Magic Guard', item: 'Choice Scarf', gender: 'N',
+ moves: ['Wave Crash', 'Volt Tackle', 'Flare Blitz'],
+ signatureMove: 'Head Smash',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', skip: 'Billo', shiny: true,
+ },
+ 'Billo-Lunala': {
+ species: 'Lunala', ability: 'Shadow Shield', item: 'Lunalium Z', gender: 'N',
+ moves: ['Moongeist Beam', 'Moonblast', 'Ice Beam'],
+ signatureMove: 'Thunderbolt',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', skip: 'Billo',
+ },
+ blazeofvictory: {
+ species: 'Sylveon', ability: 'Prismatic Lens', item: 'Leftovers', gender: 'F',
+ moves: ['Wish', 'Baton Pass', 'Hyper Voice'],
+ signatureMove: 'Veto',
+ evs: {hp: 252, spa: 252, spe: 4}, nature: 'Modest', teraType: 'Fairy',
+ },
+ Blitz: {
+ species: 'Chi-Yu', ability: 'Blitz of Ruin', item: 'Life Orb', gender: 'N',
+ moves: ['Fiery Wrath', 'Lava Plume', 'Nasty Plot'],
+ signatureMove: 'Geyser Blast',
+ evs: {def: 4, spa: 252, spe: 252}, nature: 'Modest', teraType: 'Water', shiny: true,
+ },
+ Breadey: {
+ species: 'Dachsbun', ability: 'Painful Exit', item: 'Leftovers', gender: '',
+ moves: ['Protect', 'Rest', 'Play Rough'],
+ signatureMove: 'Baker\'s Douze Off',
+ evs: {hp: 252, def: 252, spd: 4}, nature: 'Impish', teraType: 'Steel',
+ },
+ Cake: {
+ species: 'Dunsparce', ability: 'Scrappy', item: 'Eviolite', gender: 'N',
+ moves: [
+ 'Topsy-Turvy', 'Lunar Blessing', 'Lovely Kiss', 'Glare', 'Knock Off', 'Gastro Acid',
+ 'Trick Room', 'Toxic', 'Heal Bell', 'Octolock', 'G-Max Befuddle', 'G-Max Centiferno',
+ 'G-Max Cannonade', 'Magic Powder', 'Whirlwind', 'Lunar Dance', 'Power Split',
+ 'Snatch', 'Heal Order', 'Parting Shot', 'Population Bomb', 'Metronome',
+ ],
+ signatureMove: 'Role System',
+ // eslint-disable-next-line max-len
+ evs: {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85}, nature: 'Hardy', teraType: ['Ghost', 'Poison', 'Fairy'], shiny: 1024, level: 97,
+ },
+ chaos: {
+ species: 'Iron Jugulis', ability: 'Transistor', item: 'Heavy-Duty Boots', gender: 'N',
+ moves: [['Oblivion Wing', 'Hurricane'], ['Thunderclap', 'Volt Switch'], ['Defog', 'Roost']],
+ signatureMove: 'Outage',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: ['Steel', 'Flying', 'Electric', 'Dark'],
+ },
+ Chloe: {
+ species: 'Tsareena', ability: 'Acetosa', item: 'Assault Vest', gender: 'F',
+ moves: ['Rapid Spin', 'Fishious Rend', 'Stone Axe'],
+ signatureMove: 'De Todas las Flores',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Grass', shiny: true,
+ },
+ Chris: {
+ species: 'Raging Bolt', ability: 'Astrothunder', item: 'Leftovers', gender: 'N',
+ moves: ['Thunder', 'Dragon Pulse', 'Calm Mind'],
+ signatureMove: 'Antidote',
+ evs: {hp: 148, def: 156, spa: 204}, nature: 'Quiet', teraType: 'Steel',
+ },
+ ciran: {
+ species: 'Rapidash', ability: 'Defiant', item: 'Heavy-Duty Boots', gender: 'N',
+ moves: ['Protect', 'Sketch', 'Bitter Blade'],
+ signatureMove: 'Summon Monster VIII: Fiendish monstrous Piplupede, Colossal',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Poison', shiny: true,
+ },
+ Clefable: {
+ species: 'Clefable', ability: 'That\'s Hacked', item: 'Leftovers', gender: 'M',
+ moves: ['Cosmic Power', 'Soft-Boiled', 'Thunder Wave'],
+ signatureMove: 'Giveaway!',
+ evs: {hp: 252, def: 200, spd: 56}, nature: 'Calm', teraType: 'Any', shiny: true,
+ },
+ Clementine: {
+ species: 'Avalugg', ability: 'Melting Point', item: 'Heavy-Duty Boots', gender: '',
+ moves: ['Land\'s Wrath', 'Flip Turn', 'Milk Drink'],
+ signatureMove: '(╯°o°)╯︵ ┻━┻',
+ nature: 'Quirky', teraType: ['Poison', 'Steel'],
+ },
+ 'Clementine-Flipped': {
+ species: 'Avalugg-Hisui', ability: 'Melting Point', item: 'Heavy-Duty Boots', gender: '',
+ moves: ['Earth Power', 'Volt Switch', 'Heal Pulse'],
+ signatureMove: '(╯°o°)╯︵ ┻━┻',
+ nature: 'Quirky', teraType: ['Poison', 'Steel'], skip: 'Clementine',
+ },
+ clerica: {
+ species: 'Mimikyu', ability: 'Masquerade', item: 'Ghostium Z', gender: 'F',
+ moves: ['Protect', 'Substitute', 'Phantom Force'],
+ signatureMove: 'Stockholm Syndrome',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly',
+ },
+ Clouds: {
+ species: 'Corvisquire', ability: 'Jet Stream', item: 'Leftovers', gender: 'M',
+ moves: ['Brave Bird', 'Roost', 'Defog'],
+ signatureMove: 'Winds of Change',
+ evs: {hp: 252, atk: 4, def: 252}, nature: 'Jolly', teraType: 'Flying', shiny: 822,
+ },
+ Coolcodename: {
+ species: 'Victini', ability: 'Firewall', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Searing Shot', 'Psychic', 'Dazzling Gleam'],
+ signatureMove: 'Haxer\'s Will',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Fairy', shiny: 1024,
+ },
+ Corthius: {
+ species: 'Thwackey', ability: 'Grassy Emperor', item: 'Eviolite', gender: 'M',
+ moves: ['Swords Dance', 'U-turn', 'Close Combat'],
+ signatureMove: 'Monkey Beat Up',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', shiny: 69,
+ },
+ 'Dawn of Artemis': {
+ species: 'Necrozma', ability: 'Form Change', item: 'Expert Belt', gender: 'F',
+ moves: ['Calm Mind', 'Photon Geyser', 'Earth Power'],
+ signatureMove: 'Magical Focus',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Psychic', shiny: 8192,
+ },
+ 'Dawn of Artemis-Ultra': {
+ species: 'Necrozma-Ultra', ability: 'Form Change', item: 'Expert Belt', gender: 'F',
+ moves: ['Swords Dance', 'Photon Geyser', 'Outrage'],
+ signatureMove: 'Magical Focus',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Dragon', skip: 'Dawn of Artemis',
+ },
+ DaWoblefet: {
+ species: 'Wobbuffet', ability: 'Shadow Artifice', item: 'Iapapa Berry', gender: 'M',
+ moves: ['Counter', 'Mirror Coat', 'Encore'],
+ signatureMove: 'Super Ego Inflation',
+ evs: {hp: 252, def: 252, spd: 4}, ivs: {spe: 0}, nature: 'Relaxed', teraType: 'Fairy',
+ },
+ deftinwolf: {
+ species: 'Yveltal', ability: 'Sharpness', item: 'Dread Plate', gender: '',
+ moves: ['Aerial Ace', 'Ceaseless Edge', 'Cross Poison'],
+ signatureMove: 'Trivial Pursuit',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', teraType: 'Poison',
+ },
+ dhelmise: {
+ species: 'Slowking-Galar', ability: 'Coalescence', item: 'Black Sludge', gender: 'N',
+ moves: ['Sludge Bomb', 'Psychic Noise', 'Parting Shot'],
+ signatureMove: 'Biotic Orb',
+ evs: {hp: 252, def: 252, spa: 4}, nature: 'Bold', teraType: ['Psychic', 'Poison'],
+ },
+ DianaNicole: {
+ species: 'Abomasnow', ability: 'Snow Warning', item: 'Abomasite', gender: 'F',
+ moves: ['Giga Drain', 'Earth Power', 'Blizzard'],
+ signatureMove: 'Breath of Tiamat',
+ evs: {hp: 252, def: 4, spa: 252}, nature: 'Modest', shiny: true,
+ },
+ EasyOnTheHills: {
+ species: 'Snorlax', ability: 'Immunity', item: 'Life Orb', gender: 'M',
+ moves: ['Darkest Lariat', 'Body Slam', 'Heavy Slam'],
+ signatureMove: 'Snack Time',
+ evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant', teraType: 'Ghost', shiny: true,
+ },
+ Elliot: {
+ species: 'Sinistea', ability: 'Natural Cure', item: 'Focus Sash', gender: 'N',
+ moves: ['Moonblast', 'Shadow Ball', 'Teatime'],
+ signatureMove: 'Tea Party',
+ evs: {def: 4, spa: 252, spe: 252}, nature: 'Modest', teraType: 'Water', shiny: true,
+ },
+ Elly: {
+ species: 'Thundurus', ability: 'Storm Surge', item: 'Heavy-Duty Boots', gender: 'F',
+ moves: ['Wildbolt Storm', 'Sandsear Storm', 'Volt Switch'],
+ signatureMove: 'Sustained Winds',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Ground',
+ },
+ Emboar02: {
+ species: 'Emboar', ability: 'Hogwash', item: 'Choice Band', gender: 'F',
+ moves: ['Flare Blitz', 'Wave Crash', 'Volt Tackle'],
+ signatureMove: 'Insert boar pun here',
+ // eslint-disable-next-line max-len
+ evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant', teraType: ['Fire', 'Water', 'Fighting', 'Electric'], shiny: 50 / 49,
+ },
+ Fame: {
+ species: 'Jumpluff', ability: 'Social Jumpluff Warrior', item: 'Leftovers', gender: 'F',
+ moves: ['Air Slash', 'Thunder Wave', 'Toxic'],
+ signatureMove: 'Solidarity',
+ evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Fire',
+ },
+ Felucia: {
+ species: 'Vespiquen', ability: 'Mountaineer', item: 'Red Card', gender: 'F',
+ moves: ['Strength Sap', ['Oblivion Wing', 'Night Shade'], ['Thief', 'Calm Mind', 'Toxic']],
+ signatureMove: 'Rigged Dice',
+ evs: {hp: 252, def: 4, spd: 252}, nature: 'Calm',
+ },
+ Froggeh: {
+ species: 'Toxicroak', ability: 'Super Luck', item: 'Leftovers', gender: 'M',
+ moves: ['Gunk Shot', 'Sucker Punch', 'Drain Punch'],
+ signatureMove: 'Cringe Dad Joke',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', teraType: 'Dark',
+ },
+ Frostyicelad: {
+ species: 'Qwilfish-Hisui', ability: 'Almost Frosty', item: 'Eviolite', gender: 'M',
+ moves: ['Darkest Lariat', 'Recover', ['Dire Claw', 'Meteor Mash', 'Bitter Malice']],
+ signatureMove: 'Puffy Spiky Destruction',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: ['Dark', 'Poison', 'Ghost', 'Steel'], shiny: 1024,
+ },
+ Frozoid: {
+ species: 'Gible', ability: 'Snowballer', item: 'Eviolite', gender: 'M',
+ moves: ['Dragon Dance', 'Dragon Rush', 'Precipice Blades'],
+ signatureMove: 'Flat out falling',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', teraType: 'Any', shiny: true,
+ },
+ Ganjafin: {
+ species: 'Wiglett', ability: 'Gambling Addiction', item: 'Eviolite', gender: 'M',
+ moves: ['Wrap', 'Cosmic Power', 'Strength Sap'],
+ signatureMove: 'Wiggling Strike',
+ evs: {hp: 252, def: 4, spe: 252}, nature: 'Timid', teraType: 'Grass', shiny: 2,
+ },
+ 'Haste Inky': {
+ species: 'Falinks', ability: 'Simple', item: 'Sitrus Berry', gender: 'N',
+ moves: ['Superpower', 'Ice Hammer', 'Throat Chop'],
+ signatureMove: 'Hasty Revolution',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Dark',
+ },
+ havi: {
+ species: 'Gastly', ability: 'Mensis Cage', item: 'Leftovers', gender: 'F',
+ moves: ['Astral Barrage', 'Moonblast', 'Substitute'],
+ signatureMove: 'Augur of Ebrietas',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Ghost',
+ },
+ Hecate: {
+ species: 'Mewtwo', ability: 'Hacking', item: 'Mewtwonite X', gender: 'F',
+ moves: ['Photon Geyser', 'Drain Punch', 'Iron Head'],
+ signatureMove: 'Testing in Production',
+ evs: {atk: 252, spa: 4, spe: 252}, nature: 'Jolly',
+ },
+ HiZo: {
+ species: 'Zoroark-Hisui', ability: 'Justified', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Last Respects', 'Blood Moon', 'Spirit Break'],
+ signatureMove: 'Scapegoat',
+ evs: {atk: 252, spa: 4, spe: 252}, nature: 'Naive', teraType: 'Fairy',
+ },
+ HoeenHero: {
+ species: 'Ludicolo', ability: 'Misspelled', item: 'Life Orb', gender: 'M',
+ moves: [['Hydro Pump', 'Surf'], 'Giga Drain', 'Ice Beam'],
+ signatureMove: 'Re-Program',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Water',
+ },
+ hsy: {
+ species: 'Ursaluna', ability: 'Hustle', item: 'Blunder Policy', gender: 'M',
+ moves: ['Drill Peck', 'Egg Bomb', 'Headlong Rush'],
+ signatureMove: 'Wonder Wing',
+ evs: {hp: 252, atk: 252, spe: 4}, nature: 'Adamant', teraType: 'Flying',
+ },
+ Hydrostatics: {
+ species: 'Pichu-Spiky-eared', ability: 'Hydrostatic Positivity', item: 'Eviolite', gender: 'M',
+ moves: ['Hydro Pump', 'Thunder', 'Ice Beam'],
+ signatureMove: 'Hydrostatics',
+ evs: {def: 4, spa: 252, spe: 252}, nature: 'Modest', teraType: 'Water', shiny: 2,
+ },
+ Imperial: {
+ species: 'Kyurem', ability: 'Frozen Fortuity', item: 'Never-Melt Ice', gender: 'N',
+ moves: ['Chilly Reception', 'Fusion Bolt', 'Fusion Flare'],
+ signatureMove: 'Storm Shroud',
+ evs: {atk: 128, spa: 128, spe: 252}, nature: 'Docile', teraType: 'Ice', shiny: 193,
+ },
+ 'Imperial-Black': {
+ species: 'Kyurem-Black', ability: 'Frozen Fortuity', item: 'Never-Melt Ice', gender: 'N',
+ moves: ['Mountain Gale', 'Fusion Bolt', 'Ice Shard'],
+ signatureMove: 'Storm Shroud',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', teraType: 'Electric', shiny: 193, skip: 'Imperial',
+ },
+ 'Imperial-White': {
+ species: 'Kyurem-White', ability: 'Frozen Fortuity', item: 'Never-Melt Ice', gender: 'N',
+ moves: ['Ice Beam', 'Freeze-Dry', 'Fusion Flare'],
+ signatureMove: 'Storm Shroud',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest', teraType: 'Fire', shiny: 193, skip: 'Imperial',
+ },
+ 'in the hills': {
+ species: 'Gligar', ability: 'Illiterit', item: 'Eviolite', gender: 'M',
+ moves: ['Roost', 'Knock Off', 'Tidy Up'],
+ signatureMove: '10-20-40',
+ evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', teraType: 'Water',
+ },
+ ironwater: {
+ species: 'Jirachi', ability: 'Good as Gold', item: 'Leftovers', gender: 'N',
+ moves: ['Swords Dance', 'Zen Headbutt', 'Hammer Arm'],
+ signatureMove: 'Jirachi Ban Hammer',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Steel',
+ },
+ 'Irpachuza!': {
+ species: 'Mr. Mime', ability: 'Mime knows best', item: 'Irpatuzinium Z', gender: 'M',
+ moves: [['Destiny Bond', 'Lunar Dance'], 'Parting Shot', 'Taunt'],
+ signatureMove: 'Fleur Cannon',
+ evs: {hp: 252, spa: 4, spd: 252}, nature: 'Modest',
+ },
+ Isaiah: {
+ species: 'Medicham', ability: 'Psychic Surge', item: 'Medichamite', gender: 'M',
+ moves: ['Close Combat', 'Knock Off', 'Triple Axel'],
+ signatureMove: 'Simple Gameplan',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', shiny: true,
+ },
+ 'J0rdy004 ♫': {
+ species: 'Vulpix-Alola', ability: 'Fortifying Frost', item: 'Never-Melt Ice', gender: 'N',
+ moves: ['Blizzard', 'Focus Blast', 'Recover'],
+ signatureMove: 'Snowy Samba',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', shiny: 4,
+ },
+ Kalalokki: {
+ species: 'Flamigo', ability: 'Scrappy', item: 'Choice Band', gender: 'M',
+ moves: ['Brave Bird', 'Sucker Punch', ['Drain Punch', 'Rapid Spin']],
+ signatureMove: 'Knot Weak',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: ['Fighting', 'Flying'],
+ },
+ Karthik: {
+ species: 'Staraptor', ability: 'Tough Claws', item: 'Choice Scarf', gender: 'M',
+ moves: ['Brave Bird', 'Head Smash', ['Flare Blitz', 'Wave Crash']],
+ signatureMove: 'Salvaged Sacrifice',
+ evs: {hp: 252, atk: 4, spe: 252}, nature: 'Adamant', teraType: 'Flying',
+ },
+ ken: {
+ species: 'Jigglypuff', ability: 'Aroma Veil', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Dazzling Gleam', 'Heal Order', 'Mortal Spin'],
+ signatureMove: ', (ac)',
+ evs: {hp: 252, def: 252, spa: 4}, nature: 'Bold', teraType: 'Any',
+ },
+ kenn: {
+ species: 'Larvitar', ability: 'Deserted Dunes', item: 'Eviolite', gender: 'M',
+ moves: ['Salt Cure', 'Shore Up', ['Precipice Blades', 'Headlong Rush']],
+ signatureMove: 'Stone Faced',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', teraType: 'Rock', shiny: true,
+ },
+ Kennedy: {
+ species: 'Cinderace', ability: 'Anfield', item: 'Berserk Gene', gender: 'M',
+ moves: ['Blaze Kick', ['Triple Kick', 'Trop Kick'], 'U-turn'],
+ signatureMove: 'Hat-Trick',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Any',
+ },
+ keys: {
+ species: 'Rayquaza', ability: 'Defeatist', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Oblivion Wing', 'Sizzly Slide', 'Bouncy Bubble'],
+ signatureMove: 'Protector of the Skies',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', shiny: 10,
+ },
+ kingbaruk: {
+ species: 'Wigglytuff', ability: 'Peer Pressure', item: 'Silk Scarf', gender: 'M',
+ moves: ['Trump Card', 'Encore', ['Protect', 'Thunder Wave']],
+ signatureMove: 'Platinum Record',
+ evs: {hp: 252, def: 4, spa: 252}, nature: 'Modest', teraType: 'Normal',
+ },
+ Kiwi: {
+ species: 'Minccino', ability: 'Sure Hit Sorcery', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Dynamic Punch', 'Substitute', 'Noble Roar'],
+ signatureMove: 'Mad Manifest',
+ evs: {hp: 252, atk: 144, spe: 112}, nature: 'Adamant', teraType: 'Fighting', shiny: true,
+ },
+ Klmondo: {
+ species: 'Cloyster', ability: 'Super Skilled', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Victory Dance', 'Icicle Spear', 'Rock Blast'],
+ signatureMove: 'The Better Water Shuriken',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', teraType: 'Water',
+ },
+ 'kolohe ✮彡': {
+ species: 'Pikachu', ability: 'Soul Surfer', item: 'Light Ball', gender: '',
+ moves: ['Thunder', 'Volt Switch', 'Bouncy Bubble'],
+ signatureMove: 'Hang Ten',
+ evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Water',
+ },
+ Kry: {
+ species: 'Mawile', ability: 'Flash Freeze', item: 'Mawilite', gender: 'M',
+ moves: ['Sucker Punch', 'Fire Lash', 'Play Rough'],
+ signatureMove: 'Attack of Opportunity',
+ evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant', shiny: 1024,
+ },
+ Lasen: {
+ species: 'Zekrom', ability: 'Idealized World', item: 'Leftovers', gender: 'M',
+ moves: ['Volt Switch', 'Fusion Bolt', 'Dragon Claw'],
+ signatureMove: 'Rise Above',
+ evs: {hp: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Fire',
+ },
+ 'Lets go shuckles': {
+ species: 'Shuckle', ability: 'Persistent', item: 'Berry Juice', gender: 'M',
+ moves: ['Diamond Storm', 'Headlong Rush', ['Glacial Lance', 'U-turn']],
+ signatureMove: 'Shuckle Power',
+ evs: {hp: 252, def: 252, spd: 4}, ivs: {spe: 0}, nature: 'Relaxed', teraType: 'Ground', shiny: 213,
+ },
+ Lily: {
+ species: 'Togedemaru', ability: 'Unaware', item: 'Leftovers', gender: 'F',
+ moves: ['Victory Dance', 'Plasma Fists', 'Meteor Mash'],
+ signatureMove: 'Power Up',
+ evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', teraType: 'Fairy', shiny: 1734,
+ },
+ Loethalion: {
+ species: 'Ralts', ability: 'Psychic Surge', item: 'Gardevoirite', gender: '',
+ moves: [['Esper Wing', 'Lumina Crash', 'Psychic Noise'], ['Agility', 'Calm Mind'], ['Draining Kiss', 'Matcha Gotcha']],
+ signatureMove: 'Darkmoon Cackle',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', shiny: true,
+ },
+ Lumari: {
+ species: 'Ponyta-Galar', ability: 'Pyrotechnic', item: 'Eviolite', gender: 'F',
+ moves: ['Substitute', 'Sappy Seed', 'Magical Torque'],
+ signatureMove: 'Mystical Bonfire',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Fairy',
+ },
+ Lunell: {
+ species: 'Vaporeon', ability: 'Low Tide, High Tide', item: 'Leftovers', gender: 'F',
+ moves: ['Hydro Pump', 'Thunder', 'Moonlight'],
+ signatureMove: 'Praise the Moon',
+ evs: {hp: 252, def: 4, spa: 252}, nature: 'Calm', teraType: 'Fairy', shiny: 512,
+ },
+ 'Lyna 氷': {
+ species: 'Dragonair', ability: 'Magic Aura', item: 'Eviolite', gender: 'F',
+ moves: ['Victory Dance', 'V-create', 'Glacial Lance'],
+ signatureMove: 'Wrath of Frozen Flames',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Dragon',
+ },
+ Maia: {
+ species: 'Litwick', ability: 'Power Abuse', item: 'Eviolite', gender: 'F',
+ moves: ['Shadow Ball', 'Flamethrower', 'Giga Drain'],
+ signatureMove: 'Body Count',
+ evs: {hp: 252, spa: 252, spd: 4}, nature: 'Modest', teraType: 'Ghost',
+ },
+ 'marillvibes ♫': {
+ species: 'Marill', ability: 'Huge Power', item: 'Life Orb', gender: 'M',
+ moves: ['Surging Strikes', 'Jet Punch', 'Close Combat'],
+ signatureMove: 'Good Vibes Only',
+ evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', teraType: 'Water', shiny: true,
+ },
+ maroon: {
+ species: 'Archaludon', ability: 'Built Different', item: 'Leftovers', gender: 'M',
+ moves: ['Body Press', 'Stealth Rock', 'Rapid Spin'],
+ signatureMove: 'Metal Blast',
+ evs: {hp: 252, def: 252, spa: 4}, nature: 'Bold', teraType: 'Flying',
+ },
+ Mathy: {
+ species: 'Furret', ability: 'Dynamic Typing', item: 'Big Root', gender: 'M',
+ moves: ['Bitter Blade', 'Swords Dance', 'Taunt'],
+ signatureMove: 'Breaking Change',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Ghost',
+ },
+ Merritty: {
+ species: 'Torchic', ability: 'End Round', item: 'Eviolite', gender: 'M',
+ moves: ['Quiver Dance', 'Fiery Dance', 'Strength Sap'],
+ signatureMove: 'New Bracket',
+ evs: {hp: 4, def: 36, spa: 196, spd: 36, spe: 236}, nature: 'Timid', teraType: 'Flying', shiny: true,
+ },
+ Meteordash: {
+ species: 'Tatsugiri', ability: 'TatsuGlare', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Spacial Rend', 'Steam Eruption', 'Glare'],
+ signatureMove: 'Plagiarism',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Steel',
+ },
+ Mex: {
+ species: 'Dialga', ability: 'Time Dilation', item: 'Adamant Orb', gender: 'N',
+ moves: ['Dragon Pulse', 'Flash Cannon', ['Aura Sphere', 'Volt Switch', 'Meteor Beam']],
+ signatureMove: 'Time Skip',
+ evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Steel', shiny: true,
+ },
+ Miojo: {
+ species: 'Spheal', ability: 'The Rolling Spheal', item: 'Choice Band', gender: '',
+ moves: ['Liquidation', 'Collision Course', 'Flip Turn'],
+ signatureMove: 'vruuuuuum',
+ evs: {hp: 8, atk: 252, spd: 4, spe: 244}, nature: 'Jolly', teraType: 'Fighting', shiny: 363,
+ },
+ Monkey: {
+ species: 'Infernape', ability: 'Harambe Hit', item: 'Blunder Policy', gender: 'M',
+ moves: ['Dynamic Punch', 'Plasma Fists', 'Fire Punch'],
+ signatureMove: 'Banana Breakfast',
+ evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', teraType: 'Electric', shiny: 69,
+ },
+ MyPearl: {
+ species: 'Latios', ability: 'Eon Call', item: 'Soul Dew', gender: 'M',
+ moves: ['Draco Meteor', 'Aura Sphere', 'Flip Turn'],
+ signatureMove: 'Eon Assault',
+ evs: {hp: 252, def: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', teraType: 'Steel', shiny: 50,
+ },
+ 'MyPearl-Latias': {
+ species: 'Latias', ability: 'Eon Call', item: 'Soul Dew', gender: 'F',
+ moves: ['Calm Mind', 'Recover', 'Thunder Wave'],
+ signatureMove: 'Eon Assault',
+ evs: {hp: 252, def: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', teraType: 'Steel', shiny: 50, skip: 'MyPearl',
+ },
+ Neko: {
+ species: 'Chien-Pao', ability: 'Weatherproof', item: 'Heavy-Duty Boots', gender: 'N',
+ moves: ['Swords Dance', 'Bitter Blade', ['Crunch', 'Sucker Punch']],
+ signatureMove: 'Quality Control Zoomies',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Fire',
+ },
+ Ney: {
+ species: 'Banette', ability: 'Insomnia', item: 'Banettite', gender: 'M',
+ moves: ['Destiny Bond', 'Will-O-Wisp', 'Parting Shot'],
+ signatureMove: 'Shadow Dance',
+ evs: {hp: 252, atk: 252, def: 4}, ivs: {spe: 0}, nature: 'Brave', shiny: true,
+ },
+ Notater517: {
+ species: 'Incineroar', ability: 'Vent Crosser', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Ceaseless Edge', 'Pyro Ball', ['Rapid Spin', 'Encore']],
+ signatureMove: '~nyaa',
+ evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant', teraType: 'Steel',
+ },
+ 'nya~ ❤': {
+ species: 'Delcatty', ability: 'Adorable Grace', item: 'Focus Band', gender: 'F',
+ moves: ['Freeze-Dry', 'Flamethrower', 'Volt Switch'],
+ signatureMove: ':3',
+ evs: {hp: 252, spa: 4, spe: 252}, nature: 'Naive', teraType: 'Ice',
+ },
+ pants: {
+ species: 'Annihilape', ability: 'Drifting', item: 'Leftovers', gender: 'M',
+ moves: ['Rage Fist', 'Drain Punch', 'Dragon Dance'],
+ signatureMove: 'Eerie Apathy',
+ evs: {hp: 240, spd: 252, spe: 16}, nature: 'Careful', teraType: 'Ghost',
+ },
+ PartMan: {
+ species: 'Chandelure', ability: 'C- Tier Shitposter', item: 'Leek', gender: 'M',
+ moves: ['Searing Shot', 'Hex', 'Morning Sun'],
+ signatureMove: 'Alting',
+ evs: {hp: 252, spa: 69, spe: 188}, nature: 'Timid',
+ },
+ 'Pastor Gigas': {
+ species: 'Regigigas', ability: 'God\'s Mercy', item: 'Clear Amulet', gender: 'N',
+ moves: ['Sacred Fire', 'Knock Off', 'Healing Wish'],
+ signatureMove: 'Call to Repentance',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', teraType: 'Fairy',
+ },
+ Peary: {
+ species: 'Klinklang', ability: 'Levitate', item: 'Pearyum Z', gender: '',
+ moves: ['Lock On', 'Sheer Cold', 'Substitute'],
+ signatureMove: 'Gear Grind',
+ evs: {hp: 252, def: 4, spe: 252}, nature: 'Jolly',
+ },
+ phoopes: {
+ species: 'Jynx', ability: 'I Did It Again', item: 'Focus Sash', gender: 'F',
+ moves: ['Lovely Kiss', 'Psychic', 'Amnesia'],
+ signatureMove: 'Gen 1 Blizzard',
+ evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Ice',
+ },
+ Pissog: {
+ species: 'Volcarona', ability: 'Drought', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Torch Song', 'Morning Sun', 'Solar Beam'],
+ signatureMove: 'A Song Of Ice And Fire',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Fire', shiny: 1096,
+ },
+ 'Pissog-Frosmoth': {
+ species: 'Frosmoth', ability: 'Snow Warning', item: 'Heavy-Duty Boots', gender: 'F',
+ moves: ['Blizzard', 'Chilly Reception', 'Aurora Veil'],
+ signatureMove: 'A Song Of Ice And Fire',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Ice', skip: 'Pissog', shiny: 1096,
+ },
+ pokemonvortex: {
+ species: 'Pokestar Smeargle', ability: 'Prankster', item: 'Focus Sash', gender: 'N',
+ moves: ['Spore', 'Extreme Evoboost', 'Substitute'],
+ signatureMove: 'Roulette',
+ evs: {hp: 252, def: 4, spe: 252}, nature: 'Timid', teraType: 'Ghost',
+ },
+ 'Princess Autumn': {
+ species: 'Altaria', ability: 'Last Hymn', item: 'Altarianite', gender: 'F',
+ moves: ['Earthquake', 'Amnesia', 'Roost'],
+ signatureMove: 'Cotton Candy Crush',
+ evs: {hp: 248, spd: 164, spe: 96}, nature: 'Careful', shiny: 4,
+ },
+ ptoad: {
+ species: 'Politoed', ability: 'Drizzle', item: 'Leftovers', gender: 'M',
+ moves: ['Jet Punch', 'Ice Punch', 'Earthquake'],
+ signatureMove: 'Pleek...',
+ evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant', teraType: 'Water',
+ },
+ Pulse_kS: {
+ species: 'Hydreigon', ability: 'Pulse Luck', item: 'Quick Claw', gender: 'N',
+ moves: ['Dark Pulse', 'Dragon Pulse', 'Origin Pulse'],
+ signatureMove: 'Luck Pulse',
+ evs: {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85}, nature: 'Serious', teraType: ['Steel', 'Poison'],
+ },
+ PYRO: {
+ species: 'Kingambit', ability: 'Hardcore Hustle', item: 'Leftovers', gender: 'M',
+ moves: ['Kowtow Cleave', 'Sucker Punch', 'Swords Dance'],
+ signatureMove: 'Meat Grinder',
+ evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant', teraType: 'Flying',
+ },
+ 'Quite Quiet': {
+ species: 'Ribombee', ability: 'Fancy Scarf', item: ['Life Orb', 'Leftovers'], gender: 'F',
+ moves: ['Roost', 'Moonblast', ['Aura Sphere', 'U-turn']],
+ signatureMove: '*Worried Noises*',
+ evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Flying',
+ // The nature not being Quiet is a crime
+ },
+ quziel: {
+ species: 'Chromera', ability: 'High Performance Computing', item: 'Covert Cloak', gender: 'M',
+ moves: ['Recover', 'Revelation Dance', 'Boomburst'],
+ signatureMove: 'Reshape',
+ evs: {def: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Ghost',
+ },
+ R8: {
+ species: 'Chansey', ability: 'Anti-Pelau', item: 'Eviolite', gender: 'N',
+ moves: ['Ice Beam', 'Thunderbolt', 'Flamethrower'],
+ signatureMove: 'Magic Trick',
+ evs: {hp: 252, spa: 252, spe: 4}, ivs: {atk: 0}, nature: 'Modest', teraType: 'Ice', shiny: 256,
+ },
+ Rainshaft: {
+ species: 'Xerneas', ability: 'Rainy\'s Aura', item: 'Rainium Z', gender: 'F',
+ moves: ['Psychic Noise', 'Sing', 'Alluring Voice'],
+ signatureMove: 'Sparkling Aria',
+ evs: {hp: 252, spa: 252, spe: 4}, nature: 'Mild',
+ },
+ Ransei: {
+ species: 'Audino-Mega', ability: 'Ultra Mystik', item: 'Safety Goggles', gender: 'M',
+ moves: ['Psystrike', 'Transform', 'Light of Ruin'],
+ signatureMove: 'Flood of Lore',
+ evs: {hp: 252, def: 4, spa: 252}, ivs: {spe: 0}, nature: 'Modest', shiny: 2,
+ },
+ ReturnToMonkey: {
+ species: 'Oranguru', ability: 'Monke See Monke Do', item: 'Twisted Spoon', gender: 'M',
+ moves: ['Hyper Voice', 'Psyshock', 'Focus Blast'],
+ signatureMove: 'Monke Magic',
+ evs: {hp: 252, def: 4, spa: 252}, ivs: {spe: 0}, nature: 'Quiet', teraType: 'Fighting',
+ },
+ Rissoux: {
+ species: 'Arcanine-Hisui', ability: 'Hard Headed', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Head Smash', 'Flare Blitz', 'Morning Sun'],
+ signatureMove: 'Call of the Wild',
+ evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', teraType: 'Grass',
+ },
+ RSB: {
+ species: 'Growlithe', ability: 'Hot Pursuit', item: 'Eviolite', gender: 'M',
+ moves: ['Fire Fang', 'Thunder Fang', 'Morning Sun'],
+ signatureMove: 'Confiscate',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Grass',
+ },
+ Rumia: {
+ species: 'Duskull', ability: 'Youkai of the Dusk', item: 'Eviolite', gender: 'N',
+ moves: ['Infernal Parade', 'Strength Sap', 'Mortal Spin'],
+ signatureMove: 'Midnight Bird',
+ evs: {hp: 252, def: 252, spa: 4}, nature: 'Bold', teraType: 'Poison', shiny: true,
+ },
+ Scotteh: {
+ species: 'Suicune', ability: 'Water Absorb', item: 'Leftovers', gender: '',
+ moves: ['Calm Mind', 'Scald', 'Ice Beam'],
+ signatureMove: 'Purification',
+ evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold', teraType: 'Water',
+ },
+ SexyMalasada: {
+ species: 'Typhlosion', ability: 'Ancestry Ritual', item: 'Life Orb', gender: 'M',
+ moves: ['Calm Mind', 'Aura Sphere', 'Flamethrower'],
+ signatureMove: 'Hexadecimal Fire',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Ghost', shiny: true,
+ },
+ sharp_claw: {
+ species: 'Sneasel', ability: 'Regenerator', item: 'Heavy-Duty Boots', gender: 'F',
+ moves: ['Knock Off', 'Ice Spinner', 'Ice Shard'],
+ signatureMove: 'Treacherous Traversal',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Poison',
+ },
+ 'sharp_claw-Rough': {
+ species: 'Sneasel-Hisui', ability: 'Regenerator', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Combat Torque', 'Noxious Torque', 'Mach Punch'],
+ signatureMove: 'Treacherous Traversal',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Poison', skip: 'sharp_claw',
+ },
+ Siegfried: {
+ species: 'Ampharos', ability: 'Static', item: 'Ampharosite', gender: 'M',
+ moves: ['Calm Mind', 'Thunderclap', 'Draco Meteor'],
+ signatureMove: 'BoltBeam',
+ evs: {hp: 252, spa: 252, spd: 4}, nature: 'Modest', shiny: 64,
+ },
+ 'Sificon~': {
+ species: 'Hoppip', ability: 'Perfectly Imperfect', item: 'Eviolite', gender: 'M',
+ moves: ['Strength Sap', 'Spikes', 'Seismic Toss'],
+ signatureMove: 'Grass Gaming',
+ evs: {hp: 252, def: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', teraType: 'Dragon',
+ },
+ skies: {
+ species: 'Chespin', ability: 'Spikes of Wrath', item: 'Sitrus Berry', gender: 'F',
+ moves: ['Bulk Up', 'Strength Sap', 'Body Press'],
+ signatureMove: 'Like..?',
+ evs: {hp: 252, atk: 4, def: 252}, nature: 'Impish', teraType: ['Water', 'Steel'], shiny: 15,
+ },
+ snake: {
+ species: 'Fidgit', ability: 'Persistent', item: ['Mental Herb', 'Covert Cloak', 'Leppa Berry'], gender: 'M',
+ moves: ['Tailwind', 'Revival Blessing', 'Taunt'],
+ signatureMove: 'Concept Relevant',
+ evs: {hp: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Water',
+ },
+ 'Soft Flex': {
+ species: 'Magnezone', ability: 'Adaptive Engineering', item: 'Leftovers', gender: 'N',
+ moves: ['Thunderbolt', 'Substitute', 'Parabolic Charge'],
+ signatureMove: 'Adaptive Beam',
+ evs: {hp: 248, def: 8, spe: 252}, nature: 'Timid', teraType: 'Flying',
+ },
+ 'Solaros & Lunaris': {
+ species: 'Scovillain', ability: 'Ride the Sun!', item: 'Heavy-Duty Boots', gender: 'N',
+ moves: ['Solar Beam', 'Growth', 'Moonlight'],
+ signatureMove: 'Mind Melt',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest', teraType: 'Fire',
+ },
+ Spiderz: {
+ species: 'Iron Thorns', ability: 'Poison Heal', item: 'Toxic Orb', gender: 'M',
+ moves: ['Spiky Shield', 'Stone Axe', 'Thousand Arrows'],
+ signatureMove: 'Shepherd of the Mafia Room',
+ evs: {hp: 252, atk: 252, spe: 4}, nature: 'Adamant', teraType: 'Steel', shiny: true,
+ },
+ spoo: {
+ species: 'Hemogoblin', ability: 'I Can Hear The Heart Beating As One', item: 'Heavy-Duty Boots', gender: 'N',
+ moves: ['Extreme Speed', 'Bitter Blade', 'Moonlight'],
+ signatureMove: 'Cardio Training',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', teraType: 'Fairy', shiny: 32,
+ },
+ Steorra: {
+ species: 'Kitsunoh', ability: 'Ghostly Hallow', item: 'Choice Band', gender: '',
+ moves: ['Meteor Mash', 'Shadow Strike', 'U-turn'],
+ signatureMove: 'Phantom Weapon',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: ['Steel', 'Ghost'], shiny: 2,
+ },
+ Struchni: {
+ species: 'Aggron', ability: 'Overasked Clause', item: 'Leftovers', gender: 'M',
+ moves: ['Detect', 'Encore', 'U-turn'],
+ signatureMove: '~randfact',
+ evs: {hp: 252, def: 16, spd: 240}, nature: 'Careful', teraType: 'Steel',
+ },
+ Sulo: {
+ species: 'Reuniclus', ability: 'Protection of the Gelatin', item: 'Life Orb', gender: 'M',
+ moves: ['Calm Mind', 'Draining Kiss', 'Stored Power'],
+ signatureMove: 'Vengeful Mood',
+ evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold', teraType: 'Fairy', shiny: true,
+ },
+ Swiffix: {
+ species: 'Piplup', ability: 'Stinky', item: 'Eviolite', gender: 'M',
+ moves: ['Water Shuriken', 'Nasty Plot', 'Roost'],
+ signatureMove: 'Stink Bomb',
+ evs: {hp: 252, def: 4, spa: 252}, nature: 'Modest', teraType: 'Water',
+ },
+ Syrinix: {
+ species: 'Ceruledge', ability: 'Sword of Ruin', item: 'Life Orb', gender: 'N',
+ moves: ['Poltergeist', 'Swords Dance', 'Bitter Blade'],
+ signatureMove: 'A Soul for a Soul',
+ evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', teraType: 'Fire',
+ },
+ Teclis: {
+ species: 'Gallade', ability: 'Sharpness', item: 'Life Orb', gender: 'M',
+ moves: ['Sacred Sword', 'Psycho Cut', 'Leaf Blade'],
+ signatureMove: 'Rising Sword',
+ evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', teraType: 'Psychic',
+ },
+ Tenshi: {
+ species: 'Sandshrew', ability: 'Sand Sleuth', item: 'Eviolite', gender: 'M',
+ moves: ['Precipice Blades', 'Dynamic Punch', 'Rapid Spin'],
+ signatureMove: 'SAND EAT',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Ground', shiny: 10,
+ },
+ TheJesucristoOsAma: {
+ species: 'Arceus', ability: 'The Grace Of Jesus Christ', gender: 'N',
+ item: [
+ 'Draco Plate', 'Dread Plate', 'Earth Plate', 'Fist Plate', 'Flame Plate', 'Icicle Plate', 'Insect Plate', 'Iron Plate', 'Meadow Plate',
+ 'Mind Plate', 'Pixie Plate', 'Sky Plate', 'Splash Plate', 'Spooky Plate', 'Stone Plate', 'Toxic Plate', 'Zap Plate',
+ ],
+ moves: ['Earthquake', 'Surf', 'Judgment'],
+ signatureMove: 'The Love Of Christ',
+ evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid',
+ },
+ Tico: {
+ species: 'Floette-Eternal', ability: 'Eternal Generator', item: ['Covert Cloak', 'Red Card'], gender: 'M',
+ moves: ['Light of Ruin', 'Lava Plume', 'Teleport'],
+ signatureMove: 'Eternal Wish',
+ evs: {hp: 252, def: 16, spe: 240}, nature: 'Timid', teraType: ['Fire', 'Steel'], shiny: false,
+ },
+ trace: {
+ species: 'Delphox', ability: 'Eyes of Eternity', item: 'Life Orb', gender: 'F',
+ moves: ['Calm Mind', 'Inferno', 'Recover'],
+ signatureMove: 'Chronostasis',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest', teraType: 'Psychic',
+ },
+ Tuthur: {
+ species: 'Scream Tail', ability: 'Poison Heal', item: 'Toxic Orb', gender: 'M',
+ moves: ['Spikes', 'Burning Bulwark', 'Encore'],
+ signatureMove: 'Symphonie du Ze\u0301ro',
+ evs: {hp: 244, def: 12, spe: 252}, nature: 'Timid', teraType: 'Water',
+ },
+ 'Two of Roses': {
+ species: 'Luxray', ability: 'As We See', item: 'Mirror Herb', gender: 'M',
+ moves: ['Knock Off', 'Supercell Slam', 'Trailblaze'],
+ signatureMove: 'Dilly Dally',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Flying', shiny: 1024,
+ },
+ UT: {
+ species: 'Talonflame', ability: 'Gale Guard', item: 'Leftovers', gender: 'M',
+ moves: ['Brave Bird', 'Roost', 'Defog'],
+ signatureMove: 'My Boys',
+ evs: {hp: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Flying',
+ },
+ Valerian: {
+ species: 'Lucario', ability: 'Full Bloom', item: 'Clear Amulet', gender: 'F',
+ moves: ['Bullet Punch', 'Mach Punch', 'Parting Shot'],
+ signatureMove: 'First Strike',
+ evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant', teraType: 'Fighting',
+ },
+ Venous: {
+ species: 'Mantine', ability: 'Concrete Over Water', item: 'Leftovers', gender: '',
+ moves: ['Scald', 'Roost', 'Clear Smog'],
+ signatureMove: 'Your Crippling Interest',
+ evs: {hp: 248, def: 244, spd: 16}, nature: 'Calm', teraType: 'Normal', shiny: 5,
+ },
+ 'Vio͜͡let': {
+ species: 'Ogerpon', ability: 'See No Evil, Hear No Evil, Speak No Evil', item: 'Berry Juice', gender: 'F',
+ moves: ['Crabhammer', 'Mighty Cleave', 'Fire Lash'],
+ signatureMove: 'building character',
+ evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', teraType: 'Stellar',
+ },
+ Vistar: {
+ species: 'Zeraora', ability: 'Prankster', item: 'Throat Spray', gender: 'M',
+ moves: ['Encore', 'Volt Switch', 'Copycat'],
+ signatureMove: 'Virtual Avatar',
+ evs: {def: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Electric',
+ },
+ 'Vistar-Idol': {
+ species: 'Zeraora', ability: 'Virtual Idol', item: 'Throat Spray', gender: 'M',
+ moves: ['Sparkling Aria', 'Torch Song', 'Teeter Dance'],
+ signatureMove: 'Overdrive',
+ evs: {def: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Electric', shiny: true, skip: 'Vistar',
+ },
+ vmnunes: {
+ species: 'Shaymin-Sky', ability: 'Wild Growth', item: 'Big Root', gender: 'M',
+ moves: ['Giga Drain', 'Oblivion Wing', 'Draining Kiss'],
+ signatureMove: 'Gracidea\'s Blessing',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', teraType: 'Fairy',
+ },
+ WarriorGallade: {
+ species: 'Tropius', ability: 'Primeval Harvest', item: 'Starf Berry', gender: ['M', 'M', 'F'],
+ moves: ['Sunny Day', 'Natural Gift', ['Bitter Blade', 'Sappy Seed', 'Stored Power', 'Counter']],
+ signatureMove: 'Fruitful Longbow',
+ // eslint-disable-next-line max-len
+ evs: {hp: 184, atk: 112, def: 36, spd: 88, spe: 88}, ivs: {spa: 29}, nature: 'Impish', teraType: ['Dragon', 'Psychic', 'Fighting'], shiny: 20,
+ },
+ Waves: {
+ species: 'Wailord', ability: 'Primordial Sea', item: 'Assault Vest', gender: 'M',
+ moves: ['Water Spout', 'Hurricane', 'Thunder'],
+ signatureMove: 'Torrential Drain',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest', teraType: 'Water',
+ },
+ WigglyTree: {
+ species: 'Sudowoodo', ability: 'Tree Stance', item: 'Liechi Berry', gender: 'M',
+ moves: ['Shell Smash', 'Wood Hammer', 'Head Smash'],
+ signatureMove: 'Perfect Mimic',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', teraType: 'Grass',
+ },
+ 'XpRienzo ☑◡☑': {
+ species: 'Reshiram', ability: 'Turboblaze', item: 'Choice Scarf', gender: 'M',
+ moves: ['Draco Meteor', 'Volt Switch', 'Flash Cannon'],
+ signatureMove: 'Scorching Truth',
+ evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest', teraType: 'Fire',
+ },
+ xy01: {
+ species: 'Blissey', ability: 'Panic', item: 'Heavy-Duty Boots', gender: 'M',
+ moves: ['Soft-Boiled', 'Seismic Toss', 'Aromatherapy'],
+ signatureMove: 'Poisonous Wind',
+ evs: {hp: 248, def: 252, spd: 8}, nature: 'Bold', teraType: 'Fairy', shiny: true,
+ },
+ 'yeet dab xd': {
+ species: 'Kecleon', ability: 'Treasure Bag', item: 'Silk Scarf', gender: 'M', happiness: 0,
+ moves: ['Frustration', 'Shadow Sneak', 'Fake Out'],
+ signatureMove: 'top kek',
+ evs: {hp: 252, atk: 4, spd: 252}, nature: 'Careful', teraType: 'Ghost',
+ },
+ 'Yellow Paint': {
+ species: 'Rotom-Frost', ability: 'Yellow Magic', item: 'Chilan Berry', gender: 'N',
+ moves: ['Thunderbolt', 'Blizzard', 'Ion Deluge'],
+ signatureMove: 'Whiteout',
+ evs: {hp: 252, spa: 252, spe: 4}, nature: 'Modest', teraType: 'Steel', shiny: 2,
+ },
+ 'yuki ♪': {
+ species: 'Ninetales-Alola', ability: 'Party Up', item: 'Light Clay', gender: '',
+ moves: ['Blizzard', 'Aurora Veil', ['Encore', 'Lovely Kiss']],
+ signatureMove: 'Tag, You\'re It!',
+ evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Ghost',
+ },
+ YveltalNL: {
+ species: 'Farigiraf', ability: 'Height Advantage', item: 'Leftovers', gender: 'M',
+ moves: ['Freezing Glare', 'Ice Beam', 'Slack Off'],
+ signatureMove: 'High Ground',
+ evs: {hp: 248, spa: 252, spe: 8}, nature: 'Modest', teraType: 'Ground',
+ },
+ za: {
+ species: 'Greedent', ability: 'Troll', item: 'Leftovers', gender: 'M',
+ moves: ['Headbutt', 'Iron Head', 'Foul Play'],
+ signatureMove: 'Shitpost',
+ evs: {hp: 252, def: 252, spe: 6}, nature: 'Impish', teraType: 'Steel',
+ },
+ Zalm: {
+ species: 'Weedle', ability: 'Water Bubble', item: 'Clear Amulet', gender: '',
+ moves: ['Surging Strikes', 'Attack Order', 'Dire Claw'],
+ signatureMove: 'Dud ur a fish',
+ evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', teraType: 'Water',
+ },
+ Zarel: {
+ species: 'Meloetta', ability: 'Tempo Change', item: 'Leftovers', gender: 'M',
+ moves: ['Psystrike', 'Armor Cannon', 'Obstruct'],
+ signatureMove: '@ts-ignore',
+ evs: {def: 4, spa: 252, spe: 252}, nature: 'Timid', teraType: 'Stellar',
+ },
+ 'Zarel-Pirouette': {
+ species: 'Meloetta-Pirouette', ability: 'Tempo Change', item: 'Leftovers', gender: 'M',
+ moves: ['Close Combat', 'Knock Off', 'Silk Trap'],
+ signatureMove: '@ts-ignore',
+ evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', teraType: 'Stellar', skip: 'Zarel',
+ },
+ zee: {
+ species: 'Lilligant-Hisui', ability: 'Chlorophyll', item: 'Heat Rock', gender: 'F',
+ moves: [['Close Combat', 'Axe Kick'], ['Solar Blade', 'Seed Bomb'], 'Victory Dance'],
+ signatureMove: 'Solar Summon',
+ evs: {hp: 80, atk: 176, spe: 252}, nature: 'Adamant', teraType: 'Fire',
+ },
+ zoro: {
+ species: 'Umbreon', ability: 'Nine Lives', item: 'Leftovers', gender: 'M',
+ moves: ['Wish', 'Protect', 'Toxic'],
+ signatureMove: 'Darkest Night',
+ evs: {hp: 252, def: 240, spd: 16}, nature: 'Calm', teraType: 'Steel', shiny: true,
+ },
+};
+
+const afdSSBSets: SSBSets = {
+ 'Fox': {
+ species: 'Fennekin', ability: 'No Ability', item: '', gender: '',
+ moves: [],
+ signatureMove: 'Super Metronome',
+ },
+};
+
+export class RandomStaffBrosTeams extends RandomTeams {
+ randomStaffBrosTeam(options: {inBattle?: boolean} = {}) {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const team: PokemonSet[] = [];
+ const debug: string[] = []; // Set this to a list of SSB sets to override the normal pool for debugging.
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+ const meme = ruleTable.has('dynamaxclause') && !debug.length;
+ const monotype = this.forceMonotype || (ruleTable.has('sametypeclause') ?
+ this.sample([...this.dex.types.names().filter(x => x !== 'Stellar')]) : false);
+
+ let pool = meme ? Object.keys(afdSSBSets) : Object.keys(ssbSets);
+ if (debug.length) {
+ while (debug.length < 6) {
+ const staff = this.sampleNoReplace(pool);
+ if (debug.includes(staff) || ssbSets[staff].skip) continue;
+ debug.push(staff);
+ }
+ pool = debug;
+ }
+ if (monotype && !debug.length) {
+ pool = pool.filter(x => this.dex.species.get(ssbSets[x].species).types.includes(monotype));
+ }
+ if (global.Config?.disabledssbsets?.length) {
+ pool = pool.filter(x => !global.Config.disabledssbsets.includes(this.dex.toID(x)));
+ }
+ const typePool: {[k: string]: number} = {};
+ let depth = 0;
+ while (pool.length && team.length < this.maxTeamSize) {
+ if (depth >= 200) throw new Error(`Infinite loop in Super Staff Bros team generation.`);
+ depth++;
+ const name = meme ? this.sample(pool) : this.sampleNoReplace(pool);
+ const ssbSet: SSBSet = meme ? this.dex.deepClone(afdSSBSets[name]) : this.dex.deepClone(ssbSets[name]);
+ if (ssbSet.skip) continue;
+
+ // Enforce typing limits
+ if (!(debug.length || monotype || meme)) { // Type limits are ignored for debugging, monotype, or memes.
+ const species = this.dex.species.get(ssbSet.species);
+
+ const weaknesses = [];
+ for (const type of this.dex.types.names()) {
+ const typeMod = this.dex.getEffectiveness(type, species.types);
+ if (typeMod > 0) weaknesses.push(type);
+ }
+ let rejected = false;
+ for (const type of weaknesses) {
+ if (typePool[type] === undefined) typePool[type] = 0;
+ if (typePool[type] >= 3) {
+ // Reject
+ rejected = true;
+ break;
+ }
+ }
+ if (ssbSet.ability === 'Wonder Guard') {
+ if (!typePool['wonderguard']) {
+ typePool['wonderguard'] = 1;
+ } else {
+ rejected = true;
+ }
+ }
+ if (rejected) continue;
+ // Update type counts
+ for (const type of weaknesses) {
+ typePool[type]++;
+ }
+ }
+
+ let teraType: string | undefined;
+ if (ssbSet.teraType) {
+ teraType = ssbSet.teraType === 'Any' ?
+ this.sample(this.dex.types.names()) :
+ this.sampleIfArray(ssbSet.teraType);
+ }
+ const moves: string[] = [];
+ while (moves.length < 3 && ssbSet.moves.length > 0) {
+ let move = this.sampleNoReplace(ssbSet.moves);
+ if (Array.isArray(move)) move = this.sampleNoReplace(move);
+ moves.push(this.dex.moves.get(move).name);
+ }
+ moves.push(this.dex.moves.get(ssbSet.signatureMove).name);
+ const ivs = {...{hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}, ...ssbSet.ivs};
+ if (!moves.map(x => this.dex.moves.get(x)).some(x => x.category === 'Physical')) {
+ ivs.atk = 0;
+ }
+
+ const set: PokemonSet = {
+ name,
+ species: ssbSet.species,
+ item: this.sampleIfArray(ssbSet.item),
+ ability: this.sampleIfArray(ssbSet.ability),
+ moves,
+ nature: ssbSet.nature ? Array.isArray(ssbSet.nature) ? this.sampleNoReplace(ssbSet.nature) : ssbSet.nature : 'Serious',
+ gender: ssbSet.gender ? this.sampleIfArray(ssbSet.gender) : this.sample(['M', 'F', 'N']),
+ evs: ssbSet.evs ? {...{hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}, ...ssbSet.evs} :
+ {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84},
+ ivs,
+ level: this.adjustLevel || ssbSet.level || 100,
+ happiness: typeof ssbSet.happiness === 'number' ? ssbSet.happiness : 255,
+ shiny: typeof ssbSet.shiny === 'number' ? this.randomChance(1, ssbSet.shiny) : !!ssbSet.shiny,
+ };
+
+ // Any set specific tweaks occur here.
+ if (set.name === "Felucia") {
+ const cmIndex = set.moves.indexOf("Calm Mind");
+ if (cmIndex >= 0 && set.moves.includes("Night Shade")) {
+ set.moves[cmIndex] = this.sample(["Thief", "Toxic"]);
+ }
+ }
+ if (set.name === "Frostyicelad" && set.shiny) {
+ const moveIndex = Math.max(set.moves.indexOf('Dire Claw'),
+ set.moves.indexOf('Meteor Mash'), set.moves.indexOf('Bitter Malice'));
+ if (moveIndex >= 0) {
+ set.moves[moveIndex] = 'Fishious Rend';
+ teraType = 'Water';
+ }
+ }
+
+ if (teraType) set.teraType = teraType;
+
+ team.push(set);
+
+ // Team specific tweaks occur here
+ // Swap last and second to last sets if last set has Illusion
+ if (team.length === this.maxTeamSize && (set.ability === 'Illusion')) {
+ team[this.maxTeamSize - 1] = team[this.maxTeamSize - 2];
+ team[this.maxTeamSize - 2] = set;
+ }
+ }
+ return team;
+ }
+}
+
+export default RandomStaffBrosTeams;
diff --git a/data/mods/gen9ssb/rulesets.ts b/data/mods/gen9ssb/rulesets.ts
new file mode 100644
index 000000000000..c5f7cf7d79b8
--- /dev/null
+++ b/data/mods/gen9ssb/rulesets.ts
@@ -0,0 +1,25 @@
+export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
+ sleepclausemod: {
+ inherit: true,
+ onSetStatus(status, target, source) {
+ if (source && source.isAlly(target)) {
+ return;
+ }
+ if (status.id === 'slp') {
+ for (const pokemon of target.side.pokemon) {
+ if (pokemon.hp && pokemon.status === 'slp') {
+ if (!pokemon.statusState.source || !pokemon.statusState.source.isAlly(pokemon)) {
+ if (source.hasAbility('ididitagain')) {
+ this.add('-ability', source, 'I Did It Again');
+ return;
+ }
+ this.add('-message', 'Sleep Clause Mod activated.');
+ this.hint("Sleep Clause Mod prevents players from putting more than one of their opponent's Pokémon to sleep at a time");
+ return false;
+ }
+ }
+ }
+ }
+ },
+ },
+};
diff --git a/data/mods/gen9ssb/scripts.ts b/data/mods/gen9ssb/scripts.ts
new file mode 100644
index 000000000000..3fe0e55a73b8
--- /dev/null
+++ b/data/mods/gen9ssb/scripts.ts
@@ -0,0 +1,2097 @@
+import {SSBSet} from "./random-teams";
+import {ChosenAction} from '../../../sim/side';
+import {FS} from '../../../lib';
+import {toID} from '../../../sim/dex-data';
+
+// Similar to User.usergroups. Cannot import here due to users.ts requiring Chat
+// This also acts as a cache, meaning ranks will only update when a hotpatch/restart occurs
+const usergroups: {[userid: string]: string} = {};
+const usergroupData = FS('config/usergroups.csv').readIfExistsSync().split('\n');
+for (const row of usergroupData) {
+ if (!toID(row)) continue;
+
+ const cells = row.split(',');
+ if (cells.length > 3) throw new Error(`Invalid entry when parsing usergroups.csv`);
+ usergroups[toID(cells[0])] = cells[1].trim() || ' ';
+}
+
+const roomauth: {[roomid: string]: {[userid: string]: string}} = {};
+/**
+ * Given a username and room, returns the auth they have in that room. Used for some conditional messages/effects.
+ * Each room is cached on the first call until the process is restarted.
+ */
+export function getRoomauth(name: string, room: string) {
+ const userid = toID(name);
+ const roomid = toID(room);
+ if (roomauth[roomid]) return roomauth[roomid][userid] || null;
+ const roomsList: any[] = JSON.parse(FS('config/chatrooms.json').readIfExistsSync() || '[]');
+ const roomData = roomsList.find(r => toID(r.title) === roomid);
+ if (!roomData) return null;
+ roomauth[roomid] = roomData.auth;
+ return roomauth[roomid][userid] || null;
+}
+
+export function getName(name: string): string {
+ const userid = toID(name);
+ if (!userid) throw new Error('No/Invalid name passed to getSymbol');
+
+ let group = usergroups[userid] || ' ';
+ if (name === 'Artemis') group = '@';
+ if (name === 'Jeopard-E' || name === 'Ice Kyubs') group = '*';
+ return Math.floor(Date.now() / 1000) + '|' + group + name;
+}
+
+export function enemyStaff(pokemon: Pokemon): string {
+ const foePokemon = pokemon.side.foe.active[0];
+ if (foePokemon.illusion) return foePokemon.illusion.name;
+ return foePokemon.name;
+}
+
+/** TODO: What happened to make this work weird?
+ * Assigns a new set to a Pokémon
+ * @param pokemon the Pokemon to assign the set to
+ * @param newSet the SSBSet to assign
+ */
+export function changeSet(context: Battle, pokemon: Pokemon, newSet: SSBSet, changeAbility = false) {
+ if (pokemon.transformed) return;
+ const evs: StatsTable = {
+ hp: newSet.evs?.hp || 0,
+ atk: newSet.evs?.atk || 0,
+ def: newSet.evs?.def || 0,
+ spa: newSet.evs?.spa || 0,
+ spd: newSet.evs?.spd || 0,
+ spe: newSet.evs?.spe || 0,
+ };
+ const ivs: StatsTable = {
+ hp: newSet.ivs?.hp || 31,
+ atk: newSet.ivs?.atk || 31,
+ def: newSet.ivs?.def || 31,
+ spa: newSet.ivs?.spa || 31,
+ spd: newSet.ivs?.spd || 31,
+ spe: newSet.ivs?.spe || 31,
+ };
+ pokemon.set.evs = evs;
+ pokemon.set.ivs = ivs;
+ if (newSet.nature) pokemon.set.nature = Array.isArray(newSet.nature) ? context.sample(newSet.nature) : newSet.nature;
+ const oldGender = pokemon.set.gender;
+ if ((pokemon.set.gender !== newSet.gender) && !Array.isArray(newSet.gender)) {
+ pokemon.set.gender = newSet.gender;
+ // @ts-ignore Shut up sharp_claw wanted this
+ pokemon.gender = newSet.gender;
+ }
+ const oldShiny = pokemon.set.shiny;
+ pokemon.set.shiny = (typeof newSet.shiny === 'number') ? context.randomChance(1, newSet.shiny) : !!newSet.shiny;
+ let percent = (pokemon.hp / pokemon.baseMaxhp);
+ if (newSet.species === 'Shedinja') percent = 1;
+ pokemon.formeChange(newSet.species, context.effect, true);
+ if (!pokemon.terastallized && newSet.teraType) {
+ const allTypes = context.dex.types.names();
+ pokemon.teraType = newSet.teraType === 'Any' ? context.sample(allTypes) :
+ Array.isArray(newSet.teraType) ? context.sample(newSet.teraType) : newSet.teraType;
+ }
+ const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) +
+ (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : '');
+ if (oldShiny !== pokemon.set.shiny || oldGender !== pokemon.gender) context.add('replace', pokemon, details);
+ if (changeAbility) pokemon.setAbility(newSet.ability as string, undefined, true);
+
+ pokemon.baseMaxhp = pokemon.species.name === 'Shedinja' ? 1 : Math.floor(Math.floor(
+ 2 * pokemon.species.baseStats.hp + pokemon.set.ivs.hp + Math.floor(pokemon.set.evs.hp / 4) + 100
+ ) * pokemon.level / 100 + 10);
+ const newMaxHP = pokemon.baseMaxhp;
+ pokemon.hp = Math.round(newMaxHP * percent);
+ pokemon.maxhp = newMaxHP;
+ context.add('-heal', pokemon, pokemon.getHealth, '[silent]');
+ if (pokemon.item) {
+ let item = newSet.item;
+ if (typeof item !== 'string') item = item[context.random(item.length)];
+ if (context.toID(item) !== (pokemon.item || pokemon.lastItem)) pokemon.setItem(item);
+ }
+ if (!pokemon.m.datacorrupt) {
+ const newMoves = changeMoves(context, pokemon, newSet.moves.concat(newSet.signatureMove));
+ pokemon.moveSlots = newMoves;
+ // Necessary so pokemon doesn't get 8 moves
+ (pokemon as any).baseMoveSlots = newMoves;
+ }
+ pokemon.canMegaEvo = context.actions.canMegaEvo(pokemon);
+ pokemon.canUltraBurst = context.actions.canUltraBurst(pokemon);
+ pokemon.canTerastallize = (pokemon.canTerastallize === null) ? null : context.actions.canTerastallize(pokemon);
+ context.add('message', `${pokemon.name} changed form!`);
+}
+
+export const PSEUDO_WEATHERS = [
+ // Normal pseudo weathers
+ 'fairylock', 'gravity', 'iondeluge', 'magicroom', 'mudsport', 'trickroom', 'watersport', 'wonderroom',
+ // SSB pseudo weathers
+ 'anfieldatmosphere',
+];
+
+/**
+ * Assigns new moves to a Pokemon
+ * @param pokemon The Pokemon whose moveset is to be modified
+ * @param newSet The set whose moves should be assigned
+ */
+export function changeMoves(context: Battle, pokemon: Pokemon, newMoves: (string | string[])[]) {
+ const carryOver = pokemon.moveSlots.slice().map(m => m.pp / m.maxpp);
+ // In case there are ever less than 4 moves
+ while (carryOver.length < 4) {
+ carryOver.push(1);
+ }
+ const result = [];
+ let slot = 0;
+ for (const newMove of newMoves) {
+ const moveName = Array.isArray(newMove) ? newMove[context.random(newMove.length)] : newMove;
+ const move = context.dex.moves.get(context.toID(moveName));
+ if (!move.id) continue;
+ const moveSlot = {
+ move: move.name,
+ id: move.id,
+ // eslint-disable-next-line max-len
+ pp: ((move.noPPBoosts || move.isZ) ? Math.floor(move.pp * carryOver[slot]) : Math.floor((move.pp * (8 / 5)) * carryOver[slot])),
+ maxpp: ((move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5),
+ target: move.target,
+ disabled: false,
+ disabledSource: '',
+ used: false,
+ };
+ result.push(moveSlot);
+ slot++;
+ }
+ return result;
+}
+
+export const Scripts: ModdedBattleScriptsData = {
+ gen: 9,
+ inherit: 'gen9',
+ boost(boost, target, source, effect, isSecondary, isSelf) {
+ if (this.event) {
+ if (!target) target = this.event.target;
+ if (!source) source = this.event.source;
+ if (!effect) effect = this.effect;
+ }
+ if (!target?.hp) return 0;
+ if (!target.isActive) return false;
+ if (this.gen > 5 && !target.side.foePokemonLeft()) return false;
+ boost = this.runEvent('ChangeBoost', target, source, effect, {...boost});
+ boost = target.getCappedBoost(boost);
+ boost = this.runEvent('TryBoost', target, source, effect, {...boost});
+ let success = null;
+ let boosted = isSecondary;
+ let boostName: BoostID;
+ if (target.set.name === 'phoopes') {
+ if (boost.spa) {
+ boost.spd = boost.spa;
+ }
+ if (boost.spd) {
+ boost.spa = boost.spd;
+ }
+ }
+ for (boostName in boost) {
+ const currentBoost: SparseBoostsTable = {
+ [boostName]: boost[boostName],
+ };
+ let boostBy = target.boostBy(currentBoost);
+ let msg = '-boost';
+ if (boost[boostName]! < 0 || target.boosts[boostName] === -6) {
+ msg = '-unboost';
+ boostBy = -boostBy;
+ }
+ if (boostBy) {
+ success = true;
+ switch (effect?.id) {
+ case 'bellydrum': case 'angerpoint':
+ this.add('-setboost', target, 'atk', target.boosts['atk'], '[from] ' + effect.fullname);
+ break;
+ case 'bellydrum2':
+ this.add(msg, target, boostName, boostBy, '[silent]');
+ this.hint("In Gen 2, Belly Drum boosts by 2 when it fails.");
+ break;
+ case 'zpower':
+ this.add(msg, target, boostName, boostBy, '[zeffect]');
+ break;
+ default:
+ if (!effect) break;
+ if (effect.effectType === 'Move') {
+ this.add(msg, target, boostName, boostBy);
+ } else if (effect.effectType === 'Item') {
+ this.add(msg, target, boostName, boostBy, '[from] item: ' + effect.name);
+ } else {
+ if (effect.effectType === 'Ability' && !boosted) {
+ this.add('-ability', target, effect.name, 'boost');
+ boosted = true;
+ }
+ this.add(msg, target, boostName, boostBy);
+ }
+ break;
+ }
+ this.runEvent('AfterEachBoost', target, source, effect, currentBoost);
+ } else if (effect?.effectType === 'Ability') {
+ if (isSecondary || isSelf) this.add(msg, target, boostName, boostBy);
+ } else if (!isSecondary && !isSelf) {
+ this.add(msg, target, boostName, boostBy);
+ }
+ }
+ this.runEvent('AfterBoost', target, source, effect, boost);
+ if (success) {
+ if (Object.values(boost).some(x => x > 0)) target.statsRaisedThisTurn = true;
+ if (Object.values(boost).some(x => x < 0)) target.statsLoweredThisTurn = true;
+ }
+ return success;
+ },
+ getActionSpeed(action) {
+ if (action.choice === 'move') {
+ let move = action.move;
+ if (action.zmove) {
+ const zMoveName = this.actions.getZMove(action.move, action.pokemon, true);
+ if (zMoveName) {
+ const zMove = this.dex.getActiveMove(zMoveName);
+ if (zMove.exists && zMove.isZ) {
+ move = zMove;
+ }
+ }
+ }
+ if (action.maxMove) {
+ const maxMoveName = this.actions.getMaxMove(action.maxMove, action.pokemon);
+ if (maxMoveName) {
+ const maxMove = this.actions.getActiveMaxMove(action.move, action.pokemon);
+ if (maxMove.exists && maxMove.isMax) {
+ move = maxMove;
+ }
+ }
+ }
+ // WHY DOES onModifyPriority TAKE A TARGET ARG WHEN IT IS ALWAYS NULL?????
+ const target = this.getTarget(action.pokemon, action.move, action.targetLoc);
+ // take priority from the base move, so abilities like Prankster only apply once
+ // (instead of compounding every time `getActionSpeed` is called)
+ let priority = this.dex.moves.get(move.id).priority;
+ // Grassy Glide priority
+ priority = this.singleEvent('ModifyPriority', move, null, action.pokemon, target, null, priority);
+ priority = this.runEvent('ModifyPriority', action.pokemon, target, move, priority);
+ action.priority = priority + action.fractionalPriority;
+ // In Gen 6, Quick Guard blocks moves with artificially enhanced priority.
+ if (this.gen > 5) action.move.priority = priority;
+ }
+
+ if (!action.pokemon) {
+ action.speed = 1;
+ } else {
+ action.speed = action.pokemon.getActionSpeed();
+ }
+ },
+ // For some god forsaken reason removing the boolean declarations causes the "battles dont end automatically" bug
+ // I don't know why but in any case please don't touch this unless you know how to fix this
+ faintMessages(lastFirst = false, forceCheck = false, checkWin = true) {
+ if (this.ended) return;
+ const length = this.faintQueue.length;
+ if (!length) {
+ if (forceCheck && this.checkWin()) return true;
+ return false;
+ }
+ if (lastFirst) {
+ this.faintQueue.unshift(this.faintQueue[this.faintQueue.length - 1]);
+ this.faintQueue.pop();
+ }
+ let faintQueueLeft, faintData;
+ while (this.faintQueue.length) {
+ faintQueueLeft = this.faintQueue.length;
+ faintData = this.faintQueue.shift()!;
+ const pokemon: Pokemon = faintData.target;
+ if (!pokemon.fainted &&
+ this.runEvent('BeforeFaint', pokemon, faintData.source, faintData.effect)) {
+ if (!pokemon.isActive) {
+ this.add('message', `${pokemon.name} was killed by ${pokemon.side.name}!`);
+ // TODO: Custom Protocol needed for teambar update
+ } else {
+ this.add('faint', pokemon);
+ }
+ if (pokemon.side.pokemonLeft) pokemon.side.pokemonLeft--;
+ if (pokemon.side.totalFainted < 100) pokemon.side.totalFainted++;
+ this.runEvent('Faint', pokemon, faintData.source, faintData.effect);
+ this.singleEvent('End', pokemon.getAbility(), pokemon.abilityState, pokemon);
+ pokemon.clearVolatile(false);
+ pokemon.fainted = true;
+ pokemon.illusion = null;
+ pokemon.isActive = false;
+ pokemon.isStarted = false;
+ delete pokemon.terastallized;
+ pokemon.side.faintedThisTurn = pokemon;
+ if (this.faintQueue.length >= faintQueueLeft) checkWin = true;
+ }
+ }
+
+ if (this.gen <= 1) {
+ // in gen 1, fainting skips the rest of the turn
+ // residuals don't exist in gen 1
+ this.queue.clear();
+ // Fainting clears accumulated Bide damage
+ for (const pokemon of this.getAllActive()) {
+ if (pokemon.volatiles['bide'] && pokemon.volatiles['bide'].damage) {
+ pokemon.volatiles['bide'].damage = 0;
+ this.hint("Desync Clause Mod activated!");
+ this.hint("In Gen 1, Bide's accumulated damage is reset to 0 when a Pokemon faints.");
+ }
+ }
+ } else if (this.gen <= 3 && this.gameType === 'singles') {
+ // in gen 3 or earlier, fainting in singles skips to residuals
+ for (const pokemon of this.getAllActive()) {
+ if (this.gen <= 2) {
+ // in gen 2, fainting skips moves only
+ this.queue.cancelMove(pokemon);
+ } else {
+ // in gen 3, fainting skips all moves and switches
+ this.queue.cancelAction(pokemon);
+ }
+ }
+ }
+
+ if (checkWin && this.checkWin(faintData)) return true;
+
+ if (faintData && length) {
+ this.runEvent('AfterFaint', faintData.target, faintData.source, faintData.effect, length);
+ }
+ return false;
+ },
+ checkMoveMakesContact(move, attacker, defender, announcePads) {
+ if (move.flags['contact'] && attacker.hasItem('protectivepads')) {
+ if (announcePads) {
+ this.add('-activate', defender, this.effect.fullname);
+ this.add('-activate', attacker, 'item: Protective Pads');
+ }
+ return false;
+ }
+ if (move.id === 'wonderwing') return false;
+ return !!move.flags['contact'];
+ },
+ // Fake switch needed for HiZo's Scapegoat
+ runAction(action) {
+ const pokemonOriginalHP = action.pokemon?.hp;
+ let residualPokemon: (readonly [Pokemon, number])[] = [];
+ // returns whether or not we ended in a callback
+ switch (action.choice) {
+ case 'start': {
+ for (const side of this.sides) {
+ if (side.pokemonLeft) side.pokemonLeft = side.pokemon.length;
+ }
+
+ this.add('start');
+
+ // Change Zacian/Zamazenta into their Crowned formes
+ for (const pokemon of this.getAllPokemon()) {
+ let rawSpecies: Species | null = null;
+ if (pokemon.species.id === 'zacian' && pokemon.item === 'rustedsword') {
+ rawSpecies = this.dex.species.get('Zacian-Crowned');
+ } else if (pokemon.species.id === 'zamazenta' && pokemon.item === 'rustedshield') {
+ rawSpecies = this.dex.species.get('Zamazenta-Crowned');
+ }
+ if (!rawSpecies) continue;
+ const species = pokemon.setSpecies(rawSpecies);
+ if (!species) continue;
+ pokemon.baseSpecies = rawSpecies;
+ pokemon.details = species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) +
+ (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : '');
+ // pokemon.setAbility(species.abilities['0'], null, true);
+ // pokemon.baseAbility = pokemon.ability;
+
+ const behemothMove: {[k: string]: string} = {
+ 'Zacian-Crowned': 'behemothblade', 'Zamazenta-Crowned': 'behemothbash',
+ };
+ const ironHead = pokemon.baseMoves.indexOf('ironhead');
+ if (ironHead >= 0) {
+ const move = this.dex.moves.get(behemothMove[rawSpecies.name]);
+ pokemon.baseMoveSlots[ironHead] = {
+ move: move.name,
+ id: move.id,
+ pp: (move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5,
+ maxpp: (move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5,
+ target: move.target,
+ disabled: false,
+ disabledSource: '',
+ used: false,
+ };
+ pokemon.moveSlots = pokemon.baseMoveSlots.slice();
+ }
+ }
+
+ if (this.format.onBattleStart) this.format.onBattleStart.call(this);
+ for (const rule of this.ruleTable.keys()) {
+ if ('+*-!'.includes(rule.charAt(0))) continue;
+ const subFormat = this.dex.formats.get(rule);
+ if (subFormat.onBattleStart) subFormat.onBattleStart.call(this);
+ }
+
+ for (const side of this.sides) {
+ for (let i = 0; i < side.active.length; i++) {
+ if (!side.pokemonLeft) {
+ // forfeited before starting
+ side.active[i] = side.pokemon[i];
+ side.active[i].fainted = true;
+ side.active[i].hp = 0;
+ } else {
+ this.actions.switchIn(side.pokemon[i], i);
+ }
+ }
+ }
+ for (const pokemon of this.getAllPokemon()) {
+ this.singleEvent('Start', this.dex.conditions.getByID(pokemon.species.id), pokemon.speciesState, pokemon);
+ }
+ this.midTurn = true;
+ break;
+ }
+
+ case 'move':
+ if (!action.pokemon.isActive) return false;
+ if (action.pokemon.fainted) return false;
+ this.actions.runMove(action.move, action.pokemon, action.targetLoc, {
+ sourceEffect: action.sourceEffect, zMove: action.zmove,
+ maxMove: action.maxMove, originalTarget: action.originalTarget,
+ });
+ break;
+ case 'megaEvo':
+ this.actions.runMegaEvo(action.pokemon);
+ break;
+ case 'runDynamax':
+ action.pokemon.addVolatile('dynamax');
+ action.pokemon.side.dynamaxUsed = true;
+ if (action.pokemon.side.allySide) action.pokemon.side.allySide.dynamaxUsed = true;
+ break;
+ case 'terastallize':
+ this.actions.terastallize(action.pokemon);
+ break;
+ case 'beforeTurnMove':
+ if (!action.pokemon.isActive) return false;
+ if (action.pokemon.fainted) return false;
+ this.debug('before turn callback: ' + action.move.id);
+ const target = this.getTarget(action.pokemon, action.move, action.targetLoc);
+ if (!target) return false;
+ if (!action.move.beforeTurnCallback) throw new Error(`beforeTurnMove has no beforeTurnCallback`);
+ action.move.beforeTurnCallback.call(this, action.pokemon, target);
+ break;
+ case 'priorityChargeMove':
+ if (!action.pokemon.isActive) return false;
+ if (action.pokemon.fainted) return false;
+ this.debug('priority charge callback: ' + action.move.id);
+ if (!action.move.priorityChargeCallback) throw new Error(`priorityChargeMove has no priorityChargeCallback`);
+ action.move.priorityChargeCallback.call(this, action.pokemon);
+ break;
+
+ case 'event':
+ this.runEvent(action.event!, action.pokemon);
+ break;
+ case 'team':
+ if (action.index === 0) {
+ action.pokemon.side.pokemon = [];
+ }
+ action.pokemon.side.pokemon.push(action.pokemon);
+ action.pokemon.position = action.index;
+ // we return here because the update event would crash since there are no active pokemon yet
+ return;
+
+ case 'pass':
+ return;
+ case 'instaswitch':
+ case 'switch':
+ if (action.choice === 'switch' && action.pokemon.status) {
+ this.singleEvent('CheckShow', this.dex.abilities.getByID('naturalcure' as ID), null, action.pokemon);
+ }
+ if (this.actions.switchIn(action.target, action.pokemon.position, action.sourceEffect) === 'pursuitfaint') {
+ // a pokemon fainted from Pursuit before it could switch
+ if (this.gen <= 4) {
+ // in gen 2-4, the switch still happens
+ this.hint("Previously chosen switches continue in Gen 2-4 after a Pursuit target faints.");
+ action.priority = -101;
+ this.queue.unshift(action);
+ break;
+ } else {
+ // in gen 5+, the switch is cancelled
+ this.hint("A Pokemon can't switch between when it runs out of HP and when it faints");
+ break;
+ }
+ }
+ break;
+ case 'revivalblessing':
+ action.pokemon.side.pokemonLeft++;
+ if (action.target.position < action.pokemon.side.active.length) {
+ this.queue.addChoice({
+ choice: 'instaswitch',
+ pokemon: action.target,
+ target: action.target,
+ });
+ }
+ action.target.fainted = false;
+ action.target.faintQueued = false;
+ action.target.subFainted = false;
+ action.target.status = '';
+ action.target.hp = 1; // Needed so hp functions works
+ action.target.sethp(action.target.maxhp / 2);
+ this.add('-heal', action.target, action.target.getHealth, '[from] move: Revival Blessing');
+ action.pokemon.side.removeSlotCondition(action.pokemon, 'revivalblessing');
+ break;
+ // @ts-ignore I'm sorry but it takes a lot
+ case 'scapegoat':
+ // @ts-ignore
+ const percent = (action.target.hp / action.target.baseMaxhp) * 100;
+ // @ts-ignore TODO: Client support for custom faint
+ action.target.faint();
+ if (percent > 66) {
+ this.add('message', `Your courage will be greatly rewarded.`);
+ // @ts-ignore
+ this.boost({atk: 3, spa: 3, spe: 3}, action.pokemon, action.pokemon, this.dex.moves.get('scapegoat'));
+ } else if (percent > 33) {
+ this.add('message', `Your offering was accepted.`);
+ // @ts-ignore
+ this.boost({atk: 2, spa: 2, spe: 2}, action.pokemon, action.pokemon, this.dex.moves.get('scapegoat'));
+ } else {
+ this.add('message', `Coward.`);
+ // @ts-ignore
+ this.boost({atk: 1, spa: 1, spe: 1}, action.pokemon, action.pokemon, this.dex.moves.get('scapegoat'));
+ }
+ // @ts-ignore
+ this.add(`c:|${getName((action.pokemon.illusion || action.pokemon).name)}|Don't worry, if this plan fails we can just blame ${action.target.name}`);
+ // @ts-ignore
+ action.pokemon.side.removeSlotCondition(action.pokemon, 'scapegoat');
+ break;
+ case 'runUnnerve':
+ this.singleEvent('PreStart', action.pokemon.getAbility(), action.pokemon.abilityState, action.pokemon);
+ break;
+ case 'runSwitch':
+ this.actions.runSwitch(action.pokemon);
+ break;
+ case 'runPrimal':
+ if (!action.pokemon.transformed) {
+ this.singleEvent('Primal', action.pokemon.getItem(), action.pokemon.itemState, action.pokemon);
+ }
+ break;
+ case 'shift':
+ if (!action.pokemon.isActive) return false;
+ if (action.pokemon.fainted) return false;
+ this.swapPosition(action.pokemon, 1);
+ break;
+
+ case 'beforeTurn':
+ this.eachEvent('BeforeTurn');
+ break;
+ case 'residual':
+ this.add('');
+ this.clearActiveMove(true);
+ this.updateSpeed();
+ residualPokemon = this.getAllActive().map(pokemon => [pokemon, pokemon.getUndynamaxedHP()] as const);
+ this.residualEvent('Residual');
+ this.add('upkeep');
+ break;
+ }
+
+ // phazing (Roar, etc)
+ for (const side of this.sides) {
+ for (const pokemon of side.active) {
+ if (pokemon.forceSwitchFlag) {
+ if (pokemon.hp) this.actions.dragIn(pokemon.side, pokemon.position);
+ pokemon.forceSwitchFlag = false;
+ }
+ }
+ }
+
+ this.clearActiveMove();
+
+ // fainting
+
+ this.faintMessages();
+ if (this.ended) return true;
+
+ // switching (fainted pokemon, U-turn, Baton Pass, etc)
+
+ if (!this.queue.peek() || (this.gen <= 3 && ['move', 'residual'].includes(this.queue.peek()!.choice))) {
+ // in gen 3 or earlier, switching in fainted pokemon is done after
+ // every move, rather than only at the end of the turn.
+ this.checkFainted();
+ } else if (action.choice === 'megaEvo' && this.gen === 7) {
+ this.eachEvent('Update');
+ // In Gen 7, the action order is recalculated for a Pokémon that mega evolves.
+ for (const [i, queuedAction] of this.queue.list.entries()) {
+ if (queuedAction.pokemon === action.pokemon && queuedAction.choice === 'move') {
+ this.queue.list.splice(i, 1);
+ queuedAction.mega = 'done';
+ this.queue.insertChoice(queuedAction, true);
+ break;
+ }
+ }
+ return false;
+ } else if (this.queue.peek()?.choice === 'instaswitch') {
+ return false;
+ }
+
+ if (this.gen >= 5) {
+ this.eachEvent('Update');
+ for (const [pokemon, originalHP] of residualPokemon) {
+ const maxhp = pokemon.getUndynamaxedHP(pokemon.maxhp);
+ if (pokemon.hp && pokemon.getUndynamaxedHP() <= maxhp / 2 && originalHP > maxhp / 2) {
+ this.runEvent('EmergencyExit', pokemon);
+ }
+ }
+ }
+
+ if (action.choice === 'runSwitch') {
+ const pokemon = action.pokemon;
+ if (pokemon.hp && pokemon.hp <= pokemon.maxhp / 2 && pokemonOriginalHP! > pokemon.maxhp / 2) {
+ this.runEvent('EmergencyExit', pokemon);
+ }
+ }
+
+ const switches = this.sides.map(
+ side => side.active.some(pokemon => pokemon && !!pokemon.switchFlag)
+ );
+
+ for (let i = 0; i < this.sides.length; i++) {
+ let reviveSwitch = false; // Used to ignore the fake switch for Revival Blessing
+ if (switches[i] && !this.canSwitch(this.sides[i])) {
+ for (const pokemon of this.sides[i].active) {
+ if (this.sides[i].slotConditions[pokemon.position]['revivalblessing'] ||
+ this.sides[i].slotConditions[pokemon.position]['scapegoat']) {
+ reviveSwitch = true;
+ continue;
+ }
+ pokemon.switchFlag = false;
+ }
+ if (!reviveSwitch) switches[i] = false;
+ } else if (switches[i]) {
+ for (const pokemon of this.sides[i].active) {
+ if (pokemon.hp && pokemon.switchFlag && pokemon.switchFlag !== 'revivalblessing' &&
+ pokemon.switchFlag !== 'scapegoat' && !pokemon.skipBeforeSwitchOutEventFlag) {
+ this.runEvent('BeforeSwitchOut', pokemon);
+ pokemon.skipBeforeSwitchOutEventFlag = true;
+ this.faintMessages(); // Pokemon may have fainted in BeforeSwitchOut
+ if (this.ended) return true;
+ if (pokemon.fainted) {
+ switches[i] = this.sides[i].active.some(sidePokemon => sidePokemon && !!sidePokemon.switchFlag);
+ }
+ }
+ }
+ }
+ }
+
+ for (const playerSwitch of switches) {
+ if (playerSwitch) {
+ this.makeRequest('switch');
+ return true;
+ }
+ }
+
+ if (this.gen < 5) this.eachEvent('Update');
+
+ if (this.gen >= 8 && (this.queue.peek()?.choice === 'move' || this.queue.peek()?.choice === 'runDynamax')) {
+ // In gen 8, speed is updated dynamically so update the queue's speed properties and sort it.
+ this.updateSpeed();
+ for (const queueAction of this.queue.list) {
+ if (queueAction.pokemon) this.getActionSpeed(queueAction);
+ }
+ this.queue.sort();
+ }
+
+ return false;
+ },
+ actions: {
+ terastallize(pokemon) {
+ if (pokemon.illusion && ['Ogerpon', 'Terapagos'].includes(pokemon.illusion.species.baseSpecies)) {
+ this.battle.singleEvent('End', this.dex.abilities.get('Illusion'), pokemon.abilityState, pokemon);
+ }
+
+ const type = pokemon.teraType;
+ this.battle.add('-terastallize', pokemon, type);
+ pokemon.terastallized = type;
+ for (const ally of pokemon.side.pokemon) {
+ ally.canTerastallize = null;
+ }
+ pokemon.addedType = '';
+ pokemon.knownType = true;
+ pokemon.apparentType = type;
+ if (pokemon.species.baseSpecies === 'Ogerpon') {
+ const tera = pokemon.species.id === 'ogerpon' ? 'tealtera' : 'tera';
+ pokemon.formeChange(pokemon.species.id + tera, null, true);
+ }
+ if (pokemon.species.name === 'Terapagos-Terastal' && type === 'Stellar') {
+ pokemon.formeChange('Terapagos-Stellar', null, true);
+ pokemon.baseMaxhp = Math.floor(Math.floor(
+ 2 * pokemon.species.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100
+ ) * pokemon.level / 100 + 10);
+ const newMaxHP = pokemon.baseMaxhp;
+ pokemon.hp = newMaxHP - (pokemon.maxhp - pokemon.hp);
+ pokemon.maxhp = newMaxHP;
+ this.battle.add('-heal', pokemon, pokemon.getHealth, '[silent]');
+ }
+ if (!pokemon.illusion && pokemon.name === 'Neko') {
+ this.battle.add(`c:|${getName('Neko')}|Possible thermal failure if operation continues (Meow on fire ?)`);
+ }
+ this.battle.runEvent('AfterTerastallization', pokemon);
+ },
+ modifyDamage(baseDamage, pokemon, target, move, suppressMessages) {
+ const tr = this.battle.trunc;
+ if (!move.type) move.type = '???';
+ const type = move.type;
+
+ baseDamage += 2;
+
+ if (move.spreadHit) {
+ // multi-target modifier (doubles only)
+ const spreadModifier = move.spreadModifier || (this.battle.gameType === 'freeforall' ? 0.5 : 0.75);
+ this.battle.debug('Spread modifier: ' + spreadModifier);
+ baseDamage = this.battle.modify(baseDamage, spreadModifier);
+ } else if (move.multihitType === 'parentalbond' && move.hit > 1) {
+ // Parental Bond modifier
+ const bondModifier = this.battle.gen > 6 && !pokemon.hasAbility('Almost Frosty') ? 0.25 : 0.5;
+ this.battle.debug(`Parental Bond modifier: ${bondModifier}`);
+ baseDamage = this.battle.modify(baseDamage, bondModifier);
+ }
+
+ // weather modifier
+ baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage);
+
+ // crit - not a modifier
+ const isCrit = target.getMoveHitData(move).crit;
+ if (isCrit) {
+ baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2)));
+ } else {
+ if (move.id === 'megidolaon') delete move.volatileStatus;
+ }
+
+ // random factor - also not a modifier
+ baseDamage = this.battle.randomizer(baseDamage);
+
+ // STAB
+ // The "???" type never gets STAB
+ // Not even if you Roost in Gen 4 and somehow manage to use
+ // Struggle in the same turn.
+ // (On second thought, it might be easier to get a MissingNo.)
+ if (type !== '???') {
+ let stab: number | [number, number] = 1;
+
+ const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type);
+ if (isSTAB) {
+ stab = 1.5;
+ }
+
+ // The Stellar tera type makes this incredibly confusing
+ // If the move's type does not match one of the user's base types,
+ // the Stellar tera type applies a one-time 1.2x damage boost for that type.
+ //
+ // If the move's type does match one of the user's base types,
+ // then the Stellar tera type applies a one-time 2x STAB boost for that type,
+ // and then goes back to using the regular 1.5x STAB boost for those types.
+ if (pokemon.terastallized === 'Stellar') {
+ if (!pokemon.stellarBoostedTypes.includes(type)) {
+ stab = isSTAB ? 2 : [4915, 4096];
+ if (!(pokemon.species.name === 'Terapagos-Stellar' || pokemon.species.baseSpecies === 'Meloetta')) {
+ pokemon.stellarBoostedTypes.push(type);
+ }
+ }
+ } else {
+ if (pokemon.terastallized === type && pokemon.getTypes(false, true).includes(type)) {
+ stab = 2;
+ }
+ stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab);
+ }
+
+ baseDamage = this.battle.modify(baseDamage, stab);
+ }
+
+ // types
+ let typeMod = target.runEffectiveness(move);
+ typeMod = this.battle.clampIntRange(typeMod, -6, 6);
+ target.getMoveHitData(move).typeMod = typeMod;
+ if (typeMod > 0) {
+ if (!suppressMessages) this.battle.add('-supereffective', target);
+
+ for (let i = 0; i < typeMod; i++) {
+ baseDamage *= 2;
+ }
+ }
+ if (typeMod < 0) {
+ if (!suppressMessages) this.battle.add('-resisted', target);
+
+ for (let i = 0; i > typeMod; i--) {
+ baseDamage = tr(baseDamage / 2);
+ }
+ }
+
+ if (isCrit && !suppressMessages) this.battle.add('-crit', target);
+
+ if (pokemon.status === 'brn' && move.category === 'Physical' &&
+ !pokemon.hasAbility(['guts', 'fortifiedmetal'])) {
+ if (this.battle.gen < 6 || move.id !== 'facade') {
+ baseDamage = this.battle.modify(baseDamage, 0.5);
+ }
+ }
+
+ // Generation 5, but nothing later, sets damage to 1 before the final damage modifiers
+ if (this.battle.gen === 5 && !baseDamage) baseDamage = 1;
+
+ // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
+ baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
+
+ if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) {
+ baseDamage = this.battle.modify(baseDamage, 0.25);
+ this.battle.add('-zbroken', target);
+ }
+
+ // Generation 6-7 moves the check for minimum 1 damage after the final modifier...
+ if (this.battle.gen !== 5 && !baseDamage) return 1;
+
+ // ...but 16-bit truncation happens even later, and can truncate to 0
+ return tr(baseDamage, 16);
+ },
+ switchIn(pokemon, pos, sourceEffect, isDrag) {
+ if (!pokemon || pokemon.isActive) {
+ this.battle.hint("A switch failed because the Pokémon trying to switch in is already in.");
+ return false;
+ }
+
+ const side = pokemon.side;
+ if (pos >= side.active.length) {
+ throw new Error(`Invalid switch position ${pos} / ${side.active.length}`);
+ }
+ const oldActive = side.active[pos];
+ const unfaintedActive = oldActive?.hp ? oldActive : null;
+ if (unfaintedActive) {
+ oldActive.beingCalledBack = true;
+ let switchCopyFlag: 'copyvolatile' | 'shedtail' | boolean = false;
+ if (sourceEffect && typeof (sourceEffect as Move).selfSwitch === 'string') {
+ switchCopyFlag = (sourceEffect as Move).selfSwitch!;
+ }
+ if (!oldActive.skipBeforeSwitchOutEventFlag && !isDrag) {
+ this.battle.runEvent('BeforeSwitchOut', oldActive);
+ if (this.battle.gen >= 5) {
+ this.battle.eachEvent('Update');
+ }
+ }
+ oldActive.skipBeforeSwitchOutEventFlag = false;
+ if (!this.battle.runEvent('SwitchOut', oldActive)) {
+ // Warning: DO NOT interrupt a switch-out if you just want to trap a pokemon.
+ // To trap a pokemon and prevent it from switching out, (e.g. Mean Look, Magnet Pull)
+ // use the 'trapped' flag instead.
+
+ // Note: Nothing in the real games can interrupt a switch-out (except Pursuit KOing,
+ // which is handled elsewhere); this is just for custom formats.
+ return false;
+ }
+ if (!oldActive.hp) {
+ // a pokemon fainted from Pursuit before it could switch
+ return 'pursuitfaint';
+ }
+
+ // will definitely switch out at this point
+
+ oldActive.illusion = null;
+ this.battle.singleEvent('End', oldActive.getAbility(), oldActive.abilityState, oldActive);
+
+ // if a pokemon is forced out by Whirlwind/etc or Eject Button/Pack, it can't use its chosen move
+ this.battle.queue.cancelAction(oldActive);
+
+ let newMove = null;
+ if (this.battle.gen === 4 && sourceEffect) {
+ newMove = oldActive.lastMove;
+ }
+ if (switchCopyFlag) {
+ pokemon.copyVolatileFrom(oldActive, switchCopyFlag);
+ }
+ if (newMove) pokemon.lastMove = newMove;
+ oldActive.clearVolatile();
+ }
+ if (oldActive) {
+ oldActive.isActive = false;
+ oldActive.isStarted = false;
+ oldActive.usedItemThisTurn = false;
+ oldActive.statsRaisedThisTurn = false;
+ oldActive.statsLoweredThisTurn = false;
+ // ptoad
+ delete oldActive.m.usedPleek;
+ delete oldActive.m.usedPlagiarism;
+ oldActive.position = pokemon.position;
+ pokemon.position = pos;
+ side.pokemon[pokemon.position] = pokemon;
+ side.pokemon[oldActive.position] = oldActive;
+ }
+ pokemon.isActive = true;
+ side.active[pos] = pokemon;
+ pokemon.activeTurns = 0;
+ pokemon.activeMoveActions = 0;
+ for (const moveSlot of pokemon.moveSlots) {
+ moveSlot.used = false;
+ }
+ this.battle.runEvent('BeforeSwitchIn', pokemon);
+ if (sourceEffect) {
+ this.battle.add(isDrag ? 'drag' : 'switch', pokemon, pokemon.getDetails, '[from] ' + sourceEffect);
+ } else {
+ this.battle.add(isDrag ? 'drag' : 'switch', pokemon, pokemon.getDetails);
+ }
+ pokemon.abilityOrder = this.battle.abilityOrder++;
+ if (isDrag && this.battle.gen === 2) pokemon.draggedIn = this.battle.turn;
+ pokemon.previouslySwitchedIn++;
+
+ if (isDrag && this.battle.gen >= 5) {
+ // runSwitch happens immediately so that Mold Breaker can make hazards bypass Clear Body and Levitate
+ this.battle.singleEvent('PreStart', pokemon.getAbility(), pokemon.abilityState, pokemon);
+ this.runSwitch(pokemon);
+ } else {
+ this.battle.queue.insertChoice({choice: 'runUnnerve', pokemon});
+ this.battle.queue.insertChoice({choice: 'runSwitch', pokemon});
+ }
+
+ return true;
+ },
+ canTerastallize(pokemon) {
+ if (
+ pokemon.terastallized || pokemon.species.isMega || pokemon.species.isPrimal || pokemon.species.forme === "Ultra" ||
+ pokemon.getItem().zMove || pokemon.canMegaEvo || pokemon.side.canDynamaxNow() || this.dex.gen !== 9
+ ) {
+ return null;
+ }
+ if (pokemon.baseSpecies.id === 'arceus') return null;
+ return pokemon.teraType;
+ },
+ // 1 mega per pokemon
+ runMegaEvo(pokemon) {
+ const speciesid = pokemon.canMegaEvo || pokemon.canUltraBurst;
+ if (!speciesid) return false;
+
+ if (speciesid === 'Trapinch' && pokemon.name === 'Arya') {
+ this.battle.add(`c:|${getName('Arya')}|Oh yeaaaaah!!!!! Finally??!! I can finally Mega-Evolve!!! Vamossss`);
+ }
+
+ pokemon.formeChange(speciesid, pokemon.getItem(), true);
+ if (pokemon.canMegaEvo) {
+ pokemon.canMegaEvo = null;
+ } else {
+ pokemon.canUltraBurst = null;
+ }
+
+ this.battle.runEvent('AfterMega', pokemon);
+
+ // Visual mega type changes here
+ if (['Arya'].includes(pokemon.name) && !pokemon.illusion) {
+ this.battle.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
+ }
+
+ this.battle.add('-ability', pokemon, `${pokemon.getAbility().name}`);
+
+ return true;
+ },
+
+ // Modded for Mega Rayquaza
+ canMegaEvo(pokemon) {
+ const species = pokemon.baseSpecies;
+ const altForme = species.otherFormes && this.dex.species.get(species.otherFormes[0]);
+ const item = pokemon.getItem();
+ // Mega Rayquaza
+ if (altForme?.isMega && altForme?.requiredMove &&
+ pokemon.baseMoves.includes(this.battle.toID(altForme.requiredMove)) && !item.zMove) {
+ return altForme.name;
+ }
+ // a hacked-in Megazard X can mega evolve into Megazard Y, but not into Megazard X
+ if (item.megaEvolves === species.baseSpecies && item.megaStone !== species.name) {
+ return item.megaStone;
+ }
+ return null;
+ },
+
+ // 1 Z per pokemon
+ canZMove(pokemon) {
+ if (pokemon.m.zMoveUsed ||
+ (pokemon.transformed &&
+ (pokemon.species.isMega || pokemon.species.isPrimal || pokemon.species.forme === "Ultra"))
+ ) return;
+ const item = pokemon.getItem();
+ if (!item.zMove) return;
+ if (item.itemUser && !item.itemUser.includes(pokemon.species.name)) return;
+ let atLeastOne = false;
+ let mustStruggle = true;
+ const zMoves: ZMoveOptions = [];
+ for (const moveSlot of pokemon.moveSlots) {
+ if (moveSlot.pp <= 0) {
+ zMoves.push(null);
+ continue;
+ }
+ if (!moveSlot.disabled) {
+ mustStruggle = false;
+ }
+ const move = this.dex.moves.get(moveSlot.move);
+ let zMoveName = this.getZMove(move, pokemon, true) || '';
+ if (zMoveName) {
+ const zMove = this.dex.moves.get(zMoveName);
+ if (!zMove.isZ && zMove.category === 'Status') zMoveName = "Z-" + zMoveName;
+ zMoves.push({move: zMoveName, target: zMove.target});
+ } else {
+ zMoves.push(null);
+ }
+ if (zMoveName) atLeastOne = true;
+ }
+ if (atLeastOne && !mustStruggle) return zMoves;
+ },
+
+ getZMove(move, pokemon, skipChecks) {
+ const item = pokemon.getItem();
+ if (!skipChecks) {
+ if (pokemon.m.zMoveUsed) return;
+ if (!item.zMove) return;
+ if (item.itemUser && !item.itemUser.includes(pokemon.species.name)) return;
+ const moveData = pokemon.getMoveData(move);
+ // Draining the PP of the base move prevents the corresponding Z-move from being used.
+ if (!moveData?.pp) return;
+ }
+
+ if (move.name === item.zMoveFrom) {
+ return item.zMove as string;
+ } else if (item.zMove === true && move.type === item.zMoveType) {
+ if (move.category === "Status") {
+ return move.name;
+ } else if (move.zMove?.basePower) {
+ return this.Z_MOVES[move.type];
+ }
+ }
+ },
+
+ hitStepAccuracy(targets: Pokemon[], pokemon: Pokemon, move: ActiveMove) {
+ const hitResults = [];
+ for (const [i, target] of targets.entries()) {
+ this.battle.activeTarget = target;
+ // calculate true accuracy
+ let accuracy = move.accuracy;
+ if (move.ohko) { // bypasses accuracy modifiers
+ if (!target.isSemiInvulnerable()) {
+ accuracy = 30;
+ if (move.ohko === 'Ice' && this.battle.gen >= 7 && !pokemon.hasType('Ice')) {
+ accuracy = 20;
+ }
+ if (!target.volatiles['dynamax'] && pokemon.level >= target.level &&
+ (move.ohko === true || !target.hasType(move.ohko))) {
+ accuracy += (pokemon.level - target.level);
+ } else {
+ this.battle.add('-immune', target, '[ohko]');
+ hitResults[i] = false;
+ continue;
+ }
+ }
+ } else {
+ accuracy = this.battle.runEvent('ModifyAccuracy', target, pokemon, move, accuracy);
+ if (accuracy !== true) {
+ let boost = 0;
+ if (!move.ignoreAccuracy) {
+ const boosts = this.battle.runEvent('ModifyBoost', pokemon, null, null, {...pokemon.boosts});
+ boost = this.battle.clampIntRange(boosts['accuracy'], -6, 6);
+ }
+ if (!move.ignoreEvasion) {
+ const boosts = this.battle.runEvent('ModifyBoost', target, null, null, {...target.boosts});
+ boost = this.battle.clampIntRange(boost - boosts['evasion'], -6, 6);
+ }
+ if (boost > 0) {
+ accuracy = this.battle.trunc(accuracy * (3 + boost) / 3);
+ } else if (boost < 0) {
+ accuracy = this.battle.trunc(accuracy * 3 / (3 - boost));
+ }
+ }
+ }
+ if (move.alwaysHit || (move.id === 'toxic' && this.battle.gen >= 8 && pokemon.hasType('Poison')) ||
+ (move.target === 'self' && move.category === 'Status' && !target.isSemiInvulnerable())) {
+ accuracy = true; // bypasses ohko accuracy modifiers
+ } else {
+ accuracy = this.battle.runEvent('Accuracy', target, pokemon, move, accuracy);
+ }
+ if (accuracy !== true && !this.battle.randomChance(accuracy, 100)) {
+ if (move.smartTarget) {
+ move.smartTarget = false;
+ } else {
+ if (pokemon.hasAbility('misspelled')) {
+ // Custom miss for HoeenHero
+ // Typo the move
+ const typoedMove = move.name.charAt(0) + move.name.charAt(2) + move.name.charAt(1) + move.name.slice(3);
+
+ // Modify the used move to be typoed.
+ const logEntries = this.battle.log[this.battle.lastMoveLine].split('|');
+ logEntries[3] = typoedMove;
+ this.battle.log[this.battle.lastMoveLine] = logEntries.join('|');
+
+ this.battle.attrLastMove('[still]');
+ this.battle.add('-message', `But it was misspelled!`);
+ } else {
+ if (!move.spreadHit) this.battle.attrLastMove('[miss]');
+ this.battle.add('-miss', pokemon, target);
+ }
+ }
+ if (!move.ohko && pokemon.hasItem('blunderpolicy') && pokemon.useItem()) {
+ this.battle.boost({spe: 2}, pokemon);
+ }
+ hitResults[i] = false;
+ continue;
+ }
+ hitResults[i] = true;
+ }
+ return hitResults;
+ },
+
+ runMove(moveOrMoveName, pokemon, targetLoc, options) {
+ pokemon.activeMoveActions++;
+ const zMove = options?.zMove;
+ const maxMove = options?.maxMove;
+ const externalMove = options?.externalMove;
+ const originalTarget = options?.originalTarget;
+ let sourceEffect = options?.sourceEffect;
+ let target = this.battle.getTarget(pokemon, maxMove || zMove || moveOrMoveName, targetLoc, originalTarget);
+ let baseMove = this.dex.getActiveMove(moveOrMoveName);
+ const priority = baseMove.priority;
+ const pranksterBoosted = baseMove.pranksterBoosted;
+ if (baseMove.id !== 'struggle' && !zMove && !maxMove && !externalMove) {
+ const changedMove = this.battle.runEvent('OverrideAction', pokemon, target, baseMove);
+ if (changedMove && changedMove !== true) {
+ baseMove = this.dex.getActiveMove(changedMove);
+ baseMove.priority = priority;
+ if (pranksterBoosted) baseMove.pranksterBoosted = pranksterBoosted;
+ target = this.battle.getRandomTarget(pokemon, baseMove);
+ }
+ }
+ let move = baseMove;
+ if (zMove) {
+ move = this.getActiveZMove(baseMove, pokemon);
+ } else if (maxMove) {
+ move = this.getActiveMaxMove(baseMove, pokemon);
+ }
+
+ move.isExternal = externalMove;
+
+ this.battle.setActiveMove(move, pokemon, target);
+
+ /* if (pokemon.moveThisTurn) {
+ // THIS IS PURELY A SANITY CHECK
+ // DO NOT TAKE ADVANTAGE OF THIS TO PREVENT A POKEMON FROM MOVING;
+ // USE this.battle.queue.cancelMove INSTEAD
+ this.battle.debug('' + pokemon.id + ' INCONSISTENT STATE, ALREADY MOVED: ' + pokemon.moveThisTurn);
+ this.battle.clearActiveMove(true);
+ return;
+ } */
+ const willTryMove = this.battle.runEvent('BeforeMove', pokemon, target, move);
+ if (!willTryMove) {
+ this.battle.runEvent('MoveAborted', pokemon, target, move);
+ this.battle.clearActiveMove(true);
+ // The event 'BeforeMove' could have returned false or null
+ // false indicates that this counts as a move failing for the purpose of calculating Stomping Tantrum's base power
+ // null indicates the opposite, as the Pokemon didn't have an option to choose anything
+ pokemon.moveThisTurnResult = willTryMove;
+ return;
+ }
+ if (move.beforeMoveCallback) {
+ if (move.beforeMoveCallback.call(this.battle, pokemon, target, move)) {
+ this.battle.clearActiveMove(true);
+ pokemon.moveThisTurnResult = false;
+ return;
+ }
+ }
+ pokemon.lastDamage = 0;
+ let lockedMove;
+ if (!externalMove) {
+ lockedMove = this.battle.runEvent('LockMove', pokemon);
+ if (lockedMove === true) lockedMove = false;
+ if (!lockedMove) {
+ if (!pokemon.deductPP(baseMove, null, target) && (move.id !== 'struggle')) {
+ this.battle.add('cant', pokemon, 'nopp', move);
+ this.battle.clearActiveMove(true);
+ pokemon.moveThisTurnResult = false;
+ return;
+ }
+ } else {
+ sourceEffect = this.dex.conditions.get('lockedmove');
+ }
+ pokemon.moveUsed(move, targetLoc);
+ }
+
+ // Dancer Petal Dance hack
+ // TODO: implement properly
+ const noLock = externalMove && !pokemon.volatiles['lockedmove'];
+
+ if (zMove) {
+ if (pokemon.illusion) {
+ this.battle.singleEvent('End', this.dex.abilities.get('Illusion'), pokemon.abilityState, pokemon);
+ }
+ this.battle.add('-zpower', pokemon);
+ // 1 z move per poke
+ pokemon.m.zMoveUsed = true;
+ }
+
+ const oldActiveMove = move;
+
+ const moveDidSomething = this.useMove(baseMove, pokemon, {target, sourceEffect, zMove, maxMove});
+ this.battle.lastSuccessfulMoveThisTurn = moveDidSomething ? this.battle.activeMove && this.battle.activeMove.id : null;
+ if (this.battle.activeMove) move = this.battle.activeMove;
+ this.battle.singleEvent('AfterMove', move, null, pokemon, target, move);
+ this.battle.runEvent('AfterMove', pokemon, target, move);
+
+ // Dancer's activation order is completely different from any other event, so it's handled separately
+ if (move.flags['dance'] && moveDidSomething && !move.isExternal) {
+ const dancers = [];
+ for (const currentPoke of this.battle.getAllActive()) {
+ if (pokemon === currentPoke) continue;
+ if (currentPoke.hasAbility(['dancer', 'virtualidol']) && !currentPoke.isSemiInvulnerable()) {
+ dancers.push(currentPoke);
+ }
+ }
+ // Dancer activates in order of lowest speed stat to highest
+ // Note that the speed stat used is after any volatile replacements like Speed Swap,
+ // but before any multipliers like Agility or Choice Scarf
+ // Ties go to whichever Pokemon has had the ability for the least amount of time
+ dancers.sort(
+ (a, b) => -(b.storedStats['spe'] - a.storedStats['spe']) || b.abilityOrder - a.abilityOrder
+ );
+ const targetOf1stDance = this.battle.activeTarget!;
+ for (const dancer of dancers) {
+ if (this.battle.faintMessages()) break;
+ if (dancer.fainted) continue;
+ this.battle.add('-activate', dancer, 'ability: ' + dancer.getAbility().name);
+ const dancersTarget = !targetOf1stDance.isAlly(dancer) && pokemon.isAlly(dancer) ?
+ targetOf1stDance :
+ pokemon;
+ const dancersTargetLoc = dancer.getLocOf(dancersTarget);
+ this.runMove(move.id, dancer, dancersTargetLoc, {sourceEffect: dancer.getAbility(), externalMove: true});
+ }
+ }
+ if (noLock && pokemon.volatiles['lockedmove']) delete pokemon.volatiles['lockedmove'];
+ this.battle.faintMessages();
+ this.battle.checkWin();
+
+ if (this.battle.gen <= 4) {
+ // In gen 4, the outermost move is considered the last move for Copycat
+ this.battle.activeMove = oldActiveMove;
+ }
+ },
+ useMoveInner(moveOrMoveName, pokemon, options) {
+ let target = options?.target;
+ let sourceEffect = options?.sourceEffect;
+ const zMove = options?.zMove;
+ const maxMove = options?.maxMove;
+ if (!sourceEffect && this.battle.effect.id) sourceEffect = this.battle.effect;
+ if (sourceEffect && ['instruct', 'custapberry'].includes(sourceEffect.id)) sourceEffect = null;
+
+ let move = this.dex.getActiveMove(moveOrMoveName);
+ pokemon.lastMoveUsed = move;
+ if (move.id === 'weatherball' && zMove) {
+ // Z-Weather Ball only changes types if it's used directly,
+ // not if it's called by Z-Sleep Talk or something.
+ this.battle.singleEvent('ModifyType', move, null, pokemon, target, move, move);
+ if (move.type !== 'Normal') sourceEffect = move;
+ }
+ if (zMove || (move.category !== 'Status' && sourceEffect && (sourceEffect as ActiveMove).isZ)) {
+ move = this.getActiveZMove(move, pokemon);
+ }
+ if (maxMove && move.category !== 'Status') {
+ // Max move outcome is dependent on the move type after type modifications from ability and the move itself
+ this.battle.singleEvent('ModifyType', move, null, pokemon, target, move, move);
+ this.battle.runEvent('ModifyType', pokemon, target, move, move);
+ }
+ if (maxMove || (move.category !== 'Status' && sourceEffect && (sourceEffect as ActiveMove).isMax)) {
+ move = this.getActiveMaxMove(move, pokemon);
+ }
+
+ if (this.battle.activeMove) {
+ move.priority = this.battle.activeMove.priority;
+ if (!move.hasBounced) move.pranksterBoosted = this.battle.activeMove.pranksterBoosted;
+ }
+ const baseTarget = move.target;
+ let targetRelayVar = {target};
+ targetRelayVar = this.battle.runEvent('ModifyTarget', pokemon, target, move, targetRelayVar, true);
+ if (targetRelayVar.target !== undefined) target = targetRelayVar.target;
+ if (target === undefined) target = this.battle.getRandomTarget(pokemon, move);
+ if (move.target === 'self' || move.target === 'allies') {
+ target = pokemon;
+ }
+ if (sourceEffect) {
+ move.sourceEffect = sourceEffect.id;
+ move.ignoreAbility = (sourceEffect as ActiveMove).ignoreAbility;
+ }
+ let moveResult = false;
+
+ this.battle.setActiveMove(move, pokemon, target);
+
+ this.battle.singleEvent('ModifyType', move, null, pokemon, target, move, move);
+ this.battle.singleEvent('ModifyMove', move, null, pokemon, target, move, move);
+ if (baseTarget !== move.target) {
+ // Target changed in ModifyMove, so we must adjust it here
+ // Adjust before the next event so the correct target is passed to the
+ // event
+ target = this.battle.getRandomTarget(pokemon, move);
+ }
+ move = this.battle.runEvent('ModifyType', pokemon, target, move, move);
+ move = this.battle.runEvent('ModifyMove', pokemon, target, move, move);
+ if (baseTarget !== move.target) {
+ // Adjust again
+ target = this.battle.getRandomTarget(pokemon, move);
+ }
+ if (!move || pokemon.fainted) {
+ return false;
+ }
+
+ let attrs = '';
+
+ let movename = move.name;
+ if (move.id === 'hiddenpower') movename = 'Hidden Power';
+ if (sourceEffect) attrs += `|[from]${sourceEffect.fullname}`;
+ if (zMove && move.isZ === true) {
+ attrs = '|[anim]' + movename + attrs;
+ movename = 'Z-' + movename;
+ }
+ this.battle.addMove('move', pokemon, movename, target + attrs);
+
+ if (zMove) this.runZPower(move, pokemon);
+
+ if (!target) {
+ this.battle.attrLastMove('[notarget]');
+ this.battle.add(this.battle.gen >= 5 ? '-fail' : '-notarget', pokemon);
+ return false;
+ }
+
+ const {targets, pressureTargets} = pokemon.getMoveTargets(move, target);
+ if (targets.length) {
+ target = targets[targets.length - 1]; // in case of redirection
+ }
+
+ // Pursuit Clones support
+ const pursuitClones = ['pursuit', 'trivialpursuit', 'attackofopportunity'];
+ const callerMoveForPressure = sourceEffect && (sourceEffect as ActiveMove).pp ? sourceEffect as ActiveMove : null;
+ if (!sourceEffect || callerMoveForPressure || pursuitClones.includes(sourceEffect.id)) {
+ let extraPP = 0;
+ for (const source of pressureTargets) {
+ const ppDrop = this.battle.runEvent('DeductPP', source, pokemon, move);
+ if (ppDrop !== true) {
+ extraPP += ppDrop || 0;
+ }
+ }
+ if (extraPP > 0) {
+ pokemon.deductPP(callerMoveForPressure || moveOrMoveName, extraPP);
+ }
+ }
+
+ if (!this.battle.singleEvent('TryMove', move, null, pokemon, target, move) ||
+ !this.battle.runEvent('TryMove', pokemon, target, move)) {
+ move.mindBlownRecoil = false;
+ return false;
+ }
+
+ this.battle.singleEvent('UseMoveMessage', move, null, pokemon, target, move);
+
+ if (move.ignoreImmunity === undefined) {
+ move.ignoreImmunity = (move.category === 'Status');
+ }
+
+ if (this.battle.gen !== 4 && move.selfdestruct === 'always') {
+ this.battle.faint(pokemon, pokemon, move);
+ }
+
+ let damage: number | false | undefined | '' = false;
+ if (move.target === 'all' || move.target === 'foeSide' || move.target === 'allySide' || move.target === 'allyTeam') {
+ damage = this.tryMoveHit(targets, pokemon, move);
+ if (damage === this.battle.NOT_FAIL) pokemon.moveThisTurnResult = null;
+ if (damage || damage === 0 || damage === undefined) moveResult = true;
+ } else {
+ if (!targets.length) {
+ this.battle.attrLastMove('[notarget]');
+ this.battle.add(this.battle.gen >= 5 ? '-fail' : '-notarget', pokemon);
+ return false;
+ }
+ if (this.battle.gen === 4 && move.selfdestruct === 'always') {
+ this.battle.faint(pokemon, pokemon, move);
+ }
+ moveResult = this.trySpreadMoveHit(targets, pokemon, move);
+ }
+ if (move.selfBoost && moveResult) this.moveHit(pokemon, pokemon, move, move.selfBoost, false, true);
+ if (!pokemon.hp) {
+ this.battle.faint(pokemon, pokemon, move);
+ }
+
+ if (!moveResult) {
+ this.battle.singleEvent('MoveFail', move, null, target, pokemon, move);
+ return false;
+ }
+
+ if (
+ !move.negateSecondary &&
+ !(move.hasSheerForce && pokemon.hasAbility('sheerforce')) &&
+ !move.flags['futuremove']
+ ) {
+ const originalHp = pokemon.hp;
+ this.battle.singleEvent('AfterMoveSecondarySelf', move, null, pokemon, target, move);
+ this.battle.runEvent('AfterMoveSecondarySelf', pokemon, target, move);
+ if (pokemon && pokemon !== target && move.category !== 'Status') {
+ if (pokemon.hp <= pokemon.maxhp / 2 && originalHp > pokemon.maxhp / 2) {
+ this.battle.runEvent('EmergencyExit', pokemon, pokemon);
+ }
+ }
+ }
+
+ return true;
+ },
+ hitStepMoveHitLoop(targets, pokemon, move) { // Temporary name
+ let damage: (number | boolean | undefined)[] = [];
+ for (const i of targets.keys()) {
+ damage[i] = 0;
+ }
+ move.totalDamage = 0;
+ pokemon.lastDamage = 0;
+ let targetHits = move.multihit || 1;
+ if (Array.isArray(targetHits)) {
+ // yes, it's hardcoded... meh
+ if (targetHits[0] === 2 && targetHits[1] === 5) {
+ if (this.battle.gen >= 5) {
+ // 35-35-15-15 out of 100 for 2-3-4-5 hits
+ targetHits = this.battle.sample([2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5]);
+ if (targetHits < 4 && pokemon.hasItem('loadeddice')) {
+ targetHits = 5 - this.battle.random(2);
+ }
+ } else {
+ targetHits = this.battle.sample([2, 2, 2, 3, 3, 3, 4, 5]);
+ }
+ } else {
+ targetHits = this.battle.random(targetHits[0], targetHits[1] + 1);
+ }
+ }
+ if (targetHits === 10 && pokemon.hasItem('loadeddice')) targetHits -= this.battle.random(7);
+ targetHits = Math.floor(targetHits);
+ let nullDamage = true;
+ let moveDamage: (number | boolean | undefined)[] = [];
+ // There is no need to recursively check the ´sleepUsable´ flag as Sleep Talk can only be used while asleep.
+ const isSleepUsable = move.sleepUsable || this.dex.moves.get(move.sourceEffect).sleepUsable;
+
+ let targetsCopy: (Pokemon | false | null)[] = targets.slice(0);
+ let hit: number;
+ for (hit = 1; hit <= targetHits; hit++) {
+ if (damage.includes(false)) break;
+ if (hit > 1 && pokemon.status === 'slp' && (!isSleepUsable || this.battle.gen === 4)) break;
+ if (targets.every(target => !target?.hp)) break;
+ move.hit = hit;
+ if (move.smartTarget && targets.length > 1) {
+ targetsCopy = [targets[hit - 1]];
+ damage = [damage[hit - 1]];
+ } else {
+ targetsCopy = targets.slice(0);
+ }
+ const target = targetsCopy[0]; // some relevant-to-single-target-moves-only things are hardcoded
+ if (target && typeof move.smartTarget === 'boolean') {
+ if (hit > 1) {
+ this.battle.addMove('-anim', pokemon, move.name, target);
+ } else {
+ this.battle.retargetLastMove(target);
+ }
+ }
+
+ // like this (Triple Kick)
+ if (target && move.multiaccuracy && hit > 1) {
+ let accuracy = move.accuracy;
+ const boostTable = [1, 4 / 3, 5 / 3, 2, 7 / 3, 8 / 3, 3];
+ if (accuracy !== true) {
+ if (!move.ignoreAccuracy) {
+ const boosts = this.battle.runEvent('ModifyBoost', pokemon, null, null, {...pokemon.boosts});
+ const boost = this.battle.clampIntRange(boosts['accuracy'], -6, 6);
+ if (boost > 0) {
+ accuracy *= boostTable[boost];
+ } else {
+ accuracy /= boostTable[-boost];
+ }
+ }
+ if (!move.ignoreEvasion) {
+ const boosts = this.battle.runEvent('ModifyBoost', target, null, null, {...target.boosts});
+ const boost = this.battle.clampIntRange(boosts['evasion'], -6, 6);
+ if (boost > 0) {
+ accuracy /= boostTable[boost];
+ } else if (boost < 0) {
+ accuracy *= boostTable[-boost];
+ }
+ }
+ }
+ accuracy = this.battle.runEvent('ModifyAccuracy', target, pokemon, move, accuracy);
+ if (!move.alwaysHit) {
+ accuracy = this.battle.runEvent('Accuracy', target, pokemon, move, accuracy);
+ if (accuracy !== true && !this.battle.randomChance(accuracy, 100)) break;
+ }
+ }
+
+ const moveData = move;
+ if (!moveData.flags) moveData.flags = {};
+
+ let moveDamageThisHit;
+ // Modifies targetsCopy (which is why it's a copy)
+ [moveDamageThisHit, targetsCopy] = this.spreadMoveHit(targetsCopy, pokemon, move, moveData);
+ // When Dragon Darts targets two different pokemon, targetsCopy is a length 1 array each hit
+ // so spreadMoveHit returns a length 1 damage array
+ if (move.smartTarget) {
+ moveDamage.push(...moveDamageThisHit);
+ } else {
+ moveDamage = moveDamageThisHit;
+ }
+
+ if (!moveDamage.some(val => val !== false)) break;
+ nullDamage = false;
+
+ for (const [i, md] of moveDamage.entries()) {
+ if (move.smartTarget && i !== hit - 1) continue;
+ // Damage from each hit is individually counted for the
+ // purposes of Counter, Metal Burst, and Mirror Coat.
+ damage[i] = md === true || !md ? 0 : md;
+ // Total damage dealt is accumulated for the purposes of recoil (Parental Bond).
+ move.totalDamage += damage[i] as number;
+ }
+ if (move.mindBlownRecoil) {
+ const hpBeforeRecoil = pokemon.hp;
+ this.battle.damage(Math.round(pokemon.maxhp / 2), pokemon, pokemon, this.dex.conditions.get(move.id), true);
+ move.mindBlownRecoil = false;
+ if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) {
+ this.battle.runEvent('EmergencyExit', pokemon, pokemon);
+ }
+ }
+ this.battle.eachEvent('Update');
+ if (!pokemon.hp && targets.length === 1) {
+ hit++; // report the correct number of hits for multihit moves
+ break;
+ }
+ }
+ // hit is 1 higher than the actual hit count
+ if (hit === 1) return damage.fill(false);
+ if (nullDamage) damage.fill(false);
+ this.battle.faintMessages(false, false, !pokemon.hp);
+ if (move.multihit && typeof move.smartTarget !== 'boolean') {
+ this.battle.add('-hitcount', targets[0], hit - 1);
+ }
+
+ if ((move.recoil || move.id === 'chloroblast') && move.totalDamage) {
+ const hpBeforeRecoil = pokemon.hp;
+ this.battle.damage(this.calcRecoilDamage(move.totalDamage, move, pokemon), pokemon, pokemon, 'recoil');
+ if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) {
+ this.battle.runEvent('EmergencyExit', pokemon, pokemon);
+ }
+ }
+
+ if (move.struggleRecoil) {
+ const hpBeforeRecoil = pokemon.hp;
+ let recoilDamage;
+ if (this.dex.gen >= 5) {
+ recoilDamage = this.battle.clampIntRange(Math.round(pokemon.baseMaxhp / 4), 1);
+ } else {
+ recoilDamage = this.battle.clampIntRange(this.battle.trunc(pokemon.maxhp / 4), 1);
+ }
+ this.battle.directDamage(recoilDamage, pokemon, pokemon, {id: 'strugglerecoil'} as Condition);
+ if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) {
+ this.battle.runEvent('EmergencyExit', pokemon, pokemon);
+ }
+ }
+
+ // smartTarget messes up targetsCopy, but smartTarget should in theory ensure that targets will never fail, anyway
+ if (move.smartTarget) {
+ targetsCopy = targets.slice(0);
+ }
+
+ for (const [i, target] of targetsCopy.entries()) {
+ if (target && pokemon !== target) {
+ target.gotAttacked(move, moveDamage[i] as number | false | undefined, pokemon);
+ if (typeof moveDamage[i] === 'number') {
+ target.timesAttacked += move.smartTarget ? 1 : hit - 1;
+ }
+ }
+ }
+
+ if (move.ohko && !targets[0].hp) this.battle.add('-ohko');
+
+ if (!damage.some(val => !!val || val === 0)) return damage;
+
+ this.battle.eachEvent('Update');
+
+ this.afterMoveSecondaryEvent(targetsCopy.filter(val => !!val) as Pokemon[], pokemon, move);
+
+ if (!move.negateSecondary && !(move.hasSheerForce && pokemon.hasAbility('sheerforce'))) {
+ for (const [i, d] of damage.entries()) {
+ // There are no multihit spread moves, so it's safe to use move.totalDamage for multihit moves
+ // The previous check was for `move.multihit`, but that fails for Dragon Darts
+ const curDamage = targets.length === 1 ? move.totalDamage : d;
+ if (typeof curDamage === 'number' && targets[i].hp) {
+ const targetHPBeforeDamage = (targets[i].hurtThisTurn || 0) + curDamage;
+ if (targets[i].hp <= targets[i].maxhp / 2 && targetHPBeforeDamage > targets[i].maxhp / 2) {
+ this.battle.runEvent('EmergencyExit', targets[i], pokemon);
+ }
+ }
+ }
+ }
+
+ return damage;
+ },
+ hitStepTryImmunity(targets, pokemon, move) {
+ const hitResults = [];
+ for (const [i, target] of targets.entries()) {
+ if (this.battle.gen >= 6 && move.flags['powder'] && target !== pokemon && !this.dex.getImmunity('powder', target)) {
+ this.battle.debug('natural powder immunity');
+ this.battle.add('-immune', target);
+ hitResults[i] = false;
+ } else if (!this.battle.singleEvent('TryImmunity', move, {}, target, pokemon, move)) {
+ this.battle.add('-immune', target);
+ hitResults[i] = false;
+ } else if (this.battle.gen >= 7 && move.pranksterBoosted &&
+ // Prankster Clone immunity
+ (pokemon.hasAbility('prankster') || pokemon.hasAbility('youkaiofthedusk') ||
+ pokemon.volatiles['irpachuza'] || pokemon.hasAbility('neverendingfhunt')) &&
+ !targets[i].isAlly(pokemon) && !this.dex.getImmunity('prankster', target)) {
+ this.battle.debug('natural prankster immunity');
+ if (!target.illusion) this.battle.hint("Since gen 7, Dark is immune to Prankster moves.");
+ this.battle.add('-immune', target);
+ hitResults[i] = false;
+ } else {
+ hitResults[i] = true;
+ }
+ }
+ return hitResults;
+ },
+ spreadMoveHit(targets, pokemon, moveOrMoveName, hitEffect, isSecondary, isSelf) {
+ // Hardcoded for single-target purposes
+ // (no spread moves have any kind of onTryHit handler)
+ const target = targets[0];
+ let damage: (number | boolean | undefined)[] = [];
+ for (const i of targets.keys()) {
+ damage[i] = true;
+ }
+ const move = this.dex.getActiveMove(moveOrMoveName);
+ let hitResult: boolean | number | null = true;
+ let moveData = hitEffect as ActiveMove;
+ if (!moveData) moveData = move;
+ if (!moveData.flags) moveData.flags = {};
+ if (move.target === 'all' && !isSelf) {
+ hitResult = this.battle.singleEvent('TryHitField', moveData, {}, target || null, pokemon, move);
+ } else if ((move.target === 'foeSide' || move.target === 'allySide' || move.target === 'allyTeam') && !isSelf) {
+ hitResult = this.battle.singleEvent('TryHitSide', moveData, {}, target || null, pokemon, move);
+ } else if (target) {
+ hitResult = this.battle.singleEvent('TryHit', moveData, {}, target, pokemon, move);
+ }
+ if (!hitResult) {
+ if (hitResult === false) {
+ this.battle.add('-fail', pokemon);
+ this.battle.attrLastMove('[still]');
+ }
+ return [[false], targets]; // single-target only
+ }
+
+ // 0. check for substitute
+ if (!isSecondary && !isSelf) {
+ if (move.target !== 'all' && move.target !== 'allyTeam' && move.target !== 'allySide' && move.target !== 'foeSide') {
+ damage = this.tryPrimaryHitEvent(damage, targets, pokemon, move, moveData, isSecondary);
+ }
+ }
+
+ for (const i of targets.keys()) {
+ if (damage[i] === this.battle.HIT_SUBSTITUTE) {
+ damage[i] = true;
+ targets[i] = null;
+ }
+ if (targets[i] && isSecondary && !moveData.self) {
+ damage[i] = true;
+ }
+ if (!damage[i]) targets[i] = false;
+ }
+ // 1. call to this.battle.getDamage
+ damage = this.getSpreadDamage(damage, targets, pokemon, move, moveData, isSecondary, isSelf);
+
+ for (const i of targets.keys()) {
+ if (damage[i] === false) targets[i] = false;
+ }
+
+ // 2. call to this.battle.spreadDamage
+ damage = this.battle.spreadDamage(damage, targets, pokemon, move);
+
+ for (const i of targets.keys()) {
+ if (damage[i] === false) targets[i] = false;
+ }
+
+ // 3. onHit event happens here
+ damage = this.runMoveEffects(damage, targets, pokemon, move, moveData, isSecondary, isSelf);
+
+ for (const i of targets.keys()) {
+ if (!damage[i] && damage[i] !== 0) targets[i] = false;
+ }
+
+ // steps 4 and 5 can mess with this.battle.activeTarget, which needs to be preserved for Dancer
+ const activeTarget = this.battle.activeTarget;
+
+ // 4. self drops (start checking for targets[i] === false here)
+ if (moveData.self && !move.selfDropped) this.selfDrops(targets, pokemon, move, moveData, isSecondary);
+
+ // 5. secondary effects
+ if (moveData.secondaries) this.secondaries(targets, pokemon, move, moveData, isSelf);
+
+ this.battle.activeTarget = activeTarget;
+
+ // 6. force switch
+ if (moveData.forceSwitch) damage = this.forceSwitch(damage, targets, pokemon, move);
+
+ for (const i of targets.keys()) {
+ if (!damage[i] && damage[i] !== 0) targets[i] = false;
+ }
+
+ const damagedTargets: Pokemon[] = [];
+ const damagedDamage = [];
+ for (const [i, t] of targets.entries()) {
+ if (typeof damage[i] === 'number' && t) {
+ damagedTargets.push(t);
+ damagedDamage.push(damage[i]);
+ }
+ }
+ const pokemonOriginalHP = pokemon.hp;
+ if (damagedDamage.length && !isSecondary && !isSelf) {
+ this.battle.runEvent('DamagingHit', damagedTargets, pokemon, move, damagedDamage);
+ if (moveData.onAfterHit) {
+ for (const t of damagedTargets) {
+ this.battle.singleEvent('AfterHit', moveData, {}, t, pokemon, move);
+ }
+ }
+ if (pokemon.hp && pokemon.hp <= pokemon.maxhp / 2 && pokemonOriginalHP > pokemon.maxhp / 2) {
+ this.battle.runEvent('EmergencyExit', pokemon);
+ }
+ }
+
+ return [damage, targets];
+ },
+ },
+ pokemon: {
+ isGrounded(negateImmunity) {
+ if ('gravity' in this.battle.field.pseudoWeather) return true;
+ if ('ingrain' in this.volatiles && this.battle.gen >= 4) return true;
+ if ('smackdown' in this.volatiles) return true;
+ const item = (this.ignoringItem() ? '' : this.item);
+ if (item === 'ironball') return true;
+ // If a Fire/Flying type uses Burn Up and Roost, it becomes ???/Flying-type, but it's still grounded.
+ if (!negateImmunity && this.hasType('Flying') && !(this.hasType('???') && 'roost' in this.volatiles)) return false;
+ if (this.hasAbility('levitate') && !this.battle.suppressingAbility(this)) return null;
+ if ('magnetrise' in this.volatiles) return false;
+ if ('riseabove' in this.volatiles) return false;
+ if ('telekinesis' in this.volatiles) return false;
+ return item !== 'airballoon';
+ },
+ effectiveWeather() {
+ const weather = this.battle.field.effectiveWeather();
+ switch (weather) {
+ case 'sunnyday':
+ case 'raindance':
+ case 'desolateland':
+ case 'primordialsea':
+ case 'stormsurge':
+ if (this.hasItem('utilityumbrella')) return '';
+ }
+ return weather;
+ },
+ getMoveTargets(move, target) {
+ let targets: Pokemon[] = [];
+
+ switch (move.target) {
+ case 'all':
+ case 'foeSide':
+ case 'allySide':
+ case 'allyTeam':
+ if (!move.target.startsWith('foe')) {
+ targets.push(...this.alliesAndSelf());
+ }
+ if (!move.target.startsWith('ally')) {
+ targets.push(...this.foes(true));
+ }
+ if (targets.length && !targets.includes(target)) {
+ this.battle.retargetLastMove(targets[targets.length - 1]);
+ }
+ break;
+ case 'allAdjacent':
+ targets.push(...this.adjacentAllies());
+ // falls through
+ case 'allAdjacentFoes':
+ targets.push(...this.adjacentFoes());
+ if (targets.length && !targets.includes(target)) {
+ this.battle.retargetLastMove(targets[targets.length - 1]);
+ }
+ break;
+ case 'allies':
+ targets = this.alliesAndSelf();
+ break;
+ default:
+ const selectedTarget = target;
+ if (!target || (target.fainted && !target.isAlly(this)) && this.battle.gameType !== 'freeforall') {
+ // If a targeted foe faints, the move is retargeted
+ const possibleTarget = this.battle.getRandomTarget(this, move);
+ if (!possibleTarget) return {targets: [], pressureTargets: []};
+ target = possibleTarget;
+ }
+ if (this.battle.activePerHalf > 1 && !move.tracksTarget) {
+ const isCharging = move.flags['charge'] && !this.volatiles['twoturnmove'] &&
+ !(move.id.startsWith('solarb') && ['sunnyday', 'desolateland'].includes(this.effectiveWeather())) &&
+ !(move.id === 'fruitfullongbow' && ['sunnyday', 'desolateland'].includes(this.effectiveWeather())) &&
+ !(move.id === 'praisethemoon' && this.battle.field.getPseudoWeather('gravity')) &&
+ !(move.id === 'electroshot' && ['stormsurge', 'raindance', 'primordialsea'].includes(this.effectiveWeather())) &&
+ !(this.hasItem('powerherb') && move.id !== 'skydrop');
+ if (!isCharging) {
+ target = this.battle.priorityEvent('RedirectTarget', this, this, move, target);
+ }
+ }
+ if (move.smartTarget) {
+ targets = this.getSmartTargets(target, move);
+ target = targets[0];
+ } else {
+ targets.push(target);
+ }
+ if (target.fainted && !move.flags['futuremove']) {
+ return {targets: [], pressureTargets: []};
+ }
+ if (selectedTarget !== target) {
+ this.battle.retargetLastMove(target);
+ }
+ }
+
+ // Resolve apparent targets for Pressure.
+ let pressureTargets = targets;
+ if (move.target === 'foeSide') {
+ pressureTargets = [];
+ }
+ if (move.flags['mustpressure']) {
+ pressureTargets = this.foes();
+ }
+
+ return {targets, pressureTargets};
+ },
+ },
+ side: {
+ getChoice() {
+ if (this.choice.actions.length > 1 && this.choice.actions.every(action => action.choice === 'team')) {
+ return `team ` + this.choice.actions.map(action => action.pokemon!.position + 1).join(', ');
+ }
+ return this.choice.actions.map(action => {
+ switch (action.choice) {
+ case 'move':
+ let details = ``;
+ if (action.targetLoc && this.active.length > 1) details += ` ${action.targetLoc > 0 ? '+' : ''}${action.targetLoc}`;
+ if (action.mega) details += (action.pokemon!.item === 'ultranecroziumz' ? ` ultra` : ` mega`);
+ if (action.zmove) details += ` zmove`;
+ if (action.maxMove) details += ` dynamax`;
+ if (action.terastallize) details += ` terastallize`;
+ return `move ${action.moveid}${details}`;
+ case 'switch':
+ case 'instaswitch':
+ case 'revivalblessing':
+ // @ts-ignore custom status falls through
+ case 'scapegoat':
+ return `switch ${action.target!.position + 1}`;
+ case 'team':
+ return `team ${action.pokemon!.position + 1}`;
+ default:
+ return action.choice;
+ }
+ }).join(', ');
+ },
+
+ chooseSwitch(slotText) {
+ if (this.requestState !== 'move' && this.requestState !== 'switch') {
+ return this.emitChoiceError(`Can't switch: You need a ${this.requestState} response`);
+ }
+ const index = this.getChoiceIndex();
+ if (index >= this.active.length) {
+ if (this.requestState === 'switch') {
+ return this.emitChoiceError(`Can't switch: You sent more switches than Pokémon that need to switch`);
+ }
+ return this.emitChoiceError(`Can't switch: You sent more choices than unfainted Pokémon`);
+ }
+ const pokemon = this.active[index];
+ let slot;
+ if (!slotText) {
+ if (this.requestState !== 'switch') {
+ return this.emitChoiceError(`Can't switch: You need to select a Pokémon to switch in`);
+ }
+ if (this.slotConditions[pokemon.position]['revivalblessing']) {
+ slot = 0;
+ while (!this.pokemon[slot].fainted) slot++;
+ } else {
+ if (!this.choice.forcedSwitchesLeft) return this.choosePass();
+ slot = this.active.length;
+ while (this.choice.switchIns.has(slot) || this.pokemon[slot].fainted) slot++;
+ }
+ } else {
+ slot = parseInt(slotText) - 1;
+ }
+ if (isNaN(slot) || slot < 0) {
+ // maybe it's a name/species id!
+ slot = -1;
+ for (const [i, mon] of this.pokemon.entries()) {
+ if (slotText!.toLowerCase() === mon.name.toLowerCase() || toID(slotText) === mon.species.id) {
+ slot = i;
+ break;
+ }
+ }
+ if (slot < 0) {
+ return this.emitChoiceError(`Can't switch: You do not have a Pokémon named "${slotText}" to switch to`);
+ }
+ }
+ if (slot >= this.pokemon.length) {
+ return this.emitChoiceError(`Can't switch: You do not have a Pokémon in slot ${slot + 1} to switch to`);
+ } else if (slot < this.active.length && !this.slotConditions[pokemon.position]['revivalblessing']) {
+ return this.emitChoiceError(`Can't switch: You can't switch to an active Pokémon`);
+ } else if (this.choice.switchIns.has(slot)) {
+ return this.emitChoiceError(`Can't switch: The Pokémon in slot ${slot + 1} can only switch in once`);
+ }
+ const targetPokemon = this.pokemon[slot];
+
+ if (this.slotConditions[pokemon.position]['revivalblessing']) {
+ if (!targetPokemon.fainted) {
+ return this.emitChoiceError(`Can't switch: You have to pass to a fainted Pokémon`);
+ }
+ // Should always subtract, but stop at 0 to prevent errors.
+ this.choice.forcedSwitchesLeft = this.battle.clampIntRange(this.choice.forcedSwitchesLeft - 1, 0);
+ pokemon.switchFlag = false;
+ this.choice.actions.push({
+ choice: 'revivalblessing',
+ pokemon,
+ target: targetPokemon,
+ } as ChosenAction);
+ return true;
+ }
+
+ if (targetPokemon.fainted) {
+ return this.emitChoiceError(`Can't switch: You can't switch to a fainted Pokémon`);
+ }
+
+ if (this.slotConditions[pokemon.position]['scapegoat']) {
+ // Should always subtract, but stop at 0 to prevent errors.
+ this.choice.forcedSwitchesLeft = this.battle.clampIntRange(this.choice.forcedSwitchesLeft - 1, 0);
+ pokemon.switchFlag = false;
+ // @ts-ignore custom request
+ this.choice.actions.push({
+ choice: 'scapegoat',
+ pokemon,
+ target: targetPokemon,
+ } as ChosenAction);
+ return true;
+ }
+
+ if (this.requestState === 'move') {
+ if (pokemon.trapped) {
+ const includeRequest = this.updateRequestForPokemon(pokemon, req => {
+ let updated = false;
+ if (req.maybeTrapped) {
+ delete req.maybeTrapped;
+ updated = true;
+ }
+ if (!req.trapped) {
+ req.trapped = true;
+ updated = true;
+ }
+ return updated;
+ });
+ const status = this.emitChoiceError(`Can't switch: The active Pokémon is trapped`, includeRequest);
+ if (includeRequest) this.emitRequest(this.activeRequest!);
+ return status;
+ } else if (pokemon.maybeTrapped) {
+ this.choice.cantUndo = this.choice.cantUndo || pokemon.isLastActive();
+ }
+ } else if (this.requestState === 'switch') {
+ if (!this.choice.forcedSwitchesLeft) {
+ throw new Error(`Player somehow switched too many Pokemon`);
+ }
+ this.choice.forcedSwitchesLeft--;
+ }
+
+ this.choice.switchIns.add(slot);
+
+ this.choice.actions.push({
+ choice: (this.requestState === 'switch' ? 'instaswitch' : 'switch'),
+ pokemon,
+ target: targetPokemon,
+ } as ChosenAction);
+
+ return true;
+ },
+ },
+ queue: {
+ resolveAction(action, midTurn) {
+ if (!action) throw new Error(`Action not passed to resolveAction`);
+ if (action.choice === 'pass') return [];
+ const actions = [action];
+
+ if (!action.side && action.pokemon) action.side = action.pokemon.side;
+ if (!action.move && action.moveid) action.move = this.battle.dex.getActiveMove(action.moveid);
+ if (!action.order) {
+ const orders: {[choice: string]: number} = {
+ team: 1,
+ start: 2,
+ instaswitch: 3,
+ beforeTurn: 4,
+ beforeTurnMove: 5,
+ revivalblessing: 6,
+ scapegoat: 7,
+
+ runUnnerve: 100,
+ runSwitch: 101,
+ runPrimal: 102,
+ switch: 103,
+ megaEvo: 104,
+ runDynamax: 105,
+ terastallize: 106,
+ priorityChargeMove: 107,
+
+ shift: 200,
+ // default is 200 (for moves)
+
+ residual: 300,
+ };
+ if (action.choice in orders) {
+ action.order = orders[action.choice];
+ } else {
+ action.order = 200;
+ if (!['move', 'event'].includes(action.choice)) {
+ throw new Error(`Unexpected orderless action ${action.choice}`);
+ }
+ }
+ }
+ if (!midTurn) {
+ if (action.choice === 'move') {
+ if (!action.maxMove && !action.zmove && action.move.beforeTurnCallback) {
+ actions.unshift(...this.resolveAction({
+ choice: 'beforeTurnMove', pokemon: action.pokemon, move: action.move, targetLoc: action.targetLoc,
+ }));
+ }
+ if (action.mega && !action.pokemon.isSkyDropped()) {
+ actions.unshift(...this.resolveAction({
+ choice: 'megaEvo',
+ pokemon: action.pokemon,
+ }));
+ }
+ if (action.terastallize && !action.pokemon.terastallized) {
+ actions.unshift(...this.resolveAction({
+ choice: 'terastallize',
+ pokemon: action.pokemon,
+ }));
+ }
+ if (action.maxMove && !action.pokemon.volatiles['dynamax']) {
+ actions.unshift(...this.resolveAction({
+ choice: 'runDynamax',
+ pokemon: action.pokemon,
+ }));
+ }
+ if (!action.maxMove && !action.zmove && action.move.priorityChargeCallback) {
+ actions.unshift(...this.resolveAction({
+ choice: 'priorityChargeMove',
+ pokemon: action.pokemon,
+ move: action.move,
+ }));
+ }
+ action.fractionalPriority = this.battle.runEvent('FractionalPriority', action.pokemon, null, action.move, 0);
+ } else if (['switch', 'instaswitch'].includes(action.choice)) {
+ if (typeof action.pokemon.switchFlag === 'string') {
+ action.sourceEffect = this.battle.dex.moves.get(action.pokemon.switchFlag as ID) as any;
+ }
+ action.pokemon.switchFlag = false;
+ }
+ }
+
+ const deferPriority = this.battle.gen === 7 && action.mega && action.mega !== 'done';
+ if (action.move) {
+ let target = null;
+ action.move = this.battle.dex.getActiveMove(action.move);
+
+ if (!action.targetLoc) {
+ target = this.battle.getRandomTarget(action.pokemon, action.move);
+ // TODO: what actually happens here?
+ if (target) action.targetLoc = action.pokemon.getLocOf(target);
+ }
+ action.originalTarget = action.pokemon.getAtLoc(action.targetLoc);
+ }
+ if (!deferPriority) this.battle.getActionSpeed(action);
+ return actions as any;
+ },
+ },
+};
diff --git a/data/mods/gen9ssb/typechart.ts b/data/mods/gen9ssb/typechart.ts
new file mode 100644
index 000000000000..490d656b5e5e
--- /dev/null
+++ b/data/mods/gen9ssb/typechart.ts
@@ -0,0 +1,82 @@
+export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = {
+ ground: {
+ inherit: true,
+ damageTaken: {
+ sandstorm: 3,
+ deserteddunes: 3,
+ Bug: 0,
+ Dark: 0,
+ Dragon: 0,
+ Electric: 3,
+ Fairy: 0,
+ Fighting: 0,
+ Fire: 0,
+ Flying: 0,
+ Ghost: 0,
+ Grass: 1,
+ Ground: 0,
+ Ice: 1,
+ Normal: 0,
+ Poison: 2,
+ Psychic: 0,
+ Rock: 2,
+ Steel: 0,
+ Stellar: 0,
+ Water: 1,
+ },
+ },
+ rock: {
+ inherit: true,
+ damageTaken: {
+ sandstorm: 3,
+ deserteddunes: 3,
+ Bug: 0,
+ Dark: 0,
+ Dragon: 0,
+ Electric: 0,
+ Fairy: 0,
+ Fighting: 1,
+ Fire: 2,
+ Flying: 2,
+ Ghost: 0,
+ Grass: 1,
+ Ground: 1,
+ Ice: 0,
+ Normal: 2,
+ Poison: 2,
+ Psychic: 0,
+ Rock: 0,
+ Steel: 1,
+ Stellar: 0,
+ Water: 1,
+ },
+ },
+ steel: {
+ inherit: true,
+ damageTaken: {
+ psn: 3,
+ tox: 3,
+ sandstorm: 3,
+ deserteddunes: 3,
+ Bug: 2,
+ Dark: 0,
+ Dragon: 2,
+ Electric: 0,
+ Fairy: 2,
+ Fighting: 1,
+ Fire: 1,
+ Flying: 2,
+ Ghost: 0,
+ Grass: 2,
+ Ground: 1,
+ Ice: 2,
+ Normal: 2,
+ Poison: 3,
+ Psychic: 2,
+ Rock: 2,
+ Steel: 2,
+ Stellar: 0,
+ Water: 0,
+ },
+ },
+};
diff --git a/data/mods/gennext/README.md b/data/mods/gennext/README.md
deleted file mode 100644
index 4403733a35ee..000000000000
--- a/data/mods/gennext/README.md
+++ /dev/null
@@ -1,535 +0,0 @@
-Generation NEXT!
-========================================================================
-
-Instructions
-------------------------------------------------------------------------
-
-Gen-NEXT hasn't been updated in a very long time, but is still playable by
-using the `/challenge gen6nextou` command in a PM chat box.
-
-Manifesto
-------------------------------------------------------------------------
-
-The goal of NEXT is to improve the diversity of the OU metagame by only doing
-things that could plausibly be done between gens.
-
-Specifically, the core rules of NEXT are:
-
-1. no base stat changes
-2. no removing from movepools
-3. no removing from ability distribution
-4. no typing changes (except on formes)
-5. no buffing OU mons, except maybe tiny buffs to mons at the bottom of OU
-6. no doing things that make zero sense flavor-wise
-
-What's left is mainly changes to how abilities and moves work, which is
-most of what NEXT is about.
-
-A good example is what Game Freak did by giving Ditto the Imposter ability.
-This gave a Ditto a role in OU, while still making sense flavor-wise, and
-without removing anything it used to have.
-
-A good example of what NEXT changes is Cherrim. We have taken an interesting
-idea (ability designed for Sunny Day support) and made it viable in OU.
-
-This approach is in sharp contrast to many mods that do change many things on
-NEXT's "don't change" list. The result is a metagame that feels a lot like
-a new generation: existing OU threats stay mostly the same, but many new
-threats and strategies are introduced.
-
-And yes, we know that "no base stat changes" has been broken in Gen 6. We're
-still not doing it, because it's hard to constrain and hard to keep track of.
-
-Recent changes
-------------------------------------------------------------------------
-
-A changelog for NEXT is available here:
-
-https://github.com/smogon/pokemon-showdown/commits/master/data/mods/gennext
-
-Changes
-------------------------------------------------------------------------
-
-Generation NEXT currently makes the following changes:
-
-Major changes:
-
-- Stealth Rock now does 1/4 damage against Flying-types, and 1/8 damage against
- everything else.
-
-- Drives will change Genesect's typing immediately after switch-in, to Bug/Ice,
- Bug/Fire, Bug/Electric, or Bug/Water. However, Download will not activate for
- Genesect unless it holds a Drive.
-
-- Unown gets an item named Strange Orb (select "Stick" in the teambuilder)
- It doubles its SpA, SpD, and Spe, and changes its type to the type of its
- Hidden Power.
-
-- Weather moves, such as Sunny Day, Rain Dance, Hail, and Sandstorm have +1
- Priority.
-
-- Forecast will make weather moves last forever. Cherrim will make Sunny Day
- last forever. Phione will make Rain Dance last forever. Cryogonal will make
- Hail last forever. Probopass will make Sandstorm last forever.
-
-- Hail is improved:
- - Silver Wind, Ominous Wind, and Avalanche deal 1.5x damage in Hail
- - Snow Cloak no longer modifies evasion, but instead decreases damage by 25%
- in Hail (and 12.5% out of Hail)
- - Ice Body has 30% chance of freezing a contact move (and grants passive
- healing out of Hail, too)
- - Thick Fat, Marvel Scale, and Flame Body grant immunity to Hail damage
-
-- Freezing doesn't have a 20% thaw chance. Instead, thawing happens at the end
- of the second turn. Because this new freeze effect is a nerf, Blizzard now
- has a 30% chance of inflicting freeze.
-
-- Swift Swim, Chlorophyll, and Sand Rush are nerfed to give a 1.5x speed buff instead.
-
-- Every Hidden Ability is released.
-
-- Moves with a charge turn are now a lot more powerful. They remove Protect and
- Substitute before hitting, they always crit (although their base power has
- been adjusted accordingly), they have perfect accuracy, and one other change
- depending on the move:
- - SolarBeam: heal 50% on the charge turn, 80 bp
- - Razor Wind: 100% confusion, 60 bp
- - Skull Bash: +1 Def, +1 SpD, +1 accuracy on the charge turn, 70 bp
- - Sky Attack: 100% -1 Def, 95 bp
- - Freeze Shock: 100% paralysis, 95 bp
- - Ice Burn: 100% burn, 95 bp
- - Bounce: 30% paralysis, 60 bp
- - Fly: 100% -1 Def, 60 bp
- - Dig: 100% -1 Def, 60 bp
- - Dive: 100% -1 Def, 60 bp
- - Shadow Force: 100% Ghost-Curse, 40 bp
- - Sky Drop: 100% -1 Def, 60 bp
- - Phantom Force: 100% -1 Def, 60 bp
-
-- Recharge moves are similarly buffed. They have 100 base power, always crit,
- and they only recharge if they KO. Be careful - in return for a KO, they
- still give the foe a free switch-in _and_ a turn to set up.
-
-- Flower Gift now only boosts Sp. Def, but if Sunny Day is used while Cherrim
- is out, the next switch-in also receives +1 SpD
-
-- All Quiver Dancers (except Smeargle) get an item named Gossamer Wing (Select
- "Stick" in the teambuilder). It makes them take half damage from Rock, Ice,
- and Electric moves if they are Flying type, prevents them from taking
- double SR damage, heals 1/16 after using a Status move, and makes Twister
- do 1.5x Damage.
-
-- Swarm also makes the user take half damage from Rock, Ice, Electric moves,
- and Stealth Rock if they are Flying type.
-
-- Relic Song switches Meloetta's SpA and Atk EVs, boosts, and certain natures,
- specifically: Modest <-> Adamant, Jolly <-> Timid, other natures are left
- untouched. It's now 60 base power +1 priority, with no secondary.
-
-- Shuckle gets Berry Shell (select "Stick" in the teambuilder), which gives a
- 50% boost to Defense and Sp. Def.
-
-- Ambipom, Spinda, and Mr. Mime get Sketch as an egg move, allowing it to use
- exactly one move not normally in its learnset.
-
-- Spinda gets V-Create, Superpower, Close Combat, Overheat, Leaf Storm, Draco
- Meteor.
-
-- Echoed Voice now has 80 base power, hits once, and then, 2 turns later,
- hits again for 80 base power. It's like Doom Desire, except it still hits
- that first time.
-
-- Confusion now deals 30 base power damage every attack, but does not stop
- the attack. It now lasts 3-5 turns.
-
-- Parental Bond now deals half damage on both hits, but confers perfect
- accuracy like all multi-hit moves.
-
-- Life Orb now behaves much more consistently as normal recoil. Reckless
- will boost every move if Life Orb is held, and Rock Head will negate Life
- Orb recoil.
-
-- Twister is now a 80 base power Flying move with a 30% confusion chance
-
-- Floette-Eternal-Flower is released.
-
-New mechanic: Signature Pokémon:
-
-- Certain moves have a Signature Pokémon associated with them. A move will
- deal 1.5x its usual damage when used by its Signature Pokémon. Some of these
- moves also receive other changes that apply to all Pokémon using the move -
- those changes are listed in parentheses.
-
- - Flareon: Fire Fang (20% burn, 30% flinch, 100% accuracy)
-
- - Walrein: Ice Fang (20% freeze, 30% flinch, 100% accuracy)
-
- - Luxray: Thunder Fang (20% paralysis, 30% flinch, 100% accuracy)
-
- - Drapion: Poison Fang (65 base power, 100% toxic poison, 30% flinch)
-
- - Seviper: Poison Tail (60 base power, 60% toxic poison)
-
- - Muk: Sludge (60 base power, 100% poison)
-
- - Weezing: Smog (75 base power, 100% poison, 100% accuracy)
-
- - Rapidash: Flame Charge (60 base power)
-
- - Darmanitan: Flame Wheel
-
- - Eelektross: Spark
-
- - Hitmontop: Triple Kick
-
- - Kingdra: BubbleBeam (30% -1 Spe)
-
- - Galvantula: Electroweb (60 base power, 100% accuracy)
-
- - Skarmory: Steel Wing (60 base power, 100% accuracy, 50% +1 Def)
-
- - Beautifly: Giga Drain
-
- - Glaceon: Icy Wind (60 base power, 100% accuracy)
-
- - Swampert: Mud Shot (60 base power, 100% accuracy)
-
- - Kyurem: Glaciate (80 base power, 100% accuracy)
-
- - Octillery: Octazooka (75 base power, 90% accuracy, 100% -1 accuracy)
-
- - Serperior: Leaf Tornado (75 base power, 90% accuracy, 100% -1 accuracy)
-
- - Weavile: Ice Shard
-
- - Sharpedo: Aqua Jet
-
- - Hitmonchan: Mach Punch
-
- - Banette: Shadow Sneak
-
- - Masquerain: Surf (10% -1 Spe)
-
- - Snorlax: Snore (100 base power)
-
- - Persian: Slash (60 base power 30% -1 Def)
-
-- Again, note that while the Signature Pokémon will get the 1.5x damage boost,
- all Pokémon will get the other changes to the move listed above.
-
-New mechanic: Intrinsics:
-
-- Pokémon that previously get Levitate are now immune to Ground intrinsically, although
- Mold Breaker still bypasses this immunity. Instead, many of them get new abilities
- in addition to their Ground immunity:
-
- - Azelf: Steadfast
-
- - Bronzong: Heatproof
-
- - Claydol: Filter
-
- - Cryogonal: Ice Body
-
- - Eelektross: Poison Heal
-
- - Flygon: Compoundeyes, Sand Rush
-
- - Hydreigon: Sheer Force
-
- - Mesprit: Serene Grace
-
- - Mismagius: Cursed Body
-
- - Rotom (all formes): Trace
-
- - Unown: Shadow Tag
-
- - Uxie: Synchronize
-
- - Weezing: Aftermath
-
-New: Type-specific items:
-
-- Big Root: also acts like Leftovers + Shell Bell for Grass types
-
-- Black Sludge: heals 1/8 per turn for pure Poison types
-
-- Focus Band: breaks on first hit, but allows pure Fighting types to survive
- that hit with 1 HP (so basically it'd be a Focus sash that stays intact
- after residual damage); does nothing for other Pokémon
-
-- Wise Glasses: 1.2x Special damage for pure Psychic types
-
-- Muscle Band: 1.2x Physical damage for pure Fighting types
-
-Minor move changes:
-
-- Parabolic Charge now has 40 base power, but gives -1 SpA, -1 SpD to the
- target and +1 SpA, +1 SpD to the user
-
-- Draining Kiss now has 40 base power, but gives -1 SpA, -1 Atk to the
- target and +1 SpA, +1 Atk to the user
-
-- Defend Order and Heal Order now have +1 priority
-
-- Rock Throw now removes Stealth Rock from the user's side of the field,
- and has 100% accuracy
-
-- Rapid Spin now has 30 base power
-
-- Rock Throw and Rapid Spin remove hazards before fainting from Rocky
- Helmet etc. And double in power if they remove hazards.
-
-- All moves' accuracy is rounded up to the nearest multiple of 10%
- (including Jump Kick)
-
-- Charge Beam and Rock Slide are now 100% accurate
-
-- Blue Flare has 30% burn chance, Fire Blast has 20% burn chance and is
- 80% accurate
-
-- Focus Blast has 30% accuracy (use HP Fighting unless you have No Guard)
-
-- Close Combat has been nerfed: it now gives -2 Def, -2 SpD
-
-- Moves that were originally perfect accuracy have their base power increased
- to 90 (this includes Aerial Ace, Disarming Voice, and Aura Sphere, among
- others)
-
-- Scald and Steam Eruption's damage is no longer affected by weather:
- instead, they get 60% burn chance in sun
-
-- High Jump Kick now has 100 base power
-
-- Shadow Ball now has 90 base power and 30% -SpD
-
-- Multi-hit moves are now all perfect-accuracy
-
-- Silver Wind, Ominous Wind, and AncientPower have a 100% chance of raising
- one of Def/SpA/SpD/Spe at random, rather than a 10% chance of raising every
- stat
-
-- Twineedle has a new base power of 50
-
-- Tri Attack now hits 3 times and has a base power of 30
-
-- Strength now has a 30% chance of raising user's Atk
-
-- Cut and Rock Smash are 50 base power and now have a 100% chance of
- lowering foe's Def
-
-- Psycho Cut's Base Power is now 90
-
-- Drill Peck, Needle Arm, Attack Order, and Leaf Blade's Base
- Powers are now 100
-
-- Stomp and Steamroller now have 100 Base Power and perfect accuracy to
- reflect their thematic status as counters to Minimize
-
-- Bide is now a +1 priority move that gives the user Endure (the user
- survives all move damage with at least 1 HP) for its duration. Bide fails
- if the user has 1 HP when it's used, or if the user's last move used was
- Bide.
-
-- Withdraw gives +1 SpD as well as +1 Def
-
-- Muddy Water is now 85 base power and 100% accurate
-
-- Leech Life is now 75 base power
-
-- Sound-based moves are no longer affected by immunities (ghosts can hear
- things)
-
-- Bonemerang, Bone Club and Bone Rush are no longer affected by immunities
- (you can throw a bone to hit birds), Bone Rush nerfed to 20 base power
- since it should never be viable
-
-- Wing Attack and Power Gem are now like Dual Chop: 40 base power, 2-hit
-
-- Autotomize now gives +3 Speed
-
-- Zoroark gets a significantly wider movepool. It now learns: Ice Beam, Giga
- Drain, Earthquake, Stone Edge, Superpower, X-Scissor
-
-- If Illusion is active, Night Daze now displays as a random non-Status move
- in the copied Pokémon's moveset
-
-- Selfdestruct and Explosion are now 200 and 250 base power autocrit moves,
- respectively, and they are both perfect-accuracy
-
-- Acid and Acid Spray aren't affected by immunities
-
-- Protect does not protect Substitutes (with passive healing being more
- common, Sub/Protect stalling could be overpowered) and Substitutes increase
- accuracy against them to 100%
-
-- Dizzy Punch is 90 base power, 50% confusion chance
-
-- Sacred Sword now has 95 base power
-
-- Egg Bomb is now 40 base power autocrit
-
-- Minimize only increases evasion by one stage
-
-- Double Team takes 25% of user's max HP (like Substitute)
-
-Minor learnset changes:
-
-- Azumarill gets Belly Drum with no incompatibilities
-
-- Mantine gets many new moves: Recover, Whirlwind, Baton Pass, Wish, Soak,
- Lock-On, Acid Spray, Octazooka, Stockpile
-
-- Masquerain gets Surf
-
-- Butterfree, Beautifly, Masquerain, and Mothim get Hurricane
-
-- Roserade gets Sludge
-
-- Meloetta gets Fiery Dance
-
-- Galvantula gets Zap Cannon
-
-- Virizion gets Horn Leech
-
-- Scolipede and Steelix get Coil
-
-- Lumineon, Ampharos, and Lanturn get Tail Glow
-
-- Rotom formes learn more things:
- - Rotom-Wash: BubbleBeam
- - Rotom-Fan: Hurricane, Twister
- - Rotom-Frost: Frost Breath
- - Rotom-Heat: Heat Wave
- - Rotom-Mow: Magical Leaf
-
-- Starters get a new ability option
- - Venusaur: Leaf Guard
- - Charizard: Flame Body
- - Blastoise: Shell Armor
- - Meganium: Harvest
- - Typhlosion: Magma Armor
- - Feraligatr: Strong Jaw
- - Sceptile: Limber
- - Blaziken: Reckless
- - Swampert: Hydration
- - Torterra: Weak Armor
- - Infernape: No Guard
- - Empoleon: Ice Body
- - Serperior: Own Tempo
- - Emboar: Sheer Force
- - Samurott: Technician
- - Chesnaught: Battle Armor
- - Delphox: Magic Guard
- - Greninja: Pickpocket
-
-- Crawdaunt's Hidden Ability is now Tough Claws (this is because of a
- nerf to Adaptability which is discussed below)
-
-Minor ability changes:
-
-- Static, Poison Point, and Cute Charm now always activate on
- contact.
-
-- Weak Armor reduces incoming move damage by 1/10 of the user's max HP
- and increases the user's Speed for the first hit after switch-in (and
- does not activate again until the next switch-in) instead of its
- previous effect
-
-- Shell Armor and Battle Armor reduce incoming move damage by 1/10 of
- the user's max HP in addition to their crit negation (also, Shell
- Armor is removed when using Shell Smash)
-
-- Magma Armor reduces incoming move damage by 1/10 of the user's max HP,
- provides immunity to Hail and freeze, and provides a one-time immunity
- to Water and Ice, after which it turns into Battle Armor
-
-- Prism Armor reduces incoming move damage by 1/10 of the user's max HP in addition to its normal effects.
-
-- Adaptability is now 1.33x to non-STAB moves instead of to STAB moves
-
-- Shadow Tag now lasts only one turn
-
-- Static and Poison Point have a 100% chance of activating
-
-- Speed Boost does not activate on turns Protect, Detect, Endure, etc
- are used
-
-- Telepathy grants Imprison on switch-in
-
-- Compound Eyes and Keen Eye now grant 1.6x accuracy (this replaces Keen
- Eye's previous effect)
-
-- Victory Star grants 1.5x accuracy (but only for the user)
-
-- Solid Rock and Filter now reduce damage of SE moves by 1/2, not 1/4
-
-- Iron Fist now grants a 1.33x boost to punching moves
-
-- Outrage, Thrash, and Petal Dance don't lock if the user has Own Tempo
-
-- Stench now grants a 40% flinch chance
-
-- Slow Start now only lasts 3 turns instead of 5
-
-- Truant will only activate if a move succeeds (e.g. not if it misses, fails,
- or is Protected against), and will heal the user by 33% during its Truant
- turn
-
-- Clear Body and White Smoke prevents all stat lowering (relevant: the Regis'
- Superpower, Metagross' Hammer Arm, and Torkoal's Overheat)
-
-- Thick Fat grants half damage from Fighting
-
-- Aftermath no longer requires contact, and is buffed to deal 1/3 of the
- foe's max HP
-
-- Cursed Body works like Aftermath now, but instead of dealing damage, it
- causes the foe to be Cursed (like Ghost-type Curse)
-
-- Gluttony allows a Pokémon to use a Berry twice
-
-- Heatproof now grants the user immunity to Fire and burns
-
-- Guts, Quick Feet, and Toxic Boost take half damage from poisoning
-
-- Guts, Quick Feet, and Flare Boost take half damage from burns
-
-- Sand Veil grants 20% damage reduction in sand (this replaces Sand Veil's
- usual effect)
-
-- Water Veil grans 12.5% damage reduction out of rain and 25% damage
- reduction in rain, in addition to its usual effect
-
-- Multiscale decreases damage by 1/3 rather than 1/2 (Sorry, Dragonite,
- this is in exchange for a usable physical Flying STAB from a buffed
- Aerial Ace)
-
-Minor item changes:
-
-- Zoom Lens now grants 1.6x accuracy
-
-- Wide Lens now grants 1.3x accuracy
-
-Bans:
-
-- The OU banlist (i.e. Pokémon considered Uber) is now:
- - Every Pokémon with over 600 BST except Slaking, Regigigas, and Hoopa-Unbound
- - Deoxys (all formes)
- - Darkrai
- - Shaymin-Sky
-
-- The following clauses are in effect:
- - OHKO Clause
- - Sleep Clause
- - Soul Dew is banned
-
-Specifically, differences from regular OU:
-
-- unbanned: Aegislash, Blaziken, Genesect, Landorus, Gengarite, Kangaskhanite,
- Lucarionite, Mawilite, Salamencite
-
-- banned: Hoopa-Unbound, Kyurem, Kyurem-Black
-
-- There is no Moody Clause or Evasion Clause
diff --git a/data/mods/gennext/abilities.ts b/data/mods/gennext/abilities.ts
deleted file mode 100644
index f02dc101b4a7..000000000000
--- a/data/mods/gennext/abilities.ts
+++ /dev/null
@@ -1,684 +0,0 @@
-export const Abilities: {[k: string]: ModdedAbilityData} = {
- swiftswim: {
- inherit: true,
- onModifySpe(spe, pokemon) {
- if (this.field.isWeather(['raindance', 'primordialsea'])) {
- return this.chainModify(1.5);
- }
- },
- shortDesc: "If Rain Dance is active, this Pokemon's Speed is multiplied by 1.5.",
- },
- chlorophyll: {
- inherit: true,
- onModifySpe(spe) {
- if (this.field.isWeather(['sunnyday', 'desolateland'])) {
- return this.chainModify(1.5);
- }
- },
- shortDesc: "If Sunny Day is active, this Pokemon's Speed is multiplied by 1.5.",
- },
- sandrush: {
- inherit: true,
- onModifySpe(spe, pokemon) {
- if (this.field.isWeather('sandstorm')) {
- return this.chainModify(1.5);
- }
- },
- shortDesc: "If Sandstorm is active, this Pokemon's Speed is multiplied by 1.5.",
- },
- slushrush: {
- inherit: true,
- onModifySpe(spe, pokemon) {
- if (this.field.isWeather('hail')) {
- return this.chainModify(1.5);
- }
- },
- shortDesc: "If Hail is active, this Pokemon's Speed is multiplied by 1.5.",
- },
- forecast: {
- inherit: true,
- onModifyMove(move) {
- if (move.weather) {
- const weather = move.weather;
- move.weather = '';
- move.onHit = function (target, source) {
- this.field.setWeather(weather, source, this.dex.abilities.get('forecast'));
- this.field.weatherState.duration = 0;
- };
- move.target = 'self';
- }
- },
- desc: "If this Pokemon is a Castform, its type changes to the current weather condition's type, except Sandstorm. Weather moves last forever.",
- shortDesc: "Castform's type changes to the current weather condition's type, except Sandstorm; weather moves last forever.",
- },
- thickfat: {
- inherit: true,
- onImmunity(type, pokemon) {
- if (type === 'hail') return false;
- },
- onSourceModifyAtk(atk, attacker, defender, move) {
- if (move.type === 'Ice' || move.type === 'Fire' || move.type === 'Fighting') {
- this.add('-message', "The attack was weakened by Thick Fat!");
- return this.chainModify(0.5);
- }
- },
- onSourceModifySpA(atk, attacker, defender, move) {
- if (move.type === 'Ice' || move.type === 'Fire' || move.type === 'Fighting') {
- this.add('-message', "The attack was weakened by Thick Fat!");
- return this.chainModify(0.5);
- }
- },
- desc: "If a Pokemon uses a Fire- or Ice- or Fighting-type attack against this Pokemon, that Pokemon's attacking stat is halved when calculating the damage to this Pokemon. This Pokemon takes no damage from Hail.",
- shortDesc: "Fire/Ice/Fighting-type moves against this Pokemon deal damage with a halved attacking stat; immunity to Hail.",
- },
- marvelscale: {
- inherit: true,
- onImmunity(type, pokemon) {
- if (type === 'hail') return false;
- },
- desc: "If this Pokemon has a major status condition, its Defense is multiplied by 1.5. This Pokemon takes no damage from Hail.",
- shortDesc: "If this Pokemon is statused, its Defense is 1.5x; immunity to Hail.",
- },
- snowcloak: {
- inherit: true,
- onSourceBasePower(basePower) {
- if (this.field.isWeather('hail')) {
- return basePower * 3 / 4;
- }
- return basePower * 7 / 8;
- },
- onModifyAccuracy() {},
- desc: "If Hail is active, attacks against this Pokemon do 25% less than normal. If Hail is not active, attacks against this Pokemon do 12.5% less than normal. This Pokemon takes no damage from Hail.",
- shortDesc: "If Hail is active, attacks against this Pokemon do 25% less; immunity to Hail.",
- },
- sandveil: {
- inherit: true,
- desc: "If Sandstorm is active, attacks against this Pokemon do 25% less than normal. If Sandstorm is not active, attacks against this Pokemon do 12.5% less than normal. This Pokemon takes no damage from Sandstorm.",
- shortDesc: "If Sandstorm is active, attacks against this Pokemon do 25% less; immunity to Sandstorm.",
- onSourceBasePower(basePower) {
- if (this.field.isWeather('sandstorm')) {
- return basePower * 4 / 5;
- }
- },
- onModifyAccuracy() {},
- },
- waterveil: {
- inherit: true,
- onSourceBasePower(basePower) {
- if (this.field.isWeather(['raindance', 'primordialsea'])) {
- return basePower * 3 / 4;
- }
- return basePower * 7 / 8;
- },
- desc: "If Rain Dance is active, attacks against this Pokemon do 25% less than normal. This Pokemon cannot be burned. Gaining this Ability while burned cures it.",
- shortDesc: "If Rain Dance is active, attacks against this Pokemon do 25% less; This Pokemon cannot be burned.",
- },
- icebody: {
- inherit: true,
- desc: "This Pokemon restores 1/16 of its maximum HP, rounded down, at the end of each turn. This Pokemon takes no damage from Hail. There is a 30% chance a Pokemon making contact with this Pokemon will be frozen.",
- shortDesc: "This Pokemon heals 1/16 of its max HP each turn; immunity to Hail; 30% chance a Pokemon making contact with this Pokemon will be frozen.",
- onResidual(target, source, effect) {
- this.heal(target.baseMaxhp / 16);
- },
- onDamagingHit(damage, target, source, move) {
- if (move.flags['contact'] && this.field.isWeather('hail')) {
- if (this.randomChance(3, 10)) {
- source.trySetStatus('frz', target);
- }
- }
- },
- onWeather() {},
- },
- flamebody: {
- inherit: true,
- onImmunity(type, pokemon) {
- if (type === 'hail') return false;
- },
- shortDesc: "30% chance a Pokemon making contact with this Pokemon will be burned; immunity to Hail.",
- },
- static: {
- inherit: true,
- onDamagingHit(damage, target, source, move) {
- if (move.flags['contact']) {
- source.trySetStatus('par', target);
- }
- },
- shortDesc: "100% chance a Pokemon making contact with this Pokemon will be paralyzed.",
- },
- cutecharm: {
- inherit: true,
- onDamagingHit(damage, target, source, move) {
- if (move.flags['contact']) {
- source.addVolatile('Attract', target);
- }
- },
- desc: "There is a 100% chance a Pokemon making contact with this Pokemon will become infatuated if it is of the opposite gender.",
- shortDesc: "100% chance of infatuating Pokemon of the opposite gender if they make contact.",
- },
- poisonpoint: {
- inherit: true,
- onDamagingHit(damage, target, source, move) {
- if (move.flags['contact']) {
- source.trySetStatus('psn', target);
- }
- },
- shortDesc: "100% chance a Pokemon making contact with this Pokemon will be poisoned.",
- },
- flowergift: {
- inherit: true,
- onModifyMove(move) {
- if (move.id === 'sunnyday') {
- const weather = move.weather as string;
- move.weather = '';
- move.onHit = function (target, source) {
- this.field.setWeather(weather, source, this.dex.abilities.get('flowergift'));
- this.field.weatherState.duration = 0;
- };
- move.target = 'self';
- move.sideCondition = 'flowergift';
- }
- },
- onUpdate(pokemon) {
- if (this.field.isWeather(['sunnyday', 'desolateland'])) {
- if (pokemon.isActive && pokemon.species.id === 'cherrim' && this.effectState.forme !== 'Sunshine') {
- this.effectState.forme = 'Sunshine';
- this.add('-formechange', pokemon, 'Cherrim-Sunshine', '[msg]');
- this.boost({spd: 1});
- }
- } else if (pokemon.isActive && pokemon.species.id === 'cherrim' && this.effectState.forme) {
- delete this.effectState.forme;
- this.add('-formechange', pokemon, 'Cherrim', '[msg]');
- }
- },
- condition: {
- onSwitchInPriority: 1,
- onSwitchIn(target) {
- if (!target.fainted) {
- this.boost({spd: 1}, target, target, this.dex.abilities.get('flowergift'));
- }
- target.side.removeSideCondition('flowergift');
- },
- },
- desc: "If this Pokemon is a Cherrim and Sunny Day is active, it changes to Sunshine Form and the Special Defense of it is multiplied by 1.5. The next Pokemon that switches in gets its Special Defense also multiplied by 1.5.",
- shortDesc: "If user is Cherrim and Sunny Day is active, its Sp. Def is multiplied by 1.5; the next switch-in also gets its SpD multiplied by 1.5.",
- },
- slowstart: {
- inherit: true,
- condition: {
- duration: 3,
- onStart(target) {
- this.add('-start', target, 'Slow Start');
- },
- onModifyAtk(atk, pokemon) {
- if (pokemon.ability !== 'slowstart') {
- pokemon.removeVolatile('slowstart');
- return;
- }
- return atk / 2;
- },
- onModifySpe(spe, pokemon) {
- if (pokemon.ability !== 'slowstart') {
- pokemon.removeVolatile('slowstart');
- return;
- }
- return spe / 2;
- },
- onEnd(target) {
- this.add('-end', target, 'Slow Start');
- },
- },
- shortDesc: "On switch-in, this Pokemon's Attack and Speed are halved for 3 turns.",
- },
- compoundeyes: {
- inherit: true,
- desc: "The accuracy of this Pokemon's moves receives a 60% increase; for example, a 50% accurate move becomes 80% accurate.",
- shortDesc: "This Pokemon's moves have their Accuracy boosted to 1.6x.",
- onSourceModifyAccuracy(accuracy) {
- if (typeof accuracy !== 'number') return;
- this.debug('compoundeyes - enhancing accuracy');
- return accuracy * 1.6;
- },
- },
- keeneye: {
- inherit: true,
- desc: "The accuracy of this Pokemon's moves receives a 60% increase; for example, a 50% accurate move becomes 80% accurate.",
- shortDesc: "This Pokemon's moves have their Accuracy boosted to 1.6x.",
- onModifyMove(move) {
- if (typeof move.accuracy !== 'number') return;
- this.debug('keeneye - enhancing accuracy');
- move.accuracy *= 1.6;
- },
- },
- solidrock: {
- inherit: true,
- shortDesc: "This Pokemon receives 1/2 damage from supereffective attacks.",
- onSourceModifyDamage(damage, attacker, defender, move) {
- if (defender.getMoveHitData(move).typeMod > 0) {
- this.add('-message', "The attack was weakened by Solid Rock!");
- return this.chainModify(0.5);
- }
- },
- },
- filter: {
- inherit: true,
- shortDesc: "This Pokemon receives 1/2 damage from supereffective attacks.",
- onSourceModifyDamage(damage, attacker, defender, move) {
- if (defender.getMoveHitData(move).typeMod > 0) {
- this.add('-message', "The attack was weakened by Filter!");
- return this.chainModify(0.5);
- }
- },
- },
- heatproof: {
- inherit: true,
- desc: "The user is completely immune to Fire-type moves and burn damage.",
- shortDesc: "The user is immune to Fire type attacks and burn damage.",
- onImmunity(type, pokemon) {
- if (type === 'Fire' || type === 'brn') return false;
- },
- },
- reckless: {
- inherit: true,
- onBasePower(basePower, attacker, defender, move) {
- if (move.recoil || move.hasCrashDamage || attacker.item === 'lifeorb') {
- this.debug('Reckless boost');
- return basePower * 12 / 10;
- }
- },
- desc: "This Pokemon's attacks with recoil or crash damage or if the user is holding a Life Orb have their power multiplied by 1.2. Does not affect Struggle.",
- shortDesc: "This Pokemon's attacks with recoil or crash damage or the user's item is Life Orb have 1.2x power; not Struggle.",
- },
- clearbody: {
- inherit: true,
- onTryBoost(boost, target, source) {
- let i: BoostID;
- for (i in boost) {
- if (boost[i]! < 0) {
- delete boost[i];
- this.add("-message", target.name + "'s stats were not lowered! (placeholder)");
- }
- }
- },
- shortDesc: "Prevents any negative stat changes on this Pokemon.",
- },
- whitesmoke: {
- inherit: true,
- onTryBoost(boost, target, source) {
- let i: BoostID;
- for (i in boost) {
- if (boost[i]! < 0) {
- delete boost[i];
- this.add("-message", target.name + "'s stats were not lowered! (placeholder)");
- }
- }
- },
- shortDesc: "Prevents any negative stat changes on this Pokemon.",
- },
- rockhead: {
- inherit: true,
- onDamage(damage, target, source, effect) {
- if (effect && ['lifeorb', 'recoil'].includes(effect.id)) return false;
- },
- desc: "This Pokemon does not take recoil damage besides Struggle, and crash damage.",
- shortDesc: "This Pokemon does not take recoil damage besides Struggle/crash damage.",
- },
- download: {
- inherit: true,
- onStart(pokemon) {
- if (pokemon.species.baseSpecies === 'Genesect') {
- if (!pokemon.getItem().onDrive) return;
- }
- let totaldef = 0;
- let totalspd = 0;
- for (const foe of pokemon.foes()) {
- totaldef += foe.storedStats.def;
- totalspd += foe.storedStats.spd;
- }
- if (totaldef && totaldef >= totalspd) {
- this.boost({spa: 1});
- } else if (totalspd) {
- this.boost({atk: 1});
- }
- },
- desc: "On switch-in, this Pokemon's Attack or Special Attack is raised by 1 stage based on the weaker combined defensive stat of all opposing Pokemon. Attack is raised if their Defense is lower, and Special Attack is raised if their Special Defense is the same or lower. If the user is a Genesect, this will not have effect unless it holds a Drive.",
- shortDesc: "On switch-in, Attack or Sp. Atk is raised 1 stage based on the foes' weaker Defense; Genesect must hold a plate for the effect to work.",
- },
- victorystar: {
- inherit: true,
- onAllyModifyMove(move) {
- if (typeof move.accuracy === 'number') {
- move.accuracy *= 1.5;
- }
- },
- shortDesc: "This Pokemon's moves' accuracy is multiplied by 1.5.",
- },
- shellarmor: {
- inherit: true,
- onDamage(damage, target, source, effect) {
- if (effect && effect.effectType === 'Move') {
- this.add('-message', "Its damage was reduced by Shell Armor!");
- damage -= target.maxhp / 10;
- if (damage < 0) damage = 0;
- return damage;
- }
- },
- onHit(target, source, move) {
- if (move.id === 'shellsmash') {
- target.setAbility('');
- }
- },
- desc: "This Pokemon cannot be struck by a critical hit. This ability also reduces incoming move damage by 1/10 of the user's max HP. If the user uses Shell Smash, this ability's effect ends.",
- shortDesc: "This Pokemon can't be struck critical hit; reduces incoming move damage by 1/10 of the user's max HP.",
- },
- prismarmor: {
- inherit: true,
- onDamage(damage, target, source, effect) {
- if (effect && effect.effectType === 'Move') {
- this.add('-message', "Its damage was reduced by Prism Armor!");
- damage -= target.maxhp / 10;
- if (damage < 0) damage = 0;
- return damage;
- }
- },
- desc: "This Pokemon receives 3/4 damage from supereffective attacks. Moongeist Beam, Sunsteel Strike, and the Abilities Mold Breaker, Teravolt, and Turboblaze cannot ignore this Ability. This ability also reduces incoming move damage by 1/10 of the user's max HP.",
- shortDesc: "This Pokemon receives 3/4 damage from supereffective attacks; reduces incoming move damage by 1/10 of the user's max HP.",
- },
- battlearmor: {
- inherit: true,
- onDamage(damage, target, source, effect) {
- if (effect && effect.effectType === 'Move') {
- this.add('-message', "Its damage was reduced by Battle Armor!");
- damage -= target.maxhp / 10;
- if (damage < 0) damage = 0;
- return damage;
- }
- },
- desc: "This Pokemon cannot be struck by a critical hit. This ability also reduces incoming move damage by 1/10 of the user's max HP.",
- shortDesc: "This Pokemon can't be struck critical hit; reduces incoming move damage by 1/10 of the user's max HP.",
- },
- weakarmor: {
- inherit: true,
- onDamage(damage, target, source, effect) {
- if (effect && effect.effectType === 'Move') {
- this.add('-message', "Its damage was reduced by Weak Armor!");
- damage -= target.maxhp / 10;
- if (damage < 0) damage = 0;
- target.setAbility('');
- this.boost({spe: 1});
- return damage;
- }
- },
- onDamagingHit() {},
- desc: "This ability reduces incoming move damage by 1/10 of the user's max HP and increases the user's Speed for the first hit after switch-in (and does not activate again until the next switch-in).",
- shortDesc: "Reduces incoming move damage by 1/10 of the user's max HP and increases the user's Spe for the 1st hit after switch-in (doesn't activate until next switch-in).",
- },
- magmaarmor: {
- inherit: true,
- onImmunity(type, pokemon) {
- if (type === 'hail') return false;
- if (type === 'frz') return false;
- },
- onDamage(damage, target, source, effect) {
- if (effect && effect.effectType === 'Move') {
- damage -= target.maxhp / 10;
- if (damage < 0) damage = 0;
- if (effect.type === 'Ice' || effect.type === 'Water') {
- this.add('-activate', target, 'ability: Magma Armor');
- target.setAbility('battlearmor');
- damage = 0;
- } else {
- this.add('-message', "Its damage was reduced by Magma Armor!");
- }
- return damage;
- }
- },
- desc: "This ability reduces incoming move damage by 1/10 of the user's max HP, provides immunity to Hail and freeze, and provides a one-time immunity to Water and Ice (after which it turns into Battle Armor).",
- shortDesc: "Reduces incoming move damage by 1/10 of the user's max HP, provides immunity to Hail & Frz, and provides a 1 time immunity to Water and Ice.",
- },
- multiscale: {
- inherit: true,
- onSourceModifyDamage(damage, source, target, move) {
- if (target.hp >= target.maxhp) {
- this.add('-message', "The attack was slightly weakened by Multiscale!");
- return this.chainModify(2 / 3);
- }
- },
- shortDesc: "If this Pokemon is at full HP, damage taken from attacks is lessened by 1/3.",
- },
- ironfist: {
- inherit: true,
- onBasePower(basePower, attacker, defender, move) {
- if (move.flags['punch']) {
- return basePower * 1.33;
- }
- },
- desc: "This Pokemon's punch-based attacks have their power multiplied by 1.33.",
- shortDesc: "This Pokemon's punch-based attacks have 1.33x power. Sucker Punch is not boosted.",
- },
- stench: {
- inherit: true,
- onModifyMove(move) {
- if (move.category !== "Status") {
- this.debug('Adding Stench flinch');
- if (!move.secondaries) move.secondaries = [];
- for (const secondary of move.secondaries) {
- if (secondary.volatileStatus === 'flinch') return;
- }
- move.secondaries.push({
- chance: 40,
- volatileStatus: 'flinch',
- });
- }
- },
- shortDesc: "This Pokemon's attacks without a chance to flinch have a 40% chance to flinch.",
- },
- aftermath: {
- inherit: true,
- onDamagingHit(damage, target, source, move) {
- if (!target.hp) {
- this.damage(source.baseMaxhp / 3, source, target, null, true);
- }
- },
- desc: "If this Pokemon is knocked out, that move's user loses 1/4 of its maximum HP, rounded down. If any active Pokemon has the Ability Damp, this effect is prevented.",
- shortDesc: "If this Pokemon is KOed, that move's user loses 1/4 its max HP.",
- },
- cursedbody: {
- desc: "When this Pokemon faints, attacker is Cursed.",
- shortDesc: "When this Pokemon faints, attacker is Cursed.",
- onFaint(target, source, effect) {
- if (effect && effect.effectType === 'Move' && source) {
- source.addVolatile('curse');
- }
- },
- name: "Cursed Body",
- rating: 3,
- num: 130,
- },
- gluttony: {
- inherit: true,
- onResidualOrder: 26,
- onResidualSubOrder: 1,
- onResidual(pokemon) {
- if (!pokemon.m.gluttonyFlag && !pokemon.item && this.dex.items.get(pokemon.lastItem).isBerry) {
- pokemon.m.gluttonyFlag = true;
- pokemon.setItem(pokemon.lastItem);
- pokemon.lastItem = '';
- this.add("-item", pokemon, pokemon.item, '[from] ability: Gluttony');
- }
- },
- shortDesc: "When this Pokemon has 1/2 or less of its maximum HP, it uses certain Berries early. Each berry has 2 uses.",
- },
- guts: {
- inherit: true,
- onDamage(damage, attacker, defender, effect) {
- if (effect && (effect.id === 'brn' || effect.id === 'psn' || effect.id === 'tox')) {
- return damage / 2;
- }
- },
- desc: "If this Pokemon has a major status condition, its Attack is multiplied by 1.5; burn's physical damage halving is ignored; takes half damage from burn/poison/toxic.",
- shortDesc: "If this Pokemon is statused, its Attack is 1.5x; ignores burn halving physical damage; takes 1/2 damage from brn/psn/tox.",
- },
- quickfeet: {
- inherit: true,
- onDamage(damage, attacker, defender, effect) {
- if (effect && (effect.id === 'brn' || effect.id === 'psn' || effect.id === 'tox')) {
- return damage / 2;
- }
- },
- desc: "If this Pokemon has a major status condition, its Speed is multiplied by 1.5; the Speed drop from paralysis is ignored; takes half damage from burn/poison/toxic.",
- shortDesc: "If this Pokemon is statused, its Speed is 1.5x; ignores Speed drop from paralysis; takes 1/2 damage from brn/psn/tox.",
- },
- toxicboost: {
- inherit: true,
- onDamage(damage, attacker, defender, effect) {
- if (effect && (effect.id === 'psn' || effect.id === 'tox')) {
- return damage / 2;
- }
- },
- desc: "While this Pokemon is poisoned, the power of its physical attacks is multiplied by 1.5; takes half damage from poison/toxic.",
- shortDesc: "While this Pokemon is poisoned, its physical attacks have 1.5x power; takes 1/2 damage from psn/tox.",
- },
- truant: {
- inherit: true,
- onBeforeMove() {},
- onModifyMove(move, pokemon) {
- if (!move.self) move.self = {};
- if (!move.self.volatileStatus) move.self.volatileStatus = 'truant';
- },
- condition: {
- duration: 2,
- onStart(pokemon) {
- this.add('-start', pokemon, 'Truant');
- },
- onBeforeMovePriority: 99,
- onBeforeMove(pokemon, target, move) {
- if (pokemon.removeVolatile('truant')) {
- this.add('cant', pokemon, 'ability: Truant');
- this.heal(pokemon.baseMaxhp / 3);
- return false;
- }
- },
- },
- shortDesc: "This Pokemon will not be able to move the turn after a successful move; heals 1/3 of its max HP on its Truant turn.",
- },
- flareboost: {
- inherit: true,
- onDamage(damage, defender, attacker, effect) {
- if (effect && (effect.id === 'brn')) {
- return damage / 2;
- }
- },
- desc: "While this Pokemon is burned, the power of its special attacks is multiplied by 1.5; takes half damage from burns.",
- shortDesc: "While this Pokemon is burned, its special attacks have 1.5x power; takes 1/2 damage from brn.",
- },
- telepathy: {
- inherit: true,
- onStart(target) {
- this.add('-start', target, 'move: Imprison');
- },
- onFoeDisableMove(pokemon) {
- for (const moveSlot of this.effectState.target.moveSlots) {
- pokemon.disableMove(moveSlot.id, 'hidden');
- }
- pokemon.maybeDisabled = true;
- },
- onFoeBeforeMove(attacker, defender, move) {
- if (move.id !== 'struggle' && this.effectState.target.hasMove(move.id) && !move.isZ) {
- this.add('cant', attacker, 'move: Imprison', move);
- return false;
- }
- },
- shortDesc: "This Pokemon does not take damage from attacks made by its allies; imprisons the target upon entry.",
- },
- speedboost: {
- inherit: true,
- onResidualPriority: -1,
- onResidual(pokemon) {
- if (pokemon.activeTurns && !pokemon.volatiles['stall']) {
- this.boost({spe: 1});
- }
- },
- desc: "This Pokemon's Speed is raised by 1 stage at the end of each full turn it has been on the field. This ability does not activate on turns Protect, Detect, Endure, etc are used.",
- },
- parentalbond: {
- inherit: true,
- onModifyMove(move, pokemon, target) {
- if (move.category === 'Status' || move.selfdestruct || move.multihit) return;
- if (!target) return;
- // singles, or single-target move
- if (this.activePerHalf === 1 || ['any', 'normal', 'randomNormal'].includes(move.target)) {
- move.multihit = 2;
- move.accuracy = true;
- pokemon.addVolatile('parentalbond');
- }
- },
- condition: {
- duration: 1,
- onBasePowerPriority: 8,
- onBasePower(basePower) {
- return this.chainModify(0.5);
- },
- },
- desc: "This Pokemon's damaging moves become multi-hit moves that hit twice. Both hits' damage are halved. Does not affect multi-hit moves or moves that have multiple targets. The moves that are affected will never miss.",
- shortDesc: "This Pokemon's damaging moves hit twice. Both hits have their damage halved. Moves affected have -- accuracy.",
- },
- swarm: {
- inherit: true,
- onFoeBasePower(basePower, attacker, defender, move) {
- if (defender.hasType('Flying')) {
- if (move.type === 'Rock' || move.type === 'Electric' || move.type === 'Ice') {
- this.add('-message', "The attack was weakened by Swarm!");
- return basePower / 2;
- }
- }
- },
- onDamage(damage, defender, attacker, effect) {
- if (defender.hasType('Flying')) {
- if (effect && effect.id === 'stealthrock') {
- return damage / 2;
- }
- }
- },
- desc: "When this Pokemon has 1/3 or less of its maximum HP, rounded down, its attacking stat is multiplied by 1.5 while using a Bug-type attack. The user takes half damage from Rock, Ice, Electric moves, and Stealth Rock if they are Flying type.",
- shortDesc: "When this Pokemon has 1/3 or less of its max HP, its Bug attacks do 1.5x damage. The user takes 1/2 damage from Rock/Ice/Electric moves, and Stealth Rock, if the user is Flying type.",
- },
- adaptability: {
- inherit: true,
- onModifyMove(move) {},
- onBasePower(power, attacker, defender, move) {
- if (!attacker.hasType(move.type)) {
- return this.chainModify(1.33);
- }
- },
- desc: "This Pokemon's moves that don't match one of its types have an attack bonus of 1.33.",
- shortDesc: "This Pokemon's non-STAB moves is 1.33x.",
- },
- shadowtag: {
- desc: "For the first turn after this Pokemon switches in, prevent adjacent opposing Pokemon from choosing to switch out unless they are immune to trapping or also have this Ability.",
- shortDesc: "Prevents adjacent foes from choosing to switch for one turn.",
- inherit: true,
- onStart(pokemon) {
- pokemon.addVolatile('shadowtag');
- },
- condition: {
- duration: 2,
- onFoeTrapPokemon(pokemon) {
- if (pokemon.ability !== 'shadowtag') {
- pokemon.tryTrap(true);
- }
- },
- },
- onBeforeMovePriority: 15,
- onBeforeMove(pokemon) {
- pokemon.removeVolatile('shadowtag');
- },
- onFoeMaybeTrapPokemon(pokemon, source) {
- if (!source) source = this.effectState.target;
- if (!source || !pokemon.isAdjacent(source)) return;
- if (pokemon.ability !== 'shadowtag' && !source.volatiles['shadowtag']) {
- pokemon.maybeTrapped = true;
- }
- },
- onFoeTrapPokemon(pokemon) {},
- },
-};
diff --git a/data/mods/gennext/conditions.ts b/data/mods/gennext/conditions.ts
deleted file mode 100644
index cba06a34a1a1..000000000000
--- a/data/mods/gennext/conditions.ts
+++ /dev/null
@@ -1,387 +0,0 @@
-export const Conditions: {[k: string]: ModdedConditionData} = {
- frz: {
- name: 'frz',
- effectType: 'Status',
- onStart(target) {
- this.add('-status', target, 'frz');
- },
- duration: 2,
- onBeforeMovePriority: 2,
- onBeforeMove(pokemon, target, move) {
- if (move.flags['defrost']) {
- pokemon.cureStatus();
- return;
- }
- this.add('cant', pokemon, 'frz');
- return false;
- },
- onHit(target, source, move) {
- if (move.type === 'Fire' && move.category !== 'Status' || move.flags['defrost']) {
- target.cureStatus();
- }
- },
- onEnd(target) {
- this.add('-curestatus', target, 'frz');
- },
- },
- lockedmove: {
- // Outrage, Thrash, Petal Dance...
- name: 'lockedmove',
- durationCallback() {
- return this.random(2, 4);
- },
- onResidual(target) {
- const move = target.lastMove as Move;
- if (!move.self || move.self.volatileStatus !== 'lockedmove') {
- // don't lock, and bypass confusion for calming
- delete target.volatiles['lockedmove'];
- } else if (target.ability === 'owntempo') {
- // Own Tempo prevents locking
- delete target.volatiles['lockedmove'];
- }
- },
- onEnd(target) {
- target.addVolatile('confusion');
- },
- onLockMove(pokemon) {
- return pokemon.lastMove!.id;
- },
- },
- confusion: {
- // this is a volatile status
- name: 'confusion',
- onStart(target, source, sourceEffect) {
- if (sourceEffect && sourceEffect.id === 'lockedmove') {
- this.add('-start', target, 'confusion', '[fatigue]');
- } else {
- this.add('-start', target, 'confusion');
- }
- this.effectState.time = this.random(3, 4);
- },
- onEnd(target) {
- this.add('-end', target, 'confusion');
- },
- onBeforeMove(pokemon) {
- pokemon.volatiles['confusion'].time--;
- if (!pokemon.volatiles['confusion'].time) {
- pokemon.removeVolatile('confusion');
- return;
- }
- const damage = this.actions.getDamage(pokemon, pokemon, 40);
- if (typeof damage !== 'number') throw new Error("Confusion damage not dealt");
- this.directDamage(damage);
- },
- },
-
- // weather!
-
- raindance: {
- inherit: true,
- onBasePower(basePower, attacker, defender, move) {
- if (move.id === 'scald' || move.id === 'steameruption') {
- return;
- }
- if (move.type === 'Water') {
- this.debug('rain water boost');
- return basePower * 1.5;
- }
- if (move.type === 'Fire') {
- this.debug('rain fire suppress');
- return basePower * 0.5;
- }
- },
- },
- sunnyday: {
- inherit: true,
- onBasePower(basePower, attacker, defender, move) {
- if (move.id === 'scald' || move.id === 'steameruption') {
- return;
- }
- if (move.type === 'Fire') {
- this.debug('Sunny Day fire boost');
- return basePower * 1.5;
- }
- if (move.type === 'Water') {
- this.debug('Sunny Day water suppress');
- return basePower * 0.5;
- }
- },
- },
-
- // intrinsics!
-
- bidestall: {
- name: 'bidestall',
- duration: 3,
- },
-
- unown: {
- // Unown: Shadow Tag
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'shadowtag' as ID;
- pokemon.baseAbility = 'shadowtag' as ID;
- }
- if (pokemon.transformed) return;
- pokemon.setType(pokemon.hpType || 'Dark');
- },
- },
- bronzong: {
- // Bronzong: Heatproof
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'heatproof' as ID;
- pokemon.baseAbility = 'heatproof' as ID;
- }
- },
- },
- weezing: {
- // Weezing: Aftermath
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'aftermath' as ID;
- pokemon.baseAbility = 'aftermath' as ID;
- }
- },
- },
- flygon: {
- // Flygon: Compoundeyes
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'compoundeyes' as ID;
- pokemon.baseAbility = 'compoundeyes' as ID;
- }
- },
- },
- eelektross: {
- // Eelektross: Poison Heal
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'poisonheal' as ID;
- pokemon.baseAbility = 'poisonheal' as ID;
- }
- },
- },
- claydol: {
- // Claydol: Filter
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'filter' as ID;
- pokemon.baseAbility = 'filter' as ID;
- }
- },
- },
- gengar: {
- // Gengar: Cursed Body
- onImmunity(type, pokemon) {
- if (pokemon.species.id !== 'gengarmega' && type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'cursedbody' as ID;
- pokemon.baseAbility = 'cursedbody' as ID;
- }
- },
- },
- mismagius: {
- // Mismagius: Cursed Body
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'cursedbody' as ID;
- pokemon.baseAbility = 'cursedbody' as ID;
- }
- },
- },
- mesprit: {
- // Mesprit: Serene Grace
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'serenegrace' as ID;
- pokemon.baseAbility = 'serenegrace' as ID;
- }
- },
- },
- uxie: {
- // Uxie: Synchronize
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'synchronize' as ID;
- pokemon.baseAbility = 'synchronize' as ID;
- }
- },
- },
- azelf: {
- // Azelf: Steadfast
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'steadfast' as ID;
- pokemon.baseAbility = 'steadfast' as ID;
- }
- },
- },
- hydreigon: {
- // Hydreigon: Sheer Force
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'sheerforce' as ID;
- pokemon.baseAbility = 'sheerforce' as ID;
- }
- },
- },
- rotom: {
- // All Rotoms: Trace
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'trace' as ID;
- pokemon.baseAbility = 'trace' as ID;
- }
- },
- },
- rotomheat: {
- // All Rotoms: Trace
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'trace' as ID;
- pokemon.baseAbility = 'trace' as ID;
- }
- },
- },
- rotomwash: {
- // All Rotoms: Trace
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'trace' as ID;
- pokemon.baseAbility = 'trace' as ID;
- }
- },
- },
- rotomfan: {
- // All Rotoms: Trace
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'trace' as ID;
- pokemon.baseAbility = 'trace' as ID;
- }
- },
- },
- rotomfrost: {
- // All Rotoms: Trace
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'trace' as ID;
- pokemon.baseAbility = 'trace' as ID;
- }
- },
- },
- rotommow: {
- // All Rotoms: Trace
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'trace' as ID;
- pokemon.baseAbility = 'trace' as ID;
- }
- },
- },
- cryogonal: {
- // Cryogonal: infinite hail, Ice Body
- onModifyMove(move) {
- if (move.id === 'hail') {
- const weather = move.weather as string;
- move.weather = '';
- move.onHit = function (target, source) {
- this.field.setWeather(weather, source, this.dex.abilities.get('snowwarning'));
- this.field.weatherState.duration = 0;
- };
- move.target = 'self';
- }
- },
- onImmunity(type, pokemon) {
- if (type === 'Ground' && !this.suppressingAbility(pokemon)) return false;
- },
- onStart(pokemon) {
- if (pokemon.ability === 'levitate') {
- pokemon.ability = 'icebody' as ID;
- pokemon.baseAbility = 'icebody' as ID;
- }
- },
- },
- probopass: {
- // Probopass: infinite sand
- onModifyMove(move) {
- if (move.id === 'sandstorm') {
- const weather = move.weather as string;
- move.weather = '';
- move.onHit = function (target, source) {
- this.field.setWeather(weather, source, this.dex.abilities.get('sandstream'));
- this.field.weatherState.duration = 0;
- };
- move.target = 'self';
- }
- },
- },
- phione: {
- // Phione: infinite rain
- onModifyMove(move) {
- if (move.id === 'raindance') {
- const weather = move.weather as string;
- move.weather = '';
- move.onHit = function (target, source) {
- this.field.setWeather(weather, source, this.dex.abilities.get('drizzle'));
- this.field.weatherState.duration = 0;
- };
- move.target = 'self';
- }
- },
- },
-};
diff --git a/data/mods/gennext/formats-data.ts b/data/mods/gennext/formats-data.ts
deleted file mode 100644
index b208a289c873..000000000000
--- a/data/mods/gennext/formats-data.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
- aegislash: {
- inherit: true,
- tier: "OU",
- },
- blaziken: {
- inherit: true,
- tier: "OU",
- },
- blazikenmega: {
- inherit: true,
- tier: "OU",
- },
- genesect: {
- inherit: true,
- tier: "OU",
- },
- gengarmega: {
- inherit: true,
- tier: "OU",
- },
- greninja: {
- inherit: true,
- tier: "OU",
- },
- kangaskhanmega: {
- inherit: true,
- tier: "OU",
- },
- landorus: {
- inherit: true,
- tier: "OU",
- },
- mawilemega: {
- inherit: true,
- tier: "OU",
- },
- salamencemega: {
- inherit: true,
- tier: "OU",
- },
- deoxysdefense: {
- inherit: true,
- tier: "Uber",
- },
- deoxysspeed: {
- inherit: true,
- tier: "Uber",
- },
- hoopaunbound: {
- inherit: true,
- tier: "OU",
- },
- kyurem: {
- inherit: true,
- tier: "Uber",
- },
- kyuremblack: {
- inherit: true,
- tier: "Uber",
- },
-};
diff --git a/data/mods/gennext/items.ts b/data/mods/gennext/items.ts
deleted file mode 100644
index d6ac4b4e160d..000000000000
--- a/data/mods/gennext/items.ts
+++ /dev/null
@@ -1,178 +0,0 @@
-export const Items: {[k: string]: ModdedItemData} = {
- burndrive: {
- inherit: true,
- onBasePower(basePower, user, target, move) {},
- desc: "Changes Genesect to Genesect-Burn.",
- },
- chilldrive: {
- inherit: true,
- onBasePower(basePower, user, target, move) {},
- desc: "Changes Genesect to Genesect-Chill.",
- },
- dousedrive: {
- inherit: true,
- onBasePower(basePower, user, target, move) {},
- desc: "Changes Genesect to Genesect-Douse.",
- },
- shockdrive: {
- inherit: true,
- onBasePower(basePower, user, target, move) {},
- desc: "Changes Genesect to Genesect-Shock.",
- },
- widelens: {
- inherit: true,
- onSourceModifyAccuracy(accuracy) {
- if (typeof accuracy === 'number') {
- return accuracy * 1.3;
- }
- },
- desc: "The accuracy of attacks by the holder is 1.6x.",
- },
- zoomlens: {
- inherit: true,
- onSourceModifyAccuracy(accuracy, target) {
- if (typeof accuracy === 'number' && !this.queue.willMove(target)) {
- this.debug('Zoom Lens boosting accuracy');
- return accuracy * 1.6;
- }
- },
- desc: "The accuracy of attacks by the holder is 1.6x if it moves after its target.",
- },
- bigroot: {
- inherit: true,
- onAfterMoveSecondarySelf(source, target) {
- if (source.hasType('Grass')) {
- this.heal(source.lastDamage / 8, source);
- }
- },
- onResidualOrder: 5,
- onResidualSubOrder: 2,
- onResidual(pokemon) {
- if (pokemon.hasType('Grass')) {
- this.heal(pokemon.baseMaxhp / 16);
- }
- },
- desc: "Holder gains 1.3x HP from draining/Aqua Ring/Ingrain/Leech Seed/Strength Sap; If the user is a Grass type, the holder heals 1/16 of its max HP every turn, and for every damaging move the holder uses 1/8th of the damage dealt is restored.",
- shortDesc: "Holder gains 1.3x from most healing moves; if the user is a Grass type, Leftovers & Shell Bell effects occur.",
- },
- blacksludge: {
- inherit: true,
- onResidualOrder: 5,
- onResidualSubOrder: 2,
- onResidual(pokemon) {
- if (pokemon.hasType('Poison')) {
- this.heal(pokemon.baseMaxhp / (pokemon.getTypes().length === 1 ? 8 : 16));
- } else {
- this.damage(pokemon.baseMaxhp / 8);
- }
- },
- desc: "Each turn, if holder is a Poison type, restores 1/16 max HP; loses 1/8 if not. Pure Poison types restore 1/8 max HP.",
- },
- focusband: {
- inherit: true,
- onDamage(damage, target, source, effect) {
- const types = target.getTypes();
- if (types.length === 1 && types[0] === 'Fighting' &&
- effect && effect.effectType === 'Move' &&
- target.useItem()) {
- if (damage >= target.hp) {
- this.add("-message", target.name + " held on using its Focus Band!");
- return target.hp - 1;
- } else {
- this.add("-message", target.name + "'s Focus Band broke!");
- }
- }
- },
- desc: "Breaks on first hit, but allows pure Fighting types to survive that hit with 1 HP.",
- },
- wiseglasses: {
- inherit: true,
- onBasePower(basePower, user, target, move) {
- if (move.category === 'Special') {
- const types = user.getTypes();
- if (types.length === 1 && types[0] === 'Psychic') {
- return basePower * 1.2;
- }
- return basePower * 1.1;
- }
- },
- desc: "Holder's special attacks have 1.1x power. Pure Psychic types special attacks have 1.2x power.",
- shortDesc: "Holder's SpA have 1.1x power. Pure Psychic types SpA have 1.2x power.",
- },
- muscleband: {
- inherit: true,
- onBasePower(basePower, user, target, move) {
- if (move.category === 'Physical') {
- const types = user.getTypes();
- if (types.length === 1 && types[0] === 'Fighting') {
- return basePower * 1.2;
- }
- return basePower * 1.1;
- }
- },
- desc: "Holder's physical attacks have 1.1x power. Pure Fighting types physical attacks have 1.2x power.",
- shortDesc: "Holder's Atk have 1.1x power. Pure Fighting types Atk have 1.2x power.",
- },
- stick: {
- inherit: true,
- // The Stick is a stand-in for a number of pokemon-exclusive items
- // introduced with Gen Next
- onModifyCritRatio(critRatio, user) {
- if (user.species.id === 'farfetchd') {
- return critRatio + 2;
- }
- },
- onModifyDef(def, pokemon) {
- if (pokemon.species.name === 'Shuckle') {
- return def * 1.5;
- }
- },
- onModifySpA(spa, pokemon) {
- if (pokemon.species.name === 'Unown') {
- return spa * 2;
- }
- },
- onModifySpD(spd, pokemon) {
- if (pokemon.species.name === 'Unown') {
- return spd * 2;
- }
- if (pokemon.species.name === 'Shuckle') {
- return spd * 1.5;
- }
- },
- onModifySpe(spe, pokemon) {
- if (pokemon.species.name === 'Unown') {
- return spe * 2;
- }
- },
- onFoeBasePower(basePower, attacker, defender, move) {
- const GossamerWingUsers = ["Butterfree", "Masquerain", "Beautifly", "Mothim", "Vivillon"];
- if (GossamerWingUsers.includes(defender.species.name)) {
- if (['Rock', 'Electric', 'Ice'].includes(move.type)) {
- this.add('-message', "The attack was weakened by GoassamerWing!");
- return basePower / 2;
- }
- }
- },
- onDamage(damage, defender, attacker, effect) {
- const GossamerWingUsers = ["Butterfree", "Masquerain", "Beautifly", "Mothim", "Vivillon"];
- if (GossamerWingUsers.includes(defender.species.name)) {
- if (effect && effect.id === 'stealthrock') {
- return damage / 2;
- }
- }
- },
- onAfterMoveSecondarySelf(source, target, move) {
- const GossamerWingUsers = ["Butterfree", "Masquerain", "Beautifly", "Mothim", "Vivillon"];
- if (move.effectType === 'Move' && move.category === 'Status' && GossamerWingUsers.includes(source.species.name)) {
- this.heal(source.baseMaxhp / 16);
- }
- },
- // onResidual(pokemon) {
- // if (pokemon.species.name === 'Shuckle') {
- // this.heal(this.clampIntRange(pokemon.maxhp / 16, 1));
- // }
- // },
- desc: "Raises Farfetch\u2019d's critical hit rate two stages.",
- },
-};
diff --git a/data/mods/gennext/moves.ts b/data/mods/gennext/moves.ts
deleted file mode 100644
index 7fe95c997a4b..000000000000
--- a/data/mods/gennext/moves.ts
+++ /dev/null
@@ -1,2119 +0,0 @@
-export const Moves: {[k: string]: ModdedMoveData} = {
- /******************************************************************
- Perfect accuracy moves:
- - base power increased to 90
-
- Justification:
- - perfect accuracy is too underpowered to have such low base power
- - it's not even an adequate counter to accuracy boosting, which
- is why the latter is banned in OU
-
- Precedent:
- - Giga Drain and Drain Punch, similar 60 base power moves, have
- been upgraded
- ******************************************************************/
- aerialace: {
- inherit: true,
- basePower: 90,
- },
- feintattack: {
- inherit: true,
- basePower: 90,
- },
- shadowpunch: {
- inherit: true,
- basePower: 90,
- },
- magnetbomb: {
- inherit: true,
- basePower: 90,
- },
- magicalleaf: {
- inherit: true,
- basePower: 90,
- },
- shockwave: {
- inherit: true,
- basePower: 90,
- },
- swift: {
- inherit: true,
- basePower: 90,
- },
- disarmingvoice: {
- inherit: true,
- basePower: 90,
- },
- aurasphere: {
- inherit: true,
- basePower: 90,
- },
- clearsmog: {
- inherit: true,
- basePower: 90,
- },
- /******************************************************************
- HMs:
- - shouldn't suck (as much)
-
- Justification:
- - there are HMs that don't suck
-
- Precedent:
- - Dive! Technically, it was to be in-line with Dig, but still.
- ******************************************************************/
- strength: {
- inherit: true,
- secondary: {
- chance: 30,
- self: {
- boosts: {
- atk: 1,
- },
- },
- },
- shortDesc: "30% chance of raising user's Atk by 1 stage.",
- desc: "This move has a 30% chance of raising the user's Attack by one stage.",
- },
- cut: {
- inherit: true,
- accuracy: 100,
- secondary: {
- chance: 100,
- boosts: {
- def: -1,
- },
- },
- desc: "100% chance of lowering the target's Defense by one stage.",
- shortDesc: "Lowers the target's Def by 1 stage.",
- },
- rocksmash: {
- inherit: true,
- basePower: 50,
- secondary: {
- chance: 100,
- boosts: {
- def: -1,
- },
- },
- desc: "100% chance of lowering the target's Defense by one stage.",
- shortDesc: "Lowers the target's Def by 1 stage.",
- },
- /******************************************************************
- Weather moves:
- - have increased priority
-
- Justification:
- - several Rain abusers get Prankster, which makes Rain otherwise
- overpowered
- ******************************************************************/
- raindance: {
- inherit: true,
- priority: 1,
- },
- sunnyday: {
- inherit: true,
- priority: 1,
- },
- sandstorm: {
- inherit: true,
- priority: 1,
- },
- hail: {
- inherit: true,
- priority: 1,
- },
- /******************************************************************
- Substitute:
- - has precedence over Protect
- - makes all moves hit against it
- Minimize:
- - only +1 evasion
- Double Team:
- - -25% maxhp when used
-
- Justification:
- - Sub/Protect stalling is annoying
- - Evasion stalling is annoying
- ******************************************************************/
- substitute: {
- inherit: true,
- condition: {
- onStart(target) {
- this.add('-start', target, 'Substitute');
- this.effectState.hp = Math.floor(target.maxhp / 4);
- delete target.volatiles['partiallytrapped'];
- },
- onAccuracyPriority: -100,
- onAccuracy(accuracy, target, source, move) {
- return 100;
- },
- onTryPrimaryHitPriority: 2,
- onTryPrimaryHit(target, source, move) {
- if (target === source || move.flags['bypasssub'] || move.infiltrates) {
- return;
- }
- let damage = this.actions.getDamage(source, target, move);
- if (!damage) {
- return null;
- }
- damage = this.runEvent('SubDamage', target, source, move, damage);
- if (!damage) {
- return damage;
- }
- if (damage > target.volatiles['substitute'].hp) {
- damage = target.volatiles['substitute'].hp as number;
- }
- target.volatiles['substitute'].hp -= damage;
- source.lastDamage = damage;
- if (target.volatiles['substitute'].hp <= 0) {
- target.removeVolatile('substitute');
- } else {
- this.add('-activate', target, 'Substitute', '[damage]');
- }
- if (move.recoil) {
- this.damage(this.clampIntRange(Math.round(damage * move.recoil[0] / move.recoil[1]), 1), source, target, 'recoil');
- }
- if (move.drain) {
- this.heal(Math.ceil(damage * move.drain[0] / move.drain[1]), source, target, 'drain');
- }
- this.runEvent('AfterSubDamage', target, source, move, damage);
- return this.HIT_SUBSTITUTE;
- },
- onEnd(target) {
- this.add('-end', target, 'Substitute');
- },
- },
- },
- protect: {
- inherit: true,
- condition: {
- duration: 1,
- onStart(target) {
- this.add('-singleturn', target, 'Protect');
- },
- onTryHitPriority: 3,
- onTryHit(target, source, move) {
- if (target.volatiles['substitute'] || !move.flags['protect']) return;
- this.add('-activate', target, 'Protect');
- const lockedmove = source.getVolatile('lockedmove');
- if (lockedmove) {
- // Outrage counter is reset
- if (source.volatiles['lockedmove'].duration === 2) {
- delete source.volatiles['lockedmove'];
- }
- }
- return null;
- },
- },
- },
- kingsshield: {
- inherit: true,
- condition: {
- duration: 1,
- onStart(target) {
- this.add('-singleturn', target, 'Protect');
- },
- onTryHitPriority: 3,
- onTryHit(target, source, move) {
- if (target.volatiles['substitute'] || !move.flags['protect'] || move.category === 'Status') return;
- this.add('-activate', target, 'Protect');
- const lockedmove = source.getVolatile('lockedmove');
- if (lockedmove) {
- // Outrage counter is reset
- if (source.volatiles['lockedmove'].duration === 2) {
- delete source.volatiles['lockedmove'];
- }
- }
- if (move.flags['contact']) {
- this.boost({atk: -2}, source, target, move);
- }
- return null;
- },
- },
- },
- spikyshield: {
- inherit: true,
- condition: {
- duration: 1,
- onStart(target) {
- this.add('-singleturn', target, 'move: Protect');
- },
- onTryHitPriority: 3,
- onTryHit(target, source, move) {
- if (target.volatiles['substitute'] || !move.flags['protect']) return;
- if (move && (move.target === 'self' || move.id === 'suckerpunch')) return;
- this.add('-activate', target, 'move: Protect');
- if (move.flags['contact']) {
- this.damage(source.baseMaxhp / 8, source, target);
- }
- return null;
- },
- },
- },
- minimize: {
- inherit: true,
- boosts: {
- evasion: 1,
- },
- desc: "Raises the user's evasiveness by 1 stages. Whether or not the user's evasiveness was changed, Body Slam, Dragon Rush, Flying Press, Heat Crash, Heavy Slam, Phantom Force, Shadow Force, Steamroller, and Stomp will not check accuracy and have their damage doubled if used against the user while it is active.",
- shortDesc: "Raises the user's evasiveness by 1.",
- },
- doubleteam: {
- inherit: true,
- onTryHit(target) {
- if (target.boosts.evasion >= 6) {
- return false;
- }
- if (target.hp <= target.maxhp / 4 || target.maxhp === 1) { // Shedinja clause
- return false;
- }
- },
- onHit(target) {
- this.directDamage(target.maxhp / 4);
- },
- boosts: {
- evasion: 1,
- },
- desc: "Raises the user's evasiveness by 1 stage; the user loses 1/4 of its max HP.",
- shortDesc: "Raises the user's evasiveness by 1; the user loses 25% of its max HP.",
- },
- /******************************************************************
- Two-turn moves:
- - now a bit better
-
- Justification:
- - Historically, these moves are useless.
- ******************************************************************/
- solarbeam: {
- inherit: true,
- basePower: 80,
- basePowerCallback(pokemon, target) {
- return 80;
- },
- willCrit: true,
- accuracy: true,
- onTryHit(target) {
- target.removeVolatile('substitute');
- },
- condition: {
- duration: 2,
- onLockMove: 'solarbeam',
- onStart(pokemon) {
- this.heal(pokemon.baseMaxhp / 2);
- },
- },
- desc: "This attack charges on the first turn and executes on the second. Power is halved if the weather is Hail, Rain Dance, or Sandstorm. If the user is holding a Power Herb or the weather is Sunny Day, the move completes in one turn. The user heals 1/2 of its max HP during the charge turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.",
- shortDesc: "Charges turn 1. Hits turn 2. No charge in sunlight. Heals 1/2 of the user's max HP, on charge.",
- flags: {charge: 1, mirror: 1},
- breaksProtect: true,
- },
- razorwind: {
- inherit: true,
- basePower: 60,
- willCrit: true,
- accuracy: true,
- onTryHit(target) {
- target.removeVolatile('substitute');
- },
- secondary: {
- chance: 100,
- volatileStatus: 'confusion',
- },
- desc: "Has a higher chance for a critical hit. This attack charges on the first turn and executes on the second. If the user is holding a Power Herb, the move completes in one turn. 100% chance to confuse the target. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.",
- shortDesc: "Charges, then hits foe(s) turn 2. High crit ratio. Confuses target.",
- flags: {charge: 1, mirror: 1},
- breaksProtect: true,
- },
- skullbash: {
- inherit: true,
- basePower: 70,
- willCrit: true,
- accuracy: true,
- onTryHit(target) {
- target.removeVolatile('substitute');
- },
- onTryMove(attacker, defender, move) {
- if (attacker.removeVolatile(move.id)) {
- return;
- }
- this.add('-prepare', attacker, move.name);
- this.boost({def: 1, spd: 1, accuracy: 1}, attacker, attacker, move);
- if (!this.runEvent('ChargeMove', attacker, defender, move)) {
- return;
- }
- attacker.addVolatile('twoturnmove', defender);
- return null;
- },
- flags: {contact: 1, charge: 1, mirror: 1},
- breaksProtect: true,
- desc: "This attack charges on the first turn and executes on the second. Raises the user's Defense, Special Defense, and Accuracy by 1 stage on the first turn. If the user is holding a Power Herb, the move completes in one turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.",
- shortDesc: "Raises user's Def, SpD, Acc by 1 on turn 1. Hits turn 2.",
- },
- skyattack: {
- inherit: true,
- basePower: 95,
- willCrit: true,
- accuracy: true,
- onTryHit(target) {
- target.removeVolatile('substitute');
- },
- secondary: {
- chance: 100,
- boosts: {
- def: -1,
- },
- },
- flags: {charge: 1, mirror: 1, distance: 1},
- breaksProtect: true,
- desc: "Has a 30% chance to flinch the target and a higher chance for a critical hit. This attack charges on the first turn and executes on the second. If the user is holding a Power Herb, the move completes in one turn. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.",
- shortDesc: "Charges, then hits turn 2. 30% flinch. High crit.",
- },
- freezeshock: {
- inherit: true,
- basePower: 95,
- willCrit: true,
- accuracy: true,
- onTryHit(target) {
- target.removeVolatile('substitute');
- },
- secondary: {
- chance: 100,
- status: 'par',
- },
- flags: {charge: 1, mirror: 1},
- breaksProtect: true,
- desc: "Has a 100% chance to paralyze the target. This attack charges on the first turn and executes on the second. If the user is holding a Power Herb, the move completes in one turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.",
- shortDesc: "Charges turn 1. Hits turn 2. 100% paralyze.",
- },
- iceburn: {
- inherit: true,
- basePower: 95,
- willCrit: true,
- accuracy: true,
- onTryHit(target) {
- target.removeVolatile('substitute');
- },
- secondary: {
- chance: 100,
- status: 'brn',
- },
- flags: {charge: 1, mirror: 1},
- breaksProtect: true,
- desc: "Has a 100% chance to burn the target. This attack charges on the first turn and executes on the second. If the user is holding a Power Herb, the move completes in one turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.",
- shortDesc: "Charges turn 1. Hits turn 2. 100% burn.",
- },
- bounce: {
- inherit: true,
- basePower: 60,
- willCrit: true,
- accuracy: true,
- onTryHit(target) {
- target.removeVolatile('substitute');
- },
- flags: {contact: 1, charge: 1, mirror: 1, gravity: 1, distance: 1},
- breaksProtect: true,
- desc: "Has a 30% chance to paralyze the target. This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Gust, Hurricane, Sky Uppercut, Smack Down, Thousand Arrows, Thunder, and Twister. If the user is holding a Power Herb, the move completes in one turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.",
- shortDesc: "Bounces turn 1. Hits turn 2. 30% paralyze.",
- },
- fly: {
- inherit: true,
- basePower: 60,
- willCrit: true,
- accuracy: true,
- onTryHit(target) {
- target.removeVolatile('substitute');
- },
- secondary: {
- chance: 100,
- boosts: {
- def: -1,
- },
- },
- flags: {contact: 1, charge: 1, mirror: 1, gravity: 1, distance: 1},
- breaksProtect: true,
- desc: "This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Gust, Hurricane, Sky Uppercut, Smack Down, Thousand Arrows, Thunder, and Twister. If the user is holding a Power Herb, the move completes in one turn. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.",
- shortDesc: "Flies up on first turn, then strikes the next turn. Lowers target's Def by 1 stage.",
- },
- dig: {
- inherit: true,
- basePower: 60,
- willCrit: true,
- accuracy: true,
- onTryHit(target) {
- target.removeVolatile('substitute');
- },
- secondary: {
- chance: 100,
- boosts: {
- def: -1,
- },
- },
- desc: "This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Earthquake and Magnitude but takes double damage from them, and is also unaffected by weather. If the user is holding a Power Herb, the move completes in one turn. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.",
- shortDesc: "Digs underground turn 1, strikes turn 2. Lowers target's Def by 1 stage.",
- flags: {contact: 1, charge: 1, mirror: 1, nonsky: 1},
- breaksProtect: true,
- },
- dive: {
- inherit: true,
- basePower: 60,
- willCrit: true,
- accuracy: true,
- onTryHit(target) {
- target.removeVolatile('substitute');
- },
- secondary: {
- chance: 100,
- boosts: {
- def: -1,
- },
- },
- desc: "This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Surf and Whirlpool but takes double damage from them, and is also unaffected by weather. If the user is holding a Power Herb, the move completes in one turn. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.",
- shortDesc: "Dives underwater turn 1, strikes turn 2. Lowers target's Def by 1 stage.",
- flags: {contact: 1, charge: 1, mirror: 1, nonsky: 1},
- breaksProtect: true,
- },
- phantomforce: {
- inherit: true,
- basePower: 60,
- willCrit: true,
- accuracy: true,
- onTryHit(target) {
- target.removeVolatile('substitute');
- },
- secondary: {
- chance: 100,
- boosts: {
- def: -1,
- },
- },
- desc: "If this move is successful, it breaks through the target's Detect, King's Shield, Protect, or Spiky Shield for this turn, allowing other Pokemon to attack the target normally. If the target's side is protected by Crafty Shield, Mat Block, Quick Guard, or Wide Guard, that protection is also broken for this turn and other Pokemon may attack the target's side normally. This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks. If the user is holding a Power Herb, the move completes in one turn. Damage doubles and no accuracy check is done if the target has used Minimize while active. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active). This move is also a guaranteed critical hit.",
- shortDesc: "Disappears turn 1. Hits turn 2. Breaks protection. Lowers target's Def by 1 stage.",
- },
- shadowforce: {
- inherit: true,
- basePower: 40,
- willCrit: true,
- accuracy: true,
- onTryHit(target) {
- target.removeVolatile('substitute');
- },
- secondary: {
- chance: 100,
- volatileStatus: 'curse',
- },
- desc: "If this move is successful, it breaks through the target's Detect, King's Shield, Protect, or Spiky Shield for this turn, allowing other Pokemon to attack the target normally. If the target's side is protected by Crafty Shield, Mat Block, Quick Guard, or Wide Guard, that protection is also broken for this turn and other Pokemon may attack the target's side normally. This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks. If the user is holding a Power Herb, the move completes in one turn. Damage doubles and no accuracy check is done if the target has used Minimize while active. 100% chance to inflict a curse (ghost type) onto the target. This move removes the target's Substitute (if one is active). This move is also a guaranteed critical hit.",
- shortDesc: "Disappears turn 1. Hits turn 2. Breaks protection. Curses the target.",
- },
- skydrop: {
- inherit: true,
- basePower: 60,
- willCrit: true,
- accuracy: true,
- secondary: {
- chance: 100,
- boosts: {
- def: -1,
- },
- },
- desc: "This attack takes the target into the air with the user on the first turn and executes on the second. Pokemon weighing 200kg or more cannot be lifted. On the first turn, the user and the target avoid all attacks other than Gust, Hurricane, Sky Uppercut, Smack Down, Thousand Arrows, Thunder, and Twister. The user and the target cannot make a move between turns, but the target can select a move to use. This move cannot damage Flying-type Pokemon. Fails on the first turn if the target is an ally or if the target has a substitute. Lowers the target's Defense by one stage. This move is a guaranteed critical hit. This move ignores Protection.",
- shortDesc: "User and foe fly up turn 1. Damages on turn 2. Lowers target's Def by 1 stage.",
- flags: {contact: 1, charge: 1, mirror: 1, gravity: 1, distance: 1},
- breaksProtect: true,
- },
- hyperbeam: {
- inherit: true,
- accuracy: true,
- basePower: 100,
- willCrit: true,
- self: null,
- onHit(target, source) {
- if (!target.hp) {
- source.addVolatile('mustrecharge');
- }
- },
- desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.",
- shortDesc: "User cannot move next turn, if the target isn't KO'ed.",
- },
- gigaimpact: {
- inherit: true,
- accuracy: true,
- basePower: 100,
- willCrit: true,
- self: null,
- onHit(target, source) {
- if (!target.hp) {
- source.addVolatile('mustrecharge');
- }
- },
- desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.",
- shortDesc: "User cannot move next turn, if the target isn't KO'ed.",
- },
- blastburn: {
- inherit: true,
- accuracy: true,
- basePower: 100,
- willCrit: true,
- self: null,
- onHit(target, source) {
- if (!target.hp) {
- source.addVolatile('mustrecharge');
- }
- },
- desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.",
- shortDesc: "User cannot move next turn, if the target isn't KO'ed.",
- },
- frenzyplant: {
- inherit: true,
- accuracy: true,
- basePower: 100,
- willCrit: true,
- self: null,
- onHit(target, source) {
- if (!target.hp) {
- source.addVolatile('mustrecharge');
- }
- },
- desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.",
- shortDesc: "User cannot move next turn, if the target isn't KO'ed.",
- },
- hydrocannon: {
- inherit: true,
- accuracy: true,
- basePower: 100,
- willCrit: true,
- self: null,
- onHit(target, source) {
- if (!target.hp) {
- source.addVolatile('mustrecharge');
- }
- },
- desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.",
- shortDesc: "User cannot move next turn, if the target isn't KO'ed.",
- },
- rockwrecker: {
- inherit: true,
- accuracy: true,
- basePower: 100,
- willCrit: true,
- self: null,
- onHit(target, source) {
- if (!target.hp) {
- source.addVolatile('mustrecharge');
- }
- },
- desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.",
- shortDesc: "User cannot move next turn, if the target isn't KO'ed.",
- },
- roaroftime: {
- inherit: true,
- accuracy: true,
- basePower: 100,
- willCrit: true,
- self: null,
- onHit(target, source) {
- if (!target.hp) {
- source.addVolatile('mustrecharge');
- }
- },
- desc: "If this move is successful, the user must recharge on the following turn and cannot make a move. If the target is knocked out by this move, the user does not have to recharge. This move is a guaranteed critical hit.",
- shortDesc: "User cannot move next turn, if the target isn't KO'ed.",
- },
- bide: {
- inherit: true,
- onTryHit(pokemon) {
- return this.queue.willAct() && this.runEvent('StallMove', pokemon);
- },
- condition: {
- duration: 2,
- onLockMove: 'bide',
- onStart(pokemon) {
- if (pokemon.removeVolatile('bidestall') || pokemon.hp <= 1) return false;
- pokemon.addVolatile('bidestall');
- this.effectState.totalDamage = 0;
- this.add('-start', pokemon, 'Bide');
- },
- onDamagePriority: -11,
- onDamage(damage, target, source, effect) {
- if (!effect || effect.effectType !== 'Move') return;
- if (!source || source.isAlly(target)) return;
- if (effect.effectType === 'Move' && damage >= target.hp) {
- damage = target.hp - 1;
- }
- this.effectState.totalDamage += damage;
- this.effectState.sourceSlot = source.getSlot();
- return damage;
- },
- onAfterSetStatus(status, pokemon) {
- if (status.id === 'slp') {
- pokemon.removeVolatile('bide');
- pokemon.removeVolatile('bidestall');
- }
- },
- onBeforeMove(pokemon, t, move) {
- if (this.effectState.duration === 1) {
- if (!this.effectState.totalDamage) {
- this.add('-end', pokemon, 'Bide');
- this.add('-fail', pokemon);
- return false;
- }
- this.add('-end', pokemon, 'Bide');
- const target = this.getAtSlot(this.effectState.sourceSlot);
- const moveData = {
- damage: this.effectState.totalDamage * 2,
- } as unknown as ActiveMove;
- this.actions.moveHit(target, pokemon, this.dex.getActiveMove('bide'), moveData);
- return false;
- }
- this.add('-activate', pokemon, 'Bide');
- return false;
- },
- onMoveAborted(pokemon) {
- pokemon.removeVolatile('bide');
- },
- },
- },
- /******************************************************************
- Snore:
- - base power increased to 100
-
- Justification:
- - Sleep Talk needs some competition
- ******************************************************************/
- snore: {
- inherit: true,
- basePower: 100,
- onBasePower(power, user) {
- if (user.species.id === 'snorlax') return power * 1.5;
- },
- ignoreImmunity: true,
- desc: "Has a 30% chance to flinch the target. Fails if the user is not asleep. If the user is a Snorlax, this move does 1.5x more damage.",
- },
- /******************************************************************
- Sound-based Normal-type moves:
- - not affected by immunities
-
- Justification:
- - they're already affected by Soundproof, also, ghosts can hear
- sounds
- ******************************************************************/
- boomburst: {
- inherit: true,
- ignoreImmunity: true,
- },
- hypervoice: {
- inherit: true,
- ignoreImmunity: true,
- },
- round: {
- inherit: true,
- ignoreImmunity: true,
- },
- uproar: {
- inherit: true,
- ignoreImmunity: true,
- },
- /******************************************************************
- Bonemerang, Bone Rush, Bone Club moves:
- - not affected by Ground immunities
- - Bone Rush nerfed to 20 base power so it's not viable on Lucario
-
- Justification:
- - flavor, also Marowak could use a buff
- ******************************************************************/
- bonemerang: {
- inherit: true,
- ignoreImmunity: true,
- accuracy: true,
- },
- bonerush: {
- inherit: true,
- basePower: 20,
- ignoreImmunity: true,
- accuracy: true,
- },
- boneclub: {
- inherit: true,
- ignoreImmunity: true,
- accuracy: 90,
- },
- /******************************************************************
- Relic Song:
- - now 60 bp priority move with no secondary
-
- Justification:
- - Meloetta-P needs viability
- ******************************************************************/
- relicsong: {
- inherit: true,
- basePower: 60,
- ignoreImmunity: true,
- onHit(target, pokemon) {
- if (pokemon.baseSpecies.name !== 'Meloetta' || pokemon.transformed) {
- return;
- }
- const natureChange: {[k: string]: string} = {
- Modest: 'Adamant',
- Adamant: 'Modest',
- Timid: 'Jolly',
- Jolly: 'Timid',
- };
- let tmpAtkEVs: number;
- let Atk2SpA: number;
- if (pokemon.species.id === 'meloettapirouette' && pokemon.formeChange('Meloetta', this.effect, false, '[msg]')) {
- tmpAtkEVs = pokemon.set.evs.atk;
- pokemon.set.evs.atk = pokemon.set.evs.spa;
- pokemon.set.evs.spa = tmpAtkEVs;
- if (natureChange[pokemon.set.nature]) pokemon.set.nature = natureChange[pokemon.set.nature];
- Atk2SpA = (pokemon.boosts.spa || 0) - (pokemon.boosts.atk || 0);
- this.boost({
- atk: Atk2SpA,
- spa: -Atk2SpA,
- }, pokemon);
- } else if (pokemon.formeChange('Meloetta-Pirouette', this.effect, false, '[msg]')) {
- tmpAtkEVs = pokemon.set.evs.atk;
- pokemon.set.evs.atk = pokemon.set.evs.spa;
- pokemon.set.evs.spa = tmpAtkEVs;
- if (natureChange[pokemon.set.nature]) pokemon.set.nature = natureChange[pokemon.set.nature];
- Atk2SpA = (pokemon.boosts.spa || 0) - (pokemon.boosts.atk || 0);
- this.boost({
- atk: Atk2SpA,
- spa: -Atk2SpA,
- }, pokemon);
- }
- // renderer takes care of this for us
- pokemon.transformed = false;
- },
- priority: 1,
- secondary: null,
- desc: "Has a 10% chance to cause the target to fall asleep. If this move is successful on at least one target and the user is a Meloetta, it changes to Pirouette Forme if it is currently in Aria Forme, or changes to Aria Forme if it is currently in Pirouette Forme. This forme change does not happen if the Meloetta has the Ability Sheer Force. The Pirouette Forme reverts to Aria Forme when Meloetta is not active. This move also switches Meloetta's SpA and Atk EVs, boosts, and certain natures, specifically: Modest <-> Adamant, Jolly <-> Timid, other natures are left untouched.",
- },
- /******************************************************************
- Defend Order, Heal Order:
- - now +1 priority
-
- Justification:
- - Vespiquen needs viability
- ******************************************************************/
- defendorder: {
- inherit: true,
- priority: 1,
- },
- healorder: {
- inherit: true,
- priority: 1,
- },
- /******************************************************************
- Stealth Rock:
- - 1/4 damage to Flying-types, 1/8 damage to everything else
-
- Justification:
- - Never has one move affected the viability of types been affected
- by one move to such an extent. Stealth Rock makes many
- interesting pokemon NU, changing it gives them a fighting chance.
-
- Flavor justification:
- - Removes from it the status of only residual damage affected by
- weaknesses/resistances, which is nice. The double damage to
- Flying can be explained as counteracting Flying's immunity to
- Spikes.
- ******************************************************************/
- stealthrock: {
- inherit: true,
- condition: {
- // this is a side condition
- onSideStart(side) {
- this.add('-sidestart', side, 'move: Stealth Rock');
- },
- onEntryHazard(pokemon) {
- let factor = 2;
- if (pokemon.hasType('Flying')) factor = 4;
- this.damage(pokemon.maxhp * factor / 16);
- },
- },
- desc: "Sets up a hazard on the foe's side of the field. Flying types take 1/4 of their max HP from this hazard. Everything else takes 1/8 of their max HP. Can be removed from the foe's side if any foe uses Rapid Spin or Defog, or is hit by Defog.",
- shortDesc: "Hurts foes on switch-in (1/8 for every type except Flying types take 1/4).",
- },
- /******************************************************************
- Silver Wind, Ominous Wind, AncientPower:
- - 100% chance of raising one stat, instead of 10% chance of raising
- all stats
- - Silver Wind, Ominous Wind: 90 base power in Hail
-
- Justification:
- - Hail sucks
-
- Precedent:
- - Many weathers strengthen moves. SolarBeam's base power is
- modified by weather.
-
- Flavor justification:
- - Winds are more damaging when it's hailing.
- ******************************************************************/
- silverwind: {
- inherit: true,
- basePowerCallback() {
- if (this.field.isWeather('hail')) {
- return 90;
- }
- return 60;
- },
- secondary: {
- chance: 100,
- self: {
- onHit(target, source) {
- const stats: BoostID[] = [];
- let stat: BoostID;
- for (stat in target.boosts) {
- if (stat !== 'accuracy' && stat !== 'evasion' && stat !== 'atk' && target.boosts[stat] < 6) {
- stats.push(stat);
- }
- }
- if (stats.length) {
- const randomStat = this.sample(stats);
- const boost: SparseBoostsTable = {};
- boost[randomStat] = 1;
- this.boost(boost);
- } else {
- return false;
- }
- },
- },
- },
- desc: "Has a 100% chance to raise the user's Attack, Defense, Special Attack, Special Defense, and Speed by 1 stage. This attack's base power becomes 90, if the weather is set to Hail.",
- shortDesc: "Raises all stats by 1 (not acc/eva).",
- },
- ominouswind: {
- inherit: true,
- basePowerCallback() {
- if (this.field.isWeather('hail')) {
- return 90;
- }
- return 60;
- },
- secondary: {
- chance: 100,
- self: {
- onHit(target, source) {
- const stats: BoostID[] = [];
- let stat: BoostID;
- for (stat in target.boosts) {
- if (stat !== 'accuracy' && stat !== 'evasion' && stat !== 'atk' && target.boosts[stat] < 6) {
- stats.push(stat);
- }
- }
- if (stats.length) {
- const randomStat = this.sample(stats);
- const boost: SparseBoostsTable = {};
- boost[randomStat] = 1;
- this.boost(boost);
- } else {
- return false;
- }
- },
- },
- },
- desc: "Has a 100% chance to raise the user's Attack, Defense, Special Attack, Special Defense, and Speed by 1 stage. This attack's base power becomes 90, if the weather is set to Hail.",
- shortDesc: "Raises all stats by 1 (not acc/eva).",
- },
- ancientpower: {
- inherit: true,
- secondary: {
- chance: 100,
- self: {
- onHit(target, source) {
- const stats: BoostID[] = [];
- let stat: BoostID;
- for (stat in target.boosts) {
- if (stat !== 'accuracy' && stat !== 'evasion' && stat !== 'atk' && target.boosts[stat] < 6) {
- stats.push(stat);
- }
- }
- if (stats.length) {
- const randomStat = this.sample(stats);
- const boost: SparseBoostsTable = {};
- boost[randomStat] = 1;
- this.boost(boost);
- } else {
- return false;
- }
- },
- },
- },
- desc: "Has a 100% chance to raise the user's Attack, Defense, Special Attack, Special Defense, and Speed by 1 stage.",
- shortDesc: "Raises all stats by 1 (not acc/eva).",
- },
- /******************************************************************
- Moves relating to Hail:
- - boost in some way
-
- Justification:
- - Hail sucks
- ******************************************************************/
- avalanche: {
- inherit: true,
- basePowerCallback(pokemon, source) {
- const lastAttackedBy = pokemon.getLastAttackedBy();
- if (lastAttackedBy) {
- if (lastAttackedBy.damage > 0 && lastAttackedBy.thisTurn) {
- this.debug('Boosted for getting hit by ' + lastAttackedBy.move);
- return this.field.isWeather('hail') ? 180 : 120;
- }
- }
- return this.field.isWeather('hail') ? 90 : 60;
- },
- desc: "Power doubles if the user was hit by the target this turn. If the weather is set to hail, this move does 1.5x more damage.",
- shortDesc: "Power doubles if user is damaged by the target.",
- },
- /******************************************************************
- Direct phazing moves:
- - changed to perfect accuracy
-
- Justification:
- - NEXT has buffed perfect accuracy to the point where unbanning
- +evasion could be viable.
- - as the primary counter to set-up, these should be able to counter
- DT (and subDT) in case they are ever unbanned.
-
- Precedent:
- - Haze, a move with a similar role, has perfect accuracy
-
- Flavor justification:
- - Whirlwinds and roaring are wide-area enough that dodging them
- isn't generally feasible.
- ******************************************************************/
- roar: {
- inherit: true,
- accuracy: true,
- },
- whirlwind: {
- inherit: true,
- accuracy: true,
- },
- /******************************************************************
- Multi-hit moves:
- - changed to perfect accuracy
-
- Justification:
- - as an Interesting Mechanic in terms of being able to hit past
- Substitute, it could use a buff
-
- Flavor justification:
- - You're going to attack that many times and they're all going to
- miss?
- ******************************************************************/
- doublehit: {
- inherit: true,
- accuracy: true,
- },
- armthrust: {
- inherit: true,
- accuracy: true,
- },
- barrage: {
- inherit: true,
- accuracy: true,
- },
- beatup: {
- inherit: true,
- accuracy: true,
- },
- bulletseed: {
- inherit: true,
- accuracy: true,
- },
- cometpunch: {
- inherit: true,
- accuracy: true,
- },
- doublekick: {
- inherit: true,
- accuracy: true,
- },
- doubleslap: {
- inherit: true,
- accuracy: true,
- },
- dualchop: {
- inherit: true,
- accuracy: true,
- },
- furyattack: {
- inherit: true,
- accuracy: true,
- },
- furyswipes: {
- inherit: true,
- accuracy: true,
- },
- geargrind: {
- inherit: true,
- accuracy: true,
- },
- iciclespear: {
- inherit: true,
- accuracy: true,
- },
- pinmissile: {
- inherit: true,
- accuracy: true,
- },
- rockblast: {
- inherit: true,
- accuracy: true,
- },
- spikecannon: {
- inherit: true,
- accuracy: true,
- },
- tailslap: {
- inherit: true,
- accuracy: true,
- },
- watershuriken: {
- inherit: true,
- accuracy: true,
- },
- /******************************************************************
- Draining moves:
- - buff Leech Life
-
- Justification:
- - Poison, Bug, Grass, and Ghost make sense for draining types.
- ******************************************************************/
- leechlife: {
- inherit: true,
- basePower: 75,
- },
- /******************************************************************
- Flying moves:
- - now a bit better
-
- Justification:
- - Flying has always been the type that's suffered from limited
- distribution. Let's see how it does without that disadvantage.
- ******************************************************************/
- twister: {
- inherit: true,
- basePower: 80,
- onBasePower(power, user) {
- const GossamerWingUsers = [
- "Butterfree", "Venomoth", "Masquerain", "Dustox", "Beautifly", "Mothim", "Lilligant", "Volcarona", "Vivillon",
- ];
- if (user.hasItem('stick') && GossamerWingUsers.includes(user.species.name)) {
- return power * 1.5;
- }
- },
- secondary: {
- chance: 30,
- volatileStatus: 'confusion',
- },
- desc: "Has a 30% chance to flinch the target. Damage doubles if the target is using Bounce, Fly, or Sky Drop. If the user holds the Gossamer Wing, this move does 1.5x more damage.",
- shortDesc: "30% chance to flinch the foe(s).",
- pp: 15,
- type: "Flying",
- },
- wingattack: {
- inherit: true,
- basePower: 40,
- accuracy: true,
- multihit: [2, 2],
- desc: "This move hits twice.",
- shortDesc: "Hits twice.",
- },
- /******************************************************************
- Moves with not enough drawbacks:
- - intensify drawbacks
-
- Justification:
- - Close Combat is way too common.
- ******************************************************************/
- closecombat: {
- inherit: true,
- self: {
- boosts: {
- def: -2,
- spd: -2,
- },
- },
- desc: "Lowers the user's Defense and Special Defense by 2 stage.",
- shortDesc: "Lowers the user's Defense and Sp. Def by 2.",
- },
- /******************************************************************
- Blizzard:
- - 30% freeze chance
-
- Justification:
- - freeze was nerfed, Blizzard can now have Thunder/Hurricane-like
- secondary chances.
- ******************************************************************/
- blizzard: {
- inherit: true,
- secondary: {
- chance: 30,
- status: 'frz',
- },
- desc: "Has a 30% chance to freeze the target. If the weather is Hail, this move does not check accuracy.",
- shortDesc: "30% chance to freeze foe(s). Can't miss in hail.",
- },
- /******************************************************************
- Special Ghost and Fighting:
- - buff Ghost, nerf Fighting
-
- Justification:
- - Special Fighting shouldn't be so strong.
- - Special Ghost is buffed to compensate for having to use HP
- Fighting after this
- ******************************************************************/
- focusblast: {
- inherit: true,
- accuracy: 30,
- },
- shadowball: {
- inherit: true,
- basePower: 90,
- secondary: {
- chance: 30,
- boosts: {
- spd: -1,
- },
- },
- desc: "Has a 30% chance to lower the target's Special Defense by 1 stage.",
- shortDesc: "30% chance to lower the target's Sp. Def by 1.",
- },
- /******************************************************************
- Selfdestruct and Explosion:
- - 200 and 250 base power autocrit
-
- Justification:
- - these were nerfed unreasonably in gen 5, they're now somewhat
- usable again.
- ******************************************************************/
- selfdestruct: {
- inherit: true,
- basePower: 200,
- accuracy: true,
- willCrit: true,
- desc: "The user faints after using this move, even if this move fails for having no target. This move is prevented from executing if any active Pokemon has the Ability Damp. This move is a guaranteed critical hit.",
- },
- explosion: {
- inherit: true,
- basePower: 250,
- accuracy: true,
- willCrit: true,
- desc: "The user faints after using this move, even if this move fails for having no target. This move is prevented from executing if any active Pokemon has the Ability Damp. This move is a guaranteed critical hit.",
- },
- /******************************************************************
- Scald and Steam Eruption:
- - base power not affected by weather
- - 60% burn in sun
-
- Justification:
- - rain could use a nerf
- ******************************************************************/
- scald: {
- inherit: true,
- onModifyMove(move) {
- switch (this.field.effectiveWeather()) {
- case 'sunnyday':
- move.secondary!.chance = 60;
- break;
- }
- },
- desc: "Has a 30% chance to burn the target. The target thaws out if it is frozen. If the weather is set to Sunny Day, there is a 60% chance to burn the target.",
- },
- steameruption: {
- inherit: true,
- accuracy: 100,
- onModifyMove(move) {
- switch (this.field.effectiveWeather()) {
- case 'sunnyday':
- move.secondary!.chance = 60;
- break;
- }
- },
- desc: "Has a 30% chance to burn the target. The target thaws out if it is frozen. If the weather is set to Sunny Day, there is a 60% chance to burn the target.",
- },
- /******************************************************************
- High Jump Kick:
- - 100 bp
-
- Justification:
- - Blaziken nerf
- ******************************************************************/
- highjumpkick: {
- inherit: true,
- basePower: 100,
- },
- /******************************************************************
- Echoed Voice:
- - change
-
- Justification:
- - no one uses Echoed Voice.
- ******************************************************************/
- echoedvoice: {
- inherit: true,
- basePower: 80,
- basePowerCallback() {
- return 80;
- },
- ignoreImmunity: true,
- onHit(target, source) {
- if (!target.side.addSlotCondition(target, 'futuremove')) return false;
- Object.assign(target.side.slotConditions[target.position]['futuremove'], {
- duration: 3,
- move: 'echoedvoice',
- source: source,
- moveData: {
- id: 'echoedvoice',
- name: "Echoed Voice",
- accuracy: 100,
- basePower: 80,
- category: "Special",
- priority: 0,
- flags: {futuremove: 1},
- ignoreImmunity: false,
- effectType: 'Move',
- type: 'Normal',
- },
- });
- this.add('-start', source, 'move: Echoed Voice');
- return null;
- },
- desc: "Deals damage two turns after this move is used. At the end of that turn, the damage is calculated at that time and dealt to the Pokemon at the position the target had when the move was used. If the user is no longer active at the time, damage is calculated based on the user's natural Special Attack stat, types, and level, with no boosts from its held item or Ability. Fails if this move or Future Sight is already in effect for the target's position.",
- shortDesc: "Hits two turns after being used.",
- },
- /******************************************************************
- Rapid Spin, Rock Throw:
- - remove hazards before dealing damage
- - double damage if hazards are removed
- - Rock Throw removes SR only
- - Rapid Spin now has base power 30
- - Rock Throw now has accuracy 100
-
- Justification:
- - hazards could use a nerf
- ******************************************************************/
- rapidspin: {
- inherit: true,
- basePower: 30,
- onBasePower(power, user) {
- let doubled = false;
- if (user.removeVolatile('leechseed')) {
- this.add('-end', user, 'Leech Seed', '[from] move: Rapid Spin', '[of] ' + user);
- doubled = true;
- }
- const sideConditions = ['spikes', 'toxicspikes', 'stealthrock'];
- for (const condition of sideConditions) {
- if (user.side.removeSideCondition(condition)) {
- this.add('-sideend', user.side, this.dex.conditions.get(condition).name, '[from] move: Rapid Spin', '[of] ' + user);
- doubled = true;
- }
- }
- if (user.volatiles['partiallytrapped']) {
- this.add('-remove', user, user.volatiles['partiallytrapped'].sourceEffect.name, '[from] move: Rapid Spin', '[of] ' + user, '[partiallytrapped]');
- doubled = true;
- delete user.volatiles['partiallytrapped'];
- }
- if (doubled) return power * 2;
- },
- self: undefined,
- desc: "If this move is successful the user removes hazards before it attacks, the effects of Leech Seed and partial-trapping moves end for the user, and all hazards are removed from the user's side of the field. This move does double the damage, if a hazard is removed.",
- },
- rockthrow: {
- inherit: true,
- accuracy: 100,
- onBasePower(power, user) {
- if (user.side.removeSideCondition('stealthrock')) {
- this.add('-sideend', user.side, "Stealth Rock", '[from] move: Rapid Spin', '[of] ' + user);
- return power * 2;
- }
- },
- desc: "This move attempts to remove Stealth Rocks from the user's side, if Stealth Rocks are removed this move does double the damage.",
- shortDesc: "Frees the user of Stealth Rock, does 2x damage if it does.",
- },
- /******************************************************************
- New feature: Signature Pokemon
- - Selected weak moves receive a 1.5x damage boost when used by a
- compatible Pokemon.
-
- Justification:
- - Gives a use for many otherwise competitively unviable moves
- - This is the sort of change that Game Freak is likely to make
- ******************************************************************/
- firefang: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'flareon') return this.chainModify(1.5);
- },
- accuracy: 100,
- secondaries: [
- {chance: 20, status: 'brn'},
- {chance: 30, volatileStatus: 'flinch'},
- ],
- desc: "Has a 20% chance to burn the target and a 30% chance to flinch it. If the user is a Flareon, this move does 1.5x more damage.",
- shortDesc: "20% chance to burn. 30% chance to flinch.",
- },
- icefang: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'walrein') return this.chainModify(1.5);
- },
- accuracy: 100,
- secondaries: [
- {chance: 20, status: 'frz'},
- {chance: 30, volatileStatus: 'flinch'},
- ],
- desc: "Has a 20% chance to freeze the target and a 30% chance to flinch it. If the user is a Walrein, this move does 1.5x more damage.",
- shortDesc: "20% chance to freeze. 30% chance to flinch.",
- },
- thunderfang: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'luxray') return this.chainModify(1.5);
- },
- accuracy: 100,
- secondaries: [
- {chance: 20, status: 'par'},
- {chance: 30, volatileStatus: 'flinch'},
- ],
- desc: "Has a 20% chance to paralyze the target and a 30% chance to flinch it. If the user is a Luxray, this move does 1.5x more damage.",
- shortDesc: "20% chance to paralyze. 30% chance to flinch.",
- },
- poisonfang: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'drapion') return this.chainModify(1.5);
- },
- accuracy: 100,
- secondaries: [
- {chance: 100, status: 'tox'},
- {chance: 30, volatileStatus: 'flinch'},
- ],
- desc: "Has a 100% chance to badly poison the target and a 30% chance to flinch it. If the user is a Drapion, this move does 1.5x more damage.",
- shortDesc: "100% chance to badly poison. 30% chance to flinch.",
- },
- poisontail: {
- inherit: true,
- basePower: 60,
- onBasePower(power, user) {
- if (user.species.id === 'seviper') return this.chainModify(1.5);
- },
- accuracy: 100,
- secondary: {
- chance: 60,
- status: 'tox',
- },
- desc: "Has a 60% chance to badly poison the target and a higher chance for a critical hit. If the user is a Seviper, this move does 1.5x more damage.",
- shortDesc: "High critical hit ratio. 60% chance to badly poison.",
- },
- slash: {
- inherit: true,
- basePower: 60,
- onBasePower(power, user) {
- if (user.species.id === 'persian') return this.chainModify(1.5);
- },
- secondary: {
- chance: 30,
- boosts: {
- def: -1,
- },
- },
- desc: "Has a higher chance for a critical hit. 30% chance to lower the target's Defense by one stage. If the user is a Persian, this move does 1.5x more damage.",
- shortDesc: "High critical hit ratio. 30% chance to lower Def by 1.",
- },
- sludge: {
- inherit: true,
- basePower: 60,
- onBasePower(power, user) {
- if (user.species.id === 'muk') return this.chainModify(1.5);
- },
- secondary: {
- chance: 100,
- status: 'psn',
- },
- desc: "Has a 100% chance to poison the target. If the user is a Muk, this move does 1.5x more damage.",
- shortDesc: "100% chance to poison the target.",
- },
- smog: {
- inherit: true,
- basePower: 75,
- accuracy: 100,
- onBasePower(power, user) {
- if (user.species.id === 'weezing') return this.chainModify(1.5);
- },
- secondary: {
- chance: 100,
- status: 'psn',
- },
- desc: "Has a 100% chance to poison the target. If the user is a Weezing, this move does 1.5x more damage.",
- shortDesc: "100% chance to poison the target.",
- },
- flamecharge: {
- inherit: true,
- basePower: 60,
- onBasePower(power, user) {
- if (user.species.id === 'rapidash') return this.chainModify(1.5);
- },
- desc: "Has a 100% chance to raise the user's Speed by 1 stage. If the user is a Rapidash, this move does 1.5x more damage.",
- },
- flamewheel: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'darmanitan') return this.chainModify(1.5);
- },
- desc: "Has a 10% chance to burn the target. If the user is a Darmanitan, this move does 1.5x more damage.",
- },
- spark: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'eelektross') return this.chainModify(1.5);
- },
- desc: "Has a 30% chance to paralyze the target. If the user is an Eelektross, this move does 1.5x more damage.",
- },
- triplekick: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'hitmontop') return this.chainModify(1.5);
- },
- accuracy: true,
- desc: "Hits three times. Power increases to 20 for the second hit and 30 for the third. This move checks accuracy for each hit, and the attack ends if the target avoids any of the hits. If one of the hits breaks the target's substitute, it will take damage for the remaining hits. If the user has the Ability Skill Link, this move will always hit three times. If the user is a Hitmontop, this move does 1.5x more damage.",
- },
- bubblebeam: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'kingdra') return this.chainModify(1.5);
- },
- secondary: {
- chance: 30,
- boosts: {
- spe: -1,
- },
- },
- desc: "Has a 30% chance to lower the target's Speed by 1 stage. If the user is a Kingdra, this move does 1.5x more damage.",
- shortDesc: "30% chance to lower the target's Speed by 1.",
- },
- electroweb: {
- inherit: true,
- basePower: 60,
- onBasePower(power, user) {
- if (user.species.id === 'galvantula') return this.chainModify(1.5);
- },
- desc: "Has a 100% chance to lower the target's Speed by 1 stage. If the user is a Galvantula, this move does 1.5x more damage.",
- accuracy: 100,
- },
- gigadrain: {
- inherit: true,
- basePower: 60,
- onBasePower(power, user) {
- if (user.species.id === 'beautifly') return this.chainModify(1.5);
- },
- desc: "The user recovers 1/2 the HP lost by the target, rounded half up. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down. If the user is a Beautifly, this move does 1.5x more damage.",
- accuracy: 100,
- },
- icywind: {
- inherit: true,
- basePower: 60,
- onBasePower(power, user) {
- if (user.species.id === 'glaceon') return this.chainModify(1.5);
- },
- desc: "Has a 100% chance to lower the target's Speed by 1 stage. If the user is a Glaceon, this move does 1.5x more damage.",
- accuracy: 100,
- },
- mudshot: {
- inherit: true,
- basePower: 60,
- onBasePower(power, user) {
- if (user.species.id === 'swampert') return this.chainModify(1.5);
- },
- desc: "Has a 100% chance to lower the target's Speed by 1 stage. If the user is a Swampert, this move does 1.5x more damage.",
- accuracy: 100,
- },
- glaciate: {
- inherit: true,
- basePower: 80,
- onBasePower(power, user) {
- if (user.species.id === 'kyurem') return this.chainModify(1.5);
- },
- desc: "Has a 100% chance to lower the target's Speed by 1 stage. If the user is a Kyurem, this move does 1.5x more damage.",
- accuracy: 100,
- },
- octazooka: {
- inherit: true,
- basePower: 75,
- onBasePower(power, user) {
- if (user.species.id === 'octillery') return this.chainModify(1.5);
- },
- accuracy: 90,
- secondary: {
- chance: 100,
- boosts: {
- accuracy: -1,
- },
- },
- desc: "Has a 100% chance to lower the target's accuracy by 1 stage. If the user is a Octillery, this move does 1.5x more damage.",
- shortDesc: "100% chance to lower the target's accuracy by 1.",
- },
- leaftornado: {
- inherit: true,
- basePower: 75,
- onBasePower(power, user) {
- if (user.species.id === 'serperior') return this.chainModify(1.5);
- },
- accuracy: 90,
- secondary: {
- chance: 100,
- boosts: {
- accuracy: -1,
- },
- },
- desc: "Has a 100% chance to lower the target's accuracy by 1 stage. If the user is a Serperior, this move does 1.5x more damage.",
- shortDesc: "100% chance to lower the target's accuracy by 1.",
- },
- iceshard: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'weavile') return this.chainModify(1.5);
- },
- desc: "If the user is a Weavile, this move does 1.5x more damage.",
- },
- aquajet: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'sharpedo') return this.chainModify(1.5);
- },
- desc: "If the user is a Sharpedo, this move does 1.5x more damage.",
- },
- machpunch: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'hitmonchan') return this.chainModify(1.5);
- },
- desc: "If the user is a Hitmonchan, this move does 1.5x more damage.",
- },
- shadowsneak: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'banette') return this.chainModify(1.5);
- },
- desc: "If the user is a Banette, this move does 1.5x more damage.",
- },
- steelwing: {
- inherit: true,
- basePower: 60,
- onBasePower(power, user) {
- if (user.species.id === 'skarmory') return this.chainModify(1.5);
- },
- accuracy: 100,
- secondary: {
- chance: 50,
- self: {
- boosts: {
- def: 1,
- },
- },
- },
- desc: "Has a 50% chance to raise the user's Defense by 1 stage. If the user is a Skarmory, this move does 1.5x more damage.",
- shortDesc: "50% chance to raise the user's Defense by 1.",
- },
- surf: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'masquerain') return this.chainModify(1.5);
- },
- secondary: {
- chance: 10,
- boosts: {
- spe: -1,
- },
- },
- desc: "Damage doubles if the target is using Dive. 10% chance to lower the target's Speed by one stage. If the user is a Masquerain, this move does 1.5x more damage.",
- shortDesc: "Power doubles on Dive. 10% chance to lower Spe by 1.",
- },
- hiddenpower: {
- inherit: true,
- onBasePower(power, user) {
- if (user.species.id === 'unown') return this.chainModify(1.5);
- },
- },
- /******************************************************************
- Moves with accuracy not a multiple of 10%
- - round up to a multiple of 10%
- - Rock Slide and Charge Beam also round up to 100%
-
- Justification:
- - missing Hydro Pump is losing a gamble, but missing V-create is
- nothing but hax
- - Rock Slide is included for being similar enough to Air Slash
- - Charge Beam is included because its 30% chance of no boost is enough
- ******************************************************************/
- jumpkick: {
- inherit: true,
- accuracy: 100,
- },
- razorshell: {
- inherit: true,
- accuracy: 100,
- },
- drillrun: {
- inherit: true,
- accuracy: 100,
- },
- vcreate: {
- inherit: true,
- accuracy: 100,
- },
- aeroblast: {
- inherit: true,
- accuracy: 100,
- },
- sacredfire: {
- inherit: true,
- accuracy: 100,
- },
- spacialrend: {
- inherit: true,
- accuracy: 100,
- },
- originpulse: {
- inherit: true,
- accuracy: 90,
- },
- precipiceblades: {
- inherit: true,
- accuracy: 90,
- },
- airslash: {
- inherit: true,
- accuracy: 100,
- },
- rockslide: {
- inherit: true,
- accuracy: 100,
- },
- chargebeam: {
- inherit: true,
- accuracy: 100,
- },
- aircutter: {
- inherit: true,
- accuracy: 100,
- },
- furycutter: {
- inherit: true,
- accuracy: 100,
- },
- flyingpress: {
- inherit: true,
- accuracy: 100,
- },
- crushclaw: {
- inherit: true,
- accuracy: 100,
- },
- razorleaf: {
- inherit: true,
- accuracy: 100,
- },
- stringshot: {
- inherit: true,
- accuracy: 100,
- },
- metalclaw: {
- inherit: true,
- accuracy: 100,
- },
- diamondstorm: {
- inherit: true,
- accuracy: 100,
- },
- snarl: {
- inherit: true,
- accuracy: 100,
- },
- powerwhip: {
- inherit: true,
- accuracy: 90,
- },
- seedflare: {
- inherit: true,
- accuracy: 90,
- },
- willowisp: {
- inherit: true,
- accuracy: 90,
- },
- meteormash: {
- inherit: true,
- accuracy: 90,
- },
- boltstrike: {
- inherit: true,
- accuracy: 90,
- secondary: {
- chance: 30,
- status: 'par',
- },
- desc: "Has a 30% chance to paralyze the target.",
- shortDesc: "30% chance to paralyze the target.",
- },
- blueflare: {
- inherit: true,
- accuracy: 90,
- secondary: {
- chance: 30,
- status: 'brn',
- },
- desc: "Has a 30% chance to burn the target.",
- shortDesc: "30% chance to burn the target.",
- },
- dragonrush: {
- inherit: true,
- accuracy: 80,
- },
- rocktomb: {
- inherit: true,
- accuracy: 100,
- },
- fireblast: {
- inherit: true,
- accuracy: 80,
- secondary: {
- chance: 20,
- status: 'brn',
- },
- desc: "Has a 20% chance to burn the target.",
- shortDesc: "20% chance to burn the target.",
- },
- irontail: {
- inherit: true,
- accuracy: 80,
- },
- magmastorm: {
- inherit: true,
- accuracy: 80,
- },
- megahorn: {
- inherit: true,
- accuracy: 90,
- },
- megapunch: {
- inherit: true,
- accuracy: 90,
- },
- megakick: {
- inherit: true,
- accuracy: 80,
- },
- slam: {
- inherit: true,
- accuracy: 80,
- },
- rollingkick: {
- inherit: true,
- accuracy: 90,
- },
- takedown: {
- inherit: true,
- accuracy: 90,
- },
- mudbomb: {
- inherit: true,
- accuracy: 90,
- },
- mirrorshot: {
- inherit: true,
- accuracy: 90,
- },
- rockclimb: {
- inherit: true,
- accuracy: 90,
- },
- poisonpowder: {
- inherit: true,
- accuracy: 80,
- },
- stunspore: {
- inherit: true,
- accuracy: 80,
- },
- sleeppowder: {
- inherit: true,
- accuracy: 80,
- },
- sweetkiss: {
- inherit: true,
- accuracy: 80,
- },
- lovelykiss: {
- inherit: true,
- accuracy: 80,
- },
- whirlpool: {
- inherit: true,
- accuracy: 90,
- },
- firespin: {
- inherit: true,
- accuracy: 90,
- },
- clamp: {
- inherit: true,
- accuracy: 90,
- },
- sandtomb: {
- inherit: true,
- accuracy: 90,
- },
- bind: {
- inherit: true,
- accuracy: 90,
- },
- grasswhistle: {
- inherit: true,
- accuracy: 60,
- },
- sing: {
- inherit: true,
- accuracy: 60,
- },
- supersonic: {
- inherit: true,
- accuracy: 60,
- },
- screech: {
- inherit: true,
- accuracy: 90,
- },
- metalsound: {
- inherit: true,
- accuracy: 90,
- },
- /******************************************************************
- Signature moves and other moves with limited distribution:
- - buffed in various ways
-
- Justification:
- - more metagame variety is always good
- ******************************************************************/
- psychocut: {
- inherit: true,
- basePower: 90,
- },
- twineedle: {
- inherit: true,
- accuracy: true,
- basePower: 50,
- },
- drillpeck: {
- inherit: true,
- basePower: 100,
- pp: 10,
- },
- needlearm: {
- inherit: true,
- basePower: 100,
- pp: 10,
- },
- leafblade: {
- inherit: true,
- basePower: 100,
- pp: 10,
- },
- attackorder: {
- inherit: true,
- basePower: 100,
- pp: 10,
- },
- withdraw: {
- inherit: true,
- boosts: {
- def: 1,
- spd: 1,
- },
- desc: "Raises the user's Defense and Special Defense by 1 stage.",
- shortDesc: "Raises the user's Def and SpD by 1.",
- },
- paraboliccharge: {
- inherit: true,
- basePower: 40,
- secondary: {
- chance: 100,
- boosts: {
- spa: -1,
- spd: -1,
- },
- self: {
- boosts: {
- spa: 1,
- spd: 1,
- },
- },
- },
- desc: "The user recovers 1/2 the HP lost by the target, rounded half up. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down. 100% chance to lower the target's Special Attack and Special Defense by one stage, and boost the user's Special Attack and Special Defense by one stage.",
- },
- drainingkiss: {
- inherit: true,
- basePower: 40,
- secondary: {
- chance: 100,
- boosts: {
- spa: -1,
- atk: -1,
- },
- self: {
- boosts: {
- spa: 1,
- atk: 1,
- },
- },
- },
- desc: "The user recovers 3/4 the HP lost by the target, rounded half up. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down. 100% chance to lower the target's Special Attack and Special Defense by one stage, and boost the user's Special Attack and Special Defense by one stage.",
- },
- stomp: {
- inherit: true,
- basePower: 100,
- accuracy: true,
- pp: 10,
- },
- steamroller: {
- inherit: true,
- basePower: 100,
- accuracy: true,
- pp: 10,
- },
- crabhammer: {
- inherit: true,
- basePower: 100,
- accuracy: 100,
- },
- autotomize: {
- inherit: true,
- boosts: {
- spe: 3,
- },
- desc: "Raises the user's Speed by 3 stages. If the user's Speed was changed, the user's weight is reduced by 100kg as long as it remains active. This effect is stackable but cannot reduce the user's weight to less than 0.1kg.",
- shortDesc: "Raises the user's Speed by 3; user loses 100 kg.",
- },
- dizzypunch: {
- inherit: true,
- basePower: 90,
- secondary: {
- chance: 50,
- volatileStatus: 'confusion',
- },
- desc: "Has a 50% chance to confuse the target.",
- shortDesc: "50% chance to confuse the target.",
- },
- nightdaze: {
- inherit: true,
- accuracy: 100,
- onModifyMove(move, user) {
- if (user.illusion) {
- const illusionMoves = user.illusion.moves.filter(m => this.dex.moves.get(m).category !== 'Status');
- if (!illusionMoves.length) return;
- // I'll figure out a better fix for this later
- (move as any).name = this.dex.moves.get(this.sample(illusionMoves)).name;
- }
- },
- desc: "Has a 40% chance to lower the target's accuracy by 1 stage. If Illusion is active, displays as a random non-Status move in the copied Pokémon's moveset.",
- },
- muddywater: {
- inherit: true,
- basePower: 85,
- accuracy: 100,
- },
- powergem: {
- inherit: true,
- basePower: 40,
- accuracy: true,
- multihit: [2, 2],
- desc: "Hits twice. If the first hit breaks the target's substitute, it will take damage for the second hit.",
- shortDesc: "Hits 2 times in one turn.",
- },
- acid: {
- inherit: true,
- ignoreImmunity: true,
- },
- acidspray: {
- inherit: true,
- ignoreImmunity: true,
- },
- eggbomb: {
- inherit: true,
- accuracy: 80,
- basePower: 60,
- willCrit: true,
- desc: "This move is always a critical hit unless the target is under the effect of Lucky Chant or has the Abilities Battle Armor or Shell Armor.",
- shortDesc: "Always results in a critical hit.",
- },
- sacredsword: {
- inherit: true,
- basePower: 95,
- },
- triattack: {
- inherit: true,
- accuracy: true,
- basePower: 30,
- desc: "Hits 3 times. Has a 10% chance to burn, paralyze or freeze the target each time.",
- shortDesc: "Hits 3x; 10% chance to paralyze/burn/freeze.",
- multihit: [3, 3],
- secondary: {
- chance: 10,
- onHit(target, source) {
- const result = this.random(3);
- if (result === 0) {
- target.trySetStatus('brn', source);
- } else if (result === 1) {
- target.trySetStatus('par', source);
- } else {
- target.trySetStatus('frz', source);
- }
- },
- },
- },
- /******************************************************************
- Custom moves:
- ******************************************************************/
- magikarpsrevenge: {
- num: 0,
- accuracy: true,
- basePower: 120,
- category: "Physical",
- desc: "Has a 100% chance to confuse the target and lower its Defense and Special Attack by 1 stage. The user recovers 1/2 the HP lost by the target, rounded half up. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down. The user steals the foe's boosts. If this move is successful, the weather changes to rain unless it is already in effect, and the user gains the effects of Aqua Ring and Magic Coat.",
- shortDesc: "Does many things turn 1. Can't move turn 2.",
- name: "Magikarp's Revenge",
- pp: 10,
- priority: 0,
- flags: {contact: 1, recharge: 1, protect: 1, mirror: 1, heal: 1},
- noSketch: true,
- drain: [1, 2],
- onTry(pokemon) {
- if (pokemon.species.name !== 'Magikarp') {
- this.add('-fail', pokemon, 'move: Magikarp\'s Revenge');
- return null;
- }
- },
- self: {
- onHit(source) {
- this.field.setWeather('raindance');
- source.addVolatile('magiccoat');
- source.addVolatile('aquaring');
- },
- volatileStatus: 'mustrecharge',
- },
- secondary: {
- chance: 100,
- volatileStatus: 'confusion',
- boosts: {
- def: -1,
- spa: -1,
- },
- },
- stealsBoosts: true,
- target: "normal",
- type: "Water",
- contestType: "Cute",
- },
-};
diff --git a/data/mods/gennext/pokedex.ts b/data/mods/gennext/pokedex.ts
deleted file mode 100644
index d04603358bc7..000000000000
--- a/data/mods/gennext/pokedex.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-export const Pokedex: {[k: string]: ModdedSpeciesData} = {
- genesectdouse: {
- inherit: true,
- types: ["Bug", "Water"],
- },
- genesectshock: {
- inherit: true,
- types: ["Bug", "Electric"],
- },
- genesectburn: {
- inherit: true,
- types: ["Bug", "Fire"],
- },
- genesectchill: {
- inherit: true,
- types: ["Bug", "Ice"],
- },
-};
diff --git a/data/mods/gennext/scripts.ts b/data/mods/gennext/scripts.ts
deleted file mode 100644
index c0916bf04b6b..000000000000
--- a/data/mods/gennext/scripts.ts
+++ /dev/null
@@ -1,145 +0,0 @@
-export const Scripts: ModdedBattleScriptsData = {
- inherit: 'gen6',
- init() {
- this.modData('Pokedex', 'cherrimsunshine').types = ['Grass', 'Fire'];
-
- // Give Hurricane to all the Bug/Flying Quiver-dancers
- // Precedent: Volcarona
- this.modData('Learnsets', 'masquerain').learnset.hurricane = ['5L100'];
- this.modData('Learnsets', 'butterfree').learnset.hurricane = ['5L100'];
- this.modData('Learnsets', 'beautifly').learnset.hurricane = ['5L100'];
- this.modData('Learnsets', 'mothim').learnset.hurricane = ['5L100'];
-
- // Masquerain also gets Surf because we want it to be viable
- this.modData('Learnsets', 'masquerain').learnset.surf = ['5M'];
-
- // Roserade gets Sludge
- this.modData('Learnsets', 'roserade').learnset.sludge = ['5L100'];
-
- // Meloetta: Fiery Dance
- this.modData('Learnsets', 'meloetta').learnset.fierydance = ['5L100'];
-
- // Galvantula: Zap Cannon
- this.modData('Learnsets', 'galvantula').learnset.zapcannon = ['5L100'];
-
- // Virizion: Horn Leech
- this.modData('Learnsets', 'virizion').learnset.hornleech = ['5L100'];
-
- // Scolipede, Milotic, Steelix: Coil
- this.modData('Learnsets', 'milotic').learnset.coil = ['5L100'];
- this.modData('Learnsets', 'scolipede').learnset.coil = ['5L100'];
- this.modData('Learnsets', 'steelix').learnset.coil = ['5L100'];
-
- // Rotoms: lots of moves
- this.modData('Learnsets', 'rotomwash').learnset.bubblebeam = ['5L100'];
- this.modData('Learnsets', 'rotomfan').learnset.hurricane = ['5L100'];
- this.modData('Learnsets', 'rotomfan').learnset.twister = ['5L100'];
- this.modData('Learnsets', 'rotomfrost').learnset.frostbreath = ['5L100'];
- this.modData('Learnsets', 'rotomheat').learnset.heatwave = ['5L100'];
- this.modData('Learnsets', 'rotommow').learnset.magicalleaf = ['5L100'];
-
- // Zororark: much wider movepool
- this.modData('Learnsets', 'zoroark').learnset.earthquake = ['5M'];
- this.modData('Learnsets', 'zoroark').learnset.stoneedge = ['5M'];
- this.modData('Learnsets', 'zoroark').learnset.icebeam = ['5M'];
- this.modData('Learnsets', 'zoroark').learnset.xscissor = ['5M'];
- this.modData('Learnsets', 'zoroark').learnset.gigadrain = ['5T'];
- this.modData('Learnsets', 'zoroark').learnset.superpower = ['5T'];
-
- // Mantine: lots of moves
- this.modData('Learnsets', 'mantine').learnset.recover = ['5L100'];
- this.modData('Learnsets', 'mantine').learnset.whirlwind = ['5L100'];
- this.modData('Learnsets', 'mantine').learnset.batonpass = ['5L100'];
- this.modData('Learnsets', 'mantine').learnset.wish = ['5L100'];
- this.modData('Learnsets', 'mantine').learnset.soak = ['5L100'];
- this.modData('Learnsets', 'mantine').learnset.lockon = ['5L100'];
- this.modData('Learnsets', 'mantine').learnset.acidspray = ['5L100'];
- this.modData('Learnsets', 'mantine').learnset.octazooka = ['5L100'];
- this.modData('Learnsets', 'mantine').learnset.stockpile = ['5L100'];
-
- // eggSketch! :D
- this.modData('Learnsets', 'aipom').learnset.sketch = ['5E'];
- this.modData('Learnsets', 'spinda').learnset.sketch = ['5E'];
- this.modData('Learnsets', 'mimejr').learnset.sketch = ['5E'];
-
- // Tail Glow :D
- this.modData('Learnsets', 'finneon').learnset.tailglow = ['5L100'];
- this.modData('Learnsets', 'lumineon').learnset.tailglow = ['5L100'];
- this.modData('Learnsets', 'mareep').learnset.tailglow = ['5L100'];
- this.modData('Learnsets', 'ampharos').learnset.tailglow = ['5L100'];
- this.modData('Learnsets', 'chinchou').learnset.tailglow = ['5L100'];
- this.modData('Learnsets', 'lanturn').learnset.tailglow = ['5L100'];
-
- // Spinda: Contrary
- this.modData('Learnsets', 'spinda').learnset.vcreate = ['5L100'];
- this.modData('Learnsets', 'spinda').learnset.superpower = ['5L100'];
- this.modData('Learnsets', 'spinda').learnset.closecombat = ['5L100'];
- this.modData('Learnsets', 'spinda').learnset.overheat = ['5L100'];
- this.modData('Learnsets', 'spinda').learnset.leafstorm = ['5L100'];
- this.modData('Learnsets', 'spinda').learnset.dracometeor = ['5L100'];
-
- // Venusaur
- this.modData('Pokedex', 'venusaur').abilities['1'] = 'Leaf Guard';
- // Charizard
- this.modData('Pokedex', 'charizard').abilities['1'] = 'Flame Body';
- // Blastoise
- this.modData('Pokedex', 'blastoise').abilities['1'] = 'Shell Armor';
- // Meganium
- this.modData('Pokedex', 'meganium').abilities['1'] = 'Harvest';
- // Typhlosion
- this.modData('Pokedex', 'typhlosion').abilities['1'] = 'Magma Armor';
- // Feraligatr
- this.modData('Pokedex', 'feraligatr').abilities['1'] = 'Strong Jaw';
- // Sceptile
- this.modData('Pokedex', 'sceptile').abilities['1'] = 'Limber';
- // Blaziken
- this.modData('Pokedex', 'blaziken').abilities['1'] = 'Reckless';
- // Swampert
- this.modData('Pokedex', 'swampert').abilities['1'] = 'Hydration';
- // Torterra
- this.modData('Pokedex', 'torterra').abilities['1'] = 'Weak Armor';
- // Infernape
- this.modData('Pokedex', 'infernape').abilities['1'] = 'No Guard';
- // Empoleon
- this.modData('Pokedex', 'empoleon').abilities['1'] = 'Ice Body';
- // Serperior
- this.modData('Pokedex', 'serperior').abilities['1'] = 'Own Tempo';
- // Emboar
- this.modData('Pokedex', 'emboar').abilities['1'] = 'Sheer Force';
- // Samurott
- this.modData('Pokedex', 'samurott').abilities['1'] = 'Technician';
- // Chesnaught
- this.modData('Pokedex', 'chesnaught').abilities['1'] = 'Battle Armor';
- // Delphox
- this.modData('Pokedex', 'delphox').abilities['1'] = 'Magic Guard';
- // Greninja
- this.modData('Pokedex', 'greninja').abilities['1'] = 'Pickpocket';
-
- // Levitate mons
- this.modData('Pokedex', 'unown').abilities['1'] = 'Shadow Tag';
- this.modData('Pokedex', 'flygon').abilities['1'] = 'Compound Eyes';
- this.modData('Pokedex', 'flygon').abilities['H'] = 'Sand Rush';
- this.modData('Pokedex', 'weezing').abilities['1'] = 'Aftermath';
- this.modData('Pokedex', 'eelektross').abilities['1'] = 'Poison Heal';
- this.modData('Pokedex', 'claydol').abilities['1'] = 'Filter';
- this.modData('Pokedex', 'mismagius').abilities['1'] = 'Cursed Body';
- this.modData('Pokedex', 'cryogonal').abilities['1'] = 'Ice Body';
- this.modData('Pokedex', 'mesprit').abilities['1'] = 'Serene Grace';
- this.modData('Pokedex', 'uxie').abilities['1'] = 'Synchronize';
- this.modData('Pokedex', 'azelf').abilities['1'] = 'Steadfast';
- this.modData('Pokedex', 'hydreigon').abilities['1'] = 'Sheer Force';
- // Rotoms
- this.modData('Pokedex', 'rotom').abilities['1'] = 'Trace';
- this.modData('Pokedex', 'rotomwash').abilities['1'] = 'Trace';
- this.modData('Pokedex', 'rotomheat').abilities['1'] = 'Trace';
- this.modData('Pokedex', 'rotommow').abilities['1'] = 'Trace';
- this.modData('Pokedex', 'rotomfrost').abilities['1'] = 'Trace';
- this.modData('Pokedex', 'rotomfan').abilities['1'] = 'Trace';
-
- // Adaptability change
- this.modData('Pokedex', 'crawdaunt').abilities['H'] = 'Tough Claws';
-
- // Vespiquen
- this.modData('Pokedex', 'vespiquen').abilities['1'] = 'Swarm';
- },
-};
diff --git a/data/mods/littlecolosseum/abilities.ts b/data/mods/littlecolosseum/abilities.ts
new file mode 100644
index 000000000000..e9fe1f5299aa
--- /dev/null
+++ b/data/mods/littlecolosseum/abilities.ts
@@ -0,0 +1,168 @@
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
+ hazardabsorb: {
+ // implemented in moves.ts
+ flags: {},
+ shortDesc: "This Pokemon doesn't take damage from hazards.",
+ name: "Hazard Absorb",
+ rating: 4,
+ },
+ proteangen7: {
+ onPrepareHit(source, target, move) {
+ if (move.hasBounced || move.flags['futuremove'] || move.sourceEffect === 'snatch') return;
+ const type = move.type;
+ if (type && type !== '???' && source.getTypes().join() !== type) {
+ if (!source.setType(type)) return;
+ this.add('-start', source, 'typechange', type, '[from] ability: Protean (Gen 7)');
+ }
+ },
+ flags: {},
+ name: "Protean (Gen 7)",
+ shortDesc: "This Pokemon's type changes to the type of the move it is using.",
+ rating: 4,
+ num: -168,
+ },
+ spikedfur: {
+ onDamagingHitOrder: 1,
+ onDamagingHit(damage, target, source, move) {
+ const bp = move.basePower;
+ if (bp <= 60) {
+ this.damage(source.baseMaxhp / 8, source, target);
+ }
+ },
+ flags: {},
+ name: "Spiked Fur",
+ rating: 2.5,
+ shortDesc: "Pokemon that use moves with ≤60 BP against this Pokemon lose 1/8 of their max HP.",
+ },
+ galewings: {
+ onModifyPriority(priority, pokemon, target, move) {
+ for (const poke of this.getAllActive()) {
+ if (poke.hasAbility('counteract') && poke.side.id !== pokemon.side.id && !poke.abilityState.ending) {
+ return;
+ }
+ }
+ if (move?.type === 'Flying' && pokemon.hp >= pokemon.maxhp / 4) return priority + 1;
+ },
+ flags: {},
+ name: "Gale Wings",
+ shortDesc: "If this Pokemon has 25% of its max HP or more, its Flying-type moves have +1 priority.",
+ rating: 3,
+ num: 177,
+ },
+ magicresistance: {
+ onSourceModifyAtkPriority: 6,
+ onSourceModifyAtk(atk, attacker, defender, move) {
+ if (move.type === 'Ice' || move.type === 'Fire') {
+ this.debug('Magic Resistance weaken');
+ return this.chainModify(0.5);
+ }
+ },
+ onSourceModifySpAPriority: 5,
+ onSourceModifySpA(atk, attacker, defender, move) {
+ if (move.type === 'Ice' || move.type === 'Fire') {
+ this.debug('Magic Resistance weaken');
+ return this.chainModify(0.5);
+ }
+ },
+ onAfterMoveSecondarySelf(source, target, move) {
+ if (!move || !target || source.switchFlag === true) return;
+ if (target !== source && move.category !== 'Status') {
+ if (source.item || source.volatiles['gem'] || move.id === 'fling') return;
+ const 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] ability: Magic Resistance', '[of] ' + target);
+ }
+ },
+ flags: {breakable: 1},
+ name: "Magic Resistance",
+ rating: 3.5,
+ shortDesc: "This Pokemon steals foe's item after hitting them, and takes 50% damage from Fire/Ice.",
+ },
+ hover: {
+ // implemented in moves.ts
+ // and also scripts.ts
+ flags: {},
+ shortDesc: "This Pokemon is immune to Ground moves and Stealth Rock.",
+ name: "Hover",
+ rating: 4,
+ },
+ stall: {
+ onBeforeMove(target, source, move) {
+ if (move.category === 'Status') {
+ this.actions.useMove(move, target, {target: source});
+ }
+ },
+ onFractionalPriority: -0.1,
+ flags: {},
+ shortDesc: "This Pokemon's status moves are used twice, but it usually moves last.",
+ name: "Stall",
+ rating: 1,
+ num: 100,
+ },
+ gowiththeflow: {
+ onAnyModifyBoost(boosts, pokemon) {
+ const unawareUser = this.effectState.target;
+ if (unawareUser === pokemon) return;
+ if (unawareUser === this.activePokemon && pokemon === this.activeTarget) {
+ boosts['def'] = 0;
+ boosts['spd'] = 0;
+ boosts['evasion'] = 0;
+ }
+ if (pokemon === this.activePokemon && unawareUser === this.activeTarget) {
+ boosts['atk'] = 0;
+ boosts['def'] = 0;
+ boosts['spa'] = 0;
+ boosts['accuracy'] = 0;
+ }
+ },
+ onTryHit(target, source, move) {
+ if (target !== source && move.type === 'Water') {
+ if (!this.heal(target.baseMaxhp / 4)) {
+ this.add('-immune', target, '[from] ability: Go with the Flow');
+ }
+ return null;
+ }
+ },
+ flags: {breakable: 1},
+ shortDesc: "Effects of Unware and Water Absorb.",
+ name: "Go with the Flow",
+ rating: 4,
+ },
+ slidingwhale: {
+ onDamagingHitOrder: 1,
+ onDamagingHit(damage, target, source, move) {
+ if (!target.hp && this.checkMoveMakesContact(move, source, target, true)) {
+ this.damage(source.baseMaxhp / 4, source, target);
+ }
+ },
+ onModifySpe(spe, pokemon) {
+ if (this.field.isWeather(['hail', 'snow'])) {
+ return this.chainModify(2);
+ }
+ },
+ flags: {},
+ shortDesc: "Effects of Slush Rush and Aftermath.",
+ name: "Sliding Whale",
+ rating: 3,
+ },
+ fluffycharger: {
+ onSourceModifyDamage(damage, source, target, move) {
+ let mod = 1;
+ if (move.type === 'Fire') mod *= 2;
+ if (move.flags['contact']) mod /= 2;
+ return this.chainModify(mod);
+ },
+ onDamagingHitOrder: 1,
+ onDamagingHit(damage, target, source, move) {
+ target.addVolatile('charge');
+ },
+ flags: {breakable: 1},
+ shortDesc: "Effects of Fluffy and Electromorphosis.",
+ name: "Fluffy Charger",
+ rating: 4,
+ },
+};
diff --git a/data/mods/littlecolosseum/moves.ts b/data/mods/littlecolosseum/moves.ts
new file mode 100644
index 000000000000..7cb2e7b9e4f5
--- /dev/null
+++ b/data/mods/littlecolosseum/moves.ts
@@ -0,0 +1,88 @@
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
+ surginglava: {
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ shortDesc: "Raises the user's SpA & Spe by 1 stage.",
+ name: "Surging Lava",
+ pp: 20,
+ priority: 0,
+ flags: {snatch: 1, metronome: 1},
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Morning Sun", target);
+ },
+ boosts: {
+ spa: 1,
+ spe: 1,
+ },
+ secondary: null,
+ target: "self",
+ type: "Fire",
+ zMove: {effect: 'clearnegativeboost'},
+ contestType: "Cool",
+ },
+
+ // Unedited moves
+ stealthrock: {
+ num: 446,
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Stealth Rock",
+ pp: 20,
+ priority: 0,
+ flags: {reflectable: 1, snatch: 1},
+ sideCondition: 'stealthrock',
+ condition: {
+ // this is a side condition
+ onSideStart(side) {
+ this.add('-sidestart', side, 'move: Stealth Rock');
+ },
+ onEntryHazard(pokemon) {
+ if (pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('hazardabsorb') || pokemon.hasAbility('hover')) return;
+ const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6);
+ this.damage(pokemon.maxhp * Math.pow(2, typeMod) / 8);
+ },
+ },
+ secondary: null,
+ target: "foeSide",
+ type: "Rock",
+ zMove: {boost: {def: 1}},
+ contestType: "Cool",
+ },
+ spikes: {
+ num: 191,
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Spikes",
+ pp: 20,
+ priority: 0,
+ flags: {reflectable: 1, nonsky: 1, mustpressure: 1, snatch: 1},
+ sideCondition: 'spikes',
+ condition: {
+ // this is a side condition
+ onSideStart(side) {
+ this.add('-sidestart', side, 'Spikes');
+ this.effectState.layers = 1;
+ },
+ onSideRestart(side) {
+ if (this.effectState.layers >= 3) return false;
+ this.add('-sidestart', side, 'Spikes');
+ this.effectState.layers++;
+ },
+ onEntryHazard(pokemon) {
+ if (!pokemon.isGrounded()) return;
+ if (pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('hazardabsorb')) return;
+ const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4
+ this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24);
+ },
+ },
+ secondary: null,
+ target: "foeSide",
+ type: "Ground",
+ zMove: {boost: {def: 1}},
+ contestType: "Clever",
+ },
+};
diff --git a/data/mods/littlecolosseum/pokedex.ts b/data/mods/littlecolosseum/pokedex.ts
new file mode 100644
index 000000000000..fc70a3bbedec
--- /dev/null
+++ b/data/mods/littlecolosseum/pokedex.ts
@@ -0,0 +1,94 @@
+export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
+ gastly: {
+ inherit: true,
+ baseStats: {hp: 30, atk: 35, def: 30, spa: 70, spd: 35, spe: 60},
+ abilities: {0: "Frisk", 1: "Protean", H: "Neutralizing Gas"},
+ },
+ swablu: {
+ inherit: true,
+ types: ["Fairy", "Flying"],
+ baseStats: {hp: 45, atk: 45, def: 60, spa: 45, spd: 75, spe: 50},
+ abilities: {0: "Natural Cure", 1: "Scrappy", H: "Pixilate"},
+ },
+ slugma: {
+ inherit: true,
+ baseStats: {hp: 30, atk: 40, def: 40, spa: 80, spd: 30, spe: 40},
+ abilities: {0: "Flame Body", 1: "Weak Armor", H: "Hazard Absorb"},
+ },
+ sprigatito: {
+ inherit: true,
+ baseStats: {hp: 40, atk: 65, def: 54, spa: 31, spd: 45, spe: 75},
+ abilities: {0: "Overgrow", H: "Protean (Gen 7)"},
+ },
+ dreepy: {
+ inherit: true,
+ baseStats: {hp: 41, atk: 60, def: 40, spa: 42, spd: 40, spe: 82},
+ },
+ tepig: {
+ inherit: true,
+ types: ["Fire", "Ground"],
+ baseStats: {hp: 65, atk: 63, def: 50, spa: 35, spd: 50, spe: 45},
+ abilities: {0: "Blaze", H: "Sap Sipper"},
+ },
+ meowthgalar: {
+ inherit: true,
+ baseStats: {hp: 60, atk: 65, def: 65, spa: 40, spd: 40, spe: 40},
+ abilities: {0: "Tough Claws", H: "Spiked Fur"},
+ },
+ toxel: {
+ inherit: true,
+ baseStats: {hp: 60, atk: 48, def: 55, spa: 64, spd: 55, spe: 40},
+ abilities: {0: "Rattled", 1: "Static", H: "Pickpocket"},
+ },
+ fletchling: {
+ inherit: true,
+ types: ["Fire", "Flying"],
+ baseStats: {hp: 45, atk: 50, def: 55, spa: 40, spd: 38, spe: 52},
+ },
+ spoink: {
+ inherit: true,
+ types: ["Psychic", "Rock"],
+ baseStats: {hp: 60, atk: 25, def: 35, spa: 70, spd: 75, spe: 70},
+ abilities: {0: "Magic Resistance", 1: "Own Tempo", H: "Gluttony"},
+ },
+ cutiefly: {
+ inherit: true,
+ baseStats: {hp: 50, atk: 35, def: 50, spa: 50, spd: 50, spe: 25},
+ abilities: {0: "Oblivious", 1: "Shield Dust", H: "Hover"},
+ },
+ shieldon: {
+ inherit: true,
+ abilities: {0: "Sturdy", 1: "Battle Armor", H: "Stall"},
+ },
+ wooperpaldea: {
+ inherit: true,
+ baseStats: {hp: 55, atk: 65, def: 65, spa: 25, spd: 45, spe: 35},
+ },
+ wooper: {
+ inherit: true,
+ baseStats: {hp: 55, atk: 65, def: 65, spa: 25, spd: 45, spe: 35},
+ abilities: {0: "Damp", 1: "Go with the Flow"},
+ },
+ corphish: {
+ inherit: true,
+ types: ["Water", "Dark"],
+ baseStats: {hp: 50, atk: 80, def: 65, spa: 50, spd: 35, spe: 46},
+ abilities: {0: "Adaptability", 1: "Hyper Cutter", H: "Shell Armor"},
+ },
+ jangmoo: {
+ inherit: true,
+ types: ["Dragon", "Fairy"],
+ baseStats: {hp: 65, atk: 65, def: 65, spa: 55, spd: 55, spe: 55},
+ abilities: {0: "Bulletproof", 1: "Overcoat", H: "Marvel Scale"},
+ },
+ mareep: {
+ inherit: true,
+ types: ["Electric", "Grass"],
+ baseStats: {hp: 55, atk: 40, def: 40, spa: 65, spd: 60, spe: 35},
+ abilities: {0: "Static", H: "Fluffy Charger"},
+ },
+ cetoddle: {
+ inherit: true,
+ abilities: {0: "Thick Fat", 1: "Sheer Force", H: "Sliding Whale"},
+ },
+};
diff --git a/data/mods/littlecolosseum/scripts.ts b/data/mods/littlecolosseum/scripts.ts
new file mode 100644
index 000000000000..1a7579b68cba
--- /dev/null
+++ b/data/mods/littlecolosseum/scripts.ts
@@ -0,0 +1,105 @@
+export const Scripts: ModdedBattleScriptsData = {
+ gen: 9,
+ init() {
+ this.modData("Learnsets", "swablu").learnset.willowisp = ["9L1"];
+ this.modData("Learnsets", "swablu").learnset.bodypress = ["9L1"];
+ this.modData("Learnsets", "swablu").learnset.encore = ["9L1"];
+ this.modData("Learnsets", "slugma").learnset.surginglava = ["9L1"];
+ delete this.modData('Learnsets', 'slugma').learnset.lightscreen;
+ delete this.modData('Learnsets', 'slugma').learnset.reflect;
+ this.modData("Learnsets", "gastly").learnset.drainingkiss = ["9L1"];
+ this.modData("Learnsets", "gastly").learnset.psychicnoise = ["9L1"];
+ delete this.modData('Learnsets', 'gastly').learnset.energyball;
+ delete this.modData('Learnsets', 'gastly').learnset.dazzlinggleam;
+ delete this.modData('Learnsets', 'gastly').learnset.nastyplot;
+ this.modData("Learnsets", "sprigatito").learnset.flowertrick = ["9L1"];
+ this.modData("Learnsets", "sprigatito").learnset.knockoff = ["9L1"];
+ this.modData("Learnsets", "meowthgalar").learnset.slackoff = ["9L1"];
+ this.modData("Learnsets", "tepig").learnset.slackoff = ["9L1"];
+ this.modData("Learnsets", "tepig").learnset.earthquake = ["9L1"];
+ this.modData("Learnsets", "tepig").learnset.highhorsepower = ["9L1"];
+ this.modData("Learnsets", "tepig").learnset.stealthrock = ["9L1"];
+ this.modData("Learnsets", "dreepy").learnset.willowisp = ["9L1"];
+ this.modData("Learnsets", "dreepy").learnset.dragonclaw = ["9L1"];
+ this.modData("Learnsets", "dreepy").learnset.uturn = ["9L1"];
+ this.modData("Learnsets", "dreepy").learnset.hex = ["9L1"];
+ this.modData("Learnsets", "dreepy").learnset.psychicfangs = ["9L1"];
+ this.modData("Learnsets", "toxel").learnset.spark = ["9L1"];
+ this.modData("Learnsets", "toxel").learnset.thunder = ["9L1"];
+ this.modData("Learnsets", "toxel").learnset.thunderbolt = ["9L1"];
+ this.modData("Learnsets", "toxel").learnset.discharge = ["9L1"];
+ this.modData("Learnsets", "toxel").learnset.voltswitch = ["9L1"];
+ this.modData("Learnsets", "toxel").learnset.poisonjab = ["9L1"];
+ this.modData("Learnsets", "toxel").learnset.acidspray = ["9L1"];
+ this.modData("Learnsets", "toxel").learnset.clearsmog = ["9L1"];
+ this.modData("Learnsets", "toxel").learnset.sludgebomb = ["9L1"];
+ this.modData("Learnsets", "toxel").learnset.slackoff = ["9L1"];
+ this.modData("Learnsets", "fletchling").learnset.flamethrower = ["9L1"];
+ this.modData("Learnsets", "fletchling").learnset.fireblast = ["9L1"];
+ delete this.modData('Learnsets', 'fletchling').learnset.bravebird;
+ this.modData("Learnsets", "spoink").learnset.ancientpower = ["9L1"];
+ this.modData("Learnsets", "spoink").learnset.meteorbeam = ["9L1"];
+ delete this.modData('Learnsets', 'cutiefly').learnset.calmmind;
+ delete this.modData('Learnsets', 'cutiefly').learnset.psychic;
+ delete this.modData('Learnsets', 'cutiefly').learnset.quiverdance;
+ this.modData("Learnsets", "cutiefly").learnset.tailglow = ["9L1"];
+ this.modData("Learnsets", "shieldon").learnset.bodypress = ["9L1"];
+ this.modData("Learnsets", "shieldon").learnset.slackoff = ["9L1"];
+ this.modData("Learnsets", "wooper").learnset.icepunch = ["9L1"];
+ this.modData("Learnsets", "wooper").learnset.poisonjab = ["9L1"];
+ this.modData("Learnsets", "corphish").learnset.flipturn = ["9L1"];
+ this.modData("Learnsets", "jangmoo").learnset.takeheart = ["9L1"];
+ this.modData("Learnsets", "jangmoo").learnset.heartswap = ["9L1"];
+ this.modData("Learnsets", "jangmoo").learnset.drainingkiss = ["9L1"];
+ this.modData("Learnsets", "jangmoo").learnset.playrough = ["9L1"];
+ this.modData("Learnsets", "jangmoo").learnset.slackoff = ["9L1"];
+ delete this.modData('Learnsets', 'cetoddle').learnset.iciclespear;
+ delete this.modData('Learnsets', 'cetoddle').learnset.earthquake;
+ delete this.modData('Learnsets', 'cetoddle').learnset.superpower;
+ delete this.modData('Learnsets', 'cetoddle').learnset.knockoff;
+ this.modData("Learnsets", "cetoddle").learnset.rapidspin = ["9L1"];
+ this.modData("Learnsets", "mareep").learnset.bodypress = ["9L1"];
+ this.modData("Learnsets", "mareep").learnset.gigadrain = ["9L1"];
+ this.modData("Learnsets", "mareep").learnset.worryseed = ["9L1"];
+ this.modData("Learnsets", "mareep").learnset.slackoff = ["9L1"];
+ },
+ pokemon: {
+ runImmunity(type: string, message?: string | boolean) {
+ if (!type || type === '???') return true;
+ if (!this.battle.dex.types.isName(type)) {
+ throw new Error("Use runStatusImmunity for " + type);
+ }
+ if (this.fainted) return false;
+
+ const negateImmunity = !this.battle.runEvent('NegateImmunity', this, type);
+ const notImmune = type === 'Ground' ?
+ this.isGrounded(negateImmunity) :
+ negateImmunity || this.battle.dex.getImmunity(type, this);
+ if (notImmune) return true;
+ if (message) {
+ if (notImmune === null) {
+ this.battle.add('-immune', this, '[from] ability: ' + this.getAbility().name);
+ } else {
+ this.battle.add('-immune', this);
+ }
+ }
+ return false;
+ },
+ isGrounded(negateImmunity = false) {
+ if ('gravity' in this.battle.field.pseudoWeather) return true;
+ if ('ingrain' in this.volatiles && this.battle.gen >= 4) return true;
+ if ('smackdown' in this.volatiles) return true;
+ const item = (this.ignoringItem() ? '' : this.item);
+ if (item === 'ironball') return true;
+ // If a Fire/Flying type uses Burn Up and Roost, it becomes ???/Flying-type, but it's still grounded.
+ if (!negateImmunity && this.hasType('Flying') && !('roost' in this.volatiles)) return false;
+ if (
+ (this.hasAbility(['levitate', 'hover'])) &&
+ !this.battle.suppressingAbility(this)
+ ) return null;
+ if ('magnetrise' in this.volatiles) return false;
+ if ('telekinesis' in this.volatiles) return false;
+ return item !== 'airballoon';
+ },
+ },
+};
diff --git a/data/mods/mixandmega/items.ts b/data/mods/mixandmega/items.ts
index 81ba194b786d..e4d3533f2753 100644
--- a/data/mods/mixandmega/items.ts
+++ b/data/mods/mixandmega/items.ts
@@ -1,4 +1,4 @@
-export const Items: {[k: string]: ModdedItemData} = {
+export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
abomasite: {
inherit: true,
isNonstandard: null,
@@ -90,6 +90,13 @@ export const Items: {[k: string]: ModdedItemData} = {
inherit: true,
isNonstandard: null,
},
+ cornerstonemask: {
+ inherit: true,
+ onBasePower(basePower, user, target, move) {
+ return this.chainModify([4915, 4096]);
+ },
+ onTakeItem: false,
+ },
diancite: {
inherit: true,
isNonstandard: null,
@@ -127,6 +134,13 @@ export const Items: {[k: string]: ModdedItemData} = {
inherit: true,
isNonstandard: null,
},
+ hearthflamemask: {
+ inherit: true,
+ onBasePower(basePower, user, target, move) {
+ return this.chainModify([4915, 4096]);
+ },
+ onTakeItem: false,
+ },
heracronite: {
inherit: true,
isNonstandard: null,
@@ -231,12 +245,10 @@ export const Items: {[k: string]: ModdedItemData} = {
rustedshield: {
inherit: true,
onTakeItem: false,
- isNonstandard: null,
},
rustedsword: {
inherit: true,
onTakeItem: false,
- isNonstandard: null,
},
sablenite: {
inherit: true,
@@ -287,4 +299,11 @@ export const Items: {[k: string]: ModdedItemData} = {
},
onTakeItem: false,
},
+ wellspringmask: {
+ inherit: true,
+ onBasePower(basePower, user, target, move) {
+ return this.chainModify([4915, 4096]);
+ },
+ onTakeItem: false,
+ },
};
diff --git a/data/mods/mixandmega/scripts.ts b/data/mods/mixandmega/scripts.ts
index 56568ef9d8e6..a687f445ba51 100644
--- a/data/mods/mixandmega/scripts.ts
+++ b/data/mods/mixandmega/scripts.ts
@@ -59,10 +59,11 @@ export const Scripts: ModdedBattleScriptsData = {
}
for (const pokemon of this.getAllPokemon()) {
const item = pokemon.getItem();
- if (['adamantcrystal', 'griseouscore', 'lustrousglobe', 'vilevial'].includes(item.id) &&
- item.forcedForme !== pokemon.species.name) {
- // @ts-ignore
- const rawSpecies = this.actions.getMixedSpecies(pokemon.m.originalSpecies, item.forcedForme!, pokemon);
+ if ([
+ 'adamantcrystal', 'griseouscore', 'lustrousglobe', 'wellspringmask',
+ 'cornerstonemask', 'hearthflamemask', 'vilevial',
+ ].includes(item.id) && item.forcedForme !== pokemon.species.name) {
+ const rawSpecies = (this.actions as any).getMixedSpecies(pokemon.m.originalSpecies, item.forcedForme!, pokemon);
const species = pokemon.setSpecies(rawSpecies);
if (!species) continue;
pokemon.baseSpecies = rawSpecies;
@@ -90,7 +91,7 @@ export const Scripts: ModdedBattleScriptsData = {
this.queue.addChoice({choice: 'start'});
this.midTurn = true;
- if (!this.requestState) this.go();
+ if (!this.requestState) this.turnLoop();
},
runAction(action) {
const pokemonOriginalHP = action.pokemon?.hp;
@@ -109,11 +110,9 @@ export const Scripts: ModdedBattleScriptsData = {
let rawSpecies: Species | null = null;
const item = pokemon.getItem();
if (item.id === 'rustedsword') {
- // @ts-ignore
- rawSpecies = this.actions.getMixedSpecies(pokemon.m.originalSpecies, 'Zacian-Crowned', pokemon);
+ rawSpecies = (this.actions as any).getMixedSpecies(pokemon.m.originalSpecies, 'Zacian-Crowned', pokemon);
} else if (item.id === 'rustedshield') {
- // @ts-ignore
- rawSpecies = this.actions.getMixedSpecies(pokemon.m.originalSpecies, 'Zamazenta-Crowned', pokemon);
+ rawSpecies = (this.actions as any).getMixedSpecies(pokemon.m.originalSpecies, 'Zamazenta-Crowned', pokemon);
}
if (!rawSpecies) continue;
const species = pokemon.setSpecies(rawSpecies);
@@ -173,8 +172,10 @@ export const Scripts: ModdedBattleScriptsData = {
case 'move':
if (!action.pokemon.isActive) return false;
if (action.pokemon.fainted) return false;
- this.actions.runMove(action.move, action.pokemon, action.targetLoc, action.sourceEffect,
- action.zmove, undefined, action.maxMove, action.originalTarget);
+ this.actions.runMove(action.move, action.pokemon, action.targetLoc, {
+ sourceEffect: action.sourceEffect, zMove: action.zmove,
+ maxMove: action.maxMove, originalTarget: action.originalTarget,
+ });
break;
case 'megaEvo':
this.actions.runMegaEvo(action.pokemon);
@@ -407,34 +408,74 @@ export const Scripts: ModdedBattleScriptsData = {
runMegaEvo(pokemon) {
if (pokemon.species.isMega) return false;
- // @ts-ignore
- const species: Species = this.getMixedSpecies(pokemon.m.originalSpecies, pokemon.canMegaEvo, pokemon);
+ const species: Species = (this as any).getMixedSpecies(pokemon.m.originalSpecies, pokemon.canMegaEvo, pokemon);
- // Do we have a proper sprite for it?
+ /* Do we have a proper sprite for it? Code for when megas actually exist
if (this.dex.species.get(pokemon.canMegaEvo!).baseSpecies === pokemon.m.originalSpecies) {
pokemon.formeChange(species, pokemon.getItem(), true);
- } else {
- const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
- // @ts-ignore
- const oMegaSpecies = this.dex.species.get(species.originalSpecies);
- pokemon.formeChange(species, pokemon.getItem(), true);
- this.battle.add('-start', pokemon, oMegaSpecies.requiredItem, '[silent]');
- if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) {
- this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
- }
+ } else { */
+ const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
+ const oMegaSpecies = this.dex.species.get((species as any).originalSpecies);
+ pokemon.formeChange(species, pokemon.getItem(), true);
+ this.battle.add('-start', pokemon, oMegaSpecies.requiredItem, '[silent]');
+ if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) {
+ this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
}
+ // }
pokemon.canMegaEvo = null;
return true;
},
- getMixedSpecies(originalForme, megaForme, pokemon) {
+ terastallize(pokemon) {
+ if (pokemon.illusion?.species.baseSpecies === 'Ogerpon') {
+ this.battle.singleEvent('End', this.dex.abilities.get('Illusion'), pokemon.abilityState, pokemon);
+ }
+ if (pokemon.illusion?.species.baseSpecies === 'Terapagos') {
+ this.battle.singleEvent('End', this.dex.abilities.get('Illusion'), pokemon.abilityState, pokemon);
+ }
+
+ let type = pokemon.teraType;
+ if (pokemon.species.baseSpecies !== 'Ogerpon' && pokemon.getItem().name.endsWith('Mask')) {
+ type = this.dex.species.get(pokemon.getItem().forcedForme).forceTeraType!;
+ }
+ this.battle.add('-terastallize', pokemon, type);
+ pokemon.terastallized = type;
+ for (const ally of pokemon.side.pokemon) {
+ ally.canTerastallize = null;
+ }
+ pokemon.addedType = '';
+ pokemon.knownType = true;
+ pokemon.apparentType = type;
+ if (pokemon.species.baseSpecies === 'Ogerpon') {
+ const tera = pokemon.species.id === 'ogerpon' ? 'tealtera' : 'tera';
+ pokemon.formeChange(pokemon.species.id + tera, pokemon.getItem(), true);
+ } else {
+ if (pokemon.getItem().name.endsWith('Mask')) {
+ const species: Species = (this as any).getMixedSpecies(pokemon.m.originalSpecies,
+ pokemon.getItem().forcedForme! + '-Tera', pokemon);
+ const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
+ const originalTeraSpecies = this.dex.species.get((species as any).originalSpecies);
+ pokemon.formeChange(species, pokemon.getItem(), true);
+ this.battle.add('-start', pokemon, originalTeraSpecies.requiredItem, '[silent]');
+ if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) {
+ this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
+ }
+ }
+ }
+ if (pokemon.species.name === 'Terapagos-Terastal' && type === 'Stellar') {
+ pokemon.formeChange('Terapagos-Stellar', null, true);
+ }
+ this.battle.runEvent('AfterTerastallization', pokemon);
+ },
+ getMixedSpecies(originalForme, formeChange, pokemon) {
const originalSpecies = this.dex.species.get(originalForme);
- const megaSpecies = this.dex.species.get(megaForme);
- if (originalSpecies.baseSpecies === megaSpecies.baseSpecies) return megaSpecies;
- // @ts-ignore
- const deltas = this.getFormeChangeDeltas(megaSpecies, pokemon);
- // @ts-ignore
- const species = this.mutateOriginalSpecies(originalSpecies, deltas);
+ const formeChangeSpecies = this.dex.species.get(formeChange);
+ if (originalSpecies.baseSpecies === formeChangeSpecies.baseSpecies &&
+ !formeChangeSpecies.isMega && !formeChangeSpecies.isPrimal) {
+ return formeChangeSpecies;
+ }
+ const deltas = (this as any).getFormeChangeDeltas(formeChangeSpecies, pokemon);
+ const species = (this as any).mutateOriginalSpecies(originalSpecies, deltas);
return species;
},
getFormeChangeDeltas(formeChangeSpecies, pokemon) {
@@ -443,6 +484,7 @@ export const Scripts: ModdedBattleScriptsData = {
ability: string,
baseStats: SparseStatsTable,
weighthg: number,
+ heightm: number,
originalSpecies: string,
requiredItem: string | undefined,
type?: string,
@@ -451,6 +493,7 @@ export const Scripts: ModdedBattleScriptsData = {
ability: formeChangeSpecies.abilities['0'],
baseStats: {},
weighthg: formeChangeSpecies.weighthg - baseSpecies.weighthg,
+ heightm: ((formeChangeSpecies.heightm * 10) - (baseSpecies.heightm * 10)) / 10,
originalSpecies: formeChangeSpecies.name,
requiredItem: formeChangeSpecies.requiredItem,
};
@@ -461,7 +504,7 @@ export const Scripts: ModdedBattleScriptsData = {
if (formeChangeSpecies.types.length > baseSpecies.types.length) {
deltas.type = formeChangeSpecies.types[1];
} else if (formeChangeSpecies.types.length < baseSpecies.types.length) {
- deltas.type = 'mono';
+ deltas.type = this.battle.ruleTable.has('mixandmegaoldaggronite') ? 'mono' : baseSpecies.types[0];
} else if (formeChangeSpecies.types[1] !== baseSpecies.types[1]) {
deltas.type = formeChangeSpecies.types[1];
}
@@ -492,12 +535,11 @@ export const Scripts: ModdedBattleScriptsData = {
baseStats[statName] = this.battle.clampIntRange(baseStats[statName] + deltas.baseStats[statName], 1, 255);
}
species.weighthg = Math.max(1, species.weighthg + deltas.weighthg);
+ species.heightm = Math.max(0.1, ((species.heightm * 10) + (deltas.heightm * 10)) / 10);
species.originalSpecies = deltas.originalSpecies;
species.requiredItem = deltas.requiredItem;
- switch (deltas.formeType) {
- case 'Mega': species.isMega = true; break;
- case 'Primal': species.isPrimal = true; break;
- }
+ if (deltas.formeType === 'Mega') species.isMega = true;
+ if (deltas.formeType === 'Primal') species.isPrimal = true;
return species;
},
},
diff --git a/data/mods/partnersincrime/abilities.ts b/data/mods/partnersincrime/abilities.ts
index 35c6b26c6e75..72b17c7736e2 100644
--- a/data/mods/partnersincrime/abilities.ts
+++ b/data/mods/partnersincrime/abilities.ts
@@ -1,4 +1,4 @@
-export const Abilities: {[k: string]: ModdedAbilityData} = {
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
neutralizinggas: {
inherit: true,
// Ability suppression implemented in sim/pokemon.ts:Pokemon#ignoringAbility
@@ -19,7 +19,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
this.add('-end', target, 'Slow Start', '[silent]');
}
if (target.m.innate) {
- if (!this.dex.abilities.get(target.m.innate.slice(8)).isPermanent) {
+ if (!this.dex.abilities.get(target.m.innate.slice(8)).flags['cantsuppress']) {
target.removeVolatile(target.m.innate);
}
}
@@ -39,13 +39,13 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
const sortedActive = this.getAllActive();
this.speedSort(sortedActive);
for (const pokemon of sortedActive) {
+ if (pokemon.m.innate) {
+ if (!pokemon.volatiles[pokemon.m.innate]) pokemon.addVolatile(pokemon.m.innate, pokemon);
+ }
if (pokemon !== source) {
// Will be suppressed by Pokemon#ignoringAbility if needed
this.singleEvent('Start', pokemon.getAbility(), pokemon.abilityState, pokemon);
}
- if (pokemon.m.innate) {
- if (!pokemon.volatiles[pokemon.m.innate]) pokemon.addVolatile(pokemon.m.innate, pokemon);
- }
}
},
},
@@ -55,13 +55,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
if (!pokemon.isStarted || this.effectState.gaveUp) return;
const isAbility = pokemon.ability === 'trace';
- const additionalBannedAbilities = [
- // Zen Mode included here for compatability with Gen 5-6
- 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode',
- ];
- const possibleTargets = pokemon.adjacentFoes().filter(target => (
- !target.getAbility().isPermanent && !additionalBannedAbilities.includes(target.ability)
- ));
+ const possibleTargets = pokemon.adjacentFoes().filter(
+ target => !target.getAbility().flags['notrace'] && target.ability !== 'noability'
+ );
if (!possibleTargets.length) return;
const target = this.sample(possibleTargets);
diff --git a/data/mods/partnersincrime/items.ts b/data/mods/partnersincrime/items.ts
index eead07f923aa..f82827da2ea2 100644
--- a/data/mods/partnersincrime/items.ts
+++ b/data/mods/partnersincrime/items.ts
@@ -1,4 +1,4 @@
-export const Items: {[k: string]: ModdedItemData} = {
+export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
leppaberry: {
inherit: true,
onEat(pokemon) {
diff --git a/data/mods/partnersincrime/moves.ts b/data/mods/partnersincrime/moves.ts
index cc4157d28004..aef86678d043 100644
--- a/data/mods/partnersincrime/moves.ts
+++ b/data/mods/partnersincrime/moves.ts
@@ -1,4 +1,4 @@
-export const Moves: {[k: string]: ModdedMoveData} = {
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
gastroacid: {
inherit: true,
condition: {
@@ -32,8 +32,8 @@ export const Moves: {[k: string]: ModdedMoveData} = {
if (moveSlot.id === move.id) {
moveSlot.pp = 0;
if (!source.m.curMoves.includes(moveSlot.id) && source.m.trackPP.get(moveSlot.id)) {
- source.m.trackPP.set(moveSlot.id, moveSlot.maxpp - moveSlot.pp);
- }
+ source.m.trackPP.set(moveSlot.id, moveSlot.maxpp - moveSlot.pp);
+ }
this.add('-activate', source, 'move: Grudge', move.name);
}
}
diff --git a/data/mods/partnersincrime/scripts.ts b/data/mods/partnersincrime/scripts.ts
index b73c4599e037..68f391110d89 100644
--- a/data/mods/partnersincrime/scripts.ts
+++ b/data/mods/partnersincrime/scripts.ts
@@ -1,7 +1,9 @@
+import {Utils} from '../../../lib';
+
export const Scripts: ModdedBattleScriptsData = {
gen: 9,
inherit: 'gen9',
- nextTurn() {
+ endTurn() {
this.turn++;
this.lastSuccessfulMoveThisTurn = null;
@@ -81,9 +83,20 @@ export const Scripts: ModdedBattleScriptsData = {
moveSlot.disabled = false;
moveSlot.disabledSource = '';
}
+ if (pokemon.volatiles['encore']) {
+ // Encore check happens earlier than PiC move swapping, so end encore here.
+ const encoredMove = pokemon.volatiles['encore'].move;
+ if (!pokemon.moves.includes(encoredMove)) {
+ pokemon.removeVolatile('encore');
+ }
+ }
this.runEvent('DisableMove', pokemon);
for (const moveSlot of pokemon.moveSlots) {
- this.singleEvent('DisableMove', this.dex.getActiveMove(moveSlot.id), null, pokemon);
+ const activeMove = this.dex.getActiveMove(moveSlot.id);
+ this.singleEvent('DisableMove', activeMove, null, pokemon);
+ if (activeMove.flags['cantusetwice'] && pokemon.lastMove?.id === moveSlot.id) {
+ pokemon.disableMove(pokemon.lastMove.id);
+ }
}
// If it was an illusion, it's not any more
@@ -190,7 +203,7 @@ export const Scripts: ModdedBattleScriptsData = {
// Please remove me once there is client support.
if (this.ruleTable.has('crazyhouserule')) {
for (const side of this.sides) {
- let buf = `raw|${side.name}'s team:
`;
+ let buf = `raw|${Utils.escapeHTML(side.name)}'s team:
`;
for (const pokemon of side.pokemon) {
if (!buf.endsWith('
')) buf += '/';
if (pokemon.fainted) {
@@ -259,7 +272,7 @@ export const Scripts: ModdedBattleScriptsData = {
if (typeof ability === 'string') ability = this.battle.dex.abilities.get(ability);
const oldAbility = this.ability;
if (!isFromFormeChange) {
- if (ability.isPermanent || this.getAbility().isPermanent) return false;
+ if (ability.flags['cantsuppress'] || this.getAbility().flags['cantsuppress']) return false;
}
if (!this.battle.runEvent('SetAbility', this, source, this.battle.effect, ability)) return false;
this.battle.singleEvent('End', this.battle.dex.abilities.get(oldAbility), this.abilityState, this, source);
@@ -311,9 +324,10 @@ export const Scripts: ModdedBattleScriptsData = {
},
transformInto(pokemon, effect) {
const species = pokemon.species;
- if (pokemon.fainted || pokemon.illusion || (pokemon.volatiles['substitute'] && this.battle.gen >= 5) ||
+ if (pokemon.fainted || this.illusion || pokemon.illusion || (pokemon.volatiles['substitute'] && this.battle.gen >= 5) ||
(pokemon.transformed && this.battle.gen >= 2) || (this.transformed && this.battle.gen >= 5) ||
- species.name === 'Eternatus-Eternamax') {
+ species.name === 'Eternatus-Eternamax' || (['Ogerpon', 'Terapagos'].includes(species.baseSpecies) &&
+ (this.terastallized || pokemon.terastallized))) {
return false;
}
@@ -329,7 +343,7 @@ export const Scripts: ModdedBattleScriptsData = {
this.transformed = true;
this.weighthg = pokemon.weighthg;
- const types = pokemon.getTypes(true);
+ const types = pokemon.getTypes(true, true);
this.setType(pokemon.volatiles['roost'] ? pokemon.volatiles['roost'].typeWas : types, true);
this.addedType = pokemon.addedType;
this.knownType = this.isAlly(pokemon) && pokemon.knownType;
@@ -341,9 +355,9 @@ export const Scripts: ModdedBattleScriptsData = {
if (this.modifiedStats) this.modifiedStats[statName] = pokemon.modifiedStats![statName]; // Gen 1: Copy modified stats.
}
this.moveSlots = [];
- this.set.ivs = (this.battle.gen >= 5 ? this.set.ivs : pokemon.set.ivs);
this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType);
this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower);
+ this.timesAttacked = pokemon.timesAttacked;
for (const moveSlot of pokemon.moveSlots) {
let moveName = moveSlot.move;
if (!pokemon.m.curMoves.includes(moveSlot.id)) continue;
@@ -367,13 +381,13 @@ export const Scripts: ModdedBattleScriptsData = {
this.boosts[boostName] = pokemon.boosts[boostName];
}
if (this.battle.gen >= 6) {
- const volatilesToCopy = ['focusenergy', 'gmaxchistrike', 'laserfocus'];
+ const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus'];
+ for (const volatile of volatilesToCopy) this.removeVolatile(volatile);
for (const volatile of volatilesToCopy) {
if (pokemon.volatiles[volatile]) {
this.addVolatile(volatile);
if (volatile === 'gmaxchistrike') this.volatiles[volatile].layers = pokemon.volatiles[volatile].layers;
- } else {
- this.removeVolatile(volatile);
+ if (volatile === 'dragoncheer') this.volatiles[volatile].hasDragonType = pokemon.volatiles[volatile].hasDragonType;
}
}
}
@@ -382,7 +396,11 @@ export const Scripts: ModdedBattleScriptsData = {
} else {
this.battle.add('-transform', this, pokemon);
}
- if (this.battle.gen > 2) this.setAbility(pokemon.ability, this, true);
+ if (this.terastallized) {
+ this.knownType = true;
+ this.apparentType = this.terastallized;
+ }
+ if (this.battle.gen > 2) this.setAbility(pokemon.ability, this, true, true);
// Change formes based on held items (for Transform)
// Only ever relevant in Generation 4 since Generation 3 didn't have item-based forme changes
@@ -405,6 +423,11 @@ export const Scripts: ModdedBattleScriptsData = {
}
}
+ // Pokemon transformed into Ogerpon cannot Terastallize
+ // restoring their ability to tera after they untransform is handled ELSEWHERE
+ if (this.species.baseSpecies === 'Ogerpon' && this.canTerastallize) this.canTerastallize = false;
+ if (this.species.baseSpecies === 'Terapagos' && this.canTerastallize) this.canTerastallize = false;
+
return true;
},
deductPP(move, amount, target) {
diff --git a/data/mods/passiveaggressive/abilities.ts b/data/mods/passiveaggressive/abilities.ts
new file mode 100644
index 000000000000..bf5437a18f9f
--- /dev/null
+++ b/data/mods/passiveaggressive/abilities.ts
@@ -0,0 +1,65 @@
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
+ aftermath: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (!target.hp && this.checkMoveMakesContact(move, source, target, true)) {
+ const calc = calculate(this, target, source);
+ this.damage(calc * source.baseMaxhp / 4, source, target);
+ }
+ },
+ },
+ baddreams: {
+ inherit: true,
+ onResidual(pokemon) {
+ if (!pokemon.hp) return;
+ for (const target of pokemon.foes()) {
+ if (target.status === 'slp' || target.hasAbility('comatose')) {
+ const calc = calculate(this, pokemon, target);
+ this.damage(calc * target.baseMaxhp / 8, target, pokemon);
+ }
+ }
+ },
+ },
+ gulpmissile: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (!source.hp || !source.isActive || target.isSemiInvulnerable()) return;
+ if (['cramorantgulping', 'cramorantgorging'].includes(target.species.id)) {
+ const calc = calculate(this, target, source);
+ if (calc) this.damage(calc * source.baseMaxhp / 4, source, target);
+ if (target.species.id === 'cramorantgulping') {
+ this.boost({def: -1}, source, target, null, true);
+ } else {
+ source.trySetStatus('par', target, move);
+ }
+ target.formeChange('cramorant', move);
+ }
+ },
+ },
+ ironbarbs: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (this.checkMoveMakesContact(move, source, target, true)) {
+ const calc = calculate(this, target, source);
+ this.damage(calc * source.baseMaxhp / 8, source, target);
+ }
+ },
+ },
+ roughskin: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (this.checkMoveMakesContact(move, source, target, true)) {
+ const calc = calculate(this, target, source);
+ this.damage(calc * source.baseMaxhp / 8, source, target);
+ }
+ },
+ },
+};
+
+function calculate(battle: Battle, source: Pokemon, pokemon: Pokemon) {
+ const move = battle.dex.getActiveMove('tackle');
+ move.type = source.getTypes()[0];
+ const typeMod = Math.pow(2, battle.clampIntRange(pokemon.runEffectiveness(move), -6, 6));
+ if (!pokemon.runImmunity(move.type)) return 0;
+ return typeMod;
+}
diff --git a/data/mods/passiveaggressive/conditions.ts b/data/mods/passiveaggressive/conditions.ts
new file mode 100644
index 000000000000..a6ee835c6b28
--- /dev/null
+++ b/data/mods/passiveaggressive/conditions.ts
@@ -0,0 +1,56 @@
+export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = {
+ tox: {
+ inherit: true,
+ onResidual(pokemon) {
+ if (this.effectState.stage < 15) {
+ this.effectState.stage++;
+ }
+ const calc = calculate(this, this.effectState.source, pokemon);
+ this.damage(calc * this.clampIntRange(pokemon.baseMaxhp / 16, 1) * this.effectState.stage);
+ },
+ },
+ brn: {
+ inherit: true,
+ onResidual(pokemon) {
+ const calc = calculate(this, this.effectState.source, pokemon);
+ this.damage(calc * pokemon.baseMaxhp / 16);
+ },
+ },
+ psn: {
+ inherit: true,
+ onResidual(pokemon) {
+ const calc = calculate(this, this.effectState.source, pokemon);
+ this.damage(calc * pokemon.baseMaxhp / 8);
+ },
+ },
+ partiallytrapped: {
+ inherit: true,
+ onResidual(pokemon) {
+ const source = this.effectState.source;
+ // G-Max Centiferno and G-Max Sandblast continue even after the user leaves the field
+ const gmaxEffect = ['gmaxcentiferno', 'gmaxsandblast'].includes(this.effectState.sourceEffect.id);
+ if (source && (!source.isActive || source.hp <= 0 || !source.activeTurns) && !gmaxEffect) {
+ delete pokemon.volatiles['partiallytrapped'];
+ this.add('-end', pokemon, this.effectState.sourceEffect, '[partiallytrapped]', '[silent]');
+ return;
+ }
+ const calc = calculate(this, source, pokemon);
+ this.damage(calc * pokemon.baseMaxhp / this.effectState.boundDivisor);
+ },
+ },
+ sandstorm: {
+ inherit: true,
+ onWeather(target) {
+ const calc = calculate(this, this.effectState.source, target);
+ this.damage(calc * target.baseMaxhp / 16);
+ },
+ },
+};
+
+function calculate(battle: Battle, source: Pokemon, pokemon: Pokemon) {
+ const move = battle.dex.getActiveMove('tackle');
+ move.type = source.getTypes()[0];
+ const typeMod = Math.pow(2, battle.clampIntRange(pokemon.runEffectiveness(move), -6, 6));
+ if (!pokemon.runImmunity(move.type)) return 0;
+ return typeMod;
+}
diff --git a/data/mods/passiveaggressive/items.ts b/data/mods/passiveaggressive/items.ts
new file mode 100644
index 000000000000..22f829fecdc0
--- /dev/null
+++ b/data/mods/passiveaggressive/items.ts
@@ -0,0 +1,68 @@
+export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
+ blacksludge: {
+ inherit: true,
+ onResidual(pokemon) {
+ if (pokemon.hasType('Poison')) {
+ this.heal(pokemon.baseMaxhp / 16);
+ } else {
+ const calc = calculate(this, pokemon, pokemon);
+ if (calc) this.damage(calc * pokemon.baseMaxhp / 8);
+ }
+ },
+ },
+ jabocaberry: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (move.category === 'Physical' && source.hp && source.isActive && !source.hasAbility('magicguard')) {
+ if (target.eatItem()) {
+ const calc = calculate(this, target, source);
+ if (calc) this.damage(calc * source.baseMaxhp / (target.hasAbility('ripen') ? 4 : 8), source, target);
+ }
+ }
+ },
+ },
+ lifeorb: {
+ inherit: true,
+ onAfterMoveSecondarySelf(source, target, move) {
+ if (source && source !== target && move && move.category !== 'Status' && !source.forceSwitchFlag) {
+ const calc = calculate(this, source, source);
+ if (calc) this.damage(calc * source.baseMaxhp / 10, source, source, this.dex.items.get('lifeorb'));
+ }
+ },
+ },
+ rockyhelmet: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (this.checkMoveMakesContact(move, source, target)) {
+ const calc = calculate(this, target, source);
+ if (calc) this.damage(calc * source.baseMaxhp / 6, source, target);
+ }
+ },
+ },
+ rowapberry: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (move.category === 'Special' && source.hp && source.isActive && !source.hasAbility('magicguard')) {
+ if (target.eatItem()) {
+ const calc = calculate(this, target, source);
+ if (calc) this.damage(calc * source.baseMaxhp / (target.hasAbility('ripen') ? 4 : 8), source, target);
+ }
+ }
+ },
+ },
+ stickybarb: {
+ inherit: true,
+ onResidual(pokemon) {
+ const calc = calculate(this, pokemon, pokemon);
+ if (calc) this.damage(calc * pokemon.baseMaxhp / 8);
+ },
+ },
+};
+
+function calculate(battle: Battle, source: Pokemon, pokemon: Pokemon) {
+ const move = battle.dex.getActiveMove('tackle');
+ move.type = source.getTypes()[0];
+ const typeMod = Math.pow(2, battle.clampIntRange(pokemon.runEffectiveness(move), -6, 6));
+ if (!pokemon.runImmunity(move.type)) return 0;
+ return typeMod;
+}
diff --git a/data/mods/passiveaggressive/moves.ts b/data/mods/passiveaggressive/moves.ts
new file mode 100644
index 000000000000..c7dcea0b7589
--- /dev/null
+++ b/data/mods/passiveaggressive/moves.ts
@@ -0,0 +1,305 @@
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
+ stealthrock: {
+ inherit: true,
+ condition: {
+ // this is a side condition
+ onSideStart(side, source) {
+ this.add('-sidestart', side, 'move: Stealth Rock');
+ },
+ onEntryHazard(pokemon) {
+ const calc = calculate(this, this.effectState.source, pokemon, 'stealthrock');
+ if (pokemon.hasItem('heavydutyboots') || !calc) return;
+ this.damage(calc * pokemon.maxhp / 8);
+ },
+ },
+ },
+ gmaxsteelsurge: {
+ inherit: true,
+ condition: {
+ // this is a side condition
+ onSideStart(side, source) {
+ this.add('-sidestart', side, 'move: G-Max Steelsurge');
+ },
+ onEntryHazard(pokemon) {
+ const calc = calculate(this, this.effectState.source, pokemon, 'stealthrock');
+ if (pokemon.hasItem('heavydutyboots') || !calc) return;
+ this.damage(calc * pokemon.maxhp / 8);
+ },
+ },
+ },
+ spikes: {
+ inherit: true,
+ condition: {
+ // this is a side condition
+ onSideStart(side, source) {
+ this.add('-sidestart', side, 'Spikes');
+ this.effectState.layers = 1;
+ },
+ onSideRestart(side, source) {
+ if (this.effectState.layers >= 3) return false;
+ this.add('-sidestart', side, 'Spikes');
+ this.effectState.layers++;
+ },
+ onEntryHazard(pokemon) {
+ const calc = calculate(this, this.effectState.source, pokemon, 'spikes');
+ if (!calc || !pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return;
+ const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4
+ this.damage(calc * damageAmounts[this.effectState.layers] * pokemon.maxhp / 24);
+ },
+ },
+ },
+ axekick: {
+ inherit: true,
+ onMoveFail(target, source, move) {
+ const calc = calculate(this, source, source, 'axekick');
+ if (calc) this.damage(calc * source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick'));
+ },
+ },
+ curse: {
+ inherit: true,
+ condition: {
+ onStart(pokemon, source) {
+ this.add('-start', pokemon, 'Curse', '[of] ' + source);
+ },
+ onResidualOrder: 12,
+ onResidual(pokemon) {
+ const calc = calculate(this, this.effectState.source, pokemon, 'curse');
+ if (calc) this.damage(calc * pokemon.baseMaxhp / 4);
+ },
+ },
+ },
+ firepledge: {
+ inherit: true,
+ condition: {
+ duration: 4,
+ onSideStart(targetSide, source) {
+ this.add('-sidestart', targetSide, 'Fire Pledge');
+ },
+ onResidualOrder: 5,
+ onResidualSubOrder: 1,
+ onResidual(pokemon) {
+ const calc = calculate(this, this.effectState.source, pokemon, 'firepledge');
+ if (!pokemon.hasType('Fire') && calc) this.damage(calc * pokemon.baseMaxhp / 8, pokemon);
+ },
+ onSideResidualOrder: 26,
+ onSideResidualSubOrder: 8,
+ onSideEnd(targetSide) {
+ this.add('-sideend', targetSide, 'Fire Pledge');
+ },
+ },
+ },
+ flameburst: {
+ inherit: true,
+ onHit(target, source, move) {
+ for (const ally of target.adjacentAllies()) {
+ const calc = calculate(this, source, ally, 'flameburst');
+ if (calc) this.damage(calc * ally.baseMaxhp / 16, ally, source, this.dex.conditions.get('Flame Burst'));
+ }
+ },
+ onAfterSubDamage(damage, target, source, move) {
+ for (const ally of target.adjacentAllies()) {
+ const calc = calculate(this, source, ally, 'flameburst');
+ if (calc) this.damage(calc * ally.baseMaxhp / 16, ally, source, this.dex.conditions.get('Flame Burst'));
+ }
+ },
+ },
+ highjumpkick: {
+ inherit: true,
+ onMoveFail(target, source, move) {
+ const calc = calculate(this, source, source, 'highjumpkick');
+ if (calc) this.damage(calc * source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick'));
+ },
+ },
+ jumpkick: {
+ inherit: true,
+ onMoveFail(target, source, move) {
+ const calc = calculate(this, source, source, 'jumpkick');
+ if (calc) this.damage(calc * source.baseMaxhp / 2, source, source, this.dex.conditions.get('Jump Kick'));
+ },
+ },
+ leechseed: {
+ inherit: true,
+ condition: {
+ onStart(target, source) {
+ this.add('-start', target, 'move: Leech Seed');
+ },
+ onResidualOrder: 8,
+ onResidual(pokemon) {
+ const target = this.getAtSlot(pokemon.volatiles['leechseed'].sourceSlot);
+ if (!target || target.fainted || target.hp <= 0) {
+ this.debug('Nothing to leech into');
+ return;
+ }
+ const calc = calculate(this, this.effectState.source, pokemon, 'leechseed');
+ const damage = this.damage(calc * pokemon.baseMaxhp / 8, pokemon, target);
+ if (damage) {
+ this.heal(damage, target, pokemon);
+ }
+ },
+ },
+ },
+ mindblown: {
+ inherit: true,
+ onAfterMove(pokemon, target, move) {
+ if (move.mindBlownRecoil && !move.multihit) {
+ const hpBeforeRecoil = pokemon.hp;
+ const calc = calculate(this, pokemon, pokemon, 'mindblown');
+ this.damage(Math.round(calc * pokemon.maxhp / 2), pokemon, pokemon, this.dex.conditions.get('Mind Blown'), true);
+ if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) {
+ this.runEvent('EmergencyExit', pokemon, pokemon);
+ }
+ }
+ },
+ },
+ nightmare: {
+ inherit: true,
+ condition: {
+ noCopy: true,
+ onStart(pokemon, source) {
+ if (pokemon.status !== 'slp' && !pokemon.hasAbility('comatose')) {
+ return false;
+ }
+ this.add('-start', pokemon, 'Nightmare');
+ this.effectState.source = source;
+ },
+ onResidualOrder: 11,
+ onResidual(pokemon) {
+ const calc = calculate(this, this.effectState.source, pokemon, 'nightmare');
+ if (calc) this.damage(calc * pokemon.baseMaxhp / 4);
+ },
+ },
+ },
+ powder: {
+ inherit: true,
+ condition: {
+ duration: 1,
+ onStart(target, source) {
+ this.add('-singleturn', target, 'Powder');
+ },
+ onTryMovePriority: -1,
+ onTryMove(pokemon, target, move) {
+ if (move.type === 'Fire') {
+ this.add('-activate', pokemon, 'move: Powder');
+ const calc = calculate(this, this.effectState.source, pokemon, 'powder');
+ if (calc) this.damage(this.clampIntRange(Math.round(calc * pokemon.maxhp / 4), 1));
+ this.attrLastMove('[still]');
+ return false;
+ }
+ },
+ },
+ },
+ saltcure: {
+ inherit: true,
+ condition: {
+ noCopy: true,
+ onStart(pokemon, source) {
+ this.add('-start', pokemon, 'Salt Cure');
+ this.effectState.source = source;
+ },
+ onResidualOrder: 13,
+ onResidual(pokemon) {
+ const calc = calculate(this, this.effectState.source, pokemon, 'saltcure');
+ if (calc) this.damage(calc * pokemon.baseMaxhp / (pokemon.hasType(['Water', 'Steel']) ? 4 : 8));
+ },
+ onEnd(pokemon) {
+ this.add('-end', pokemon, 'Salt Cure');
+ },
+ },
+ },
+ spikyshield: {
+ inherit: true,
+ condition: {
+ duration: 1,
+ onStart(target) {
+ this.add('-singleturn', target, 'move: Protect');
+ },
+ onTryHitPriority: 3,
+ onTryHit(target, source, move) {
+ if (!move.flags['protect']) {
+ if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
+ if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
+ return;
+ }
+ if (move.smartTarget) {
+ move.smartTarget = false;
+ } else {
+ this.add('-activate', target, 'move: Protect');
+ }
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ const calc = calculate(this, target, source, 'spikyshield');
+ if (this.checkMoveMakesContact(move, source, target) && calc) {
+ this.damage(calc * source.baseMaxhp / 8, source, target);
+ }
+ return this.NOT_FAIL;
+ },
+ onHit(target, source, move) {
+ const calc = calculate(this, target, source, 'spikyshield');
+ if (calc && move.isZOrMaxPowered && this.checkMoveMakesContact(move, source, target)) {
+ this.damage(calc * source.baseMaxhp / 8, source, target);
+ }
+ },
+ },
+ },
+ steelbeam: {
+ inherit: true,
+ onAfterMove(pokemon, target, move) {
+ if (move.mindBlownRecoil && !move.multihit) {
+ const hpBeforeRecoil = pokemon.hp;
+ const calc = calculate(this, pokemon, pokemon, 'steelbeam');
+ this.damage(Math.round(calc * pokemon.maxhp / 2), pokemon, pokemon, this.dex.conditions.get('Steel Beam'), true);
+ if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) {
+ this.runEvent('EmergencyExit', pokemon, pokemon);
+ }
+ }
+ },
+ },
+ supercellslam: {
+ inherit: true,
+ onMoveFail(target, source, move) {
+ const calc = calculate(this, source, source, 'supercellslam');
+ if (calc) this.damage(calc * source.baseMaxhp / 2, source, source, this.dex.conditions.get('Supercell Slam'));
+ },
+ },
+ toxicspikes: {
+ inherit: true,
+ condition: {
+ // this is a side condition
+ onSideStart(side) {
+ this.add('-sidestart', side, 'move: Toxic Spikes');
+ this.effectState.layers = 1;
+ },
+ onSideRestart(side) {
+ if (this.effectState.layers >= 2) return false;
+ this.add('-sidestart', side, 'move: Toxic Spikes');
+ this.effectState.layers++;
+ },
+ onEntryHazard(pokemon) {
+ if (!pokemon.isGrounded()) return;
+ if (pokemon.hasType('Poison')) {
+ this.add('-sideend', pokemon.side, 'move: Toxic Spikes', '[of] ' + pokemon);
+ pokemon.side.removeSideCondition('toxicspikes');
+ } else if (pokemon.hasType('Steel') || pokemon.hasItem('heavydutyboots')) {
+ return;
+ } else if (this.effectState.layers >= 2) {
+ pokemon.trySetStatus('tox', this.effectState.source);
+ } else {
+ pokemon.trySetStatus('psn', this.effectState.source);
+ }
+ },
+ },
+ },
+};
+
+function calculate(battle: Battle, source: Pokemon, pokemon: Pokemon, moveid = 'tackle') {
+ const move = battle.dex.getActiveMove(moveid);
+ move.type = source.getTypes()[0];
+ const typeMod = Math.pow(2, battle.clampIntRange(pokemon.runEffectiveness(move), -6, 6));
+ if (!pokemon.runImmunity(move.type)) return 0;
+ return typeMod;
+}
diff --git a/data/mods/passiveaggressive/scripts.ts b/data/mods/passiveaggressive/scripts.ts
new file mode 100644
index 000000000000..017908a0409e
--- /dev/null
+++ b/data/mods/passiveaggressive/scripts.ts
@@ -0,0 +1,213 @@
+export const Scripts: ModdedBattleScriptsData = {
+ gen: 9,
+ actions: {
+ hitStepMoveHitLoop(targets, pokemon, move) { // Temporary name
+ let damage: (number | boolean | undefined)[] = [];
+ for (const i of targets.keys()) {
+ damage[i] = 0;
+ }
+ move.totalDamage = 0;
+ pokemon.lastDamage = 0;
+ let targetHits = move.multihit || 1;
+ if (Array.isArray(targetHits)) {
+ // yes, it's hardcoded... meh
+ if (targetHits[0] === 2 && targetHits[1] === 5) {
+ if (this.battle.gen >= 5) {
+ // 35-35-15-15 out of 100 for 2-3-4-5 hits
+ targetHits = this.battle.sample([2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5]);
+ if (targetHits < 4 && pokemon.hasItem('loadeddice')) {
+ targetHits = 5 - this.battle.random(2);
+ }
+ } else {
+ targetHits = this.battle.sample([2, 2, 2, 3, 3, 3, 4, 5]);
+ }
+ } else {
+ targetHits = this.battle.random(targetHits[0], targetHits[1] + 1);
+ }
+ }
+ if (targetHits === 10 && pokemon.hasItem('loadeddice')) targetHits -= this.battle.random(7);
+ targetHits = Math.floor(targetHits);
+ let nullDamage = true;
+ let moveDamage: (number | boolean | undefined)[] = [];
+ // There is no need to recursively check the ´sleepUsable´ flag as Sleep Talk can only be used while asleep.
+ const isSleepUsable = move.sleepUsable || this.dex.moves.get(move.sourceEffect).sleepUsable;
+
+ let targetsCopy: (Pokemon | false | null)[] = targets.slice(0);
+ let hit: number;
+ for (hit = 1; hit <= targetHits; hit++) {
+ if (damage.includes(false)) break;
+ if (hit > 1 && pokemon.status === 'slp' && (!isSleepUsable || this.battle.gen === 4)) break;
+ if (targets.every(target => !target?.hp)) break;
+ move.hit = hit;
+ if (move.smartTarget && targets.length > 1) {
+ targetsCopy = [targets[hit - 1]];
+ damage = [damage[hit - 1]];
+ } else {
+ targetsCopy = targets.slice(0);
+ }
+ const target = targetsCopy[0]; // some relevant-to-single-target-moves-only things are hardcoded
+ if (target && typeof move.smartTarget === 'boolean') {
+ if (hit > 1) {
+ this.battle.addMove('-anim', pokemon, move.name, target);
+ } else {
+ this.battle.retargetLastMove(target);
+ }
+ }
+
+ // like this (Triple Kick)
+ if (target && move.multiaccuracy && hit > 1) {
+ let accuracy = move.accuracy;
+ const boostTable = [1, 4 / 3, 5 / 3, 2, 7 / 3, 8 / 3, 3];
+ if (accuracy !== true) {
+ if (!move.ignoreAccuracy) {
+ const boosts = this.battle.runEvent('ModifyBoost', pokemon, null, null, {...pokemon.boosts});
+ const boost = this.battle.clampIntRange(boosts['accuracy'], -6, 6);
+ if (boost > 0) {
+ accuracy *= boostTable[boost];
+ } else {
+ accuracy /= boostTable[-boost];
+ }
+ }
+ if (!move.ignoreEvasion) {
+ const boosts = this.battle.runEvent('ModifyBoost', target, null, null, {...target.boosts});
+ const boost = this.battle.clampIntRange(boosts['evasion'], -6, 6);
+ if (boost > 0) {
+ accuracy /= boostTable[boost];
+ } else if (boost < 0) {
+ accuracy *= boostTable[-boost];
+ }
+ }
+ }
+ accuracy = this.battle.runEvent('ModifyAccuracy', target, pokemon, move, accuracy);
+ if (!move.alwaysHit) {
+ accuracy = this.battle.runEvent('Accuracy', target, pokemon, move, accuracy);
+ if (accuracy !== true && !this.battle.randomChance(accuracy, 100)) break;
+ }
+ }
+
+ const moveData = move;
+ if (!moveData.flags) moveData.flags = {};
+
+ let moveDamageThisHit;
+ // Modifies targetsCopy (which is why it's a copy)
+ [moveDamageThisHit, targetsCopy] = this.spreadMoveHit(targetsCopy, pokemon, move, moveData);
+ // When Dragon Darts targets two different pokemon, targetsCopy is a length 1 array each hit
+ // so spreadMoveHit returns a length 1 damage array
+ if (move.smartTarget) {
+ moveDamage.push(...moveDamageThisHit);
+ } else {
+ moveDamage = moveDamageThisHit;
+ }
+
+ if (!moveDamage.some(val => val !== false)) break;
+ nullDamage = false;
+
+ for (const [i, md] of moveDamage.entries()) {
+ if (move.smartTarget && i !== hit - 1) continue;
+ // Damage from each hit is individually counted for the
+ // purposes of Counter, Metal Burst, and Mirror Coat.
+ damage[i] = md === true || !md ? 0 : md;
+ // Total damage dealt is accumulated for the purposes of recoil (Parental Bond).
+ move.totalDamage += damage[i] as number;
+ }
+ if (move.mindBlownRecoil) {
+ const hpBeforeRecoil = pokemon.hp;
+ const calc = calculate(this.battle, pokemon, pokemon, move.id);
+ this.battle.damage(Math.round(calc * pokemon.maxhp / 2), pokemon, pokemon, this.dex.conditions.get(move.id), true);
+ move.mindBlownRecoil = false;
+ if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) {
+ this.battle.runEvent('EmergencyExit', pokemon, pokemon);
+ }
+ }
+ this.battle.eachEvent('Update');
+ if (!pokemon.hp && targets.length === 1) {
+ hit++; // report the correct number of hits for multihit moves
+ break;
+ }
+ }
+ // hit is 1 higher than the actual hit count
+ if (hit === 1) return damage.fill(false);
+ if (nullDamage) damage.fill(false);
+ this.battle.faintMessages(false, false, !pokemon.hp);
+ if (move.multihit && typeof move.smartTarget !== 'boolean') {
+ this.battle.add('-hitcount', targets[0], hit - 1);
+ }
+
+ if ((move.recoil || move.id === 'chloroblast') && move.totalDamage) {
+ const hpBeforeRecoil = pokemon.hp;
+ const recoilDamage = this.calcRecoilDamage(move.totalDamage, move, pokemon);
+ if (recoilDamage !== 1.1) this.battle.damage(recoilDamage, pokemon, pokemon, 'recoil');
+ if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) {
+ this.battle.runEvent('EmergencyExit', pokemon, pokemon);
+ }
+ }
+
+ if (move.struggleRecoil) {
+ const hpBeforeRecoil = pokemon.hp;
+ let recoilDamage;
+ if (this.dex.gen >= 5) {
+ recoilDamage = this.battle.clampIntRange(Math.round(pokemon.baseMaxhp / 4), 1);
+ } else {
+ recoilDamage = this.battle.clampIntRange(this.battle.trunc(pokemon.maxhp / 4), 1);
+ }
+ this.battle.directDamage(recoilDamage, pokemon, pokemon, {id: 'strugglerecoil'} as Condition);
+ if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) {
+ this.battle.runEvent('EmergencyExit', pokemon, pokemon);
+ }
+ }
+
+ // smartTarget messes up targetsCopy, but smartTarget should in theory ensure that targets will never fail, anyway
+ if (move.smartTarget) {
+ targetsCopy = targets.slice(0);
+ }
+
+ for (const [i, target] of targetsCopy.entries()) {
+ if (target && pokemon !== target) {
+ target.gotAttacked(move, moveDamage[i] as number | false | undefined, pokemon);
+ if (typeof moveDamage[i] === 'number') {
+ target.timesAttacked += move.smartTarget ? 1 : hit - 1;
+ }
+ }
+ }
+
+ if (move.ohko && !targets[0].hp) this.battle.add('-ohko');
+
+ if (!damage.some(val => !!val || val === 0)) return damage;
+
+ this.battle.eachEvent('Update');
+
+ this.afterMoveSecondaryEvent(targetsCopy.filter(val => !!val) as Pokemon[], pokemon, move);
+
+ if (!move.negateSecondary && !(move.hasSheerForce && pokemon.hasAbility('sheerforce'))) {
+ for (const [i, d] of damage.entries()) {
+ // There are no multihit spread moves, so it's safe to use move.totalDamage for multihit moves
+ // The previous check was for `move.multihit`, but that fails for Dragon Darts
+ const curDamage = targets.length === 1 ? move.totalDamage : d;
+ if (typeof curDamage === 'number' && targets[i].hp) {
+ const targetHPBeforeDamage = (targets[i].hurtThisTurn || 0) + curDamage;
+ if (targets[i].hp <= targets[i].maxhp / 2 && targetHPBeforeDamage > targets[i].maxhp / 2) {
+ this.battle.runEvent('EmergencyExit', targets[i], pokemon);
+ }
+ }
+ }
+ }
+
+ return damage;
+ },
+ calcRecoilDamage(damageDealt, move, pokemon): number {
+ const calc = calculate(this.battle, pokemon, pokemon, move.id);
+ if (calc === 0) return 1.1;
+ if (move.id === 'chloroblast') return Math.round(calc * pokemon.maxhp / 2);
+ const recoil = Math.round(damageDealt * calc * move.recoil![0] / move.recoil![1]);
+ return this.battle.clampIntRange(recoil, 1);
+ },
+ },
+};
+
+function calculate(battle: Battle, source: Pokemon, pokemon: Pokemon, moveid = 'tackle') {
+ const move = battle.dex.getActiveMove(moveid);
+ move.type = source.getTypes()[0];
+ const typeMod = Math.pow(2, battle.clampIntRange(pokemon.runEffectiveness(move), -6, 6));
+ if (!pokemon.runImmunity(move.type)) return 0;
+ return typeMod;
+}
diff --git a/data/mods/pokebilities/abilities.ts b/data/mods/pokebilities/abilities.ts
index ecd9cf78530e..de3ba4e4d1eb 100644
--- a/data/mods/pokebilities/abilities.ts
+++ b/data/mods/pokebilities/abilities.ts
@@ -1,10 +1,10 @@
-export const Abilities: {[k: string]: ModdedAbilityData} = {
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
mummy: {
inherit: true,
onDamagingHit(damage, target, source, move) {
if (target.ability === 'mummy') {
const sourceAbility = source.getAbility();
- if (sourceAbility.isPermanent || sourceAbility.id === 'mummy') {
+ if (sourceAbility.flags['cantsuppress'] || sourceAbility.id === 'mummy') {
return;
}
if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {
@@ -15,7 +15,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
}
} else {
const possibleAbilities = [source.ability, ...(source.m.innates || [])]
- .filter(val => !this.dex.abilities.get(val).isPermanent && val !== 'mummy');
+ .filter(val => !this.dex.abilities.get(val).flags['cantsuppress'] && val !== 'mummy');
if (!possibleAbilities.length) return;
if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {
const abil = this.sample(possibleAbilities);
@@ -44,7 +44,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
// Remove setter's innates before the ability starts
if (pokemon.m.innates) {
for (const innate of pokemon.m.innates) {
- if (this.dex.abilities.get(innate).isPermanent || innate === 'neutralizinggas') continue;
+ if (this.dex.abilities.get(innate).flags['cantsuppress'] || innate === 'neutralizinggas') continue;
pokemon.removeVolatile('ability:' + innate);
}
}
@@ -58,7 +58,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
}
if (target.m.innates) {
for (const innate of target.m.innates) {
- if (this.dex.abilities.get(innate).isPermanent) continue;
+ if (this.dex.abilities.get(innate).flags['cantsuppress']) continue;
target.removeVolatile('ability:' + innate);
}
}
@@ -92,12 +92,6 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
}
},
},
- poisontouch: {
- inherit: true,
- // Activate after Sheer Force to make interaction determistic. The ordering for this ability is
- // an arbitary decision, but is modelled on Stench, which is reflective of on-cart behaviour.
- onModifyMovePriority: -1,
- },
powerofalchemy: {
inherit: true,
onAllyFaint(ally) {
@@ -106,11 +100,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
const isAbility = pokemon.ability === 'powerofalchemy';
let possibleAbilities = [ally.ability];
if (ally.m.innates) possibleAbilities.push(...ally.m.innates);
- const additionalBannedAbilities = [
- 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard', pokemon.ability, ...(pokemon.m.innates || []),
- ];
+ const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])];
possibleAbilities = possibleAbilities
- .filter(val => !this.dex.abilities.get(val).isPermanent && !additionalBannedAbilities.includes(val));
+ .filter(val => !this.dex.abilities.get(val).flags['noreceiver'] && !additionalBannedAbilities.includes(val));
if (!possibleAbilities.length) return;
const ability = this.dex.abilities.get(possibleAbilities[this.random(possibleAbilities.length)]);
this.add('-ability', pokemon, ability, '[from] ability: Power of Alchemy', '[of] ' + ally);
@@ -130,11 +122,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
const isAbility = pokemon.ability === 'receiver';
let possibleAbilities = [ally.ability];
if (ally.m.innates) possibleAbilities.push(...ally.m.innates);
- const additionalBannedAbilities = [
- 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard', pokemon.ability, ...(pokemon.m.innates || []),
- ];
+ const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])];
possibleAbilities = possibleAbilities
- .filter(val => !this.dex.abilities.get(val).isPermanent && !additionalBannedAbilities.includes(val));
+ .filter(val => !this.dex.abilities.get(val).flags['noreceiver'] && !additionalBannedAbilities.includes(val));
if (!possibleAbilities.length) return;
const ability = this.dex.abilities.get(possibleAbilities[this.random(possibleAbilities.length)]);
this.add('-ability', pokemon, ability, '[from] ability: Receiver', '[of] ' + ally);
@@ -162,12 +152,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
const target = possibleTargets[rand];
let possibleAbilities = [target.ability];
if (target.m.innates) possibleAbilities.push(...target.m.innates);
- const additionalBannedAbilities = [
- // Zen Mode included here for compatability with Gen 5-6
- 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode', pokemon.ability, ...(pokemon.m.innates || []),
- ];
+ const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])];
possibleAbilities = possibleAbilities
- .filter(val => !this.dex.abilities.get(val).isPermanent && !additionalBannedAbilities.includes(val));
+ .filter(val => !this.dex.abilities.get(val).flags['notrace'] && !additionalBannedAbilities.includes(val));
if (!possibleAbilities.length) {
possibleTargets.splice(rand, 1);
continue;
@@ -188,13 +175,8 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
inherit: true,
onDamagingHit(damage, target, source, move) {
const isAbility = target.ability === 'wanderingspirit';
- const additionalBannedAbilities = ['hungerswitch', 'illusion', 'neutralizinggas', 'wonderguard'];
if (isAbility) {
- if (source.getAbility().isPermanent || additionalBannedAbilities.includes(source.ability) ||
- target.volatiles['dynamax']
- ) {
- return;
- }
+ if (source.getAbility().flags['failskillswap'] || target.volatiles['dynamax']) return;
if (this.checkMoveMakesContact(move, source, target)) {
const sourceAbility = source.setAbility('wanderingspirit', target);
@@ -209,7 +191,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
} else {
// Make Wandering Spirit replace a random ability
const possibleAbilities = [source.ability, ...(source.m.innates || [])]
- .filter(val => !this.dex.abilities.get(val).isPermanent && !additionalBannedAbilities.includes(val));
+ .filter(val => !this.dex.abilities.get(val).flags['failskillswap']);
if (!possibleAbilities.length || target.volatiles['dynamax']) return;
if (move.flags['contact']) {
const sourceAbility = this.sample(possibleAbilities);
diff --git a/data/mods/pokebilities/moves.ts b/data/mods/pokebilities/moves.ts
index 8fd18a791128..c473cb8bba8d 100644
--- a/data/mods/pokebilities/moves.ts
+++ b/data/mods/pokebilities/moves.ts
@@ -1,4 +1,4 @@
-export const Moves: {[k: string]: ModdedMoveData} = {
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
gastroacid: {
inherit: true,
condition: {
diff --git a/data/mods/pokebilities/scripts.ts b/data/mods/pokebilities/scripts.ts
index 75e2f3c5d2fe..e9564991a2ac 100644
--- a/data/mods/pokebilities/scripts.ts
+++ b/data/mods/pokebilities/scripts.ts
@@ -32,7 +32,7 @@ export const Scripts: ModdedBattleScriptsData = {
((this.volatiles['gastroacid'] ||
(neutralizinggas && (this.ability !== ('neutralizinggas' as ID) ||
this.m.innates?.some((k: string) => k === 'neutralizinggas'))
- )) && !this.getAbility().isPermanent
+ )) && !this.getAbility().flags['cantsuppress']
)
);
},
@@ -92,13 +92,14 @@ export const Scripts: ModdedBattleScriptsData = {
this.boosts[boostName] = pokemon.boosts[boostName];
}
if (this.battle.gen >= 6) {
- const volatilesToCopy = ['focusenergy', 'gmaxchistrike', 'laserfocus'];
+ // we need to remove all crit volatiles before adding any crit volatiles
+ const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus'];
+ for (const volatile of volatilesToCopy) this.removeVolatile(volatile);
for (const volatile of volatilesToCopy) {
if (pokemon.volatiles[volatile]) {
this.addVolatile(volatile);
if (volatile === 'gmaxchistrike') this.volatiles[volatile].layers = pokemon.volatiles[volatile].layers;
- } else {
- this.removeVolatile(volatile);
+ if (volatile === 'dragoncheer') this.volatiles[volatile].hasDragonType = pokemon.volatiles[volatile].hasDragonType;
}
}
}
@@ -172,6 +173,7 @@ export const Scripts: ModdedBattleScriptsData = {
(this.gender === '' ? '' : ', ' + this.gender) + (this.set.shiny ? ', shiny' : '');
this.battle.add('detailschange', this, (this.illusion || this).details);
if (source.effectType === 'Item') {
+ this.canTerastallize = null; // National Dex behavior
if (source.zMove) {
this.battle.add('-burst', this, apparentSpecies, species.requiredItem);
this.moveThisTurnResult = true; // Ultra Burst counts as an action for Truant
diff --git a/data/mods/pokemoves/abilities.ts b/data/mods/pokemoves/abilities.ts
new file mode 100644
index 000000000000..e448152e0e93
--- /dev/null
+++ b/data/mods/pokemoves/abilities.ts
@@ -0,0 +1,71 @@
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
+ trace: {
+ inherit: true,
+ onUpdate(pokemon) {
+ if (!pokemon.isStarted || this.effectState.gaveUp) return;
+ const isAbility = pokemon.ability === 'trace';
+
+ const possibleTargets = pokemon.adjacentFoes().filter(
+ target => !target.getAbility().flags['notrace'] && target.ability !== 'noability'
+ );
+ if (!possibleTargets.length) return;
+
+ const target = this.sample(possibleTargets);
+ const ability = target.getAbility();
+
+ if (isAbility) {
+ if (pokemon.setAbility(ability)) {
+ this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target);
+ }
+ } else {
+ pokemon.removeVolatile('ability:trace');
+ pokemon.addVolatile('ability:' + ability.id, pokemon);
+ this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target);
+ }
+ },
+ },
+ neutralizinggas: {
+ inherit: true,
+ // Ability suppression implemented in sim/pokemon.ts:Pokemon#ignoringAbility
+ onPreStart(pokemon) {
+ this.add('-ability', pokemon, 'Neutralizing Gas');
+ pokemon.abilityState.ending = false;
+ // Remove setter's innates before the ability starts
+ for (const target of this.getAllActive()) {
+ if (target.illusion) {
+ this.singleEvent('End', this.dex.abilities.get('Illusion'), target.abilityState, target, pokemon, 'neutralizinggas');
+ }
+ if (target.volatiles['slowstart']) {
+ delete target.volatiles['slowstart'];
+ this.add('-end', target, 'Slow Start', '[silent]');
+ }
+ if (target.m.pokemove && !this.dex.abilities.get(target.m.pokemove.abilities['0']).flags['cantsuppress']) {
+ target.removeVolatile('ability:' + this.toID(target.m.pokemove.abilities['0']));
+ }
+ }
+ },
+ onEnd(source) {
+ this.add('-end', source, 'ability: Neutralizing Gas');
+
+ // FIXME this happens before the pokemon switches out, should be the opposite order.
+ // Not an easy fix since we cant use a supported event. Would need some kind of special event that
+ // gathers events to run after the switch and then runs them when the ability is no longer accessible.
+ // (If you're tackling this, do note extreme weathers have the same issue)
+
+ // Mark this pokemon's ability as ending so Pokemon#ignoringAbility skips it
+ if (source.abilityState.ending) return;
+ source.abilityState.ending = true;
+ const sortedActive = this.getAllActive();
+ this.speedSort(sortedActive);
+ for (const pokemon of sortedActive) {
+ if (pokemon !== source) {
+ // Will be suppressed by Pokemon#ignoringAbility if needed
+ this.singleEvent('Start', pokemon.getAbility(), pokemon.abilityState, pokemon);
+ }
+ if (pokemon.m.pokemove && !pokemon.volatiles['ability:' + this.toID(pokemon.m.pokemove.abilities['0'])]) {
+ pokemon.addVolatile('ability:' + this.toID(pokemon.m.pokemove.abilities['0']), pokemon);
+ }
+ }
+ },
+ },
+};
diff --git a/data/mods/pokemoves/moves.ts b/data/mods/pokemoves/moves.ts
new file mode 100644
index 000000000000..6423c3a8b43b
--- /dev/null
+++ b/data/mods/pokemoves/moves.ts
@@ -0,0 +1,30 @@
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
+ conversion: {
+ inherit: true,
+ onHit(target) {
+ const moveSlotID = target.moveSlots[0].id;
+ let type = this.dex.moves.get(moveSlotID).type;
+ if (this.dex.species.get(moveSlotID).exists) {
+ type = this.dex.species.get(moveSlotID).types[0];
+ }
+ if (target.hasType(type) || !target.setType(type)) return false;
+ this.add('-start', target, 'typechange', type);
+ },
+ },
+ gastroacid: {
+ inherit: true,
+ condition: {
+ // Ability suppression implemented in Pokemon.ignoringAbility() within sim/pokemon.js
+ onStart(pokemon) {
+ this.add('-endability', pokemon);
+ this.singleEvent('End', pokemon.getAbility(), pokemon.abilityState, pokemon, pokemon, 'gastroacid');
+ const keys = Object.keys(pokemon.volatiles).filter(x => x.startsWith("ability:"));
+ if (keys.length) {
+ for (const abil of keys) {
+ pokemon.removeVolatile(abil);
+ }
+ }
+ },
+ },
+ },
+};
diff --git a/data/mods/pokemoves/scripts.ts b/data/mods/pokemoves/scripts.ts
new file mode 100644
index 000000000000..20bc864dbb1f
--- /dev/null
+++ b/data/mods/pokemoves/scripts.ts
@@ -0,0 +1,48 @@
+export const Scripts: ModdedBattleScriptsData = {
+ gen: 9,
+ field: {
+ suppressingWeather() {
+ for (const pokemon of this.battle.getAllActive()) {
+ const pokemove = pokemon.m.pokemove;
+ if (pokemon && !pokemon.ignoringAbility() &&
+ (pokemon.getAbility().suppressWeather ||
+ (pokemove && pokemon.volatiles['ability:' + this.battle.toID(pokemove.abilities['0'])] &&
+ this.battle.dex.abilities.get(pokemove.abilities['0']).suppressWeather))) {
+ return true;
+ }
+ }
+ return false;
+ },
+ },
+ pokemon: {
+ hasAbility(ability) {
+ if (this.ignoringAbility()) return false;
+ if (Array.isArray(ability)) return ability.some(abil => this.hasAbility(abil));
+ const abilityid = this.battle.toID(ability);
+ return this.ability === abilityid || !!this.volatiles['ability:' + abilityid];
+ },
+ ignoringAbility() {
+ // Check if any active pokemon have the ability Neutralizing Gas
+ let neutralizinggas = false;
+ for (const pokemon of this.battle.getAllActive()) {
+ // can't use hasAbility because it would lead to infinite recursion
+ if (
+ (pokemon.ability === ('neutralizinggas' as ID) || pokemon.volatiles['ability:neutralizinggas']) &&
+ !pokemon.volatiles['gastroacid'] && !pokemon.abilityState.ending
+ ) {
+ neutralizinggas = true;
+ break;
+ }
+ }
+
+ return !!(
+ (this.battle.gen >= 5 && !this.isActive) ||
+ ((this.volatiles['gastroacid'] ||
+ (neutralizinggas && (this.ability !== ('neutralizinggas' as ID) ||
+ this.volatiles['ability:neutralizinggas'])
+ )) && !this.getAbility().flags['cantsuppress']
+ )
+ );
+ },
+ },
+};
diff --git a/data/mods/potd/random-teams.ts b/data/mods/potd/random-teams.ts
deleted file mode 100644
index b4f3b5d93688..000000000000
--- a/data/mods/potd/random-teams.ts
+++ /dev/null
@@ -1,208 +0,0 @@
-import {RandomTeams} from './../../random-teams';
-
-const potdPokemon = [
- "hoopa", "groudon", "dachsbun", "squawkabilly", "cacturne", "typhlosion", "jolteon", "masquerain", "falinks",
- "wyrdeer", "gardevoir", "decidueye", "hawlucha", "azelf", "gothitelle", "donphan", "pikachu", "zaciancrowned",
- "quagsire", "uxie", "dondozo", "orthworm", "klawf", "dunsparce", "avalugg", "pawmot", "qwilfish", "lilliganthisui",
-];
-
-export class RandomPOTDTeams extends RandomTeams {
- randomTeam() {
- this.enforceNoDirectCustomBanlistChanges();
-
- const seed = this.prng.seed;
- const ruleTable = this.dex.formats.getRuleTable(this.format);
- const pokemon: RandomTeamsTypes.RandomSet[] = [];
-
- // For Monotype
- const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
- const isDoubles = this.format.gameType !== 'singles';
- const typePool = this.dex.types.names();
- const type = this.forceMonotype || this.sample(typePool);
-
- // PotD stuff
- const day = new Date().getDate();
- const potd = this.dex.species.get(potdPokemon[day > 28 ? 27 : day - 1]);
-
- const baseFormes: {[k: string]: number} = {};
-
- const tierCount: {[k: string]: number} = {};
- const typeCount: {[k: string]: number} = {};
- const typeComboCount: {[k: string]: number} = {};
- const typeWeaknesses: {[k: string]: number} = {};
- const teamDetails: RandomTeamsTypes.TeamDetails = {};
- const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, isDoubles);
-
- // Remove PotD from baseSpeciesPool
- if (baseSpeciesPool.includes(potd.baseSpecies)) {
- this.fastPop(baseSpeciesPool, baseSpeciesPool.indexOf(potd.baseSpecies));
- }
-
- // Add PotD to type counts
- for (const typeName of potd.types) {
- typeCount[typeName] = 1;
- }
- typeComboCount[potd.types.slice().sort().join()] = 1;
-
- // Increment weakness counter
- for (const typeName of this.dex.types.names()) {
- // it's weak to the type
- if (this.dex.getEffectiveness(typeName, potd) > 0) {
- typeWeaknesses[typeName] = 1;
- }
- }
-
- while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
- const baseSpecies = this.sampleNoReplace(baseSpeciesPool);
- const currentSpeciesPool: Species[] = [];
- for (const poke of pokemonPool) {
- const species = this.dex.species.get(poke);
- if (species.baseSpecies === baseSpecies) currentSpeciesPool.push(species);
- }
- let species = this.sample(currentSpeciesPool);
- if (!species.exists) continue;
- // Illusion shouldn't be on the last slot
- if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue;
-
- // If Zoroark is in the team, the sixth slot should not be a Pokemon with extremely low level
- if (
- pokemon.some(pkmn => pkmn.name === 'Zoroark') &&
- pokemon.length >= (this.maxTeamSize - 1) &&
- this.getLevel(species, isDoubles) < 72 &&
- !this.adjustLevel
- ) {
- continue;
- }
-
- // Pokemon with Last Respects, Intrepid Sword, and Dauntless Shield shouldn't be leading
- if (['Basculegion', 'Houndstone', 'Zacian', 'Zamazenta'].includes(species.baseSpecies) && !pokemon.length) continue;
-
- const tier = species.tier;
- const types = species.types;
- const typeCombo = types.slice().sort().join();
- // Dynamically scale limits for different team sizes. The default and minimum value is 1.
- const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
-
- // Limit one Pokemon per tier, two for Monotype
- // Disable this for now, since it is still a new gen
- // Unless you want to have a lot of Ubers!
- // if (
- // (tierCount[tier] >= (this.forceMonotype || isMonotype ? 2 : 1) * limitFactor) &&
- // !this.randomChance(1, Math.pow(5, tierCount[tier]))
- // ) {
- // continue;
- // }
-
- if (!isMonotype && !this.forceMonotype) {
- let skip = false;
-
- // Limit two of any type
- for (const typeName of types) {
- if (typeCount[typeName] >= 2 * limitFactor) {
- skip = true;
- break;
- }
- }
- if (skip) continue;
-
- // Limit three weak to any type
- for (const typeName of this.dex.types.names()) {
- // it's weak to the type
- if (this.dex.getEffectiveness(typeName, species) > 0) {
- if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;
- if (typeWeaknesses[typeName] >= 3 * limitFactor) {
- skip = true;
- break;
- }
- }
- }
- if (skip) continue;
- }
-
- // Limit one of any type combination, two in Monotype
- if (!this.forceMonotype && typeComboCount[typeCombo] >= (isMonotype ? 2 : 1) * limitFactor) continue;
-
- // The Pokemon of the Day
- if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd;
-
- const set = this.randomSet(species, teamDetails, pokemon.length === 0, isDoubles);
-
- // Okay, the set passes, add it to our team
- pokemon.push(set);
- if (pokemon.length === this.maxTeamSize) {
- // Set Zoroark's level to be the same as the last Pokemon
- const illusion = teamDetails.illusion;
- if (illusion) pokemon[illusion - 1].level = pokemon[this.maxTeamSize - 1].level;
-
- // Don't bother tracking details for the last Pokemon
- break;
- }
-
- // Now that our Pokemon has passed all checks, we can increment our counters
- baseFormes[species.baseSpecies] = 1;
-
- // Increment tier counter
- if (tierCount[tier]) {
- tierCount[tier]++;
- } else {
- tierCount[tier] = 1;
- }
-
- // Don't increment type/weakness counters for POTD, since they were added at the beginning
- if (pokemon.length !== 1 && this.maxTeamSize !== 1) {
- // Increment type counters
- for (const typeName of types) {
- if (typeName in typeCount) {
- typeCount[typeName]++;
- } else {
- typeCount[typeName] = 1;
- }
- }
- if (typeCombo in typeComboCount) {
- typeComboCount[typeCombo]++;
- } else {
- typeComboCount[typeCombo] = 1;
- }
-
- // Increment weakness counter
- for (const typeName of this.dex.types.names()) {
- // it's weak to the type
- if (this.dex.getEffectiveness(typeName, species) > 0) {
- typeWeaknesses[typeName]++;
- }
- }
- }
-
- // Track what the team has
- if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1;
- if (set.ability === 'Drought' || set.moves.includes('sunnyday')) teamDetails.sun = 1;
- if (set.ability === 'Sand Stream') teamDetails.sand = 1;
- if (set.ability === 'Snow Warning' || set.moves.includes('snowscape') || set.moves.includes('chillyreception')) {
- teamDetails.snow = 1;
- }
- if (set.moves.includes('spikes')) teamDetails.spikes = (teamDetails.spikes || 0) + 1;
- if (set.moves.includes('stealthrock')) teamDetails.stealthRock = 1;
- if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1;
- if (set.moves.includes('stoneaxe')) teamDetails.stealthRock = 1;
- if (set.moves.includes('toxicspikes')) teamDetails.toxicSpikes = 1;
- if (set.moves.includes('defog')) teamDetails.defog = 1;
- if (set.moves.includes('rapidspin')) teamDetails.rapidSpin = 1;
- if (set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1;
- if (set.moves.includes('tidyup')) teamDetails.rapidSpin = 1;
- if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) {
- teamDetails.screens = 1;
- }
- if (set.role === 'Tera Blast user') teamDetails.teraBlast = 1;
-
- // For setting Zoroark's level
- if (set.ability === 'Illusion') teamDetails.illusion = pokemon.length;
- }
- if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { // large teams sometimes cannot be built
- throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
- }
-
- return pokemon;
- }
-}
-
-export default RandomPOTDTeams;
diff --git a/data/mods/randomroulette/scripts.ts b/data/mods/randomroulette/scripts.ts
new file mode 100644
index 000000000000..7832aab0fe22
--- /dev/null
+++ b/data/mods/randomroulette/scripts.ts
@@ -0,0 +1,121 @@
+import {PRNG} from '../../../sim/prng';
+import {Pokemon} from '../../../sim/pokemon';
+import {Teams} from '../../../sim/teams';
+
+export const Scripts: ModdedBattleScriptsData = {
+ start() {
+ // Choose a random format
+ this.gen = this.random(1, 10);
+ const format = Dex.formats.get(`gen${this.gen}randombattle@@@${(this.format.customRules || []).join(',')}`);
+ this.dex = Dex.forFormat(format);
+ this.ruleTable = this.dex.formats.getRuleTable(format);
+ this.teamGenerator = Teams.getGenerator(format);
+
+ this.actions.battle = this;
+ this.actions.dex = this.dex;
+ if (this.actions.dex.data.Scripts.actions) Object.assign(this.actions, this.actions.dex.data.Scripts.actions);
+ if (format.actions) Object.assign(this.actions, format.actions);
+
+ for (const i in this.dex.data.Scripts) {
+ const entry = this.dex.data.Scripts[i];
+ if (typeof entry === 'function') (this as any)[i] = entry;
+ }
+
+ for (const rule of this.ruleTable.keys()) {
+ if ('+*-!'.includes(rule.charAt(0))) continue;
+ const subFormat = this.dex.formats.get(rule);
+ if (subFormat.exists) {
+ const hasEventHandler = Object.keys(subFormat).some(
+ // skip event handlers that are handled elsewhere
+ val => val.startsWith('on') && ![
+ 'onBegin', 'onTeamPreview', 'onBattleStart', 'onValidateRule', 'onValidateTeam', 'onChangeSet', 'onValidateSet',
+ ].includes(val)
+ );
+ if (hasEventHandler) this.field.addPseudoWeather(rule);
+ }
+ }
+
+ // Generate teams using the format
+ for (const side of this.sides) {
+ this.teamGenerator.setSeed(PRNG.generateSeed());
+
+ const team = this.teamGenerator.getTeam();
+ side.team = team;
+ side.pokemon = [];
+ for (let i = 0; i < team.length && i < 24; i++) {
+ side.pokemon.push(new Pokemon(team[i], side));
+ side.pokemon[i].position = i;
+ }
+ side.dynamaxUsed = this.gen !== 8;
+ }
+
+ // Everything below is copied from sim/battle.ts
+
+ // Deserialized games should use restart()
+ if (this.deserialized) return;
+ // need all players to start
+ if (!this.sides.every(side => !!side)) throw new Error(`Missing sides: ${this.sides}`);
+
+ if (this.started) throw new Error(`Battle already started`);
+
+ this.started = true;
+ if (this.gameType === 'multi') {
+ this.sides[1].foe = this.sides[2]!;
+ this.sides[0].foe = this.sides[3]!;
+ this.sides[2]!.foe = this.sides[1];
+ this.sides[3]!.foe = this.sides[0];
+ this.sides[1].allySide = this.sides[3]!;
+ this.sides[0].allySide = this.sides[2]!;
+ this.sides[2]!.allySide = this.sides[0];
+ this.sides[3]!.allySide = this.sides[1];
+ // sync side conditions
+ this.sides[2]!.sideConditions = this.sides[0].sideConditions;
+ this.sides[3]!.sideConditions = this.sides[1].sideConditions;
+ } else {
+ this.sides[1].foe = this.sides[0];
+ this.sides[0].foe = this.sides[1];
+ if (this.sides.length > 2) { // ffa
+ this.sides[2]!.foe = this.sides[3]!;
+ this.sides[3]!.foe = this.sides[2]!;
+ }
+ }
+
+ for (const side of this.sides) {
+ this.add('teamsize', side.id, side.pokemon.length);
+ }
+
+ this.add('gen', this.gen);
+
+ this.add('tier', format.name);
+ if (this.rated) {
+ if (this.rated === 'Rated battle') this.rated = true;
+ this.add('rated', typeof this.rated === 'string' ? this.rated : '');
+ }
+
+ if (format.onBegin) format.onBegin.call(this);
+ for (const rule of this.ruleTable.keys()) {
+ if ('+*-!'.includes(rule.charAt(0))) continue;
+ const subFormat = this.dex.formats.get(rule);
+ if (subFormat.onBegin) subFormat.onBegin.call(this);
+ }
+
+ if (this.sides.some(side => !side.pokemon[0])) {
+ throw new Error('Battle not started: A player has an empty team.');
+ }
+
+ if (this.debugMode) {
+ this.checkEVBalance();
+ }
+
+ if (format.onTeamPreview) format.onTeamPreview.call(this);
+ for (const rule of this.ruleTable.keys()) {
+ if ('+*-!'.includes(rule.charAt(0))) continue;
+ const subFormat = this.dex.formats.get(rule);
+ if (subFormat.onTeamPreview) subFormat.onTeamPreview.call(this);
+ }
+
+ this.queue.addChoice({choice: 'start'});
+ this.midTurn = true;
+ if (!this.requestState) this.turnLoop();
+ },
+};
diff --git a/data/mods/sharedpower/abilities.ts b/data/mods/sharedpower/abilities.ts
index f715c4e0d4e8..8d815709d741 100644
--- a/data/mods/sharedpower/abilities.ts
+++ b/data/mods/sharedpower/abilities.ts
@@ -1,4 +1,4 @@
-export const Abilities: {[k: string]: ModdedAbilityData} = {
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
neutralizinggas: {
inherit: true,
// Ability suppression implemented in sim/pokemon.ts:Pokemon#ignoringAbility
@@ -16,7 +16,7 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
}
if (target.m.abils?.length) {
for (const key of target.m.abils) {
- if (this.dex.abilities.get(key.slice(8)).isPermanent) continue;
+ if (this.dex.abilities.get(key.slice(8)).flags['cantsuppress']) continue;
target.removeVolatile(key);
}
}
@@ -56,13 +56,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
if (!pokemon.isStarted || this.effectState.gaveUp) return;
const isAbility = pokemon.ability === 'trace';
- const additionalBannedAbilities = [
- // Zen Mode included here for compatability with Gen 5-6
- 'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode',
- ];
- const possibleTargets = pokemon.adjacentFoes().filter(target => (
- !target.getAbility().isPermanent && !additionalBannedAbilities.includes(target.ability)
- ));
+ const possibleTargets = pokemon.adjacentFoes().filter(
+ target => !target.getAbility().flags['notrace'] && target.ability !== 'noability'
+ );
if (!possibleTargets.length) return;
const target = this.sample(possibleTargets);
diff --git a/data/mods/sharedpower/moves.ts b/data/mods/sharedpower/moves.ts
index b0d980560b5f..a883f0fa81f0 100644
--- a/data/mods/sharedpower/moves.ts
+++ b/data/mods/sharedpower/moves.ts
@@ -1,4 +1,4 @@
-export const Moves: {[k: string]: ModdedMoveData} = {
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
gastroacid: {
inherit: true,
condition: {
diff --git a/data/mods/sharedpower/scripts.ts b/data/mods/sharedpower/scripts.ts
index c6260f5e32f0..572e4d265724 100644
--- a/data/mods/sharedpower/scripts.ts
+++ b/data/mods/sharedpower/scripts.ts
@@ -39,7 +39,7 @@ export const Scripts: ModdedBattleScriptsData = {
((this.volatiles['gastroacid'] ||
(neutralizinggas && (this.ability !== ('neutralizinggas' as ID) ||
this.m.abils?.includes('ability:neutralizinggas'))
- )) && !this.getAbility().isPermanent
+ )) && !this.getAbility().flags['cantsuppress']
)
);
},
diff --git a/data/mods/sharingiscaring/conditions.ts b/data/mods/sharingiscaring/conditions.ts
new file mode 100644
index 000000000000..1a5bef5f3c23
--- /dev/null
+++ b/data/mods/sharingiscaring/conditions.ts
@@ -0,0 +1,44 @@
+export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = {
+ choicelock: {
+ inherit: true,
+ onBeforeMove(pokemon, target, move) {
+ const choiceItem = pokemon.getItem().isChoice ||
+ Object.keys(pokemon.volatiles).some(v => (
+ v.startsWith('item:') && this.dex.items.get(v.split(':')[1]).isChoice
+ ));
+ if (!choiceItem) {
+ pokemon.removeVolatile('choicelock');
+ return;
+ }
+ if (
+ !pokemon.ignoringItem() && !pokemon.volatiles['dynamax'] &&
+ move.id !== this.effectState.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.debug("Disabled by Choice item lock");
+ this.add('-fail', pokemon);
+ return false;
+ }
+ },
+ onDisableMove(pokemon) {
+ const choiceItem = pokemon.getItem().isChoice ||
+ Object.keys(pokemon.volatiles).some(v => (
+ v.startsWith('item:') && this.dex.items.get(v.split(':')[1]).isChoice
+ ));
+ if (!choiceItem || !pokemon.hasMove(this.effectState.move)) {
+ pokemon.removeVolatile('choicelock');
+ return;
+ }
+ if (pokemon.ignoringItem() || pokemon.volatiles['dynamax']) {
+ return;
+ }
+ for (const moveSlot of pokemon.moveSlots) {
+ if (moveSlot.id !== this.effectState.move) {
+ pokemon.disableMove(moveSlot.id, false, this.effectState.sourceEffect);
+ }
+ }
+ },
+ },
+};
diff --git a/data/mods/sharingiscaring/items.ts b/data/mods/sharingiscaring/items.ts
new file mode 100644
index 000000000000..ebf65b471007
--- /dev/null
+++ b/data/mods/sharingiscaring/items.ts
@@ -0,0 +1,31 @@
+export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
+ airballoon: {
+ inherit: true,
+ // airborneness implemented in sim/pokemon.js:Pokemon#isGrounded
+ onDamagingHit(damage, target, source, move) {
+ this.add('-enditem', target, 'Air Balloon');
+ if (target.item === 'airballoon') {
+ target.item = '';
+ target.itemState = {id: '', target};
+ } else {
+ delete target.volatiles['item:airballoon'];
+ target.m.sharedItemsUsed.push('airballoon');
+ }
+ this.runEvent('AfterUseItem', target, null, null, this.dex.items.get('airballoon'));
+ },
+ onAfterSubDamage(damage, target, source, effect) {
+ this.debug('effect: ' + effect.id);
+ if (effect.effectType === 'Move') {
+ this.add('-enditem', target, 'Air Balloon');
+ if (target.item === 'airballoon') {
+ target.item = '';
+ target.itemState = {id: '', target};
+ } else {
+ delete target.volatiles['item:airballoon'];
+ target.m.sharedItemsUsed.push('airballoon');
+ }
+ this.runEvent('AfterUseItem', target, null, null, this.dex.items.get('airballoon'));
+ }
+ },
+ },
+};
diff --git a/data/mods/sharingiscaring/moves.ts b/data/mods/sharingiscaring/moves.ts
new file mode 100644
index 000000000000..311112585582
--- /dev/null
+++ b/data/mods/sharingiscaring/moves.ts
@@ -0,0 +1,8 @@
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
+ poltergeist: {
+ inherit: true,
+ onTry(source, target) {
+ return !!target.item || Object.keys(target.volatiles).some(volatile => volatile.startsWith('item:'));
+ },
+ },
+};
diff --git a/data/mods/sharingiscaring/scripts.ts b/data/mods/sharingiscaring/scripts.ts
new file mode 100644
index 000000000000..5222a9bc84c2
--- /dev/null
+++ b/data/mods/sharingiscaring/scripts.ts
@@ -0,0 +1,144 @@
+import {RESTORATIVE_BERRIES} from '../../../sim/pokemon';
+
+export const Scripts: ModdedBattleScriptsData = {
+ gen: 9,
+ inherit: 'gen9',
+ pokemon: {
+ isGrounded(negateImmunity) {
+ if ('gravity' in this.battle.field.pseudoWeather) return true;
+ if ('ingrain' in this.volatiles && this.battle.gen >= 4) return true;
+ if ('smackdown' in this.volatiles) return true;
+ const item = (this.ignoringItem() ? '' : this.item);
+ if (item === 'ironball' || (this.volatiles['item:ironball'] && !this.ignoringItem())) return true;
+ // If a Fire/Flying type uses Burn Up and Roost, it becomes ???/Flying-type, but it's still grounded.
+ if (!negateImmunity && this.hasType('Flying') && !(this.hasType('???') && 'roost' in this.volatiles)) return false;
+ if (this.hasAbility('levitate') && !this.battle.suppressingAbility(this)) return null;
+ if ('magnetrise' in this.volatiles) return false;
+ if ('telekinesis' in this.volatiles) return false;
+ if (item === 'airballoon' || (this.volatiles['item:airballoon'] && !this.ignoringItem())) return false;
+ return true;
+ },
+ hasItem(item) {
+ if (Array.isArray(item)) {
+ return item.some(i => this.hasItem(i));
+ } else {
+ if (this.battle.toID(item) !== this.item && !this.volatiles['item:' + this.battle.toID(item)]) return false;
+ }
+ return !this.ignoringItem();
+ },
+ useItem(source, sourceEffect) {
+ const hasAnyItem = !!this.item || Object.keys(this.volatiles).some(v => v.startsWith('item:'));
+ // Best to declare everything early because ally might have a gem that needs proccing
+ if (!sourceEffect && this.battle.effect) sourceEffect = this.battle.effect;
+ if (!source && this.battle.event && this.battle.event.target) source = this.battle.event.target;
+ const item = (sourceEffect?.id.startsWith('item:')) ? sourceEffect as Item : this.getItem();
+ if ((!this.hp && !item.isGem) || !this.isActive) return false;
+ if (!hasAnyItem) return false;
+
+ if (this.battle.runEvent('UseItem', this, null, null, item)) {
+ switch (item.id.startsWith('item:') ? item.id.slice(5) : item.id) {
+ case 'redcard':
+ this.battle.add('-enditem', this, item.fullname, '[of] ' + source);
+ break;
+ default:
+ if (item.isGem) {
+ this.battle.add('-enditem', this, item.fullname, '[from] gem');
+ } else {
+ this.battle.add('-enditem', this, item.fullname);
+ }
+ break;
+ }
+ if (item.boosts) {
+ this.battle.boost(item.boosts, this, source, item);
+ }
+
+ this.battle.singleEvent('Use', item, this.itemState, this, source, sourceEffect);
+
+ if (item.id.startsWith('item:')) {
+ delete this.volatiles[item.id];
+ this.m.sharedItemsUsed.push(item.id.slice(5));
+ } else {
+ this.lastItem = this.item;
+ this.item = '';
+ this.itemState = {id: '', target: this};
+ }
+ this.usedItemThisTurn = true;
+ this.battle.runEvent('AfterUseItem', this, null, null, item);
+ return true;
+ }
+ return false;
+ },
+ eatItem(force, source, sourceEffect) {
+ const hasAnyItem = !!this.item || Object.keys(this.volatiles).some(v => v.startsWith('item:'));
+ if (!sourceEffect && this.battle.effect) sourceEffect = this.battle.effect;
+ if (!source && this.battle.event && this.battle.event.target) source = this.battle.event.target;
+ const item = (sourceEffect?.id.startsWith('item:')) ? sourceEffect as Item : this.getItem();
+ if (!hasAnyItem) return false;
+ if ((!this.hp && this.battle.toID(item.name) !== 'jabocaberry' && this.battle.toID(item.name) !== 'rowapberry') ||
+ !this.isActive) return false;
+
+ if (
+ this.battle.runEvent('UseItem', this, null, null, item) &&
+ (force || this.battle.runEvent('TryEatItem', this, null, null, item))
+ ) {
+ this.battle.add('-enditem', this, item.fullname, '[eat]');
+
+ this.battle.singleEvent('Eat', item, this.itemState, this, source, sourceEffect);
+ this.battle.runEvent('EatItem', this, null, null, item);
+
+ if (RESTORATIVE_BERRIES.has(item.id.startsWith('item:') ? item.id.slice(5) as ID : item.id)) {
+ switch (this.pendingStaleness) {
+ case 'internal':
+ if (this.staleness !== 'external') this.staleness = 'internal';
+ break;
+ case 'external':
+ this.staleness = 'external';
+ break;
+ }
+ this.pendingStaleness = undefined;
+ }
+
+ if (item.id.startsWith('item:')) {
+ delete this.volatiles[item.id];
+ this.m.sharedItemsUsed.push(item.id.slice(5));
+ } else {
+ this.lastItem = this.item;
+ this.item = '';
+ this.itemState = {id: '', target: this};
+ }
+ this.usedItemThisTurn = true;
+ this.ateBerry = true;
+ this.battle.runEvent('AfterUseItem', this, null, null, item);
+ return true;
+ }
+ return false;
+ },
+ setItem(item, source, effect) {
+ if (!this.hp || !this.isActive) return false;
+ if (this.itemState.knockedOff) return false;
+ if (typeof item === 'string') item = this.battle.dex.items.get(item);
+
+ const effectid = this.battle.effect ? this.battle.effect.id : '';
+ if (RESTORATIVE_BERRIES.has('leppaberry' as ID)) {
+ const inflicted = ['trick', 'switcheroo'].includes(effectid);
+ const external = inflicted && source && !source.isAlly(this);
+ this.pendingStaleness = external ? 'external' : 'internal';
+ } else {
+ this.pendingStaleness = undefined;
+ }
+ const oldItem = this.getItem();
+ const oldItemState = this.itemState;
+ this.item = item.id;
+ this.itemState = {id: item.id, target: this};
+ if (oldItem.exists) this.battle.singleEvent('End', oldItem, oldItemState, this);
+ if (item.id) {
+ this.battle.singleEvent('Start', item, this.itemState, this, source, effect);
+ for (const ally of this.side.pokemon) {
+ if (!ally.m.sharedItemsUsed) continue;
+ ally.m.sharedItemsUsed = ally.m.sharedItemsUsed.filter((i: ID) => i !== (item as Item).id);
+ }
+ }
+ return true;
+ },
+ },
+};
diff --git a/data/mods/ssb/abilities.ts b/data/mods/ssb/abilities.ts
deleted file mode 100644
index b75b709a0511..000000000000
--- a/data/mods/ssb/abilities.ts
+++ /dev/null
@@ -1,2241 +0,0 @@
-import {SSBSet, ssbSets} from "./random-teams";
-import {getName} from './conditions';
-
-// Used in many abilities, placed here to reduce the number of updates needed and to reduce the chance of errors
-const STRONG_WEATHERS = ['desolateland', 'primordialsea', 'deltastream', 'heavyhailstorm', 'winterhail', 'turbulence'];
-
-/**
- * Assigns a new set to a Pokémon
- * @param pokemon the Pokemon to assign the set to
- * @param newSet the SSBSet to assign
- */
-export function changeSet(context: Battle, pokemon: Pokemon, newSet: SSBSet, changeAbility = false) {
- if (pokemon.transformed) return;
- const evs: StatsTable = {
- hp: newSet.evs?.hp || 0,
- atk: newSet.evs?.atk || 0,
- def: newSet.evs?.def || 0,
- spa: newSet.evs?.spa || 0,
- spd: newSet.evs?.spd || 0,
- spe: newSet.evs?.spe || 0,
- };
- const ivs: StatsTable = {
- hp: newSet.ivs?.hp || 31,
- atk: newSet.ivs?.atk || 31,
- def: newSet.ivs?.def || 31,
- spa: newSet.ivs?.spa || 31,
- spd: newSet.ivs?.spd || 31,
- spe: newSet.ivs?.spe || 31,
- };
- pokemon.set.evs = evs;
- pokemon.set.ivs = ivs;
- if (newSet.nature) pokemon.set.nature = Array.isArray(newSet.nature) ? context.sample(newSet.nature) : newSet.nature;
- const oldShiny = pokemon.set.shiny;
- pokemon.set.shiny = (typeof newSet.shiny === 'number') ? context.randomChance(1, newSet.shiny) : !!newSet.shiny;
- let percent = (pokemon.hp / pokemon.baseMaxhp);
- if (newSet.species === 'Shedinja') percent = 1;
- pokemon.formeChange(newSet.species, context.effect, true);
- const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) +
- (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : '');
- if (oldShiny !== pokemon.set.shiny) context.add('replace', pokemon, details);
- if (changeAbility) pokemon.setAbility(newSet.ability as string);
-
- pokemon.baseMaxhp = pokemon.species.name === 'Shedinja' ? 1 : Math.floor(Math.floor(
- 2 * pokemon.species.baseStats.hp + pokemon.set.ivs.hp + Math.floor(pokemon.set.evs.hp / 4) + 100
- ) * pokemon.level / 100 + 10);
- const newMaxHP = pokemon.baseMaxhp;
- pokemon.hp = Math.round(newMaxHP * percent);
- pokemon.maxhp = newMaxHP;
- context.add('-heal', pokemon, pokemon.getHealth, '[silent]');
- if (pokemon.item) {
- let item = newSet.item;
- if (typeof item !== 'string') item = item[context.random(item.length)];
- if (context.toID(item) !== (pokemon.item || pokemon.lastItem)) pokemon.setItem(item);
- }
- if (!pokemon.m.datacorrupt) {
- const newMoves = changeMoves(context, pokemon, newSet.moves.concat(newSet.signatureMove));
- pokemon.moveSlots = newMoves;
- // @ts-ignore Necessary so pokemon doesn't get 8 moves
- pokemon.baseMoveSlots = newMoves;
- }
- context.add('-ability', pokemon, `${pokemon.getAbility().name}`);
- context.add('message', `${pokemon.name} changed form!`);
-}
-
-/**
- * Assigns new moves to a Pokemon
- * @param pokemon The Pokemon whose moveset is to be modified
- * @param newSet The set whose moves should be assigned
- */
-export function changeMoves(context: Battle, pokemon: Pokemon, newMoves: (string | string[])[]) {
- const carryOver = pokemon.moveSlots.slice().map(m => m.pp / m.maxpp);
- // In case there are ever less than 4 moves
- while (carryOver.length < 4) {
- carryOver.push(1);
- }
- const result = [];
- let slot = 0;
- for (const newMove of newMoves) {
- const moveName = Array.isArray(newMove) ? newMove[context.random(newMove.length)] : newMove;
- const move = context.dex.moves.get(context.toID(moveName));
- if (!move.id) continue;
- const moveSlot = {
- move: move.name,
- id: move.id,
- // eslint-disable-next-line max-len
- pp: ((move.noPPBoosts || move.isZ) ? Math.floor(move.pp * carryOver[slot]) : Math.floor((move.pp * (8 / 5)) * carryOver[slot])),
- maxpp: ((move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5),
- target: move.target,
- disabled: false,
- disabledSource: '',
- used: false,
- };
- result.push(moveSlot);
- slot++;
- }
- return result;
-}
-
-export const Abilities: {[k: string]: ModdedAbilityData} = {
- /*
- // Example
- "abilityid": {
- desc: "", // long description
- shortDesc: "", // short description, shows up in /dt
- name: "Ability Name",
- // The bulk of an ability is not easily shown in an example since it varies
- // For more examples, see https://github.com/smogon/pokemon-showdown/blob/master/data/abilities.js
- },
- */
- // Please keep abilites organized alphabetically based on staff member name!
- // Aelita
- scyphozoa: {
- desc: "On switch-in, this Pokemon removes all field conditions, entry hazards, and stat boosts on both sides, gaining one random boost for every field condition, entry hazard, or boosted stat that gets cleared. This Pokemon's moves ignore abilities. If this Pokemon is a Zygarde in its 10% or 50% Forme, it changes to Complete Forme when it has 1/2 or less of its maximum HP at the end of the turn.",
- shortDesc: "Power Construct + Mold Breaker. On switch-in, clears everything for random boosts.",
- name: "Scyphozoa",
- onSwitchIn(source) {
- let successes = 0;
- this.add('-ability', source, 'Scyphozoa');
- this.add('-clearallboost');
- for (const pokemon of this.getAllActive()) {
- const boostTotal = Object.values(pokemon.boosts).reduce((num, add) => num + add);
- if (boostTotal !== 0 || pokemon.positiveBoosts()) successes++;
- pokemon.clearBoosts();
- if (pokemon.removeVolatile('substitute')) successes++;
- }
- const target = source.side.foe.active[0];
-
- const removeAll = [
- 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'gmaxsteelsurge',
- 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb',
- ];
- const silentRemove = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist'];
- for (const sideCondition of removeAll) {
- if (target.side.removeSideCondition(sideCondition)) {
- if (!silentRemove.includes(sideCondition)) {
- this.add('-sideend', target.side, this.dex.conditions.get(sideCondition).name, '[from] ability: Scyphozoa', '[of] ' + source);
- }
- successes++;
- }
- if (source.side.removeSideCondition(sideCondition)) {
- if (!silentRemove.includes(sideCondition)) {
- this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] ability: Scyphozoa', '[of] ' + source);
- }
- successes++;
- }
- }
- for (const clear in this.field.pseudoWeather) {
- if (clear.endsWith('mod') || clear.endsWith('clause')) continue;
- this.field.removePseudoWeather(clear);
- successes++;
- }
- if (this.field.clearWeather()) successes++;
- if (this.field.clearTerrain()) successes++;
- const stats: BoostID[] = [];
- const exclude: string[] = ['accuracy', 'evasion'];
- for (let x = 0; x < successes; x++) {
- let stat: BoostID;
- for (stat in source.boosts) {
- if (source.boosts[stat] < 6 && !exclude.includes(stat)) {
- stats.push(stat);
- }
- }
- if (stats.length) {
- const randomStat = this.sample(stats);
- const boost: SparseBoostsTable = {};
- boost[randomStat] = 1;
- this.boost(boost, source, source);
- }
- }
- },
- isPermanent: true,
- onModifyMove(move) {
- move.ignoreAbility = true;
- },
- onResidualOrder: 27,
- onResidual(pokemon) {
- if (pokemon.baseSpecies.baseSpecies !== 'Zygarde' || pokemon.transformed || !pokemon.hp) return;
- if (pokemon.species.id === 'zygardecomplete' || pokemon.hp > pokemon.maxhp / 2) return;
- this.add('-activate', pokemon, 'ability: Scyphozoa');
- pokemon.formeChange('Zygarde-Complete', this.effect, true);
- pokemon.baseMaxhp = Math.floor(Math.floor(
- 2 * pokemon.species.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100
- ) * pokemon.level / 100 + 10);
- const newMaxHP = pokemon.volatiles['dynamax'] ? (2 * pokemon.baseMaxhp) : pokemon.baseMaxhp;
- pokemon.hp = newMaxHP - (pokemon.maxhp - pokemon.hp);
- pokemon.maxhp = newMaxHP;
- this.add('-heal', pokemon, pokemon.getHealth, '[silent]');
- },
- gen: 8,
- },
-
- // aegii
- setthestage: {
- desc: "If this Pokemon is an Aegislash, it changes to Blade Forme before attempting to use an attacking move, and changes to Shield Forme before attempting to use King's Shield. This Pokemon's moves that match one of its types have a same-type attack bonus (STAB) of 2 instead of 1.5. On switch-in, this Pokemon selects a physical or special set.",
- shortDesc: "Stance Change + Adaptability; on switch-in, selects physical or special set.",
- isPermanent: true,
- onSwitchIn(pokemon) {
- if (pokemon.species.baseSpecies !== 'Aegislash') return;
- const forme = this.randomChance(1, 2) ? 'aegii-Alt' : 'aegii';
- changeSet(this, pokemon, ssbSets[forme]);
- const setType = pokemon.moves.includes('shadowball') ? 'specially' : 'physically';
- this.add('-message', `aegii currently has a ${setType} oriented set.`);
- },
- onModifyMove(move, attacker, defender) {
- move.stab = 2;
- if (attacker.species.baseSpecies !== 'Aegislash' || attacker.transformed) return;
- if (move.category === 'Status' && move.id !== 'kingsshield' && move.id !== 'reset') return;
- const targetForme = (move.id === 'kingsshield' || move.id === 'reset' ? 'Aegislash' : 'Aegislash-Blade');
- if (attacker.species.name !== targetForme) attacker.formeChange(targetForme);
- },
- name: "Set the Stage",
- gen: 8,
- },
-
- // Aeonic
- arsene: {
- desc: "On switch-in, this Pokemon summons Sandstorm. If Sandstorm is active, this Pokemon's Speed is doubled. This Pokemon takes no damage from Sandstorm.",
- shortDesc: "Sand Stream + Sand Rush.",
- name: "Arsene",
- onStart(source) {
- this.field.setWeather('sandstorm');
- },
- onModifySpe(spe, pokemon) {
- if (this.field.isWeather('sandstorm')) {
- return this.chainModify(2);
- }
- },
- onImmunity(type) {
- if (type === 'sandstorm') return false;
- },
- gen: 8,
- },
-
- // Aethernum
- rainyseason: {
- desc: "On switch-in, this Pokemon summons Rain Dance. If Rain Dance or Heavy Rain is active, this Pokemon has doubled Speed, collects a raindrop, and restores 1/8 of its maximum HP, rounded down, at the end of each turn. If this Pokemon is holding Big Root, it will restore 1/6 of its maximum HP, rounded down, at the end of the turn. If this Pokemon is holding Utility Umbrella, its HP does not get restored and it does not collect raindrops. Each raindrop raises this Pokemon's Defense and Special Defense by 1 stage while it is collected.",
- shortDesc: "Drizzle + Swift Swim. Restore HP if raining. Collect raindrops.",
- name: "Rainy Season",
- isPermanent: true,
- onStart(source) {
- for (const action of this.queue) {
- if (action.choice === 'runPrimal' && action.pokemon === source && source.species.id === 'kyogre') return;
- if (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break;
- }
- this.field.setWeather('raindance');
- },
- onWeather(target, source, effect) {
- if (target.hasItem('utilityumbrella')) return;
- if (['raindance', 'primordialsea'].includes(effect.id)) {
- this.heal(target.baseMaxhp / (target.hasItem('bigroot') ? 6 : 8));
- target.addVolatile('raindrop');
- }
- },
- onModifySpe(spe, pokemon) {
- if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) {
- return this.chainModify(2);
- }
- },
- gen: 8,
- },
-
- // Akir
- fortifications: {
- desc: "Pokemon making contact with this Pokemon lose 1/8 of their maximum HP, rounded down. At the end of every turn, this Pokemon Restores 1/16 of its max HP.",
- shortDesc: "Foe loses 1/8 HP if makes contact; Restores 1/16 of its max HP every turn.",
- onDamagingHitOrder: 1,
- onDamagingHit(damage, target, source, move) {
- if (this.checkMoveMakesContact(move, source, target, true)) {
- this.damage(source.baseMaxhp / 8, source, target);
- }
- },
- onResidual(pokemon) {
- this.heal(pokemon.baseMaxhp / 16);
- },
- name: "Fortifications",
- gen: 8,
- },
-
- // Alpha
- iceage: {
- desc: "The weather becomes an extremely heavy hailstorm that prevents damaging Steel-type moves from executing, causes Ice-type moves to be 50% stronger, causes all non-Ice-type Pokemon on the opposing side to take 1/8 damage from hail, and causes all moves to have a 10% chance to freeze. This weather bypasses Magic Guard and Overcoat. This weather remains in effect until the 3 turns are up, or the weather is changed by Delta Stream, Desolate Land, or Primordial Sea.",
- shortDesc: "Weather: Steel fail. 1.5x Ice.",
- onStart(source) {
- this.field.setWeather('heavyhailstorm');
- },
- onAnySetWeather(target, source, weather) {
- if (this.field.getWeather().id === 'heavyhailstorm' && !STRONG_WEATHERS.includes(weather.id)) return false;
- },
- onEnd(pokemon) {
- if (this.field.weatherState.source !== pokemon) return;
- for (const target of this.getAllActive()) {
- if (target === pokemon) continue;
- if (target.hasAbility('iceage')) {
- this.field.weatherState.source = target;
- return;
- }
- }
- this.field.clearWeather();
- },
- name: "Ice Age",
- gen: 8,
- },
-
- // Annika
- overprotective: {
- desc: "If this Pokemon is the last unfainted team member, its Speed is raised by 1 stage.",
- shortDesc: "+1 Speed on switch-in if all other team members have fainted.",
- onSwitchIn(pokemon) {
- if (pokemon.side.pokemonLeft === 1) this.boost({spe: 1});
- },
- name: "Overprotective",
- gen: 8,
- },
-
- // A Quag To The Past
- carefree: {
- desc: "This Pokemon blocks certain status moves and instead uses the move against the original user. This Pokemon ignores other Pokemon's Attack, Special Attack, and accuracy stat stages when taking damage, and ignores other Pokemon's Defense, Special Defense, and evasiveness stat stages when dealing damage.",
- shortDesc: "Magic Bounce + Unaware.",
- onAnyModifyBoost(boosts, pokemon) {
- const unawareUser = this.effectState.target;
- if (unawareUser === pokemon) return;
- if (unawareUser === this.activePokemon && pokemon === this.activeTarget) {
- boosts['def'] = 0;
- boosts['spd'] = 0;
- boosts['evasion'] = 0;
- }
- if (pokemon === this.activePokemon && unawareUser === this.activeTarget) {
- boosts['atk'] = 0;
- boosts['def'] = 0;
- boosts['spa'] = 0;
- boosts['spd'] = 0;
- boosts['accuracy'] = 0;
- }
- },
- onTryHitPriority: 1,
- onTryHit(target, source, move) {
- if (target === source || move.hasBounced || !move.flags['reflectable']) {
- return;
- }
- const newMove = this.dex.getActiveMove(move.id);
- newMove.hasBounced = true;
- newMove.pranksterBoosted = false;
- this.add('-ability', target, 'Carefree');
- this.actions.useMove(newMove, target, source);
- return null;
- },
- onAllyTryHitSide(target, source, move) {
- if (target.isAlly(source) || move.hasBounced || !move.flags['reflectable']) {
- return;
- }
- const newMove = this.dex.getActiveMove(move.id);
- newMove.hasBounced = true;
- newMove.pranksterBoosted = false;
- this.add('-ability', target, 'Carefree');
- this.actions.useMove(newMove, this.effectState.target, source);
- return null;
- },
- condition: {
- duration: 1,
- },
- name: "Carefree",
- gen: 8,
- },
-
- // Arby
- wavesurge: {
- desc: "On switch-in, this Pokemon summons Wave Terrain for 5 turns. During the effect, the accuracy of Water-type moves is multiplied by 1.2, all current entry hazards are removed, and no entry hazards can be set.",
- shortDesc: "On switch-in, 5 turns: no hazards; Water move acc 1.2x.",
- onStart(source) {
- this.field.setTerrain('waveterrain');
- },
- name: "Wave Surge",
- gen: 8,
- },
-
- // Archas
- indomitable: {
- desc: "This Pokemon cures itself if it is confused or has a major status condition. Single use.",
- onUpdate(pokemon) {
- if ((pokemon.status || pokemon.volatiles['confusion']) && !this.effectState.indomitableActivated) {
- this.add('-activate', pokemon, 'ability: Indomitable');
- pokemon.cureStatus();
- pokemon.removeVolatile('confusion');
- this.effectState.indomitableActivated = true;
- }
- },
- name: "Indomitable",
- gen: 8,
- },
-
- // biggie
- superarmor: {
- desc: "Reduces damage taken from physical moves by 25% if the user has not yet attacked.",
- onSourceModifyDamage(damage, source, target, move) {
- if (this.queue.willMove(target) && move.category === 'Physical') {
- return this.chainModify(0.75);
- }
- },
- name: "Super Armor",
- gen: 8,
- },
-
- // Billo
- proofpolicy: {
- desc: "Pokemon making contact with this Pokemon have the effects of Yawn, Taunt, and Torment applied to them.",
- shortDesc: "Upon contact, opposing Pokemon is made drowsy and applies Taunt + Torment.",
- onDamagingHit(damage, target, source, move) {
- if (this.checkMoveMakesContact(move, source, target, true)) {
- source.addVolatile('taunt', target);
- source.addVolatile('yawn', target);
- source.addVolatile('torment', target);
- }
- },
- name: "Proof Policy",
- gen: 8,
- },
-
- // Brandon
- banesurge: {
- desc: "On switch-in, this Pokemon summons Bane Terrain for 5 turns. For the duration of the effect, all Pokemon use their weaker offensive stat for all attacks. The move category used does not change.",
- shortDesc: "On switch-in, 5 turns: all Pokemon use weaker offensive stat.",
- onStart(source) {
- this.field.setTerrain('baneterrain');
- },
- name: "Bane Surge",
- gen: 8,
- },
-
- // brouha
- turbulence: {
- desc: "While this Pokemon is on the field, all entry hazards and terrains are removed at the end of each turn, non-Flying-type Pokemon lose 6% of their HP, rounded down, at the end of each turn.",
- shortDesc: "End of each turn: clears terrain/hazards, non-Flying lose 6% HP.",
- onStart(source) {
- this.field.setWeather('turbulence');
- },
- onAnySetWeather(target, source, weather) {
- if (this.field.getWeather().id === 'turbulence' && !STRONG_WEATHERS.includes(weather.id)) return false;
- },
- onEnd(pokemon) {
- if (this.field.weatherState.source !== pokemon) return;
- for (const target of this.getAllActive()) {
- if (target === pokemon) continue;
- if (target.hasAbility('turbulence')) {
- this.field.weatherState.source = target;
- return;
- }
- }
- this.field.clearWeather();
- },
- name: "Turbulence",
- gen: 8,
- },
-
- // Buffy
- speedcontrol: {
- onStart(pokemon) {
- this.boost({spe: 1}, pokemon);
- },
- desc: "On switch-in, this Pokemon's Speed is raised by 1 stage.",
- name: "Speed Control",
- gen: 8,
- },
-
- // cant say
- ragequit: {
- desc: "If a Pokemon with this ability uses a move that misses or fails, the Pokemon faints and reduces the foe's Attack and Special Attack by 2 stages",
- shortDesc: "If move misses or fails, use Memento.",
- name: "Rage Quit",
- onAfterMove(pokemon, target, move) {
- if (pokemon.moveThisTurnResult === false) {
- this.add('-ability', pokemon, 'Rage Quit');
- pokemon.faint();
- if (pokemon.side.foe.active[0]) {
- this.boost({atk: -2, spa: -2}, pokemon.side.foe.active[0], pokemon, null, true);
- }
- }
- },
- gen: 8,
- },
-
- // Celine
- guardianarmor: {
- desc: "On switch-in, this Pokemon's Defense and Special Defense are raised by 2 stages.",
- name: "Guardian Armor",
- onStart(pokemon) {
- this.boost({def: 2, spd: 2}, pokemon);
- },
- gen: 8,
- },
-
- // drampa's grandpa
- oldmanpa: {
- desc: "This Pokemon's sound-based moves have their power multiplied by 1.3. This Pokemon takes halved damage from sound-based moves. This Pokemon ignores other Pokemon's Attack, Special Attack, and accuracy stat stages when taking damage, and ignores other Pokemon's Defense, Special Defense, and evasiveness stat stages when dealing damage. Upon switching in, this Pokemon's Defense and Special Defense are raised by 1 stage.",
- shortDesc: "Effects of Punk Rock + Unaware. On switch-in, boosts Def and Sp. Def by 1.",
- name: "Old Manpa",
- onBasePowerPriority: 7,
- onBasePower(basePower, attacker, defender, move) {
- if (move.flags['sound']) {
- this.debug('Old Manpa boost');
- return this.chainModify([5325, 4096]);
- }
- },
- onSourceModifyDamage(damage, source, target, move) {
- if (move.flags['sound']) {
- this.debug('Old Manpa weaken');
- return this.chainModify(0.5);
- }
- },
- onAnyModifyBoost(boosts, pokemon) {
- const unawareUser = this.effectState.target;
- if (unawareUser === pokemon) return;
- if (unawareUser === this.activePokemon && pokemon === this.activeTarget) {
- boosts['def'] = 0;
- boosts['spd'] = 0;
- boosts['evasion'] = 0;
- }
- if (pokemon === this.activePokemon && unawareUser === this.activeTarget) {
- boosts['atk'] = 0;
- boosts['def'] = 0;
- boosts['spa'] = 0;
- boosts['spd'] = 0;
- boosts['accuracy'] = 0;
- }
- },
- onStart(pokemon) {
- this.boost({def: 1, spd: 1});
- },
- gen: 8,
- },
-
- // dream
- greedpunisher: {
- desc: "This Pokemon can only be damaged by direct attacks. On switch-in, this Pokemon's stats are boosted based on the number of hazards on the field. 1 random stat is raised if 1-2 hazards are up, and 2 random stats are raised if 3 or more hazards are up.",
- shortDesc: "On switch-in, boosts stats based on the number of hazards on this Pokemon's side.",
- name: "Greed Punisher",
- onSwitchIn(pokemon) {
- const side = pokemon.side;
- const sideConditions = Object.keys(side.sideConditions);
- const activeCount = sideConditions.length;
- const stats: BoostID[] = [];
- const exclude: string[] = ['accuracy', 'evasion'];
- for (let x = 0; x < activeCount; x++) {
- let stat: BoostID;
- for (stat in pokemon.boosts) {
- if (pokemon.boosts[stat] < 6 && !exclude.includes(stat)) {
- stats.push(stat);
- }
- }
- if (stats.length) {
- const randomStat = this.sample(stats);
- const boost: SparseBoostsTable = {};
- boost[randomStat] = 1;
- this.boost(boost, pokemon, pokemon);
- }
- }
- },
- onDamage(damage, target, source, effect) {
- if (effect.id === 'heavyhailstorm') return;
- if (effect.effectType !== 'Move') {
- if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name);
- return false;
- }
- },
- gen: 8,
- },
-
- // Emeri
- drakeskin: {
- desc: "This Pokemon's Normal-type moves become Dragon-type moves and have their power multiplied by 1.2. This effect comes after other effects that change a move's type, but before Ion Deluge and Electrify's effects.",
- shortDesc: "This Pokemon's Normal-type moves become Dragon type and have 1.2x power.",
- name: "Drake Skin",
- onModifyTypePriority: -1,
- onModifyType(move, pokemon) {
- const noModifyType = [
- 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',
- ];
- if (move.type === 'Normal' && !noModifyType.includes(move.id) && !(move.isZ && move.category !== 'Status')) {
- move.type = 'Dragon';
- move.typeChangerBoosted = this.effect;
- }
- },
- onBasePowerPriority: 23,
- onBasePower(basePower, pokemon, target, move) {
- if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]);
- },
- gen: 8,
- },
-
- // EpicNikolai
- dragonheart: {
- desc: "Once per battle, when this Pokemon's HP is at or below 25% of its max HP, this Pokemon heals 50% of its max HP.",
- shortDesc: "Once per battle, heals 50% when 25% or lower.",
- name: "Dragon Heart",
- onUpdate(pokemon) {
- if (pokemon.hp > 0 && pokemon.hp < pokemon.maxhp / 4 && !this.effectState.dragonheart) {
- this.effectState.dragonheart = true;
- this.heal(pokemon.maxhp / 2);
- }
- },
- gen: 8,
- },
-
- // estarossa
- sandsoftime: {
- desc: "On switch-in, this Pokemon summons Sandstorm. If Sandstorm is active, this Pokemon's Ground-, Rock-, and Steel-type attacks have their power multiplied by 1.3. This Pokemon takes no damage from Sandstorm.",
- shortDesc: "Sand Stream + Sand Force.",
- name: "Sands of Time",
- onStart(source) {
- this.field.setWeather('sandstorm');
- },
- onImmunity(type, pokemon) {
- if (type === 'sandstorm') return false;
- },
- onBasePower(basePower, attacker, defender, move) {
- if (this.field.isWeather('sandstorm')) {
- if (move.type === 'Rock' || move.type === 'Ground' || move.type === 'Steel') {
- this.debug('Sands of Time boost');
- return this.chainModify([5325, 4096]);
- }
- }
- },
- gen: 8,
- },
-
- // fart
- bipolar: {
- desc: "If this Pokemon is a Kartana, then when it switches in, it changes to two random types and gets corresponding STAB attacks.",
- shortDesc: "Kartana: User gains 2 random types and STAB moves on switch-in.",
- name: "Bipolar",
- isPermanent: true,
- onSwitchIn(pokemon) {
- if (pokemon.species.baseSpecies !== 'Kartana') return;
- const typeMap: {[key: string]: string} = {
- Normal: "Return",
- Fighting: "Sacred Sword",
- Flying: "Drill Peck",
- Poison: "Poison Jab",
- Ground: "Earthquake",
- Rock: "Stone Edge",
- Bug: "Lunge",
- Ghost: "Shadow Bone",
- Steel: "Iron Head",
- Electric: "Zing Zap",
- Psychic: "Psychic Fangs",
- Ice: "Icicle Crash",
- Dragon: "Dual Chop",
- Dark: "Jaw Lock",
- Fairy: "Play Rough",
- };
- const types = Object.keys(typeMap);
- this.prng.shuffle(types);
- const newTypes = [types[0], types[1]];
- this.add('-start', pokemon, 'typechange', newTypes.join('/'));
- pokemon.setType(newTypes);
- let move = this.dex.moves.get(typeMap[newTypes[0]]);
- pokemon.moveSlots[3] = pokemon.moveSlots[1];
- pokemon.moveSlots[1] = {
- move: move.name,
- id: move.id,
- pp: move.pp,
- maxpp: move.pp,
- target: move.target,
- disabled: false,
- used: false,
- virtual: true,
- };
- move = this.dex.moves.get(typeMap[newTypes[1]]);
- pokemon.moveSlots[2] = {
- move: move.name,
- id: move.id,
- pp: move.pp,
- maxpp: move.pp,
- target: move.target,
- disabled: false,
- used: false,
- virtual: true,
- };
- },
- gen: 8,
- },
-
- // Finland
- windingsong: {
- desc: "If this Pokemon's species is Alcremie, it alternates one of its moves between two different options at the end of each turn, depending on the forme of Alcremie.",
- shortDesc: "Alcremie: alternates between moves each turn.",
- name: "Winding Song",
- isPermanent: true,
- onResidual(pokemon) {
- if (pokemon.species.baseSpecies !== 'Alcremie') return;
- let coolMoves = [];
- if (pokemon.species.forme === 'Lemon-Cream') {
- coolMoves = ['Reflect', 'Light Screen'];
- } else if (pokemon.species.forme === 'Ruby-Swirl') {
- coolMoves = ['Refresh', 'Destiny Bond'];
- } else if (pokemon.species.forme === 'Mint-Cream') {
- coolMoves = ['Light of Ruin', 'Sparkling Aria'];
- } else {
- coolMoves = ['Infestation', 'Whirlwind'];
- }
- let oldMove;
- let move;
- if (pokemon.moves.includes(this.toID(coolMoves[0]))) {
- oldMove = this.toID(coolMoves[0]);
- move = this.dex.moves.get(coolMoves[1]);
- } else if (pokemon.moves.includes(this.toID(coolMoves[1]))) {
- oldMove = this.toID(coolMoves[1]);
- move = this.dex.moves.get(coolMoves[0]);
- } else {
- return;
- }
- if (!oldMove || !move) return;
- const sketchIndex = pokemon.moves.indexOf(oldMove);
- if (sketchIndex < 0) return false;
- const sketchedMove = {
- move: move.name,
- id: move.id,
- pp: (move.pp * 8 / 5),
- maxpp: (move.pp * 8 / 5),
- target: move.target,
- disabled: false,
- used: false,
- };
- pokemon.moveSlots[sketchIndex] = sketchedMove;
- pokemon.baseMoveSlots[sketchIndex] = sketchedMove;
- this.add('-message', `Finland changed its move ${this.dex.moves.get(oldMove).name} to ${move.name}!`);
- },
- gen: 8,
- },
-
- // frostyicelad
- iceshield: {
- desc: "This Pokemon can only be damaged by direct attacks. This Pokemon cannot lose its held item due to another Pokemon's attack.",
- shortDesc: "Can only be damaged by direct attacks. Cannot lose its held item.",
- name: "Ice Shield",
- onDamage(damage, target, source, effect) {
- if (effect.effectType !== 'Move') {
- if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name);
- return false;
- }
- },
- onTakeItem(item, pokemon, source) {
- if (this.suppressingAbility(pokemon) || !pokemon.hp || pokemon.item === 'stickybarb') return;
- if (!this.activeMove) throw new Error("Battle.activeMove is null");
- if ((source && source !== pokemon) || this.activeMove.id === 'knockoff') {
- this.add('-activate', pokemon, 'ability: Ice Shield');
- return false;
- }
- },
- gen: 8,
- },
-
- // gallant's pear
- armortime: {
- name: "Armor Time",
- desc: "If this Pokemon uses a status move or King Giri Giri Slash, it changes its typing and boosts one of its stats by 1 stage randomly between four options: Bug/Fire type with a Special Attack boost, Bug/Steel type with a Defense boost, Bug/Rock type with a Special Defense boost, and Bug/Electric type with a Speed boost.",
- shortDesc: "On use of status or King Giri Giri Slash, the user changes type and gets a boost.",
- isPermanent: true,
- onBeforeMove(source, target, move) {
- if (move.category !== "Status" && move.id !== "kinggirigirislash") return;
- const types = ['Fire', 'Steel', 'Rock', 'Electric'];
- const type = ['Bug', this.sample(types)];
- if (!source.setType(type)) return;
- this.add('-start', source, 'typechange', type.join('/'), '[from] ability: Armor Time');
- switch (type[1]) {
- case 'Fire':
- this.add('-message', 'Armor Time: Fire Armor!');
- this.boost({spa: 1}, source);
- break;
- case 'Steel':
- this.add('-message', 'Armor Time: Steel Armor!');
- this.boost({def: 1}, source);
- break;
- case 'Rock':
- this.add('-message', 'Armor Time: Rock Armor!');
- this.boost({spd: 1}, source);
- break;
- case 'Electric':
- this.add('-message', 'Armor Time: Electric Armor!');
- this.boost({spe: 1}, source);
- break;
- }
- },
- gen: 8,
- },
-
- // Gimmick
- ic3peak: {
- desc: "This Pokemon's Normal-type moves become Ice-type moves and have their power multiplied by 1.2. This Pokemon's moves, if they are not affected by Refrigerate, have their Base Power multiplied by the number of consecutive turns the move is used by this Pokemon.",
- shortDesc: "Refrigerate; Echoed Voice modifier on non-Refrigerate moves.",
- name: "IC3PEAK",
- onModifyTypePriority: -1,
- onModifyType(move, pokemon) {
- const noModifyType = [
- 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',
- ];
- if (move.type === 'Normal' && !noModifyType.includes(move.id) && !(move.isZ && move.category !== 'Status')) {
- move.type = 'Ice';
- move.typeChangerBoosted = this.effect;
- }
- },
- onBasePowerPriority: 23,
- onBasePower(basePower, pokemon, target, move) {
- if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]);
- },
- onModifyMovePriority: -2,
- onModifyMove(move, attacker) {
- if (move.typeChangerBoosted === this.effect) return;
- move.onTry = function () {
- this.field.addPseudoWeather('echoedvoiceclone');
- this.field.pseudoWeather.echoedvoiceclone.lastmove = move.name;
- };
- // eslint-disable-next-line @typescript-eslint/no-shadow
- move.basePowerCallback = function (pokemon, target, move) {
- if (this.field.pseudoWeather.echoedvoiceclone) {
- if (this.field.pseudoWeather.echoedvoiceclone.lastmove === move.name) {
- return move.basePower * this.field.pseudoWeather.echoedvoiceclone.multiplier;
- } else {
- this.field.removePseudoWeather('echoedvoiceclone');
- }
- }
- return move.basePower;
- };
- },
- gen: 8,
- },
-
- // GMars
- capsulearmor: {
- desc: "While in Minior-Meteor forme, this Pokemon cannot be affected by major status conditions and is immune to critical hits. This ability cannot be ignored by Moongeist Beam, Sunsteel Strike, Mold Breaker, Teravolt, or Turboblaze.",
- shortDesc: "Minior-Meteor: Immune to crits and status",
- name: "Capsule Armor",
- isPermanent: true,
- isBreakable: false,
- onCriticalHit: false,
- onSetStatus(status, target, source, effect) {
- if (target.species.id !== 'miniormeteor' || target.transformed) return;
- if ((effect as Move)?.status) {
- this.add('-immune', target, '[from] ability: Capsule Armor');
- }
- return false;
- },
- onTryAddVolatile(status, target) {
- if (target.species.id !== 'miniormeteor' || target.transformed) return;
- if (status.id !== 'yawn') return;
- this.add('-immune', target, '[from] ability: Capsule Armor');
- return null;
- },
- },
-
- // grimAuxiliatrix
- aluminumalloy: {
- desc: "This Pokemon restores 1/3 of its maximum HP, rounded down, when it switches out, and other Pokemon cannot lower this Pokemon's stat stages. -1 Speed, +1 Def/Sp.Def when hit with a Water-type attacking move, switching into rain or starting rain while this Pokemon is on the field.",
- shortDesc: "Regenerator+Clear Body.+1 def/spd,-1 spe in rain/hit by water",
- name: "Aluminum Alloy",
- onSwitchIn(pokemon) {
- if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) {
- this.boost({def: 1, spd: 1, spe: -1}, pokemon, pokemon);
- this.add('-message', `${pokemon.name} is rusting...`);
- }
- },
- onDamagingHit(damage, target, source, move) {
- if (move.type === 'Water') {
- this.boost({def: 1, spd: 1, spe: -1}, target, target);
- this.add('-message', `${target.name} is rusting...`);
- }
- },
- onWeatherChange() {
- const pokemon = this.effectState.target;
- if (this.field.isWeather(['raindance', 'primordialsea'])) {
- this.boost({def: 1, spd: 1, spe: -1}, pokemon, pokemon);
- this.add('-message', `${pokemon.name} is rusting...`);
- }
- },
- onSwitchOut(pokemon) {
- pokemon.heal(pokemon.baseMaxhp / 3);
- },
- onTryBoost(boost, target, source, effect) {
- if (source && target === source) return;
- let showMsg = false;
- let i: BoostID;
- for (i in boost) {
- if (boost[i]! < 0) {
- delete boost[i];
- showMsg = true;
- }
- }
- if (showMsg && !(effect as ActiveMove).secondaries && effect.id !== 'octolock') {
- this.add("-fail", target, "unboost", "[from] ability: Aluminum Alloy", "[of] " + target);
- }
- },
- gen: 8,
- },
-
- // HoeenHero
- tropicalcyclone: {
- desc: "On switch-in, this Pokemon summons Rain Dance. If Rain Dance or Heavy Rain is active, this Pokemon's Speed is doubled.",
- shortDesc: "Summons Rain. 2x Speed while rain is active.",
- name: "Tropical Cyclone",
- onStart(source) {
- this.field.setWeather('raindance');
- },
- onModifySpe(spe, pokemon) {
- if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) {
- return this.chainModify(2);
- }
- },
- gen: 8,
- },
-
- // Hydro
- hydrostatic: {
- desc: "This Pokemon is immune to Water- and Electric-type moves and raises its Special Attack by 1 stage when hit by a Water- or Electric-type move. If this Pokemon is not the target of a single-target Water- or Electric-type move used by another Pokemon, this Pokemon redirects that move to itself if it is within the range of that move. This Pokemon's Water- and Electric-type moves have their accuracy multiplied by 1.3.",
- shortDesc: "Storm Drain + Lightning Rod. This Pokemon's Water/Electric moves have 1.3x acc.",
- onSourceModifyAccuracyPriority: 9,
- onSourceModifyAccuracy(accuracy, source, target, move) {
- if (typeof accuracy !== 'number') return;
- if (!['Water', 'Electric'].includes(move.type)) return;
- this.debug('hydrostatic - enhancing accuracy');
- return accuracy * 1.3;
- },
- onTryHit(target, source, move) {
- if (target !== source && ['Water', 'Electric'].includes(move.type)) {
- if (!this.boost({spa: 1})) {
- this.add('-immune', target, '[from] ability: Hydrostatic');
- }
- return null;
- }
- },
- onAnyRedirectTarget(target, source, source2, move) {
- if (!['Water', 'Electric'].includes(move.type) || move.flags['pledgecombo']) return;
- const redirectTarget = ['randomNormal', 'adjacentFoe'].includes(move.target) ? 'normal' : move.target;
- if (this.validTarget(this.effectState.target, source, redirectTarget)) {
- if (move.smartTarget) move.smartTarget = false;
- if (this.effectState.target !== target) {
- this.add('-activate', this.effectState.target, 'ability: Hydrostatic');
- }
- return this.effectState.target;
- }
- },
- name: "Hydrostatic",
- gen: 8,
- },
-
- // Inactive
- dragonsfury: {
- desc: "If this Pokemon has a non-volatile status condition, its Defense is multiplied by 1.5x and its HP is restored by 25% of damage it deals.",
- shortDesc: "If this Pokemon is statused, its Def is 1.5x and it heals for 25% of dmg dealt.",
- onModifyDefPriority: 6,
- onModifyDef(def, pokemon) {
- if (pokemon.status) {
- return this.chainModify(1.5);
- }
- },
- onModifyMove(move, attacker) {
- if (attacker.status) move.drain = [1, 4];
- },
- name: "Dragon's Fury",
- gen: 8,
- },
-
- // Iyarito
- pollodiablo: {
- desc: "This Pokemon's Special Attack is 1.5x, but it can only select the first move it executes.",
- shortDesc: "This Pokemon's Sp. Atk is 1.5x, but it can only select the first move it executes.",
- name: "Pollo Diablo",
- onStart(pokemon) {
- pokemon.abilityState.choiceLock = "";
- },
- onBeforeMove(pokemon, target, move) {
- if (move.isZOrMaxPowered || move.id === 'struggle') return;
- if (pokemon.abilityState.choiceLock && pokemon.abilityState.choiceLock !== move.id) {
- this.addMove('move', pokemon, move.name);
- this.attrLastMove('[still]');
- this.debug("Disabled by Pollo Diablo");
- this.add('-fail', pokemon);
- return false;
- }
- },
- onModifyMove(move, pokemon) {
- if (pokemon.abilityState.choiceLock || move.isZOrMaxPowered || move.id === 'struggle') return;
- pokemon.abilityState.choiceLock = move.id;
- },
- onModifySpAPriority: 1,
- onModifySpA(spa, pokemon) {
- if (pokemon.volatiles['dynamax']) return;
- this.debug('Pollo Diablo Spa Boost');
- return this.chainModify(1.5);
- },
- onDisableMove(pokemon) {
- if (!pokemon.abilityState.choiceLock) return;
- if (pokemon.volatiles['dynamax']) return;
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id !== pokemon.abilityState.choiceLock) {
- pokemon.disableMove(moveSlot.id, false, this.effectState.sourceEffect);
- }
- }
- },
- onEnd(pokemon) {
- pokemon.abilityState.choiceLock = "";
- },
- gen: 8,
- },
-
- // Jett
- deceiver: {
- desc: "This Pokemon's moves that match one of its types have a same-type attack bonus of 2 instead of 1.5. If this Pokemon is at full HP, it survives one hit with at least 1 HP.",
- shortDesc: "Adaptability + Sturdy.",
- onModifyMove(move) {
- move.stab = 2;
- },
- onTryHit(pokemon, target, move) {
- if (move.ohko) {
- this.add('-immune', pokemon, '[from] ability: Deceiver');
- return null;
- }
- },
- onDamagePriority: -100,
- onDamage(damage, target, source, effect) {
- if (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') {
- this.add('-ability', target, 'Deceiver');
- return target.hp - 1;
- }
- },
- name: "Deceiver",
- gen: 8,
- },
-
- // Jho
- venomize: {
- desc: "This Pokemon's Normal-type moves become Poison-type moves and have their power multiplied by 1.2. This effect comes after other effects that change a move's type, but before Ion Deluge and Electrify's effects.",
- shortDesc: "This Pokemon's Normal-type moves become Poison type and have 1.2x power.",
- onModifyTypePriority: -1,
- onModifyType(move, pokemon) {
- const noModifyType = [
- 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',
- ];
- if (move.type === 'Normal' && !noModifyType.includes(move.id) && !(move.isZ && move.category !== 'Status')) {
- move.type = 'Poison';
- move.typeChangerBoosted = this.effect;
- }
- },
- onBasePowerPriority: 23,
- onBasePower(basePower, pokemon, target, move) {
- if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]);
- },
- name: "Venomize",
- gen: 8,
- },
-
- // Jordy
- divinesandstorm: {
- desc: "On switch-in, this Pokemon summons Sandstorm. This Pokemon does not take recoil damage besides Struggle/Life Orb/crash damage.",
- shortDesc: "Sand Stream + Rock Head.",
- name: "Divine Sandstorm",
- onDamage(damage, target, source, effect) {
- if (effect.id === 'recoil') {
- if (!this.activeMove) return;
- if (this.activeMove.id !== 'struggle') return null;
- }
- },
- onStart(pokemon) {
- this.field.setWeather('sandstorm');
- },
- gen: 8,
- },
-
- // Kaiju Bunny
- secondwind: {
- desc: "Once per battle, when this Pokemon's HP is at or below 25% of its max HP, this Pokemon heals 50% of its max HP.",
- shortDesc: "Once per battle, heals 50% when 25% or lower.",
- name: "Second Wind",
- onUpdate(pokemon) {
- if (pokemon.hp > 0 && pokemon.hp < pokemon.maxhp / 4 && !this.effectState.dragonheart) {
- this.effectState.dragonheart = true;
- this.heal(pokemon.maxhp / 2);
- }
- },
- gen: 8,
- },
-
- // Kennedy
- falsenine: {
- desc: "This Pokemon's type changes to match the type of the move it is about to use. This effect comes after all effects that change a move's type. This Pokemon's critical hit ratio is raised by 1 stage.",
- shortDesc: "Protean + Super Luck.",
- onPrepareHit(source, target, move) {
- if (move.hasBounced) return;
- const type = move.type;
- if (type && type !== '???' && source.getTypes().join() !== type) {
- if (!source.setType(type)) return;
- this.add('-start', source, 'typechange', type, '[from] ability: False Nine');
- }
- },
- onModifyCritRatio(critRatio) {
- return critRatio + 1;
- },
- name: "False Nine",
- gen: 8,
- },
-
- // Kev
- kingofatlantis: {
- desc: "On switch-in, this Pokemon summons Rain Dance for 5 turns, plus 1 additional turn for each Water-type teammate. This Pokemon also has the effects of Dry Skin.",
- shortDesc: "Drizzle + Dry Skin; +1 turn of rain for each Water-type teammate.",
- onStart(source) {
- this.field.setWeather('raindance', source);
- // See conditions.ts for weather modifications.
- },
- onTryHit(target, source, move) {
- if (target !== source && move.type === 'Water') {
- if (!this.heal(target.baseMaxhp / 4)) {
- this.add('-immune', target, '[from] ability: King of Atlantis');
- }
- return null;
- }
- },
- onFoeBasePowerPriority: 17,
- onFoeBasePower(basePower, attacker, defender, move) {
- if (this.effectState.target !== defender) return;
- if (move.type === 'Fire') {
- return this.chainModify(1.25);
- }
- },
- onWeather(target, source, effect) {
- if (target.hasItem('utilityumbrella')) return;
- if (effect.id === 'raindance' || effect.id === 'primordialsea') {
- this.heal(target.baseMaxhp / 8);
- } else if (effect.id === 'sunnyday' || effect.id === 'desolateland') {
- this.damage(target.baseMaxhp / 8, target, target);
- }
- },
- name: "King of Atlantis",
- gen: 8,
- },
-
- // KingSwordYT
- bambookingdom: {
- desc: "On switch-in, this Pokemon's Defense and Special Defense are raised by 1 stage. Attacking moves used by this Pokemon have their priority set to -7.",
- shortDesc: "+1 Def/SpD. -7 priority on attacks.",
- name: "Bamboo Kingdom",
- onStart(pokemon) {
- this.boost({def: 1, spd: 1}, pokemon);
- },
- onModifyPriority(priority, pokemon, target, move) {
- if (move?.category !== 'Status') return -7;
- },
- gen: 8,
- },
-
- // Kipkluif
- degenerator: {
- desc: "While this Pokemon is active, foes that switch out lose 1/3 of their maximum HP, rounded down. This damage will never cause a Pokemon to faint, and will instead leave them at 1 HP.",
- shortDesc: "While this Pokemon is active, foes that switch out lose 1/3 of their maximum HP.",
- onStart(pokemon) {
- pokemon.side.foe.addSideCondition('degeneratormod', pokemon);
- const data = pokemon.side.foe.getSideConditionData('degeneratormod');
- if (!data.sources) {
- data.sources = [];
- }
- data.sources.push(pokemon);
- },
- onEnd(pokemon) {
- pokemon.side.foe.removeSideCondition('degeneratormod');
- },
- name: "Degenerator",
- gen: 8,
- },
-
- // Lionyx
- tension: {
- desc: "On switch-in, the Pokemon builds up tension, making the next attack always hit and always be a critical hit.",
- shortDesc: "On switch-in, the Pokemon's next attack will always be a critical hit and will always hit.",
- name: "Tension",
- onStart(pokemon) {
- this.add('-ability', pokemon, 'Tension');
- pokemon.addVolatile('tension');
- },
- condition: {
- onStart(pokemon, source, effect) {
- if (effect && (['imposter', 'psychup', 'transform'].includes(effect.id))) {
- this.add('-start', pokemon, 'move: Tension', '[silent]');
- } else {
- this.add('-start', pokemon, 'move: Tension');
- }
- this.add("-message", `${pokemon.name} has built up tension!`);
- },
- onModifyCritRatio(critRatio) {
- return 5;
- },
- onAnyInvulnerability(target, source, move) {
- if (move && (source === this.effectState.target || target === this.effectState.target)) return 0;
- },
- onSourceAccuracy(accuracy) {
- return true;
- },
- onAfterMove(pokemon, source) {
- pokemon.removeVolatile('tension');
- },
- onEnd(pokemon) {
- this.add('-end', pokemon, 'move: Tension', '[silent]');
- },
- },
- gen: 8,
- },
-
- // LittEleven
- darkroyalty: {
- desc: "While this Pokemon is active, priority moves from opposing Pokemon targeted at allies are prevented from having an effect. Dark-type attacks used by this Pokemon have their power multiplied by 1.2.",
- shortDesc: "Immune to priority. Dark-type attacks have 1.2x power.",
- onFoeTryMove(target, source, move) {
- const targetAllExceptions = ['perishsong', 'flowershield', 'rototiller'];
- if (move.target === 'foeSide' || (move.target === 'all' && !targetAllExceptions.includes(move.id))) {
- return;
- }
-
- const dazzlingHolder = this.effectState.target;
- if ((source.isAlly(dazzlingHolder) || move.target === 'all') && move.priority > 0.1) {
- this.attrLastMove('[still]');
- this.add('-ability', dazzlingHolder, 'Dark Royalty');
- this.add('cant', target, move, '[of] ' + dazzlingHolder);
- return false;
- }
- },
- onAllyBasePower(basePower, attacker, defender, move) {
- if (move.type === 'Dark') {
- this.debug('Dark Royalty boost');
- return this.chainModify(1.2);
- }
- },
- name: "Dark Royalty",
- },
-
- // Lunala
- magichat: {
- desc: "This Pokemon can only be damaged by direct attacks. This Pokemon blocks certain status moves and instead uses the move against the original user.",
- shortDesc: "Magic Guard + Magic Bounce.",
- onDamage(damage, target, source, effect) {
- if (effect.id === 'heavyhailstorm') return;
- if (effect.effectType !== 'Move') {
- if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name);
- return false;
- }
- },
- onTryHitPriority: 1,
- onTryHit(target, source, move) {
- if (target === source || move.hasBounced || !move.flags['reflectable']) {
- return;
- }
- const newMove = this.dex.getActiveMove(move.id);
- newMove.hasBounced = true;
- newMove.pranksterBoosted = false;
- this.add('-ability', target, 'Magic Hat');
- this.actions.useMove(newMove, target, source);
- return null;
- },
- onAllyTryHitSide(target, source, move) {
- if (target.isAlly(source) || move.hasBounced || !move.flags['reflectable']) {
- return;
- }
- const newMove = this.dex.getActiveMove(move.id);
- newMove.hasBounced = true;
- newMove.pranksterBoosted = false;
- this.add('-ability', target, 'Magic Hat');
- this.actions.useMove(newMove, this.effectState.target, source);
- return null;
- },
- condition: {
- duration: 1,
- },
- name: "Magic Hat",
- gen: 8,
- },
-
- // Mad Monty ¾°
- petrichor: {
- desc: "On switch-in, this Pokemon summons Rain Dance. If Rain Dance or Heavy Rain is active, this Pokemon's Electric-type moves have 1.2x power.",
- shortDesc: "Summons rain. Electric-type moves have 1.2x power in rain.",
- name: "Petrichor",
- onStart(source) {
- this.field.setWeather('raindance');
- },
- onBasePowerPriority: 23,
- onBasePower(basePower, pokemon, target, move) {
- if (move.type === 'Electric' && this.field.getWeather().id === 'raindance') {
- return this.chainModify([4915, 4096]);
- }
- },
- },
-
- // Marshmallon
- stubbornness: {
- desc: "this Pokemon does not take recoil damage. The first time an opposing Pokemon boosts a stat each time this Pokemon is active, this Pokemon's Attack, Defense, and Special Defense are raised by 1 stage; each time the opponent boosts after this, this Pokemon's Attack is boosted by 1 stage. Activation of opposing Stubbornness will not activate Stubbornness.",
- shortDesc: "Rock Head + when foe first boosts, Atk/Def/SpD+1. Further foe boosts=+1 Atk.",
- name: "Stubbornness",
- onDamage(damage, target, source, effect) {
- if (effect.id === 'recoil') {
- if (!this.activeMove) throw new Error("Battle.activeMove is null");
- if (this.activeMove.id !== 'struggle') return null;
- }
- },
- onSwitchOut(pokemon) {
- if (this.effectState.happened) delete this.effectState.happened;
- },
- onFoeAfterBoost(boost, target, source, effect) {
- const pokemon = target.side.foe.active[0];
- let success = false;
- let i: BoostID;
- for (i in boost) {
- if (boost[i]! > 0) {
- success = true;
- }
- }
- // Infinite Loop preventer
- if (effect?.name === 'Stubbornness') return;
- if (success) {
- if (!this.effectState.happened) {
- this.boost({atk: 1, def: 1, spd: 1}, pokemon);
- this.effectState.happened = true;
- } else {
- this.boost({atk: 1}, pokemon);
- }
- }
- },
- gen: 8,
- },
-
- // Mitsuki
- photosynthesis: {
- desc: "On switch-in, this Pokemon summons Sunny Day. If Sunny Day is active and this Pokemon is not holding Utility Umbrella, this Pokemon's Speed is doubled.",
- shortDesc: "Drought + Chlorophyll",
- name: "Photosynthesis",
- onStart(source) {
- for (const action of this.queue) {
- if (action.choice === 'runPrimal' && action.pokemon === source && source.species.id === 'groudon') return;
- if (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break;
- }
- this.field.setWeather('sunnyday');
- },
- onModifySpe(spe, pokemon) {
- if (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) {
- return this.chainModify(2);
- }
- },
- gen: 8,
- },
-
- // n10siT
- greedymagician: {
- desc: "This Pokemon steals the item off a Pokemon it hits with an attack. If this Pokemon already has an item, it is replaced with the stolen item. This ability does not affect Doom Desire and Future Sight.",
- shortDesc: "Steals item from foe on attack; replace current item with stolen item.",
- name: "Greedy Magician",
- onSourceHit(target, source, move) {
- if (!move || !target) return;
- if (target !== source && move.category !== 'Status') {
- const yourItem = target.takeItem(source);
- if (!yourItem) return;
- if (!source.setItem(yourItem)) {
- target.item = yourItem.id;
- return;
- }
- this.add('-item', source, yourItem, '[from] ability: Greedy Magician', '[of] ' + source);
- }
- },
- gen: 8,
- },
-
- // Nol
- burningsoul: {
- desc: "On switch-in, this Pokemon summons Sunny Day. If this Pokemon is at full HP, it survives one hit with at least 1 HP. OHKO moves fail when used against this Pokemon.",
- shortDesc: "Drought + Sturdy.",
- onStart(source) {
- this.field.setWeather('sunnyday');
- },
- onTryHit(pokemon, target, move) {
- if (move.ohko) {
- this.add('-immune', pokemon, '[from] ability: Burning Soul');
- return null;
- }
- },
- onDamagePriority: -100,
- onDamage(damage, target, source, effect) {
- if (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') {
- this.add('-ability', target, 'Burning Soul');
- return target.hp - 1;
- }
- },
- name: "Burning Soul",
- gen: 8,
- },
-
- // Notater517
- lastminutelag: {
- desc: "This Pokemon applies the Recharge status to the opposing Pokemon if this Pokemon needs to recharge. If this Pokemon KOs an opposing Pokemon with a recharge move, then the user does not need to recharge.",
- shortDesc: "Gives Recharge to the target if this Pokemon has it. KO: No recharge.",
- onModifyMove(move, pokemon, target) {
- if (move.self?.volatileStatus === 'mustrecharge') {
- if (!move.volatileStatus) {
- move.volatileStatus = 'mustrecharge';
- } else {
- if (!move.secondaries) move.secondaries = [];
- move.secondaries.push({chance: 100, volatileStatus: 'mustrecharge'});
- }
- }
- },
- onAfterMoveSecondarySelf(pokemon, target, move) {
- if (!target || target.fainted || target.hp <= 0) {
- if (pokemon.volatiles['mustrecharge']) {
- this.add('-ability', pokemon, 'Last Minute Lag');
- this.add('-end', pokemon, 'mustrecharge');
- delete pokemon.volatiles['mustrecharge'];
- this.hint('It may look like this Pokemon is going to recharge next turn, but it will not recharge.');
- }
- }
- },
- name: "Last-Minute Lag",
- gen: 8,
- },
-
- // nui
- conditionoverride: {
- desc: "This Pokemon can attract opponents regardless of gender. Pokemon that are attracted have their Special Defense stat reduced by 25%.",
- shortDesc: "Attracts anyone. Attracted Pokemon have SpD reduced by 25%.",
- // See conditions.ts for implementation
- name: "Condition Override",
- gen: 8,
- },
-
- // pants
- ghostspores: {
- desc: "This Pokemon ignores the foe's stat boosts. On switch-out, this Pokemon regenerates 1/3 HP, rounded down. If this Pokemon is hit by an attack, Leech Seed is applied to the foe. If this Pokemon is KOed, Curse is applied to the foe.",
- shortDesc: "Unaware + Regenerator. If hit, foe is Leech Seeded. If KOed, foe is Cursed.",
- name: 'Ghost Spores',
- onDamagingHit(damage, target, source, move) {
- if (!target.hp) {
- source.addVolatile('curse', target);
- } else {
- source.addVolatile('leechseed', target);
- }
- },
- onAnyModifyBoost(boosts, pokemon) {
- const unawareUser = this.effectState.target;
- if (unawareUser === pokemon) return;
- if (unawareUser === this.activePokemon && pokemon === this.activeTarget) {
- boosts['def'] = 0;
- boosts['spd'] = 0;
- boosts['evasion'] = 0;
- }
- if (pokemon === this.activePokemon && unawareUser === this.activeTarget) {
- boosts['atk'] = 0;
- boosts['def'] = 0;
- boosts['spa'] = 0;
- boosts['accuracy'] = 0;
- }
- },
- onSwitchOut(pokemon) {
- pokemon.heal(pokemon.baseMaxhp / 3);
- },
- },
-
- // PartMan
- hecatomb: {
- desc: "This Pokemon's Speed is raised by 1 stage if it attacks and knocks out another Pokemon. If the Pokemon is Chandelure and is not shiny, it changes its set.",
- shortDesc: "Spe +1 on KOing foe. Chandelure: changes sets.",
- name: 'Hecatomb',
- onSourceAfterFaint(length, target, source, effect) {
- if (effect && effect.effectType === 'Move') {
- this.boost({spe: length}, source);
- if (source.species.baseSpecies !== 'Chandelure') return;
- if (source.set.shiny) return;
- source.m.nowShiny = true;
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|THE LIGHT! IT BURNS!`);
- changeSet(this, source, ssbSets['PartMan-Shiny']);
- }
- },
- gen: 8,
- },
-
- // peapod
- stealthblack: {
- desc: "No competitive use.",
- name: 'Stealth Black',
- gen: 8,
- },
-
- // Perish Song
- soupsipper: {
- desc: "This Pokemon is immune to Grass- and Water-type moves, restores 1/4 of its maximum HP, rounded down, when hit by these types, and boosts its Attack by 1 stage when hit by these types.",
- shortDesc: "Immune to Water and Grass moves, heals 1/4 HP and gains +1 Atk when hit by them.",
- onTryHit(target, source, move) {
- if (target !== source && ['Water', 'Grass'].includes(move.type)) {
- let success = false;
- if (this.heal(target.baseMaxhp / 4)) success = true;
- if (this.boost({atk: 1})) success = true;
- if (!success) {
- this.add('-immune', target, '[from] ability: Soup Sipper');
- }
- return null;
- }
- },
- name: "Soup Sipper",
- gen: 8,
- },
-
- // phiwings99
- plausibledeniability: {
- desc: "This Pokemon's Status moves have priority raised by 1, but Dark-types are immune. Additionally, This Pokemon ignores other Pokemon's Attack, Special Attack, and accuracy stat stages when taking damage, and ignores other Pokemon's Defense, Special Defense, and evasiveness stat stages when dealing damage.",
- shortDesc: "Unaware + Prankster. Dark-types still immune to Prankster moves.",
- name: "Plausible Deniability",
- onAnyModifyBoost(boosts, pokemon) {
- const unawareUser = this.effectState.target;
- if (unawareUser === pokemon) return;
- if (unawareUser === this.activePokemon && pokemon === this.activeTarget) {
- boosts['def'] = 0;
- boosts['spd'] = 0;
- boosts['evasion'] = 0;
- }
- if (pokemon === this.activePokemon && unawareUser === this.activeTarget) {
- boosts['atk'] = 0;
- boosts['def'] = 0;
- boosts['spa'] = 0;
- boosts['spd'] = 0;
- boosts['accuracy'] = 0;
- }
- },
- onModifyPriority(priority, pokemon, target, move) {
- if (move?.category === 'Status') {
- move.pranksterBoosted = true;
- return priority + 1;
- }
- },
- gen: 8,
- },
-
- // piloswine gripado
- foreverwinternights: {
- desc: "On switch-in, this Pokemon summons Winter Hail. Winter Hail is hail that also lowers the Speed of non-Ice-type Pokemon by 50%. This weather remains in effect until this Ability is no longer active for any Pokemon, or the weather is changed by Delta Stream, Desolate Land, or Primordial Sea.",
- shortDesc: "Sets permahail until this Pokemon switches out. Non-Ice: 1/2 Speed",
- onStart(source) {
- this.field.setWeather('winterhail');
- },
- onAnySetWeather(target, source, weather) {
- if (this.field.getWeather().id === 'winterhail' && !STRONG_WEATHERS.includes(weather.id)) return false;
- },
- onEnd(pokemon) {
- if (this.field.weatherState.source !== pokemon) return;
- for (const target of this.getAllActive()) {
- if (target === pokemon) continue;
- if (target.hasAbility('winterhail')) {
- this.field.weatherState.source = target;
- return;
- }
- }
- this.field.clearWeather();
- },
- name: "Forever Winter Nights",
- gen: 8,
- },
-
- // PiraTe Princess
- wildmagicsurge: {
- desc: "Randomly changes this Pokemon's type at the end of every turn to the type of one of its moves; same-type attack bonus (STAB) is 2 instead of 1.5.",
- shortDesc: "Adaptability + Randomly changes to the type of one of its moves every turn.",
- name: "Wild Magic Surge",
- onModifyMove(move) {
- move.stab = 2;
- },
- onResidual(pokemon) {
- if (!pokemon.hp) return;
- const types = pokemon.moveSlots.map(slot => this.dex.moves.get(slot.id).type);
- const type = types.length ? this.sample(types) : '???';
- if (this.dex.types.isName(type) && pokemon.setType(type)) {
- this.add('-ability', pokemon, 'Wild Magic Surge');
- this.add('-start', pokemon, 'typechange', type);
- }
- },
- gen: 8,
- },
-
- // Psynergy
- supernova: {
- desc: "On switch-in, if total positive boosts - total negative boosts ≥ 8, both Pokemon faint.",
- onStart(source) {
- let result = 0;
- const pokemon = this.getAllActive();
- for (const poke of pokemon) {
- result += Object.values(poke.boosts).reduce((total, x) => total + x);
- }
- if (result < 8) return;
- this.add('-ability', source, 'Supernova');
- for (const x of pokemon) {
- this.add('-anim', x, 'Explosion', x);
- x.faint();
- }
- },
- name: "Supernova",
- gen: 8,
- },
-
- // ptoad
- swampysurge: {
- desc: "On switch-in, this Pokemon summons Swampy Terrain. Swampy Terrain halves the power of Electric-, Grass-, and Ice-type moves used by grounded Pokemon and heals grounded Water- and Ground-types by 1/16 of their maximum HP, rounded down, each turn.",
- shortDesc: "5 turns: Grounded: 1/2 Elec/Grass/Ice power, +1/16 HP/turn for Water or Ground.",
- onStart(source) {
- this.field.setTerrain('swampyterrain');
- },
- name: "Swampy Surge",
- gen: 8,
- },
-
- // Rach
- burnitdown: {
- desc: "On switch-in, this Pokemon lowers the foe's higher offensive stat.",
- shortDesc: "Lower the foe's higher offensive stat.",
- onStart(pokemon) {
- let totalatk = 0;
- let totalspa = 0;
- for (const target of pokemon.foes()) {
- totalatk += target.getStat('atk', false, true);
- totalspa += target.getStat('spa', false, true);
- }
- for (const target of pokemon.foes()) {
- this.add('-ability', pokemon, 'BURN IT DOWN!');
- if (totalatk && totalatk >= totalspa) {
- this.boost({atk: -1}, target, pokemon, null, true);
- } else if (totalspa) {
- this.boost({spa: -1}, target, pokemon, null, true);
- }
- }
- },
- name: "BURN IT DOWN!",
- gen: 8,
- },
-
- // Rage
- inversionsurge: {
- desc: "On switch-in, this Pokemon summons Inversion Terrain. While Inversion Terrain is active, type effectiveness for all Pokemon on the field is inverted, and paralyzed Pokemon have doubled, instead of halved, Speed.",
- shortDesc: "Summons Inversion Terrain; 5 turns: Inverse Battle, par: 2x Spe.",
- onStart(source) {
- this.field.setTerrain('inversionterrain');
- },
- name: "Inversion Surge",
- gen: 8,
- },
-
- // Raihan Kibana
- royalcoat: {
- desc: "If Sandstorm is active, this Pokemon's Speed is doubled and its Special Defense is multiplied by 1.5. This Pokemon takes no damage from Sandstorm.",
- shortDesc: "If Sandstorm, Speed x2 and SpD x1.5; immunity to Sandstorm.",
- name: "Royal Coat",
- onModifySpe(spe, pokemon) {
- if (this.field.isWeather('sandstorm')) {
- return this.chainModify(2);
- }
- },
- onModifySpD(spd, pokemon) {
- if (this.field.isWeather('sandstorm')) {
- return this.chainModify(1.5);
- }
- },
- onImmunity(type, pokemon) {
- if (type === 'sandstorm') return false;
- },
- gen: 8,
- },
-
- // RavioliQueen
- phantomplane: {
- desc: "On switch-in, this Pokemon summons Pitch Black Terrain. While Pitch Black Terrain is active, all non-Ghost-type Pokemon take damage equal to 1/16 of their max HP, rounded down, at the end of each turn.",
- shortDesc: "Summons Pitch Black Terrain, which damages non-Ghosts by 1/16 per turn.",
- onStart(source) {
- this.field.setTerrain('pitchblackterrain');
- },
- name: "Phantom Plane",
- gen: 8,
- },
-
- // Robb576
- thenumbersgame: {
- desc: "If this Pokemon is a forme of Necrozma, its forme changes on switch-in depending on the number of unfainted Pokemon on the user's team: Necrozma-Dusk-Mane if 3 or fewer Pokemon and Necrozma-Dawn-Wings was sent out already; Necrozma-Ultra if it is the last Pokemon left on the team and Necrozma-Dusk-Mane was sent out already.",
- shortDesc: "Changes forme on switch-in depending on # of remaining Pokemon on user's team.",
- name: "The Numbers Game",
- isPermanent: true,
- onStart(target) {
- if (target.baseSpecies.baseSpecies !== 'Necrozma' || target.transformed) return;
- if (target.side.pokemonLeft <= 3) {
- if (target.species.name === 'Necrozma-Dusk-Mane' && target.side.pokemonLeft === 1 && target.m.flag2) {
- changeSet(this, target, ssbSets['Robb576-Ultra']);
- } else if (target.species.name === "Necrozma-Dawn-Wings" && target.m.flag1) {
- changeSet(this, target, ssbSets['Robb576-Dusk-Mane']);
- target.m.flag2 = true;
- }
- }
- target.m.flag1 = true;
- },
- gen: 8,
- },
-
- // Sectonia
- royalaura: {
- desc: "If this Pokemon is the target of an opposing Pokemon's move, that move loses one additional PP. Moves used by this Pokemon only use 0.5 PP.",
- shortDesc: "Pressure, and this Pokemon uses 0.5 PP per move.",
- name: "Royal Aura",
- onStart(pokemon) {
- this.add('-ability', pokemon, 'Royal Aura');
- },
- onDeductPP(target, source) {
- if (target.isAlly(source)) return;
- return 1;
- },
- onTryMove(pokemon, target, move) {
- const moveData = pokemon.getMoveData(move.id);
- if (!moveData || moveData.pp < 0.5) return;
- // Lost 1 PP due to move usage, restore 0.5 PP to make it so that only 0.5 PP
- // would be used.
- moveData.pp += 0.5;
- },
- gen: 8,
- },
-
- // Segmr
- skilldrain: {
- desc: "While this Pokemon is active, no moves will trigger their secondary effects, and moves that cause the user to switch out will no longer do so.",
- shortDesc: "While active: no secondary effects, moves can't switch out.",
- name: "Skill Drain",
- onAnyModifyMove(move) {
- delete move.secondaries;
- },
- // afterSecondarySelf and switch nullifying handled in ssb/scripts.ts
- gen: 8,
- },
-
- // sejesensei
- trashconsumer: {
- desc: "This Pokemon is immune to Poison-type moves and restores 1/4 of its maximum HP, rounded down, when hit by a Poison-type move. Pokemon making contact with this Pokemon lose 1/8 of their maximum HP, rounded down.",
- shortDesc: "Poison Absorb + Rough Skin",
- name: "Trash Consumer",
- onTryHit(target, source, move) {
- if (target !== source && move.type === 'Poison') {
- if (!this.heal(target.baseMaxhp / 4)) {
- this.add('-immune', target, '[from] ability: Trash Consumer');
- }
- return null;
- }
- },
- onDamagingHitOrder: 1,
- onDamagingHit(damage, target, source, move) {
- if (this.checkMoveMakesContact(move, source, target, true)) {
- this.damage(source.baseMaxhp / 8, source, target);
- }
- },
- gen: 8,
- },
-
- // Shadecession
- shadydeal: {
- desc: "On switch-in, this Pokemon boosts a random stat other than Special Attack by 1 stage and gains 2 random type immunities that are displayed to the opponent.",
- shortDesc: "On switch-in, gains random +1 to non-SpA, 2 random immunities.",
- onStart(pokemon) {
- const stats: BoostID[] = [];
- let stat: BoostID;
- for (stat in pokemon.boosts) {
- const noBoost: string[] = ['accuracy', 'evasion', 'spa'];
- if (!noBoost.includes(stat) && pokemon.boosts[stat] < 6) {
- stats.push(stat);
- }
- }
- if (stats.length) {
- const randomStat = this.sample(stats);
- const boost: SparseBoostsTable = {};
- boost[randomStat] = 1;
- this.boost(boost);
- }
- if (this.effectState.immunities) return;
- const typeList = this.dex.types.names();
- const firstTypeIndex = this.random(typeList.length);
- const secondType = this.sample(typeList.slice(0, firstTypeIndex).concat(typeList.slice(firstTypeIndex + 1)));
- this.effectState.immunities = [typeList[firstTypeIndex], secondType];
- this.add('-start', pokemon, `${this.effectState.immunities[0]} Immunity`, '[silent]');
- this.add('-start', pokemon, `${this.effectState.immunities[1]} Immunity`, '[silent]');
- this.add("-message", `${pokemon.name} is now immune to ${this.effectState.immunities[0]} and ${this.effectState.immunities[1]} type attacks!`);
- },
- onTryHit(target, source, move) {
- if (target !== source && this.effectState.immunities?.includes(move.type)) {
- this.add('-immune', target, '[from] ability: Shady Deal');
- return null;
- }
- },
- onEnd(pokemon) {
- if (!this.effectState.immunities) return;
- this.add('-end', pokemon, `${this.effectState.immunities[0]} Immunity`, '[silent]');
- this.add('-end', pokemon, `${this.effectState.immunities[1]} Immunity`, '[silent]');
- delete this.effectState.immunities;
- },
- name: "Shady Deal",
- gen: 8,
- },
-
- // Soft Flex
- eyeofthestorm: {
- name: "Eye of the Storm",
- desc: "On switch-in, this Pokemon summons Rain Dance and Tempest Terrain. While Tempest Terrain is active, Electric-type Pokemon are healed by 1/16 of their maximum HP, rounded down, at the end of each turn, and Flying- and Steel-type Pokemon lose 1/16 of their maximum HP, rounded down, at the end of each turn. If the Flying- or Steel-type Pokemon is also Electric-type, they only receive the healing.",
- shortDesc: "5 turns: Rain, +1/16 HP/turn to Elec, -1/16/turn to Fly/Steel.",
- onStart(source) {
- this.field.setWeather('raindance', source);
- this.field.setTerrain('tempestterrain', source);
- },
- },
- // Spandan
- hackedcorrosion: {
- desc: "This Pokemon ignores other Pokemon's stat stages when taking or doing damage. This Pokemon can poison or badly poison Pokemon regardless of their typing.",
- shortDesc: "Unaware + Corrosion.",
- onAnyModifyBoost(boosts, pokemon) {
- const unawareUser = this.effectState.target;
- if (unawareUser === pokemon) return;
- if (unawareUser === this.activePokemon && pokemon === this.activeTarget) {
- boosts['def'] = 0;
- boosts['spd'] = 0;
- boosts['evasion'] = 0;
- }
- if (pokemon === this.activePokemon && unawareUser === this.activeTarget) {
- boosts['atk'] = 0;
- boosts['def'] = 0;
- boosts['spa'] = 0;
- boosts['spd'] = 0;
- boosts['accuracy'] = 0;
- }
- },
- name: "Hacked Corrosion",
- },
-
- // Struchni
- overaskedclause: {
- desc: "If this Pokemon is an Aggron and is hit by a move that is not very effective, this Pokemon becomes Aggron-Mega and its Attack is boosted by 1 stage.",
- shortDesc: "Aggron: If hit by resisted move, Mega Evolve and gain +1 Atk.",
- name: "Overasked Clause",
- isPermanent: true,
- onHit(target, source, move) {
- if (target.getMoveHitData(move).typeMod < 0) {
- if (!target.hp) return;
- if (target.species.id.includes('aggron') && !target.illusion && !target.transformed) {
- this.boost({atk: 1}, target);
- if (target.species.name !== 'Aggron') return;
- this.actions.runMegaEvo(target);
- }
- }
- },
- gen: 8,
- },
-
- // Teclis
- fieryfur: {
- name: "Fiery Fur",
- desc: "If this Pokemon is at full HP, damage taken from attacks is halved.",
- onSourceModifyDamage(damage, source, target, move) {
- if (target.hp >= target.maxhp) {
- this.debug('Fiery Fur weaken');
- return this.chainModify(0.5);
- }
- },
- },
-
- // temp
- chargedup: {
- desc: "If this Pokemon has a negative stat boost at -2 or lower, this Pokemon's negative stat boosts are cleared.",
- shortDesc: "Resets negative stat boosts if there is one at -2 or lower.",
- name: "Charged Up",
- onUpdate(pokemon) {
- let activate = false;
- const boosts: SparseBoostsTable = {};
- let i: BoostID;
- for (i in pokemon.boosts) {
- if (pokemon.boosts[i] <= -2) {
- activate = true;
- boosts[i] = 0;
- }
- }
- if (activate) {
- pokemon.setBoost(boosts);
- this.add('-activate', pokemon, 'ability: Charged Up');
- this.add('-clearnegativeboost', pokemon);
- }
- },
- gen: 8,
- },
-
- // tiki
- truegrit: {
- desc: "This Pokemon receives 1/2 damage from special attacks. This Pokemon ignores other Pokemon's Attack, Special Attack, and accuracy stat stages when taking damage, and ignores other Pokemon's Defense, Special Defense, and evasiveness stat stages when dealing damage.",
- shortDesc: "Takes 1/2 damage from special moves and ignores boosts.",
- name: "True Grit",
- onSourceModifyDamage(damage, source, target, move) {
- if (move.category === 'Special') {
- return this.chainModify(0.5);
- }
- },
- onAnyModifyBoost(boosts, pokemon) {
- const unawareUser = this.effectState.target;
- if (unawareUser === pokemon) return;
- if (unawareUser === this.activePokemon && pokemon === this.activeTarget) {
- boosts['def'] = 0;
- boosts['spd'] = 0;
- boosts['evasion'] = 0;
- }
- if (pokemon === this.activePokemon && unawareUser === this.activeTarget) {
- boosts['atk'] = 0;
- boosts['def'] = 0;
- boosts['spa'] = 0;
- boosts['spd'] = 0;
- boosts['accuracy'] = 0;
- }
- },
- gen: 8,
- },
-
- // Trickster
- trillionageroots: {
- desc: "This Pokemon applies Leech Seed to the opposing Pokemon when hit with an attacking move. If this Pokemon is at full HP, it survives one hit with at least 1 HP. OHKO moves fail when used against this Pokemon.",
- shortDesc: "Sturdy + apply Leech Seed when hit by foe.",
- onTryHit(pokemon, target, move) {
- if (move.ohko) {
- this.add('-immune', pokemon, '[from] ability: Trillionage Roots');
- return null;
- }
- },
- onDamagePriority: -100,
- onDamage(damage, target, source, effect) {
- if (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') {
- this.add('-ability', target, 'Trillionage Roots');
- return target.hp - 1;
- }
- },
- onDamagingHit(damage, target, source, move) {
- if (source.volatiles['leechseed']) return;
- if (!move.flags['futuremove']) {
- source.addVolatile('leechseed', this.effectState.target);
- }
- },
- name: "Trillionage Roots",
- gen: 8,
- },
-
- // Volco
- speedrunning: {
- desc: "This Pokemon's Special Attack is raised by 1 stage when another Pokemon faints. Moves used by this Pokemon that are 60 Base Power or lower gain an additional 25 Base Power. No moves can defrost a frozen Pokemon while this Pokemon is active. However, using a move that would defrost will still go through freeze.",
- shortDesc: "Soul Heart + Weak moves get +25 BP. Moves can't defrost. Defrost moves go thru frz.",
- onAnyFaintPriority: 1,
- onAnyFaint() {
- this.boost({spa: 1}, this.effectState.target);
- },
- onAnyModifyMove(move, pokemon) {
- if (move.thawsTarget) {
- delete move.thawsTarget;
- }
- if (move.flags["defrost"]) {
- delete move.flags["defrost"];
- }
- },
- onBasePowerPriority: 21,
- onBasePower(basePower, pokemon, target, move) {
- if (move.basePower <= 60) return basePower + 25;
- },
- name: "Speedrunning",
- gen: 8,
- },
-
- // Vexen
- aquilasblessing: {
- desc: "This Pokemon's attacks with secondary effects have their power multiplied by 1.3, but the secondary effects are removed. If this Pokemon gets hit by a damaging Fire type move, its Defense and Special Defense get raised by 1 stage.",
- shortDesc: "Sheer Force + when hit with Fire move: +1 Def/SpD.",
- onModifyMove(move, pokemon) {
- if (move.secondaries) {
- delete move.secondaries;
- // Technically not a secondary effect, but it is negated
- if (move.id === 'clangoroussoulblaze') delete move.selfBoost;
- // Actual negation of `AfterMoveSecondary` effects implemented in scripts.js
- move.hasSheerForce = true;
- }
- },
- onBasePowerPriority: 21,
- onBasePower(basePower, pokemon, target, move) {
- if (move.hasSheerForce) return this.chainModify([5325, 4096]);
- },
- onDamagingHit(damage, target, source, move) {
- if (move.type === 'Fire') {
- this.boost({def: 1, spd: 1});
- }
- },
- name: "Aquila's Blessing",
- gen: 8,
- },
-
- // vooper
- qigong: {
- desc: "This Pokemon's Defense is doubled, and it receives 1/2 damage from special attacks.",
- onModifyDefPriority: 6,
- onModifyDef(def) {
- return this.chainModify(2);
- },
- onSourceModifyDamage(damage, source, target, move) {
- if (move.category === 'Special') {
- return this.chainModify(0.5);
- }
- },
- name: "Qi-Gong",
- gen: 8,
- },
-
- // yuki
- combattraining: {
- desc: "If this Pokemon is a Cosplay Pikachu forme, the first hit it takes in battle deals 0 neutral damage. Confusion damage also breaks the immunity.",
- shortDesc: "(Pikachu-Cosplay only) First hit deals 0 damage.",
- isPermanent: true,
- onDamagePriority: 1,
- onDamage(damage, target, source, effect) {
- const cosplayFormes = [
- 'pikachucosplay', 'pikachuphd', 'pikachulibre', 'pikachupopstar', 'pikachurockstar', 'pikachubelle',
- ];
- if (
- effect?.effectType === 'Move' &&
- cosplayFormes.includes(target.species.id) && !target.transformed &&
- !this.effectState.busted
- ) {
- this.add('-activate', target, 'ability: Combat Training');
- this.effectState.busted = true;
- return 0;
- }
- },
- onCriticalHit(target, source, move) {
- if (!target) return;
- const cosplayFormes = [
- 'pikachucosplay', 'pikachuphd', 'pikachulibre', 'pikachupopstar', 'pikachurockstar', 'pikachubelle',
- ];
- if (!cosplayFormes.includes(target.species.id) || target.transformed) {
- return;
- }
- const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6);
- if (hitSub) return;
-
- if (!target.runImmunity(move.type)) return;
- return false;
- },
- onEffectiveness(typeMod, target, type, move) {
- if (!target) return;
- const cosplayFormes = [
- 'pikachucosplay', 'pikachuphd', 'pikachulibre', 'pikachupopstar', 'pikachurockstar', 'pikachubelle',
- ];
- if (!cosplayFormes.includes(target.species.id) || target.transformed) {
- return;
- }
- const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6);
- if (hitSub) return;
-
- if (!target.runImmunity(move.type)) return;
- return 0;
- },
- name: "Combat Training",
- gen: 8,
- },
- // Modified Illusion to support SSB volatiles
- illusion: {
- inherit: true,
- onEnd(pokemon) {
- if (pokemon.illusion) {
- this.debug('illusion cleared');
- let disguisedAs = this.toID(pokemon.illusion.name);
- pokemon.illusion = null;
- const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) +
- (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : '');
- this.add('replace', pokemon, details);
- this.add('-end', pokemon, 'Illusion');
- // Handle users whose names match a species
- if (this.dex.species.get(disguisedAs).exists) disguisedAs += 'user';
- if (pokemon.volatiles[disguisedAs]) {
- pokemon.removeVolatile(disguisedAs);
- }
- if (!pokemon.volatiles[this.toID(pokemon.name)]) {
- const status = this.dex.conditions.get(this.toID(pokemon.name));
- if (status?.exists) {
- pokemon.addVolatile(this.toID(pokemon.name), pokemon);
- }
- }
- }
- },
- },
-
- // Modified various abilities to support Alpha's move & pilo's abiility
- deltastream: {
- inherit: true,
- onAnySetWeather(target, source, weather) {
- if (this.field.getWeather().id === 'deltastream' && !STRONG_WEATHERS.includes(weather.id)) return false;
- },
- },
- desolateland: {
- inherit: true,
- onAnySetWeather(target, source, weather) {
- if (this.field.getWeather().id === 'desolateland' && !STRONG_WEATHERS.includes(weather.id)) return false;
- },
- },
- primordialsea: {
- inherit: true,
- onAnySetWeather(target, source, weather) {
- if (this.field.getWeather().id === 'primordialsea' && !STRONG_WEATHERS.includes(weather.id)) return false;
- },
- },
- forecast: {
- inherit: true,
- onUpdate(pokemon) {
- if (pokemon.baseSpecies.baseSpecies !== 'Castform' || pokemon.transformed) return;
- let forme = null;
- switch (pokemon.effectiveWeather()) {
- case 'sunnyday':
- case 'desolateland':
- if (pokemon.species.id !== 'castformsunny') forme = 'Castform-Sunny';
- break;
- case 'raindance':
- case 'primordialsea':
- if (pokemon.species.id !== 'castformrainy') forme = 'Castform-Rainy';
- break;
- case 'winterhail':
- case 'heavyhailstorm':
- case 'hail':
- if (pokemon.species.id !== 'castformsnowy') forme = 'Castform-Snowy';
- break;
- default:
- if (pokemon.species.id !== 'castform') forme = 'Castform';
- break;
- }
- if (pokemon.isActive && forme) {
- pokemon.formeChange(forme, this.effect, false, '[msg]');
- }
- },
- },
- icebody: {
- inherit: true,
- desc: "If Hail or Heavy Hailstorm is active, this Pokemon restores 1/16 of its maximum HP, rounded down, at the end of each turn. This Pokemon takes no damage from Hail or Heavy Hailstorm.",
- shortDesc: "Hail-like weather active: heals 1/16 max HP each turn; immunity to Hail-like weather.",
- onWeather(target, source, effect) {
- if (['heavyhailstorm', 'hail', 'winterhail'].includes(effect.id)) {
- this.heal(target.baseMaxhp / 16);
- }
- },
- onImmunity(type, pokemon) {
- if (['heavyhailstorm', 'hail', 'winterhail'].includes(type)) return false;
- },
- },
- iceface: {
- inherit: true,
- desc: "If this Pokemon is an Eiscue, the first physical hit it takes in battle deals 0 neutral damage. Its ice face is then broken and it changes forme to Noice Face. Eiscue regains its Ice Face forme when Hail or Heavy Hailstorm begins or when Eiscue switches in while Hail or Heavy Hailstorm is active. Confusion damage also breaks the ice face.",
- shortDesc: "If Eiscue, first physical hit taken deals 0 damage. Effect is restored in Hail-like weather.",
- onStart(pokemon) {
- if (this.field.isWeather(['heavyhailstorm', 'hail', 'winterhail']) &&
- pokemon.species.id === 'eiscuenoice' && !pokemon.transformed) {
- this.add('-activate', pokemon, 'ability: Ice Face');
- this.effectState.busted = false;
- pokemon.formeChange('Eiscue', this.effect, true);
- }
- },
- onWeatherChange() {
- const pokemon = this.effectState.target;
- if (this.field.isWeather(['heavyhailstorm', 'hail', 'winterhail']) &&
- pokemon.species.id === 'eiscuenoice' && !pokemon.transformed) {
- this.add('-activate', pokemon, 'ability: Ice Face');
- this.effectState.busted = false;
- pokemon.formeChange('Eiscue', this.effect, true);
- }
- },
- },
- slushrush: {
- inherit: true,
- shortDesc: "If a Hail-like weather is active, this Pokemon's Speed is doubled.",
- onModifySpe(spe, pokemon) {
- if (this.field.isWeather(['heavyhailstorm', 'hail', 'winterhail'])) {
- return this.chainModify(2);
- }
- },
- },
- snowcloak: {
- inherit: true,
- desc: "If Heavy Hailstorm, Winter Hail, or Hail is active, this Pokemon's evasiveness is multiplied by 1.25. This Pokemon takes no damage from Heavy Hailstorm or Hail.",
- shortDesc: "If a Hail-like weather is active, 1.25x evasion; immunity to Hail-like weathers.",
- onImmunity(type, pokemon) {
- if (['heavyhailstorm', 'hail', 'winterhail'].includes(type)) return false;
- },
- onModifyAccuracy(accuracy) {
- if (typeof accuracy !== 'number') return;
- if (this.field.isWeather(['heavyhailstorm', 'hail', 'winterhail'])) {
- this.debug('Snow Cloak - decreasing accuracy');
- return accuracy * 0.8;
- }
- },
- },
- // Modified Magic Guard for Alpha
- magicguard: {
- inherit: true,
- shortDesc: "This Pokemon can only be damaged by direct attacks and Heavy Hailstorm.",
- onDamage(damage, target, source, effect) {
- if (effect.id === 'heavyhailstorm') return;
- if (effect.effectType !== 'Move') {
- if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name);
- return false;
- }
- },
- },
- // Modified Unaware for Blaz's move
- unaware: {
- inherit: true,
- onAnyModifyBoost(boosts, pokemon) {
- const unawareUser = this.effectState.target;
- if (unawareUser === pokemon) return;
- if (unawareUser === this.activePokemon && pokemon === this.activeTarget) {
- boosts['def'] = 0;
- boosts['spd'] = 0;
- boosts['evasion'] = 0;
- }
- if (pokemon === this.activePokemon && unawareUser === this.activeTarget) {
- boosts['atk'] = 0;
- boosts['def'] = 0;
- boosts['spa'] = 0;
- boosts['spd'] = 0;
- boosts['accuracy'] = 0;
- }
- },
- },
- // Modified Stakeout for Hubriz to have a failsafe
- stakeout: {
- inherit: true,
- onModifyAtkPriority: 5,
- onModifyAtk(atk, attacker, defender) {
- if (!defender?.activeTurns) {
- this.debug('Stakeout boost');
- return this.chainModify(2);
- }
- },
- onModifySpAPriority: 5,
- onModifySpA(atk, attacker, defender) {
- if (!defender?.activeTurns) {
- this.debug('Stakeout boost');
- return this.chainModify(2);
- }
- },
- },
-};
diff --git a/data/mods/ssb/conditions.ts b/data/mods/ssb/conditions.ts
deleted file mode 100644
index b51de897286d..000000000000
--- a/data/mods/ssb/conditions.ts
+++ /dev/null
@@ -1,2542 +0,0 @@
-import {FS} from '../../../lib';
-import {toID} from '../../../sim/dex-data';
-
-// Similar to User.usergroups. Cannot import here due to users.ts requiring Chat
-// This also acts as a cache, meaning ranks will only update when a hotpatch/restart occurs
-const usergroups: {[userid: string]: string} = {};
-const usergroupData = FS('config/usergroups.csv').readIfExistsSync().split('\n');
-for (const row of usergroupData) {
- if (!toID(row)) continue;
-
- const cells = row.split(',');
- if (cells.length > 3) throw new Error(`Invalid entry when parsing usergroups.csv`);
- usergroups[toID(cells[0])] = cells[1].trim() || ' ';
-}
-
-export function getName(name: string): string {
- const userid = toID(name);
- if (!userid) throw new Error('No/Invalid name passed to getSymbol');
-
- const group = usergroups[userid] || ' ';
- return group + name;
-}
-
-export const Conditions: {[k: string]: ModdedConditionData & {innateName?: string}} = {
- /*
- // Example:
- userid: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Username')}|Switch In Message`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Username')}|Switch Out Message`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Username')}|Faint Message`);
- },
- // Innate effects go here
- },
- IMPORTANT: Obtain the username from getName
- */
- // Please keep statuses organized alphabetically based on staff member name!
- abdelrahman: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Abdelrahman')}|good morning, i'm town`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Abdelrahman')}|brb gonna go lynch scum`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Abdelrahman')}|I CC COP TOWN FAILED`);
- },
- },
- adri: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Adri')}|This time will definitely be the one !`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Adri')}|//afk`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Adri')}|Until next time...`);
- },
- },
- aelita: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aelita')}|The Scyphozoa's absorbing Aelita's memories!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aelita')}|We scared it away but it will be back. We can't let it get ahold of Aelita's memories.`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aelita')}|X.A.N.A. is finally finished for good.`);
- },
- },
- aegii: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('aegii')}|shoot! take a pano~rama~ https://youtu.be/G8GaQdW2wHc`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('aegii')}|${this.sample([`brb, buying albums`, `brb, downloading fancams`, `brb, streaming mvs`, `brb, learning choreos`])}`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('aegii')}|i forgot to stan loona...`);
- },
- },
- aeonic: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aeonic')}|What's bonkin?`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aeonic')}|I am thou, thou art I`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aeonic')}|Guys the emoji movie wasn't __that bad__`);
- },
- },
- aethernum: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aethernum')}|Hlelo ^_^ Lotad is so cute, don't you think? But don't underestimate him!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aethernum')}|Sinking in this sea of possibilities for now...but i'll float back once again!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aethernum')}|Ok, ok, i have procrastinated enough here, time to go ^_^' See ya around!`);
- },
- },
- akir: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Akir')}|hey whats up`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Akir')}|let me get back to you`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Akir')}|ah well maybe next time`);
- },
- },
- alpha: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Alpha')}|eccomi dimmi`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Alpha')}|FRATM FACI FRIDDU`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Alpha')}|caio`);
- },
- },
- andrew: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Andrew')}|/me vents in`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Andrew')}|purple sus`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Andrew')}|tidal otter is impostor! He vented in front of me in admin! Vote him out next!`);
- },
- },
- annika: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Annika')}|The circumstances of one's birth are irrelevant; it is what you do with the gift of life that determines who you are.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Annika')}|I'll be stronger when I'm back ^_^`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Annika')}|oh, I crashed the server again...`);
- },
- },
- aquagtothepast: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('A Quag To The Past')}|Whatever happens, happens.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('A Quag To The Past')}|See you space cowboy...`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('A Quag To The Past')}|You're gonna carry that weight.`);
- },
- },
- arby: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arby')}|Time to win this :)`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arby')}|MSU need a sub`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arby')}|Authhate is real.`);
- },
- },
- archas: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Archas')}|Ready the main batteries, gentlemen! Hit ‘em hard and fast!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Archas')}|Helmsman, full reverse at speed!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Archas')}|They say the captain always goes down with the ship...`);
- },
- },
- arcticblast: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arcticblast')}|words are difficult`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arcticblast')}|oh no`);
- },
- onFaint() {
- if (this.randomChance(1, 100)) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arcticblast')}|get **mished** kid`);
- } else {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arcticblast')}|single battles are bad anyway, why am I here?`);
- }
- },
- },
- awauser: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('awa!')}|awa!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('awa!')}|well, at least i didn't lose the game`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('awa!')}|or did i?`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('awa!')}|awawa?! awa awawawa awawa >:(`);
- },
- },
- beowulf: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Beowulf')}|:^)`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Beowulf')}|/me buzzes`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Beowulf')}|time for my own isekai`);
- },
- onSourceFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Beowulf')}|another one reincarnating into an isekai`);
- },
- },
- biggie: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('biggie')}|gonna take you for a ride`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('biggie')}|mahvel baybee!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('biggie')}|it was all a dream`);
- },
- },
- billo: {
- noCopy: true,
- onStart(source) {
- let activeMon = source.side.foe.active[0].species.name;
- if (!activeMon) activeMon = "Pokemon";
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Billo')}|Your ${activeMon} looks hacked.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Billo')}|Let me inspect your Pokemon, brb`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Billo')}|Yep, definitely hacked.`);
- },
- innateName: "Unaware",
- shortDesc: "This Pokemon ignores other Pokemon's stat stages when taking or doing damage.",
- // Unaware innate
- onAnyModifyBoost(boosts, pokemon) {
- const unawareUser = this.effectState.target;
- if (unawareUser.illusion) return;
- if (unawareUser === pokemon) return;
- if (unawareUser === this.activePokemon && pokemon === this.activeTarget) {
- boosts['def'] = 0;
- boosts['spd'] = 0;
- boosts['evasion'] = 0;
- }
- if (pokemon === this.activePokemon && unawareUser === this.activeTarget) {
- boosts['atk'] = 0;
- boosts['def'] = 0;
- boosts['spa'] = 0;
- boosts['accuracy'] = 0;
- }
- },
- },
- blaz: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Blaz')}|Give me, give me, give me the truth now oh oh oh oh`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Blaz')}|Tell me... why? Please tell me why do we worry? Why? Why do we worry at all?`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Blaz')}|the game (lol u lost)`);
- },
- },
- brandon: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Brandon')}|I didn't come here to play. I came here to slay!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Brandon')}|${this.sample([`I need to catch my breath`, `brb getting a snack`])}`);
- },
- onFaint(pokemon) {
- const foeName = pokemon.side.foe.active[0].illusion ?
- pokemon.side.foe.active[0].illusion.name : pokemon.side.foe.active[0].name;
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Brandon')}|${this.sample([`This battle was rigga morris!`, `At least I'll snag Miss Congeniality...`, `This battle was rigged for ${foeName} anyway >:(`])}`);
- },
- },
- brouha: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('brouha')}|lmf`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('brouha')}|....`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('brouha')}|sobL`);
- },
- },
- buffy: {
- noCopy: true,
- // No quotes requested
- },
- cake: {
- noCopy: true,
- innateName: "h",
- shortDesc: "On switch-in and at the end of every turn, this Pokemon changes type randomly.",
- onStart(target, pokemon) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Cake')}|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`);
- // h innate
- if (pokemon.illusion) return;
- const typeList = [...this.dex.types.names()];
- this.prng.shuffle(typeList);
- const firstType = typeList[0];
- this.prng.shuffle(typeList);
- const secondType = typeList[0];
- const newTypes = [firstType];
- if (firstType !== secondType) newTypes.push(secondType);
- this.add('html|h');
- this.add('-start', pokemon, 'typechange', newTypes.join('/'), '[silent]');
- pokemon.setType(newTypes);
- },
- onSwitchOut(pokemon) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Cake')}|${pokemon.side.name} is a nerd`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Cake')}|Chowder was a good show`);
- },
- onResidualOrder: 26,
- onResidualSubOrder: 1,
- onResidual(pokemon) {
- if (pokemon.illusion) return;
- if (pokemon.activeTurns) {
- const typeList = [...this.dex.types.names()];
- this.prng.shuffle(typeList);
- const firstType = typeList[0];
- this.prng.shuffle(typeList);
- const secondType = typeList[0];
- const newTypes = [firstType];
- if (firstType !== secondType) newTypes.push(secondType);
- this.add('html|h');
- this.add('-start', pokemon, 'typechange', newTypes.join('/'), '[silent]');
- pokemon.setType(newTypes);
- }
- },
- },
- cantsay: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('cant say')}|haha volc go brrrr`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('cant say')}|lol CTed`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('cant say')}|${this.sample(['imagine taking pokemon seriously when you can just get haxed', '/me plays curb your enthusiasm theme', 'bad players always get lucky'])}`);
- },
- innateName: "Magic Guard",
- shortDesc: "This Pokemon can only be damaged by direct attacks.",
- // Magic Guard Innate
- onDamage(damage, target, source, effect) {
- if (target.illusion) return;
- if (effect.effectType !== 'Move') {
- if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name);
- return false;
- }
- },
- },
- celine: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Celine')}|Support has arrived!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Celine')}|Brb writing`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Celine')}|'Tis only a flesh wound!`);
- },
- },
- ckilgannon: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('c.kilgannon')}|Take a look to the sky just before you die`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('c.kilgannon')}|Death does wait; there's no debate.`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('c.kilgannon')}|Memento mori.`);
- },
- },
- coconut: {
- noCopy: true,
- // no quotes
- },
- dogknees: {
- noCopy: true,
- onStart(source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('dogknees')}|Your opinion is wrong if you think cats are better than dogs ૮・ﻌ・ა`);
- if (source.illusion) return;
- this.add('-start', source, 'typechange', source.types.join('/'), '[silent]');
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('dogknees')}|Yes, dogs do have knees. Stop asking me.`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('dogknees')}|Nap time!`);
- },
- },
- dragonwhale: {
- noCopy: true,
- // No quotes
- },
- drampasgrandpa: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('drampa\'s grandpa')}|Where are my glasses?`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('drampa\'s grandpa')}|Darn kids...`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('drampa\'s grandpa')}|Bah humbug!`);
- },
- },
- dream: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('dream')}|It's Prime Time`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('dream')}|oh no please god tell me we're dreaming`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('dream')}|perdemos`);
- },
- },
- elgino: {
- noCopy: true,
- onStart(target, pokemon) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Elgino')}|Time to save Hyrule!`);
- if (pokemon.illusion) return;
- this.add('-start', pokemon, 'typechange', pokemon.types.join('/'), '[silent]');
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Elgino')}|Hold on I need to stock up on ${this.sample(['Bombs', 'Arrows', 'Magic', 'Seeds'])}`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Elgino')}|I'm out of fairies D:!`);
- },
- },
- emeri: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Emeri')}|hey !`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Emeri')}|//busy`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Emeri')}|don't forget to chall SFG or Agarica in gen8ou`);
- },
- },
- epicnikolai: {
- noCopy: true,
- onStart(source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('EpicNikolai')}|I never give up until I get something right, which means destroying you ☜(゚ヮ゚☜)`);
- if (source.species.id !== 'garchompmega' || source.illusion) return;
- this.add('-start', source, 'typechange', source.types.join('/'), '[silent]');
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('EpicNikolai')}|This wasn't as fun as I thought it would be, I'm out ¯_( ͡~ ͜ʖ ͡°)_/¯`); // eslint-disable-line no-irregular-whitespace
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('EpicNikolai')}|I like to keep a positive attitude even though it is hard sometimes <('o'<)~*/`);
- },
- },
- estarossa: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('estarossa')}|honestly best pairing for hazard coverage wtih molt is like molt + tsareena/dhelmise`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('estarossa')}|sand balance <333`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('estarossa')}|*eurgh*`);
- },
- },
- explodingdaisies: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('explodingdaisies')}|Turn and run now, and I will mercifully pretend this never happened.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('explodingdaisies')}|You are beneath me, and it shows.`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('explodingdaisies')}|Unacceptable!`);
- },
- },
- fart: {
- noCopy: true,
- onStart(source) {
- let activeMon;
- activeMon = source.side.foe.active[0];
- activeMon = activeMon.illusion ? activeMon.illusion.name : activeMon.name;
- const family = ['aethernum', 'trickster', 'celestial', 'gimmick', 'zalm', 'aelita', 'biggie'];
- if (this.toID(activeMon) === 'hoeenhero') {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|🎵 it's friday, friday, gotta get down on friday 🎵`);
- } else if (this.toID(activeMon) === 'grimauxiliatrix') {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|howdy ho, neighbor`);
- } else if (this.toID(activeMon) === 'fart') {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|How Can Mirrors Be Real If Our Eyes Aren't Real`);
- } else if (family.includes(this.toID(activeMon))) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|hey, hey, hey. ${activeMon} is OK`);
- } else {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|rats, rats, we are the rats`);
- }
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|if I can't win this game, then I'll make it boring for everyone.`);
- },
- onFaint(pokemon) {
- let activeMon;
- activeMon = pokemon.side.foe.active[0];
- activeMon = this.toID(activeMon.illusion ? activeMon.illusion.name : activeMon.name);
- const family = ['aethernum', 'trickster', 'celestial', 'gimmick', 'zalm', 'aelita', 'biggie'];
- if (family.includes(activeMon)) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|at least I wasn't boring, right?`);
- } else {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|oy, I die`);
- }
- },
- },
- felucia: {
- noCopy: true,
- onStart(source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Felucia')}|battlesignup! I dropped my dice somewhere and now all I can do is make you play with them (join using %join one)`);
- if (source.illusion) return;
- this.add('-start', source, 'typechange', source.types.join('/'), '[silent]');
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Felucia')}|battlesignup: I lost connection to a player so I guess I'll get a new one (/me in to sub)`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Felucia')}|%remp Felucia`);
- },
- },
- finland: {
- noCopy: true,
- onStart(source) {
- const roll = this.random(100);
- let message: string;
- if (roll < 70) {
- message = 'pog';
- } else if (roll < 80) {
- message = 'very pog';
- } else if (roll < 90) {
- message = 'poggaroo';
- } else if (roll < 95) {
- message = 'PogU';
- } else {
- message = 'poog';
- }
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Finland')}|${message}`);
- if (source.illusion) return;
- this.boost({spa: 1, spd: 1}, source);
- },
- onBeforeMovePriority: 0.5,
- onBeforeMove(attacker, defender, move) {
- if (attacker.illusion) return;
- attacker.clearBoosts();
- this.add('-clearboost', attacker);
- if (move.category === 'Status') {
- this.boost({def: 1, spd: 1}, attacker);
- } else {
- this.boost({spa: 1, spe: 1}, attacker);
- }
- },
- innateName: "Fickle Decorator",
- shortDesc: "Calm Mind on switch-in. Changes boosts depending on move used.",
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Finland')}|i hope running away is safe on shield?`);
- },
- onFaint() {
- if (this.randomChance(99, 100)) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Finland')}|FINLAND!!!`);
- } else {
- // personally i like young link from oot3d and mm3d - sp
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Finland')}|i hate young link. i hate you i hate you i hate you. i hate you. young link i hate you. i despise you. i loathe you. your existence is an affront to my person. to my own existence. it's an offense. a despicable crime. a wretched abomination. even worse than mega man. a cruel barbarity. an awful curse from capricious, pernicious fate. oh do i hate young link. i scorn you. i cast you away to ignominy and hatred even worse than mega man. you are shameful young link, and you should never show your face again`);
- }
- },
- },
- frostyicelad: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('frostyicelad ❆')}|Oh i guess its my turn now! Time to sweep!`);
- },
- onSwitchOut(source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('frostyicelad ❆')}|Hey! ${source.side.name} why dont you keep me in and let me sweep? Mean.`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('frostyicelad ❆')}|So c-c-cold`);
- },
- },
- gallantspear: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('gallant\'s pear')}|**Rejoice! The one to inherit all Rider powers, the time king who will rule over the past and the future.**`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('gallant\'s pear')}|My Overlord..`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('gallant\'s pear')}|Damn you, Decade!!!`);
- },
- },
- gimmick: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Gimmick')}|Mama, they say I'm a TRRST`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Gimmick')}|Ic3peak to you later`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Gimmick')}|I did nothing wrong (but I got on the blacklist)`);
- },
- // Unburden Innate
- onAfterUseItem(item, pokemon) {
- if (pokemon !== this.effectState.target) return;
- pokemon.addVolatile('unburden');
- },
- onTakeItem(item, pokemon) {
- pokemon.addVolatile('unburden');
- },
- onEnd(pokemon) {
- pokemon.removeVolatile('unburden');
- },
- innateName: "Unburden",
- desc: "If this Pokemon loses its held item for any reason, its Speed is doubled. This boost is lost if it switches out or gains a new item.",
- shortDesc: "Speed is doubled on held item loss; boost is lost if it switches or gets new item.",
- },
- gmars: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('GMars')}|It's ya boy GEEEEEEEEMARS`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('GMars')}|Who switches out a Minior in prime position?`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('GMars')}|Follow me on bandcamp`);
- },
- },
- grimauxiliatrix: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('grimAuxiliatrix')}|${this.sample(['THE JUICE IS LOOSE', 'TOOTHPASTE\'S OUT OF THE TUBE', 'PREPARE TO DISCORPORATE'])}`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('grimAuxiliatrix')}|${this.sample(['NOT LIKE THIS', 'HALT - MODULE CORE HEMORRHAGE', 'AAAAAAAAAAAAAAAAAAA', 'Change da world... my final message. Goodb ye.'])}`);
- },
- },
- hoeenhero: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('HoeenHero')}|A storm is brewing...`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('HoeenHero')}|The eye of the hurricane provides a brief respite from the storm.`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('HoeenHero')}|All storms eventually disipate.`);
- },
- },
- hubriz: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hubriz')}|Free hugs!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hubriz')}|The soil's pH level is too high. I'm out!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hubriz')}|Delicate Flower Quest failed...`);
- },
- },
- hydro: {
- noCopy: true,
- onStart(pokemon) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hydro')}|Person reading this is a qt nerd and there is absolutely NOTHING u can do about it :)`);
- if (pokemon.illusion) return;
- this.add('-start', pokemon, 'typechange', pokemon.types.join('/'), '[silent]');
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hydro')}|brb, taking a break from ur nerdiness`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hydro')}|RUUUUUDEEE`);
- },
- },
- inactive: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Inactive')}|Are you my nightmare? Or am I yours?`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Inactive')}|This is not the end...`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Inactive')}|/me turns to stone and crumbles`);
- },
- },
- instructuser: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('instruct')}|lets drink to a great time!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Swagn')}|Hey, instruct. Here's those 15,000 walls of text you ordered. :3`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('instruct')}|ya know, why __do__ you always flood my dms?`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('instruct')}|whatever im just gonna go get some more coke`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('instruct')}|wait did we run out of coca-cola?`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('instruct')}|laaaaaaaaaaame`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('instruct')}|yall suck im going home`);
- },
- innateName: "Last Laugh",
- desc: "Upon fainting to an opponent's direct attack, this Pokemon deals damage to all Pokemon that have made contact with it equal to 50% of their max HP. This damage cannot KO Pokemon.",
- shortDesc: "Upon foe KOing user, deal 50% of their max HP to all foes that this Pokemon contacted.",
- // Innate
- onSourceHit(target, source, move) {
- if (source.illusion) return;
- if (!move || !target) return;
- if (target !== source && move.category !== 'Status') {
- if (move.flags['contact']) {
- if (!target.m.marked) this.add('-message', `${target.name} was marked by an unknown being...`);
- target.m.marked = true;
- }
- }
- },
- onDamagingHit(damage, target, source, move) {
- if (target.illusion) return;
- if (this.checkMoveMakesContact(move, source, target)) {
- if (!source.m.marked) this.add('-message', `${source.name} was marked by an unknown being...`);
- source.m.marked = true;
- }
- if (!target.hp) {
- for (const foe of source.side.pokemon) {
- if (foe.fainted || !foe.hp) continue;
- if (!foe.m.marked) continue;
- this.add('-activate', target, 'ability: Last Laugh');
- let collateral = this.clampIntRange(foe.baseMaxhp / 2, 1);
- this.add('-message', `${foe.name} became insane and attacked themselves!`);
- if (collateral >= foe.hp) collateral = foe.hp - 1;
- foe.hp = foe.hp - collateral;
- if (foe === source) {
- this.add('-damage', foe, foe.getHealth);
- }
- }
- }
- },
- },
- iyarito: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Iyarito')}|Madre de Dios, ¡es el Pollo Diablo!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Iyarito')}|Well, you're not taking me without a fight!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Iyarito')}|RIP Patrona`);
- },
- },
- jett: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jett')}|It's a good day for a hunt.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jett')}|I'll be back for more.`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jett')}|They got lucky.`);
- },
- },
- jho: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jho')}|Hey there party people`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jho')}|The Terminator(1984), 00:57:10`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jho')}|Unfortunately, CAP no longer accepts custom elements`);
- },
- },
- jordy: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jordy')}|I heard there's a badge here. Please give it to me immediately.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jordy')}|Au Revoir. Was that right?`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jordy')}|hjb`);
- },
- },
- kaijubunny: {
- noCopy: true,
- onStart(source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kaiju Bunny')}|I heard SOMEONE wasn't getting enough affection!  ̄( ÒㅅÓ) ̄`);
- if (source.species.id !== 'lopunnymega' || source.illusion) return;
- this.add('-start', source, 'typechange', source.types.join('/'), '[silent]');
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kaiju Bunny')}|Brb, need more coffee  ̄( =ㅅ=) ̄`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kaiju Bunny')}|Wow, okay, r00d  ̄(ಥㅅಥ) ̄`);
- },
- },
- kalalokki: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kalalokki')}|(•_•)`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kalalokki')}|( •_•)>⌐■-■`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kalalokki')}|(⌐■_■)`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kalalokki')}|(⌐■_■)`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kalalokki')}|( •_•)>⌐■-■`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kalalokki')}|(x_x)`);
- },
- innateName: "Sturdy",
- shortDesc: "If this Pokemon is at full HP, it survives one hit with at least 1 HP. Immune to OHKO.",
- // Sturdy Innate
- onTryHit(pokemon, target, move) {
- if (target.illusion) return;
- if (move.ohko) {
- this.add('-immune', pokemon, '[from] ability: Sturdy');
- return null;
- }
- },
- onDamagePriority: -100,
- onDamage(damage, target, source, effect) {
- if (target.illusion) return;
- if (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') {
- this.add('-ability', target, 'Sturdy');
- return target.hp - 1;
- }
- },
- },
- kennedy: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kennedy')}|up the reds`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kennedy')}|brb Jayi is PMing me (again) -_-`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kennedy')}|I'm not meant to score goals anyway, I'm a defensive striker.`);
- },
- },
- kev: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kev')}|Sorry for raining on your parade`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kev')}|Rain, rain, go away, come again another day`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kev')}|I guess I'm all washed up...`);
- },
- },
- kingbaruk: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kingbaruk')}|:cute:`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kingbaruk')}|//none`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kingbaruk')}|Fijne avond nog`);
- },
- },
- kingswordyt: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('KingSwordYT')}|Mucho texto`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('KingSwordYT')}|Hasta la próximaaaa`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('KingSwordYT')}|**__Se anula el host__**`);
- },
- },
- kipkluif: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kipkluif')}|Please play LCUU, it's fun`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kipkluif')}| /teleport`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kipkluif')}|I've failed you.. I pray you hurry.. with those reinforcments.. you promised..`);
- },
- },
- kris: {
- innateName: "phuck",
- desc: "If this Pokemon is an Unown forme, it is immune to indirect damage and transforms into a different Unown letter forme, aside from ! and ?, at the end of each turn.",
- shortDesc: "Unown: Magic Guard + change letter every turn.",
- noCopy: true,
- onStart(source) {
- const foeName = source.side.foe.active[0].illusion ?
- source.side.foe.active[0].illusion.name : source.side.foe.active[0].name;
- if (foeName === 'Aeonic' || source.side.foe.name === 'Aeonic') {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|HAPPY BIRTHDAY AEONIC!!!!`);
- } else {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|hi ${foeName}`);
- }
- },
- onSwitchOut(source) {
- const foeName = source.side.foe.active[0].illusion ?
- source.side.foe.active[0].illusion.name : source.side.foe.active[0].name;
- if (foeName === 'Aeonic' || source.side.foe.name === 'Aeonic') {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|HAPPY BIRTHDAY AEONIC!!!!`);
- } else {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|bye ${foeName}`);
- }
- },
- onFaint(target) {
- const foeName = target.illusion ?
- target.illusion.name : target.name;
- if (foeName === 'Aeonic' || target.side.name === 'Aeonic') {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|HAPPY BIRTHDAY AEONIC!!!!`);
- } else {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|Fortnite Battle Royale`);
- }
- },
- // phuck innate
- onDamage(damage, target, source, effect) { // Magic Guard
- if (effect.id === 'heavyhailstorm') return;
- if (target.illusion) return;
- if (!target.species.id.includes('unown')) return;
- if (effect.effectType !== 'Move') {
- if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name);
- return false;
- }
- },
- onResidual(pokemon) {
- if (pokemon.illusion) return;
- if (!pokemon.species.id.includes('unown')) return;
- // So this doesn't activate upon switching in
- if (pokemon.activeTurns < 1) return;
- const unownLetters = 'abcdefghijklmnopgrstuvwxyz'.split('');
- const currentFormeID = this.toID(pokemon.set.species);
- const currentLetter = currentFormeID.charAt(5) || 'a';
- const chosenLetter = this.sample(unownLetters.filter(letter => letter !== currentLetter));
- // Change is permanent so when you switch out you keep the letter
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|watch this`);
- if (chosenLetter === 'w') {
- this.add('-activate', pokemon, 'ability: phuck');
- pokemon.formeChange(`unownw`, this.effect, true);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|W? More like L`);
- this.add('-activate', pokemon, 'ability: phuck');
- pokemon.formeChange(`unownl`, this.effect, true);
- this.hint(`There are no W Pokemon that work with Kris's signature move, so we're counting this as a loss`);
- } else if (chosenLetter === 'u') {
- this.add('-activate', pokemon, 'ability: phuck');
- pokemon.formeChange(`unownu`, this.effect, true);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Kris')}|U? I'm already an Unown, no`);
- this.add('-activate', pokemon, 'ability: phuck');
- const chosenLetter2 = this.sample(unownLetters.filter(letter => letter !== 'u' && letter !== 'w'));
- pokemon.formeChange(`unown${chosenLetter2}`, this.effect, true);
- this.hint(`There are no U Pokemon that work with Kris's signature move, so we're counting this as a loss`);
- } else {
- this.add('-activate', pokemon, 'ability: phuck');
- pokemon.formeChange(`unown${chosenLetter === 'a' ? '' : chosenLetter}`, this.effect, true);
- }
- },
- },
- lamp: {
- noCopy: true,
- onStart(pokemon) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lamp')}|DUDE HI ${pokemon.side.foe.name} (:`);
- },
- onSwitchOut(pokemon) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lamp')}|bye ${pokemon.side.foe.name} :)`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lamp')}|no u`);
- },
- },
- lionyx: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lionyx')}|Hi, this is ps-chan, how may I help you, user-kun? (。◕‿‿◕。)`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lionyx')}|Teclis au secours`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lionyx')}|The cold never bothered me anyway...`);
- },
- },
- litteleven: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Litt♥Eleven')}|The coin is flipped, what follows is destiny alone.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Litt♥Eleven')}|Looks like my business is finished here... for now.`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Litt♥Eleven')}|Perhaps, coin tossing isn't the optimal way to win a war...`);
- },
- },
- lunalauser: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lunala')}|o bella`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lunala')}|Condivido schermo cosi' guardiamo i tre porcellini?`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Lunala')}|BE... Ok mejo chiudere gioco... vedo documentario su Bibbia`);
- },
- },
- madmonty: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Mad Monty ¾°')}|Ah, the sweet smell of rain... Oh! Hi there!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Mad Monty ¾°')}|Hey, I was enjoying the weather! Awww...`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Mad Monty ¾°')}|Nooo, if I go, who will stop the llamas?`);
- },
- },
- majorbowman: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('MajorBowman')}|Aaaand Cracktion!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('MajorBowman')}|This isn't Maury Povich!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('MajorBowman')}|Never loved ya.`);
- },
- },
- marshmallon: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Marshmallon')}|I'm hungry. Are you edible? c:`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Marshmallon')}|RAWWWR`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Marshmallon')}|I'm still hungry. rawr. :c`);
- },
- },
- meicoo: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Meicoo')}|cool quiz`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Meicoo')}|/leavehunt`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Meicoo')}|/endhunt`);
- },
- },
- mitsuki: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Mitsuki')}|alguem quer batalha?????`);
- },
- onSwitchOut(source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Mitsuki')}|You're weak, ${source.side.foe.name}. Why? Because you lack... hatred.`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Mitsuki')}|THIS WORLD SHALL KNOW P A I N`);
- },
- },
- n10sit: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('n10siT')}|Heheheh... were you surprised?`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('n10siT')}|Heheheh... did I scare you?`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('n10siT')}|Hoopa never saw one of those!`);
- },
- },
- naziel: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Naziel')}|ay ola soy nasieeeeeeel`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Naziel')}|YAY, I WILL NOT DIE THIS TIME`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Naziel')}|Toy xikito no puedo ;-;`);
- },
- },
- nol: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Nol')}|What's up nerds`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Nol')}|cya nerds later`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Nol')}|nerd`);
- },
- innateName: "RSUA",
- shortDesc: "+1 priority to status moves. 1.5x Defense and Special Defense.",
- // Innate Prankster and Eviolite
- onModifyPriority(priority, pokemon, target, move) {
- if (move?.category === 'Status') {
- move.pranksterBoosted = true;
- return priority + 1;
- }
- },
- onModifyDefPriority: 2,
- onModifyDef(def, pokemon) {
- if (pokemon.illusion) return;
- return this.chainModify(1.5);
- },
- onModifySpDPriority: 2,
- onModifySpD(spd, pokemon) {
- if (pokemon.illusion) return;
- return this.chainModify(1.5);
- },
- },
- notater517: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Notater517')}|nyaa~... I mean, 'tis a swell day to twirl one's mustache, isn't it?!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Notater517')}|/me corrupt trivia noises`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Notater517')}|This is probably a good time to fix my sleep schedule`);
- },
- },
- nui: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('nui')}|/html `);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('nui')}|/html `);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('nui')}|/html `);
- },
- },
- overneat: {
- noCopy: true,
- onStart(source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Overneat')}|Lets end this ${source.side.foe.name}!!`);
- if (source.species.id !== 'absolmega' || source.illusion) return;
- this.add('-start', source, 'typechange', source.types.join('/'), '[silent]');
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Overneat')}|I can do better!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Overneat')}|I was to cocky...`);
- },
- },
- om: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('OM~!')}|What's Up Gamers`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('OM~!')}|Let me just ${this.sample(['host murder for the 100th time', 'clean out scum zzz', 'ladder mnm rq'])}`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('OM~!')}|ugh, I ${this.sample(['rolled a 1, damnit.', 'got killed night 1, seriously?', 'got v-create\'d by fucking dragapult lmaoo'])}`);
- },
- },
- pants: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('pants')}|neat`);
- },
- onSwitchOut(source) {
- if (source.side.sideConditions.givewistfulthinking) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('pants')}|brb contemplating things`);
- } else {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('pants')}|brb dying a little`);
- }
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('pants')}|how do you even knock out something that's already dead? i call bs`);
- },
- },
- paradise: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Paradise ╱╲☼')}|You ever notice that the first thing a PS tryhard does is put their PS auth in their smogon signature?`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Paradise ╱╲☼')}|Pokemon Showdown copypastas have to be among the worst I've seen on any website. People spam garbage over and over until eventually the mods get fed up and clamp down on spam. I don't blame them for it. Have you ever seen a copypasta fail as hard as the dead memes on this website? There are mods on here who still think that "Harambe" and "Damn Daniel" are the peak of comedy. Not to mention that there are rooms on here that don't even talk about pokemon lol. Yeah, I don't see this website lasting more than 2 years, I'd suggest becoming a mod somewhere else.`);
- },
- onFaint(pokemon) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Paradise ╱╲☼')}|Paradise has been kicked, not banned, therefore you could still potentially invite them back. However, do not do this @${pokemon.side.name}, unless of course, you want to be banned too, because if you invite them back you and Paradise will both be banned.`);
- },
- },
- partman: {
- noCopy: true,
- onStart(source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|${this.sample([`OMA HI ${source.side.name.toUpperCase()} BIG FAN`, `HYDRO IS A NERD`, `Greetings, today we are all gathered here to pay respects to - wait, this is only ${source.side.foe.name}'s funeral. Never mind.`, `__I'm on fiiiiiiiiiiire__`, `/me hugs`, `A SACRIFICE FOR SNOM`, `${source.side.name} more like nerd`, `NER`])}`);
- },
- onSwitchOut(source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|Hi ${source.side.name}, I'm PartMan!`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|Hi PartMan, I'm PartMan!`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|Hi PartMan, I'm PartMan!`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Hydro')}|/log PartMan was muted by Hydro for 7 minutes. (flood)`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|${this.sample(['B-booli. >.<', 'Remember to dab on iph', 'Excuse me what', 'RUDE', ':pout:', '/html '])}`);
- },
- },
- peapodc: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('peapod c')}|/me sprints into the room`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('peapod c')}|Must maintain m o m e n t u m`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('peapod c')}|They say sleep is the cousin of death — but even ghosts need to sleep!`);
- },
- },
- perishsonguser: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Perish Song')}|(╯°□°)╯︵ ┻━┻`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Perish Song')}|┬──┬◡ノ(° -°ノ)`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Perish Song')}|Thanks for coming to my TED talk.`);
- },
- },
- phiwings99: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('phiwings99')}|Pick.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('phiwings99')}|I'm boated.`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('phiwings99')}|God, Nalei is fucking terrible at this game.`);
- },
- },
- piloswinegripado: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('piloswine gripado')}|Suave?`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('piloswine gripado')}|cya frend :)`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('piloswine gripado')}|This was lame :/`);
- },
- },
- pirateprincess: {
- noCopy: true,
- onStart(source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PiraTe Princess')}|Ahoy! o/`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PiraTe Princess')}|brb making tea`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PiraTe Princess')}|I failed my death save`);
- },
- onHit(target, source, move) {
- if (move?.effectType === 'Move' && target.getMoveHitData(move).crit) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PiraTe Princess')}|NATURAL 20!!!`);
- }
- },
- },
- psynergy: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Psynergy')}|Will you survive?`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Psynergy')}|yadon moment`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Psynergy')}|oh`);
- },
- },
- ptoad: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('ptoad')}|I'm ptoad.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('ptoad')}|Bye, ribbitch!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('ptoad')}|OKKKK DUUUDE`);
- },
- innateName: "Sticky Hold",
- shortDesc: "This Pokemon cannot lose its held item due to another Pokemon's attack.",
- // Sticky Hold Innate
- onTakeItem(item, pokemon, source) {
- if (this.suppressingAbility(pokemon) || !pokemon.hp || pokemon.item === 'stickybarb') return;
- if (!this.activeMove) throw new Error("Battle.activeMove is null");
- if ((source && source !== pokemon) || this.activeMove.id === 'knockoff') {
- this.add('-activate', pokemon, 'ability: Sticky Hold');
- return false;
- }
- },
- },
- rabia: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rabia')}|eternally`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rabia')}|rabia`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rabia')}|im top 500 in relevant tiers and lead gp, i have 8 badges, im fine, gg`);
- },
- },
- rach: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rach')}|Hel-lo`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rach')}|I was doing better alone`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rach')}|I'm all good already, so moved on, it's scary`);
- },
- },
- rageuser: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rage')}|/html `);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rage')}|im off, cya lads`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Rage')}|/me quits`);
- },
- },
- raihankibana: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raihan Kibana')}|Hi gm`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raihan Kibana')}|Ight Imma head out`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raihan Kibana')}|Grr bork bork :(`);
- },
- },
- rajshoot: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raj.Shoot')}|Plaza Power!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raj.Shoot')}|We'll be back!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raj.Shoot')}|You'll join me in the shadow realm soon....`);
- },
- },
- ransei: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Ransei')}|Sup! This is Gen 8 so imma run an Eternamax set. Best of luck. You’ll need it :^)`);
- },
- onFaint(pokemon) {
- const target = pokemon.side.foe.active[0];
- if (!target || target.fainted || target.hp <= 0) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Ransei')}|Ahah yes you got rekt! Welcome to Hackmons! gg m8!`);
- } else {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Ransei')}|ripsei... Ok look you might’ve won this time but I kid you not you’re losing next game!`);
- }
- },
- },
- ravioliqueen: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('RavioliQueen')}|The Noodle Noble has Arrived!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('RavioliQueen')}|Time to spaghett out of here!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('RavioliQueen')}|This is impastable!`);
- },
- innateName: "Pitch Black Witch",
- desc: "When this Pokemon sets or switches into Pitch Black errain, its Special Attack and Special Defense are boosted by 1 stage. If this Pokemon gets hit while Pitch Black Terrain is up, it gets +1 speed",
- shortDesc: "Pitch Black Terrain: Calm Mind on switch-in, +1 Spe when attacked.",
- // Coded in the terrain itself
- },
- robb576: {
- noCopy: true,
- onStart(target, pokemon) {
- if (pokemon.side.pokemonLeft === 1) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Robb576')}|This is our last stand. Give it everything you got ${pokemon.side.name}!`);
- } else {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Robb576')}|1, 2, 3, 4, dunno how to count no more!`);
- }
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Robb576')}|5, 7, 6, I will be right back into the mix!`);
- },
- onFaint(pokemon) {
- if (pokemon.species.name === "Necrozma-Ultra") {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Robb576')}|gg better luck next time. Sorry I couldn't handle them all :^(`);
- } else {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Robb576')}|8, 9, 10, it has been a pleasure man!`);
- }
- },
- },
- sectonia: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Sectonia')}|I love one (1) queen bee`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Sectonia')}|My search for my lost queen continues....`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Sectonia')}|NOOOOOO NOT THE JELLY BABY`);
- },
- },
- segmr: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Segmr')}|*awakens conquerors haki* Greetings.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Segmr')}|Lemme show you this`);
- this.add(`l|Segmr`);
- },
- onFaint(pokemon) {
- const name = pokemon.side.foe.active[0].illusion ?
- pokemon.side.foe.active[0].illusion.name : pokemon.side.foe.active[0].name;
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Segmr')}|I'm sorry ${name} but could you please stop talking to me?`);
- },
- },
- sejesensei: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('sejesensei')}|yoyo, what’ve you been reading lately`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('sejesensei')}|bbl, gonna go read some manga`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('sejesensei')}|B-but, this didn’t happen in the manga…`);
- },
- },
- seso: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Seso')}|I have good spacial awareness, and I'm pretty comfortable with a sword.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Seso')}|In the blink of an eye.`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Seso')}|I feel just, you know, defeated.`);
- },
- },
- shadecession: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Shadecession')}|Better put on my Shadecessions`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Shadecession')}|⌐■_■`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Shadecession')}|ah, gg fam`);
- },
- },
- softflex: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Soft Flex')}|:]`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Soft Flex')}|:[`);
- },
- },
- spandan: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Spandan')}|Mareanie!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Spandan')}|You can't end this toxic relationship just like that!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Spandan')}|You didnt do shit. I coded myself to faint.`);
- },
- },
- struchni: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Struchni')}|~tt newgame`);
- },
- onSwitchOut(source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Struchni')}|~tt endgame`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Struchni')}|**selfveto**`);
- },
- },
- teclis: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Teclis')}|Fire at will!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Teclis')}|A spark remains...`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Teclis')}|You set my soul on fire!`);
- },
- },
- temp: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('temp')}|hi, i'm here to drop dracos`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('temp')}|how did I not win yet`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('temp')}|oh I died`);
- },
- },
- theimmortal: {
- noCopy: true,
- onStart(source) {
- const foe = source.side.foe.active[0];
- const foeName = foe.illusion ? foe.illusion.name : foe.name;
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('The Immortal')}|${!foe || foe.fainted || foe.hp <= 0 ? 'hi' : foeName}`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('The Immortal')}|ok`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('The Immortal')}|ban stall`);
- },
- },
- thewaffleman: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('thewaffleman')}|Whats Good Youtube its your boy thewaffleman`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('thewaffleman')}|Never Gonna Give You Up`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('thewaffleman')}|coyg`);
- },
- },
- tiki: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('tiki')}|just tiki.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('tiki')}|/html `);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('tiki')}|aksfgkjag o k`);
- },
- },
- traceuser: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('trace')}|Daishouri!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('trace')}|¯\\_(ツ)_/¯`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('trace')}|sucks to sucks`);
- },
- },
- trickster: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Trickster')}|(¤﹏¤)`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Trickster')}|(︶︹︺)`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Trickster')}|(ಥ﹏ಥ)`);
- },
- },
- vexen: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Vexen')}|Most unlucky for you!`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Vexen')}|brb reading Bleach`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Vexen')}|Wait this wasn't supposed to happen`);
- },
- },
- vivalospride: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('vivalospride')}|hola mi amore`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('vivalospride')}|no hablo español`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('vivalospride')}|classic honestly`);
- },
- },
- volco: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Volco')}|/me loud controller noises`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Volco')}|/me controller clicking fades`);
- },
- onFaint(source, target, effect) {
- if (effect?.id === 'glitchexploiting') {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Volco')}|Dammit, time for a reset.`);
- return;
- }
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Volco')}|Looks like the game fro-`);
- this.add(`raw|This Pokemon Showdown battle has frozen!
Don't worry, we're working on fixing it, so just carry on like you never saw this.
(Do not report this, this is intended.)
`);
- },
- },
- vooper: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('vooper')}|${this.sample(['Paws out, claws out!', 'Ready for the prowl!'])}`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('vooper')}|Must... eat... bamboo...`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('vooper')}|I guess Kung Fu isn't for everyone...`);
- },
- },
- yuki: {
- noCopy: true,
- onStart(target, pokemon) {
- let bst = 0;
- for (const stat of Object.values(pokemon.species.baseStats)) {
- bst += stat;
- }
- let targetBst = 0;
- for (const stat of Object.values(target.species.baseStats)) {
- targetBst += stat;
- }
- let message: string;
- if (bst > targetBst) {
- message = 'You dare challenge me!?';
- } else {
- message = 'Sometimes, you go for it';
- }
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('yuki')}|${message}`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('yuki')}|Catch me if you can!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('yuki')}|You'll never extinguish our hopes!`);
- },
- },
- zalm: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zalm')}|<(:O)000>`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zalm')}|Run for the hills!`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zalm')}|Woah`);
- },
- },
- zarel: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zarel')}|the melo-p represents PS's battles, and the melo-a represents PS's chatrooms`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zarel')}|THIS melo-a represents kicking your ass, though`);
- },
- },
- zodiax: {
- noCopy: true,
- onStart(source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zodiax')}|Zodiax is here to Zodihax`);
-
- // Easter Egg
- const activeMon = this.toID(
- source.side.foe.active[0].illusion ? source.side.foe.active[0].illusion.name : source.side.foe.active[0].name
- );
- if (activeMon === 'aeonic') {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zodiax')}|Happy Birthday Aeonic`);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Aeonic')}|THIS JOKE IS AS BORING AS YOU ARE`);
- }
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zodiax')}|Don't worry I'll be back again`);
- },
- onFaint(pokemon) {
- const name = pokemon.side.foe.name;
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zodiax')}|${name}, Why would you hurt this poor little pompombirb :(`);
- },
- },
- zyguser: {
- noCopy: true,
- onStart() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zyg')}|Free Swirlyder.`);
- },
- onSwitchOut() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zyg')}|/me sighs... what is there to say?`);
- },
- onFaint() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zyg')}|At least I have a tier.`);
- },
- },
- // Heavy Hailstorm status support for Alpha
- heavyhailstorm: {
- name: 'HeavyHailstorm',
- effectType: 'Weather',
- duration: 0,
- onTryMovePriority: 1,
- onTryMove(attacker, defender, move) {
- if (move.type === 'Steel' && move.category !== 'Status') {
- this.debug('Heavy Hailstorm Steel suppress');
- this.add('-message', 'The hail suppressed the move!');
- this.add('-fail', attacker, move, '[from] Heavy Hailstorm');
- this.attrLastMove('[still]');
- return null;
- }
- },
- onWeatherModifyDamage(damage, attacker, defender, move) {
- if (move.type === 'Ice') {
- this.debug('Heavy Hailstorm ice boost');
- return this.chainModify(1.5);
- }
- },
- onFieldStart(field, source, effect) {
- this.add('-weather', 'Hail', '[from] ability: ' + effect, '[of] ' + source);
- this.add('-message', 'The hail became extremely chilling!');
- },
- onModifyMove(move, pokemon, target) {
- if (!this.field.isWeather('heavyhailstorm')) return;
- if (move.category !== "Status") {
- this.debug('Adding Heavy Hailstorm freeze');
- if (!move.secondaries) move.secondaries = [];
- for (const secondary of move.secondaries) {
- if (secondary.status === 'frz') return;
- }
- move.secondaries.push({
- chance: 10,
- status: 'frz',
- });
- }
- },
- onFieldResidualOrder: 1,
- onFieldResidual() {
- this.add('-weather', 'Hail', '[upkeep]');
- if (this.field.isWeather('heavyhailstorm')) this.eachEvent('Weather');
- },
- onWeather(target, source, effect) {
- if (target.isAlly(this.effectState.source)) return;
- // Hail is stronger from Heavy Hailstorm
- if (!target.hasType('Ice')) this.damage(target.baseMaxhp / 8);
- },
- onFieldEnd() {
- this.add('-weather', 'none');
- },
- },
- // Forever Winter Hail support for piloswine gripado
- winterhail: {
- name: 'Winter Hail',
- effectType: 'Weather',
- duration: 0,
- onFieldStart(field, source, effect) {
- this.add('-weather', 'Hail', '[from] ability: ' + effect, '[of] ' + source);
- this.add('-message', 'It became winter!');
- },
- onModifySpe(spe, pokemon) {
- if (!pokemon.hasType('Ice')) return this.chainModify(0.5);
- },
- onFieldResidualOrder: 1,
- onFieldResidual() {
- this.add('-weather', 'Hail', '[upkeep]');
- if (this.field.isWeather('winterhail')) this.eachEvent('Weather');
- },
- onWeather(target) {
- if (target.hasType('Ice')) return;
- this.damage(target.baseMaxhp / 8);
- },
- onFieldEnd() {
- this.add('-weather', 'none');
- },
- },
- raindrop: {
- name: 'Raindrop',
- noCopy: true,
- onStart(target) {
- this.effectState.layers = 1;
- this.effectState.def = 0;
- this.effectState.spd = 0;
- this.add('-start', target, 'Raindrop');
- this.add('-message', `${target.name} has ${this.effectState.layers} raindrop(s)!`);
- const [curDef, curSpD] = [target.boosts.def, target.boosts.spd];
- this.boost({def: 1, spd: 1}, target, target);
- if (curDef !== target.boosts.def) this.effectState.def--;
- if (curSpD !== target.boosts.spd) this.effectState.spd--;
- },
- onRestart(target) {
- this.effectState.layers++;
- this.add('-start', target, 'Raindrop');
- this.add('-message', `${target.name} has ${this.effectState.layers} raindrop(s)!`);
- const curDef = target.boosts.def;
- const curSpD = target.boosts.spd;
- this.boost({def: 1, spd: 1}, target, target);
- if (curDef !== target.boosts.def) this.effectState.def--;
- if (curSpD !== target.boosts.spd) this.effectState.spd--;
- },
- onEnd(target) {
- if (this.effectState.def || this.effectState.spd) {
- const boosts: SparseBoostsTable = {};
- if (this.effectState.def) boosts.def = this.effectState.def;
- if (this.effectState.spd) boosts.spd = this.effectState.spd;
- this.boost(boosts, target, target);
- }
- this.add('-end', target, 'Raindrop');
- if (this.effectState.def !== this.effectState.layers * -1 || this.effectState.spd !== this.effectState.layers * -1) {
- this.hint("Raindrop keeps track of how many times it successfully altered each stat individually.");
- }
- },
- },
- // Brilliant Condition for Arcticblast
- brilliant: {
- name: 'Brilliant',
- duration: 5,
- onStart(pokemon) {
- this.add('-start', pokemon, 'Brilliant');
- },
- onModifyAtk() {
- return this.chainModify(1.5);
- },
- onModifyDef() {
- return this.chainModify(1.5);
- },
- onModifySpA() {
- return this.chainModify(1.5);
- },
- onModifySpD() {
- return this.chainModify(1.5);
- },
- onModifySpe() {
- return this.chainModify(1.5);
- },
- onUpdate(pokemon) {
- if (pokemon.volatiles['perishsong']) pokemon.removeVolatile('perishsong');
- },
- onTryAddVolatile(status) {
- if (status.id === 'perishsong') return null;
- },
- onResidualOrder: 7,
- onResidual(pokemon) {
- this.heal(pokemon.baseMaxhp / 16);
- },
- onTrapPokemon(pokemon) {
- pokemon.tryTrap();
- },
- onDragOut(pokemon) {
- this.add('-activate', pokemon, 'move: Ingrain');
- return null;
- },
- onEnd(pokemon) {
- this.add('-end', pokemon, 'Brilliant');
- },
- },
- // Custom status for HoeenHero's move
- stormsurge: {
- name: "Storm Surge",
- duration: 2,
- durationCallback(target, source, effect) {
- const windSpeeds = [65, 85, 95, 115, 140];
- return windSpeeds.indexOf((effect as ActiveMove).basePower) + 2;
- },
- onSideStart(targetSide) {
- this.add('-sidestart', targetSide, 'Storm Surge');
- this.add('-message', `Storm Surge flooded the afflicted side of the battlefield!`);
- },
- onEnd(targetSide) {
- this.add('-sideend', targetSide, 'Storm Surge');
- this.add('-message', 'The Storm Surge receded.');
- },
- onModifySpe() {
- return this.chainModify(0.75);
- },
- },
- // Kipkluif, needs to end in mod to not trigger aelita/andrew's effect
- degeneratormod: {
- onBeforeSwitchOut(pokemon) {
- let alreadyAdded = false;
- for (const source of this.effectState.sources) {
- if (!source.hp || source.volatiles['gastroacid']) continue;
- if (!alreadyAdded) {
- const foe = pokemon.side.foe.active[0];
- if (foe) this.add('-activate', foe, 'ability: Degenerator');
- alreadyAdded = true;
- }
- this.damage((pokemon.baseMaxhp * 33) / 100, pokemon);
- }
- },
- },
- // For ravioliqueen
- haunting: {
- name: 'Haunting',
- onTrapPokemon(pokemon) {
- pokemon.tryTrap();
- },
- onStart(target) {
- this.add('-start', target, 'Haunting');
- },
- onResidualOrder: 11,
- onResidual(pokemon) {
- this.damage(pokemon.baseMaxhp / 8);
- },
- onEnd(pokemon) {
- this.add('-end', pokemon, 'Haunting');
- },
- },
- // for pants' move
- givewistfulthinking: {
- duration: 1,
- onSwitchInPriority: 1,
- onSwitchIn(pokemon) {
- pokemon.addVolatile('wistfulthinking');
- },
- },
- // focus punch effect for litt's move
- nexthuntcheck: {
- duration: 1,
- onStart(pokemon) {
- this.add('-singleturn', pokemon, 'move: /nexthunt');
- },
- onHit(pokemon, source, move) {
- if (move.category !== 'Status') {
- pokemon.volatiles['nexthuntcheck'].lostFocus = true;
- }
- },
- },
- // For Gmars' Effects
- minior: {
- noCopy: true,
- name: 'Minior',
- // Special Forme Effects
- onBeforeMove(pokemon) {
- if (pokemon.set.shiny) return;
- if (pokemon.species.id === "miniorviolet") {
- this.add(`${getName("GMars")} is thinking...`);
- if (this.randomChance(1, 3)) {
- this.add('cant', pokemon, 'ability: Truant');
- return false;
- }
- }
- },
- onSwitchIn(pokemon) {
- if (pokemon.set.shiny) return;
- if (pokemon.species.id === 'miniorindigo') {
- this.boost({atk: 1, spa: 1}, pokemon.side.foe.active[0]);
- } else if (pokemon.species.id === 'miniorgreen') {
- this.boost({atk: 1}, pokemon);
- }
- },
- onTryBoost(boost, target, source, effect) {
- if (target.set.shiny) return;
- if (source && target === source) return;
- if (target.species.id !== 'miniorblue') return;
- let showMsg = false;
- let i: BoostID;
- for (i in boost) {
- if (boost[i]! < 0) {
- delete boost[i];
- showMsg = true;
- }
- }
- if (showMsg && !(effect as ActiveMove).secondaries && effect.id !== 'octolock') {
- this.add('message', 'Minior is translucent!');
- }
- },
- onFoeTryMove(target, source, move) {
- if (move.id === 'haze' && target.species.id === 'miniorblue' && !target.set.shiny) {
- move.onHitField = function (this: Battle) {
- this.add('-clearallboost');
- for (const pokemon of this.getAllActive()) {
- if (pokemon.species.id === 'miniorblue') continue;
- pokemon.clearBoosts();
- }
- }.bind(this);
- return;
- }
- const dazzlingHolder = this.effectState.target;
- if (!dazzlingHolder.set.shiny) return;
- if (dazzlingHolder.species.id !== 'minior') return;
- const targetAllExceptions = ['perishsong', 'flowershield', 'rototiller'];
- if (move.target === 'foeSide' || (move.target === 'all' && !targetAllExceptions.includes(move.id))) {
- return;
- }
-
- if ((source.isAlly(dazzlingHolder) || move.target === 'all') && move.priority > 0.1) {
- this.attrLastMove('[still]');
- this.add('message', 'Minior dazzles!');
- this.add('cant', target, move, '[of] ' + dazzlingHolder);
- return false;
- }
- },
- },
- // modified paralysis for Inversion Terrain
- par: {
- name: 'par',
- effectType: 'Status',
- onStart(target, source, sourceEffect) {
- if (sourceEffect && sourceEffect.effectType === 'Ability') {
- this.add('-status', target, 'par', '[from] ability: ' + sourceEffect.name, '[of] ' + source);
- } else {
- this.add('-status', target, 'par');
- }
- },
- onModifySpe(spe, pokemon) {
- if (pokemon.hasAbility('quickfeet')) return;
- if (this.field.isTerrain('inversionterrain') && pokemon.isGrounded()) {
- return this.chainModify(2);
- }
- return this.chainModify(0.5);
- },
- onBeforeMovePriority: 1,
- onBeforeMove(pokemon) {
- if (this.randomChance(1, 4)) {
- this.add('cant', pokemon, 'par');
- return false;
- }
- },
- },
- bigstormcomingmod: {
- name: "Big Storm Coming Mod",
- duration: 1,
- onBasePower() {
- return this.chainModify([1229, 4096]);
- },
- },
-
- // condition used for brouha's ability
- turbulence: {
- name: 'Turbulence',
- effectType: 'Weather',
- duration: 0,
- onFieldStart(field, source, effect) {
- this.add('-weather', 'DeltaStream', '[from] ability: ' + effect, '[of] ' + source);
- },
- onFieldResidualOrder: 1,
- onFieldResidual() {
- this.add('-weather', 'DeltaStream', '[upkeep]');
- this.eachEvent('Weather');
- },
- onWeather(target) {
- if (!target.hasType('Flying')) this.damage(target.baseMaxhp * 0.06);
- if (this.sides.some(side => Object.keys(side.sideConditions).length)) {
- this.add(`-message`, 'The Turbulence blew away the hazards on both sides!');
- }
- if (this.field.terrain) {
- this.add(`-message`, 'The Turbulence blew away the terrain!');
- }
- const silentRemove = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist'];
- for (const side of this.sides) {
- const keys = Object.keys(side.sideConditions);
- for (const key of keys) {
- if (key.endsWith('mod') || key.endsWith('clause')) continue;
- side.removeSideCondition(key);
- if (!silentRemove.includes(key)) {
- this.add('-sideend', side, this.dex.conditions.get(key).name, '[from] ability: Turbulence');
- }
- }
- }
- this.field.clearTerrain();
- },
- onFieldEnd() {
- this.add('-weather', 'none');
- },
- },
- // Modded rain dance for Kev's ability
- raindance: {
- name: 'RainDance',
- effectType: 'Weather',
- duration: 5,
- durationCallback(source) {
- let newDuration = 5;
- let boostNum = 0;
- if (source?.hasItem('damprock')) {
- newDuration = 8;
- }
- if (source?.hasAbility('kingofatlantis')) {
- for (const teammate of source.side.pokemon) {
- if (teammate.hasType('Water') && teammate !== source) {
- boostNum++;
- }
- }
- }
- return newDuration + boostNum;
- },
- onWeatherModifyDamage(damage, attacker, defender, move) {
- if (defender.hasItem('utilityumbrella')) return;
- if (move.type === 'Water') {
- this.debug('rain water boost');
- return this.chainModify(1.5);
- }
- if (move.type === 'Fire') {
- this.debug('rain fire suppress');
- return this.chainModify(0.5);
- }
- },
- onFieldStart(field, source, effect) {
- if (effect?.effectType === 'Ability') {
- if (this.gen <= 5) this.effectState.duration = 0;
- this.add('-weather', 'RainDance', '[from] ability: ' + effect, '[of] ' + source);
- } else {
- this.add('-weather', 'RainDance');
- }
- },
- onFieldResidualOrder: 1,
- onFieldResidual() {
- this.add('-weather', 'RainDance', '[upkeep]');
- this.eachEvent('Weather');
- },
- onFieldEnd() {
- this.add('-weather', 'none');
- },
- },
- // Modded hazard moves to fail when Wave terrain is active
- auroraveil: {
- name: "Aurora Veil",
- duration: 5,
- durationCallback(target, source) {
- if (source?.hasItem('lightclay')) {
- return 8;
- }
- return 5;
- },
- onAnyModifyDamage(damage, source, target, move) {
- if (target !== source && this.effectState.target.hasAlly(target)) {
- if ((target.side.getSideCondition('reflect') && this.getCategory(move) === 'Physical') ||
- (target.side.getSideCondition('lightscreen') && this.getCategory(move) === 'Special')) {
- return;
- }
- if (!target.getMoveHitData(move).crit && !move.infiltrates) {
- this.debug('Aurora Veil weaken');
- if (this.activePerHalf > 1) return this.chainModify([2732, 4096]);
- return this.chainModify(0.5);
- }
- }
- },
- onSideStart(side) {
- if (this.field.isTerrain('waveterrain')) {
- this.add('-message', `Wave Terrain prevented Aurora Veil from starting!`);
- return null;
- }
- this.add('-sidestart', side, 'move: Aurora Veil');
- },
- onSideResidualOrder: 21,
- onSideResidualSubOrder: 1,
- onSideEnd(side) {
- this.add('-sideend', side, 'move: Aurora Veil');
- },
- },
- lightscreen: {
- name: "Light Screen",
- duration: 5,
- durationCallback(target, source) {
- if (source?.hasItem('lightclay')) {
- return 8;
- }
- return 5;
- },
- onAnyModifyDamage(damage, source, target, move) {
- if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === 'Special') {
- if (!target.getMoveHitData(move).crit && !move.infiltrates) {
- this.debug('Light Screen weaken');
- if (this.activePerHalf > 1) return this.chainModify([2732, 4096]);
- return this.chainModify(0.5);
- }
- }
- },
- onSideStart(side) {
- if (this.field.isTerrain('waveterrain')) {
- this.add('-message', `Wave Terrain prevented Light Screen from starting!`);
- return null;
- }
- this.add('-sidestart', side, 'move: Light Screen');
- },
- onSideResidualOrder: 21,
- onSideResidualSubOrder: 1,
- onSideEnd(side) {
- this.add('-sideend', side, 'move: Light Screen');
- },
- },
- mist: {
- name: "Mist",
- duration: 5,
- onTryBoost(boost, target, source, effect) {
- if (effect.effectType === 'Move' && effect.infiltrates && !target.isAlly(source)) return;
- if (source && target !== source) {
- let showMsg = false;
- let i: BoostID;
- for (i in boost) {
- if (boost[i]! < 0) {
- delete boost[i];
- showMsg = true;
- }
- }
- if (showMsg && !(effect as ActiveMove).secondaries) {
- this.add('-activate', target, 'move: Mist');
- }
- }
- },
- onSideStart(side) {
- if (this.field.isTerrain('waveterrain')) {
- this.add('-message', `Wave Terrain prevented Mist from starting!`);
- return null;
- }
- this.add('-sidestart', side, 'move: Mist');
- },
- onSideResidualOrder: 21,
- onSideResidualSubOrder: 3,
- onSideEnd(side) {
- this.add('-sideend', side, 'Mist');
- },
- },
- reflect: {
- name: "Reflect",
- duration: 5,
- durationCallback(target, source) {
- if (source?.hasItem('lightclay')) {
- return 8;
- }
- return 5;
- },
- onAnyModifyDamage(damage, source, target, move) {
- if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === 'Physical') {
- if (!target.getMoveHitData(move).crit && !move.infiltrates) {
- this.debug('Reflect weaken');
- if (this.activePerHalf > 1) return this.chainModify([2732, 4096]);
- return this.chainModify(0.5);
- }
- }
- },
- onSideStart(side) {
- if (this.field.isTerrain('waveterrain')) {
- this.add('-message', `Wave Terrain prevented Reflect from starting!`);
- return null;
- }
- this.add('-sidestart', side, 'Reflect');
- },
- onSideResidualOrder: 21,
- onSideEnd(side) {
- this.add('-sideend', side, 'Reflect');
- },
- },
- safeguard: {
- name: "Safeguard",
- duration: 5,
- durationCallback(target, source, effect) {
- if (source?.hasAbility('persistent')) {
- this.add('-activate', source, 'ability: Persistent', effect);
- return 7;
- }
- return 5;
- },
- onSetStatus(status, target, source, effect) {
- if (!effect || !source) return;
- if (effect.effectType === 'Move' && effect.infiltrates && !target.isAlly(source)) return;
- if (target !== source) {
- this.debug('interrupting setStatus');
- if (effect.id === 'synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) {
- this.add('-activate', target, 'move: Safeguard');
- }
- return null;
- }
- },
- onTryAddVolatile(status, target, source, effect) {
- if (!effect || !source) return;
- if (effect.effectType === 'Move' && effect.infiltrates && !target.isAlly(source)) return;
- if ((status.id === 'confusion' || status.id === 'yawn') && target !== source) {
- if (effect.effectType === 'Move' && !effect.secondaries) this.add('-activate', target, 'move: Safeguard');
- return null;
- }
- },
- onSideStart(side) {
- if (this.field.isTerrain('waveterrain')) {
- this.add('-message', `Wave Terrain prevented Safeguard from starting!`);
- return null;
- }
- this.add('-sidestart', side, 'move: Safeguard');
- },
- onSideResidualOrder: 21,
- onSideResidualSubOrder: 2,
- onSideEnd(side) {
- this.add('-sideend', side, 'Safeguard');
- },
- },
- gmaxsteelsurge: {
- onSideStart(side) {
- if (this.field.isTerrain('waveterrain')) {
- this.add('-message', `Wave Terrain prevented Steel Spikes from starting!`);
- return null;
- }
- this.add('-sidestart', side, 'move: G-Max Steelsurge');
- },
- onEntryHazard(pokemon) {
- if (pokemon.hasItem('heavydutyboots')) return;
- // Ice Face and Disguise correctly get typed damage from Stealth Rock
- // because Stealth Rock bypasses Substitute.
- // They don't get typed damage from Steelsurge because Steelsurge doesn't,
- // so we're going to test the damage of a Steel-type Stealth Rock instead.
- const steelHazard = this.dex.getActiveMove('Stealth Rock');
- steelHazard.type = 'Steel';
- const typeMod = this.clampIntRange(pokemon.runEffectiveness(steelHazard), -6, 6);
- this.damage(pokemon.maxhp * Math.pow(2, typeMod) / 8);
- },
- },
- spikes: {
- name: "Spikes",
- onSideStart(side) {
- if (this.field.isTerrain('waveterrain')) {
- this.add('-message', `Wave Terrain prevented Spikes from starting!`);
- return null;
- }
- this.effectState.layers = 1;
- this.add('-sidestart', side, 'move: Spikes');
- },
- onSideRestart(side) {
- if (this.effectState.layers >= 3) return false;
- this.add('-sidestart', side, 'Spikes');
- this.effectState.layers++;
- },
- onEntryHazard(pokemon) {
- if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return;
- const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4
- this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24);
- },
- },
- stealthrock: {
- name: "Stealth Rock",
- onSideStart(side) {
- if (this.field.isTerrain('waveterrain')) {
- this.add('-message', `Wave Terrain prevented Stealth Rock from starting!`);
- return null;
- }
- this.add('-sidestart', side, 'move: Stealth Rock');
- },
- onEntryHazard(pokemon) {
- if (pokemon.hasItem('heavydutyboots')) return;
- const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6);
- this.damage(pokemon.maxhp * Math.pow(2, typeMod) / 8);
- },
- },
- stickyweb: {
- name: "Sticky Web",
- onSideStart(side) {
- if (this.field.isTerrain('waveterrain')) {
- this.add('-message', `Wave Terrain prevented Sticky Web from starting!`);
- return null;
- }
- this.add('-sidestart', side, 'move: Sticky Web');
- },
- onEntryHazard(pokemon) {
- if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return;
- this.add('-activate', pokemon, 'move: Sticky Web');
- this.boost({spe: -1}, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb'));
- },
- },
- toxicspikes: {
- name: "Toxic Spikes",
- onSideStart(side) {
- if (this.field.isTerrain('waveterrain')) {
- this.add('-message', `Wave Terrain prevented Toxic Spikes from starting!`);
- return null;
- }
- this.add('-sidestart', side, 'move: Toxic Spikes');
- this.effectState.layers = 1;
- },
- onSideRestart(side) {
- if (this.effectState.layers >= 2) return false;
- this.add('-sidestart', side, 'move: Toxic Spikes');
- this.effectState.layers++;
- },
- onEntryHazard(pokemon) {
- if (!pokemon.isGrounded()) return;
- if (pokemon.hasType('Poison')) {
- this.add('-sideend', pokemon.side, 'move: Toxic Spikes', '[of] ' + pokemon);
- pokemon.side.removeSideCondition('toxicspikes');
- } else if (pokemon.hasType('Steel') || pokemon.hasItem('heavydutyboots')) {
- return;
- } else if (this.effectState.layers >= 2) {
- pokemon.trySetStatus('tox', pokemon.side.foe.active[0]);
- } else {
- pokemon.trySetStatus('psn', pokemon.side.foe.active[0]);
- }
- },
- },
- frz: {
- inherit: true,
- onHit(target, source, move) {
- if (move.thawsTarget || move.type === 'Fire' && move.category !== 'Status') {
- target.cureStatus();
- if (move.id === 'randomscreaming') {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Gimmick')}|Give me some more paaain, baaaby`);
- }
- }
- },
- },
- // No, you're not dynamaxing.
- dynamax: {
- inherit: true,
- onStart(pokemon) {
- pokemon.removeVolatile('minimize');
- pokemon.removeVolatile('substitute');
- if (pokemon.volatiles['torment']) {
- delete pokemon.volatiles['torment'];
- this.add('-end', pokemon, 'Torment', '[silent]');
- }
- if (['cramorantgulping', 'cramorantgorging'].includes(pokemon.species.id) && !pokemon.transformed) {
- pokemon.formeChange('cramorant');
- }
- this.add('-start', pokemon, 'Dynamax');
- if (pokemon.gigantamax) this.add('-formechange', pokemon, pokemon.species.name + '-Gmax');
- if (pokemon.baseSpecies.name !== 'Shedinja') {
- // Changes based on dynamax level, 2 is max (at LVL 10)
- const ratio = this.format.id.startsWith('gen8doublesou') ? 1.5 : 2;
-
- pokemon.maxhp = Math.floor(pokemon.maxhp * ratio);
- pokemon.hp = Math.floor(pokemon.hp * ratio);
-
- this.add('-heal', pokemon, pokemon.getHealth, '[silent]');
- }
- this.add('-message', 'Ok. sure. Dynamax. Just abuse it and win the game already.');
- // This is just for fun, as dynamax cannot be in a rated battle.
- this.win(pokemon.side);
- },
- },
- echoedvoiceclone: {
- duration: 2,
- onFieldStart() {
- this.effectState.multiplier = 1;
- },
- onFieldRestart() {
- if (this.effectState.duration !== 2) {
- this.effectState.duration = 2;
- if (this.effectState.multiplier < 5) {
- this.effectState.multiplier++;
- }
- }
- },
- },
-};
diff --git a/data/mods/ssb/items.ts b/data/mods/ssb/items.ts
deleted file mode 100644
index 91b86e9baaaa..000000000000
--- a/data/mods/ssb/items.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-export const Items: {[k: string]: ModdedItemData} = {
- // Alpha
- caioniumz: {
- name: "Caionium Z",
- onTakeItem: false,
- zMove: "Blistering Ice Age",
- zMoveFrom: "Blizzard",
- itemUser: ["Aurorus"],
- gen: 8,
- desc: "If held by an Aurorus with Blizzard, it can use Blistering Ice Age.",
- },
-
- // A Quag To The Past
- quagniumz: {
- name: "Quagnium Z",
- onTakeItem: false,
- zMove: "Bounty Place",
- zMoveFrom: "Scorching Sands",
- itemUser: ["Quagsire"],
- gen: 8,
- desc: "If held by a Quagsire with Scorching Sands, it can use Bounty Place.",
- },
-
- // Kalalokki
- kalalokkiumz: {
- name: "Kalalokkium Z",
- onTakeItem: false,
- zMove: "Gaelstrom",
- zMoveFrom: "Blackbird",
- itemUser: ["Wingull"],
- gen: 8,
- desc: "If held by a Wingull with Blackbird, it can use Gaelstrom.",
- },
-
- // Robb576
- modium6z: {
- name: "Modium-6 Z",
- onTakeItem: false,
- zMove: "Integer Overflow",
- zMoveFrom: "Photon Geyser",
- itemUser: ["Necrozma-Ultra"],
- gen: 8,
- desc: "If held by a Robb576 with Photon Geyser, it can use Integer Overflow.",
- },
-};
diff --git a/data/mods/ssb/moves.ts b/data/mods/ssb/moves.ts
deleted file mode 100644
index 6d51e5a6e5da..000000000000
--- a/data/mods/ssb/moves.ts
+++ /dev/null
@@ -1,5376 +0,0 @@
-import {getName} from './conditions';
-import {changeSet, changeMoves} from "./abilities";
-import {ssbSets} from "./random-teams";
-
-export const Moves: {[k: string]: ModdedMoveData} = {
- /*
- // Example
- moveid: {
- accuracy: 100, // a number or true for always hits
- basePower: 100, // Not used for Status moves, base power of the move, number
- category: "Physical", // "Physical", "Special", or "Status"
- desc: "", // long description
- shortDesc: "", // short description, shows up in /dt
- name: "Move Name",
- gen: 8,
- pp: 10, // unboosted PP count
- priority: 0, // move priority, -6 -> 6
- flags: {}, // Move flags https://github.com/smogon/pokemon-showdown/blob/master/data/moves.js#L1-L27
- onTryMove() {
- this.attrLastMove('[still]'); // For custom animations
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Move Name 1', source);
- this.add('-anim', source, 'Move Name 2', source);
- }, // For custom animations
- secondary: {
- status: "tox",
- chance: 20,
- }, // secondary, set to null to not use one. Exact usage varies, check data/moves.js for examples
- target: "normal", // What does this move hit?
- // normal = the targeted foe, self = the user, allySide = your side (eg light screen), foeSide = the foe's side (eg spikes), all = the field (eg raindance). More can be found in data/moves.js
- type: "Water", // The move's type
- // Other useful things
- noPPBoosts: true, // add this to not boost the PP of a move, not needed for Z moves, dont include it otherwise
- isZ: "crystalname", // marks a move as a z move, list the crystal name inside
- zMove: {effect: ''}, // for status moves, what happens when this is used as a Z move? check data/moves.js for examples
- zMove: {boost: {atk: 2}}, // for status moves, stat boost given when used as a z move
- critRatio: 2, // The higher the number (above 1) the higher the ratio, lowering it lowers the crit ratio
- drain: [1, 2], // recover first num / second num % of the damage dealt
- heal: [1, 2], // recover first num / second num % of the target's HP
- },
- */
- // Please keep sets organized alphabetically based on staff member name!
- // Abdelrahman
- thetownoutplay: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Sets Trick Room and has 10% chance to burn the opponent.",
- shortDesc: "Sets Trick Room. 10% chance to burn.",
- name: "The Town Outplay",
- gen: 8,
- pp: 5,
- priority: -5,
- flags: {},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Trick Room', target);
- },
- onHit(target, source, move) {
- if (this.randomChance(1, 10)) {
- for (const foe of source.foes()) {
- foe.trySetStatus('brn', source);
- }
- }
- },
- pseudoWeather: 'trickroom',
- secondary: null,
- target: "self",
- type: "Fire",
- },
-
- // Adri
- skystriker: {
- accuracy: 100,
- basePower: 50,
- category: "Special",
- desc: "If this move is successful and the user has not fainted, the effects of Leech Seed and binding moves end for the user, and all hazards are removed from the user's side of the field. Raises the user's Speed by 1 stage.",
- shortDesc: "Free user from hazards/bind/Leech Seed; +1 Spe.",
- name: "Skystriker",
- gen: 8,
- pp: 30,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Aerial Ace', target);
- },
- onAfterHit(target, pokemon) {
- if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
- this.add('-end', pokemon, 'Leech Seed', '[from] move: Skystriker', '[of] ' + pokemon);
- }
- const sideConditions = [
- 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
- ];
- for (const condition of sideConditions) {
- if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
- this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Skystriker', '[of] ' + pokemon);
- }
- }
- if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
- pokemon.removeVolatile('partiallytrapped');
- }
- },
- onAfterSubDamage(damage, target, pokemon) {
- if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
- this.add('-end', pokemon, 'Leech Seed', '[from] move: Skystriker', '[of] ' + pokemon);
- }
- const sideConditions = [
- 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
- ];
- for (const condition of sideConditions) {
- if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
- this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Skystriker', '[of] ' + pokemon);
- }
- }
- if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
- pokemon.removeVolatile('partiallytrapped');
- }
- },
- self: {
- boosts: {
- spe: 1,
- },
- },
- secondary: null,
- target: "normal",
- type: "Flying",
- },
-
- // aegii
- reset: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "This move acts as King's Shield for the purpose of Stance Change. The user is protected from most attacks this turn, but not status moves. Reduces the opponent's relevant attacking stat by 1 if they attempt to use a Special or contact move. If the user is Aegislash, changes the user's set from Physical to Special or Special to Physical.",
- shortDesc: "King's Shield; -1 offense stat on hit; change set.",
- name: "Reset",
- gen: 8,
- pp: 10,
- priority: 4,
- flags: {},
- stallingMove: true,
- volatileStatus: 'reset',
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this .add('-anim', source, 'Petal Dance', target);
- this .add('-anim', source, 'King\'s Shield', source);
- },
- onTryHit(pokemon) {
- return !!this.queue.willAct() && this.runEvent('StallMove', pokemon);
- },
- onHit(pokemon) {
- pokemon.addVolatile('stall');
- if (pokemon.species.baseSpecies === 'Aegislash') {
- let specialSet = pokemon.moves.includes('shadowball');
- changeSet(this, pokemon, ssbSets[specialSet ? 'aegii' : 'aegii-Alt']);
- specialSet = pokemon.moves.includes('shadowball');
- const setType = specialSet ? 'specially' : 'physically';
- this.add('-message', `aegii now has a ${setType} oriented set.`);
- }
- },
- condition: {
- duration: 1,
- onStart(target) {
- this.add('-singleturn', target, 'Protect');
- },
- onTryHitPriority: 3,
- onTryHit(target, source, move) {
- if (!move.flags['protect'] || move.category === 'Status') {
- if (move.isZ || (move.isMax && !move.breaksProtect)) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
- if (move.smartTarget) {
- move.smartTarget = false;
- } else {
- this.add('-activate', target, 'move: Protect');
- }
- const lockedmove = source.getVolatile('lockedmove');
- if (lockedmove) {
- // Outrage counter is reset
- if (source.volatiles['lockedmove'].duration === 2) {
- delete source.volatiles['lockedmove'];
- }
- }
- if (move.category === "Special") {
- this.boost({spa: -1}, source, target, this.dex.getActiveMove("Reset"));
- } else if (move.category === "Physical" && move.flags["contact"]) {
- this.boost({atk: -1}, source, target, this.dex.getActiveMove("Reset"));
- }
- return this.NOT_FAIL;
- },
- },
- secondary: null,
- target: "self",
- type: "Steel",
- },
-
- // Aelita
- xanaskeystolyoko: {
- accuracy: 100,
- basePower: 20,
- basePowerCallback(pokemon, target, move) {
- return move.basePower + 20 * pokemon.positiveBoosts();
- },
- category: "Physical",
- desc: "Power is equal to 20+(X*20), where X is the user's total stat stage changes that are greater than 0. User raises a random stat if it has less than 5 positive stat changes.",
- shortDesc: "+20 power/boost. +1 random stat if < 5 boosts.",
- name: "XANA's Keys To Lyoko",
- gen: 8,
- pp: 40,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Draco Meteor', target);
- },
- self: {
- onHit(pokemon) {
- if (pokemon.positiveBoosts() < 5) {
- const stats: BoostID[] = [];
- let stat: BoostID;
- for (stat in pokemon.boosts) {
- if (!['accuracy', 'evasion'].includes(stat) && pokemon.boosts[stat] < 6) {
- stats.push(stat);
- }
- }
- if (stats.length) {
- const randomStat = this.sample(stats);
- const boost: SparseBoostsTable = {};
- boost[randomStat] = 1;
- this.boost(boost);
- }
- }
- },
- },
- secondary: null,
- target: "normal",
- type: "Dragon",
- },
-
- // Aeonic
- lookingcool: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Sets up Stealth Rock on the opposing side of the field and boosts the user's Attack by 2 stages. Can only be used once per the user's time on the field.",
- shortDesc: "1 use per switch-in. +2 Atk + Stealth Rock.",
- name: "Looking Cool",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {snatch: 1},
- volatileStatus: 'lookingcool',
- onTryMove(target) {
- if (target.volatiles['lookingcool']) return false;
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- const foe = source.side.foe.active[0];
- this.add('-anim', source, 'Smokescreen', source);
- this.add('-anim', source, 'Stealth Rock', foe);
- },
- onHit(target, source, move) {
- const foe = source.side.foe;
- if (!foe.getSideCondition('stealthrock')) {
- foe.addSideCondition('stealthrock');
- }
- },
- boosts: {
- atk: 2,
- },
- secondary: null,
- target: "self",
- type: "Dark",
- },
-
- // Aethernum
- lilypadoverflow: {
- accuracy: 100,
- basePower: 62,
- basePowerCallback(source, target, move) {
- if (!source.volatiles['raindrop']?.layers) return move.basePower;
- return move.basePower + (source.volatiles['raindrop'].layers * 20);
- },
- category: "Special",
- desc: "Power is equal to 62 + (Number of Raindrops collected * 20). Whether or not this move is successful, the user's Defense and Special Defense decrease by as many stages as Raindrop had increased them, and the user's Raindrop count resets to 0.",
- shortDesc: "More power per Raindrop. Lose Raindrops.",
- name: "Lilypad Overflow",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Water Spout', target);
- this.add('-anim', source, 'Max Geyser', target);
- },
- onAfterMove(pokemon) {
- if (pokemon.volatiles['raindrop']) pokemon.removeVolatile('raindrop');
- },
- secondary: null,
- target: "normal",
- type: "Water",
- },
-
- // Akir
- ravelin: {
- accuracy: 100,
- basePower: 70,
- category: "Physical",
- desc: "Heals 50% of the user's max HP; Sets up Light Screen for 5 turns on the user's side.",
- shortDesc: "Recover + Light Screen.",
- name: "Ravelin",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, heal: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Aura Sphere', target);
- this.add('-anim', source, 'Protect', source);
- },
- onAfterMoveSecondarySelf(pokemon, target, move) {
- this.heal(pokemon.maxhp / 2, pokemon, pokemon, move);
- if (pokemon.side.getSideCondition('lightscreen')) return;
- pokemon.side.addSideCondition('lightscreen');
- },
- secondary: null,
- target: "normal",
- type: "Steel",
- },
-
- // Alpha
- blisteringiceage: {
- accuracy: true,
- basePower: 190,
- category: "Special",
- desc: "User's ability becomes Ice Age, and the weather becomes an extremely heavy hailstorm that prevents damaging Steel-type moves from executing, causes Ice-type moves to be 50% stronger, causes all non-Ice-type Pokemon on the opposing side to take 1/8 damage from hail, and causes all moves to have a 10% chance to freeze. This weather bypasses Magic Guard and Overcoat. This weather remains in effect until the 3 turns are up, or the weather is changed by Delta Stream, Desolate Land, or Primordial Sea.",
- shortDesc: "Weather: Steel fail. 1.5x Ice.",
- name: "Blistering Ice Age",
- gen: 8,
- pp: 1,
- noPPBoosts: true,
- priority: 0,
- flags: {},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Hail', target);
- this.add('-anim', target, 'Subzero Slammer', target);
- this.add('-anim', source, 'Subzero Slammer', source);
- },
- onAfterMove(source) {
- source.baseAbility = 'iceage' as ID;
- source.setAbility('iceage');
- this.add('-ability', source, source.getAbility().name, '[from] move: Blistering Ice Age');
- },
- isZ: "caioniumz",
- secondary: null,
- target: "normal",
- type: "Ice",
- },
-
- // Andrew
- whammerjammer: {
- accuracy: 100,
- basePower: 60,
- category: "Special",
- desc: "If this move is successful, the user switches out and all field conditions (entry hazards, terrains, weathers, screens, etc.) are removed from both sides.",
- shortDesc: "Removes field conditions, switches out.",
- name: "Whammer Jammer",
- pp: 15,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Shadow Ball', target);
- },
- onHit(target, source, move) {
- const removeAll = [
- 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes',
- 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
- ];
- const silentRemove = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist'];
- for (const sideCondition of removeAll) {
- if (target.side.removeSideCondition(sideCondition)) {
- if (!silentRemove.includes(sideCondition)) {
- this.add('-sideend', target.side, this.dex.conditions.get(sideCondition).name, '[from] move: Whammer Jammer', '[of] ' + source);
- }
- }
- if (source.side.removeSideCondition(sideCondition)) {
- if (!silentRemove.includes(sideCondition)) {
- this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Whammer Jammer', '[of] ' + source);
- }
- }
- }
- this.field.clearWeather();
- this.field.clearTerrain();
- for (const clear in this.field.pseudoWeather) {
- if (clear.endsWith('mod') || clear.endsWith('clause')) continue;
- this.field.removePseudoWeather(clear);
- }
- },
- selfSwitch: true,
- secondary: null,
- target: "normal",
- type: "Ghost",
- },
-
- // Annika
- datacorruption: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Replaces the target's moveset with four vaguely competitively viable moves. 100% chance to cause the target to flinch. Fails unless it is the user's first turn on the field.",
- shortDesc: "First Turn: Gives foe 4 new moves; flinches.",
- name: "Data Corruption",
- gen: 8,
- pp: 1,
- noPPBoosts: true,
- flags: {bypasssub: 1, reflectable: 1},
- priority: 3,
- onTry(pokemon, target) {
- if (pokemon.activeMoveActions > 1) {
- this.attrLastMove('[still]');
- this.add('-fail', pokemon);
- this.hint("Data Corruption only works on your first turn out.");
- return null;
- }
- },
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', target, 'Shift Gear', target);
- this.add('-anim', source, 'Plasma Fists', target);
- this.add('-anim', target, 'Nasty Plot', target);
- },
- onHit(target, source) {
- this.add('-message', `${source.name} corrupted the opposing ${target.name}'s data storage!`);
- // Ran from a script
- const possibleMoves = [
- "agility", "anchorshot", "appleacid", "aquatail", "aromatherapy", "attackorder", "aurasphere", "autotomize", "banefulbunker",
- "behemothbash", "behemothblade", "bellydrum", "blazekick", "blizzard", "blueflare", "bodypress", "bodyslam",
- "boltbeak", "boltstrike", "boomburst", "bravebird", "bugbuzz", "bulkup", "calmmind", "circlethrow", "clangingscales",
- "clangoroussoul", "clearsmog", "closecombat", "coil", "cottonguard", "courtchange", "crabhammer", "crosschop", "crunch",
- "curse", "darkestlariat", "darkpulse", "dazzlinggleam", "defog", "destinybond", "disable", "discharge", "doomdesire",
- "doubleedge", "doubleironbash", "dracometeor", "dragonclaw", "dragondance", "dragondarts", "dragonhammer", "dragonpulse",
- "dragontail", "drainingkiss", "drillpeck", "drillrun", "drumbeating", "dynamaxcannon", "earthpower", "earthquake",
- "encore", "energyball", "eruption", "expandingforce", "explosion", "extrasensory", "extremespeed", "facade",
- "fierydance", "fireblast", "firelash", "fishiousrend", "flamethrower", "flareblitz", "flashcannon", "fleurcannon",
- "flipturn", "focusblast", "foulplay", "freezedry", "fusionbolt", "fusionflare", "futuresight", "geargrind", "glare",
- "grassknot", "gravapple", "gunkshot", "gyroball", "haze", "headsmash", "healbell", "healingwish", "heatwave",
- "hex", "highhorsepower", "highjumpkick", "honeclaws", "hurricane", "hydropump", "hypervoice", "icebeam", "iciclecrash",
- "irondefense", "ironhead", "kingsshield", "knockoff", "lavaplume", "leafblade", "leafstorm", "leechlife",
- "leechseed", "lightscreen", "liquidation", "lowkick", "lunge", "magiccoat", "megahorn", "memento", "meteormash",
- "milkdrink", "moonblast", "moongeistbeam", "moonlight", "morningsun", "muddywater", "multiattack", "nastyplot",
- "nightdaze", "nightshade", "noretreat", "nuzzle", "obstruct", "outrage", "overdrive", "overheat", "painsplit",
- "poltergeist", "partingshot", "perishsong", "petalblizzard", "photongeyser", "plasmafists", "playrough", "poisonjab",
- "pollenpuff", "powergem", "powerwhip", "protect", "psychic", "psychicfangs", "psyshock", "psystrike", "pursuit",
- "pyroball", "quiverdance", "rapidspin", "recover", "reflect", "rest", "return", "roar", "rockpolish", "roost",
- "sacredsword", "scald", "scorchingsands", "secretsword", "seedbomb", "seismictoss", "selfdestruct", "shadowball",
- "shadowbone", "shadowclaw", "shellsidearm", "shellsmash", "shiftgear", "skullbash", "skyattack", "slackoff",
- "slam", "sleeppowder", "sleeptalk", "sludgebomb", "sludgewave", "snipeshot", "softboiled", "sparklingaria",
- "spectralthief", "spikes", "spikyshield", "spiritshackle", "spore", "stealthrock", "stickyweb", "stoneedge", "stormthrow",
- "strangesteam", "strengthsap", "substitute", "suckerpunch", "sunsteelstrike", "superpower", "surf", "surgingstrikes",
- "switcheroo", "swordsdance", "synthesis", "tailwind", "takedown", "taunt", "throatchop", "thunder", "thunderbolt",
- "thunderwave", "toxic", "toxicspikes", "transform", "triattack", "trick", "tripleaxel", "uturn", "vcreate",
- "voltswitch", "volttackle", "waterfall", "waterspout", "whirlwind", "wickedblow", "wildcharge", "willowisp",
- "wish", "woodhammer", "xscissor", "yawn", "zenheadbutt", "zingzap",
- ];
- const newMoves = [];
- for (let i = 0; i < 4; i++) {
- const moveIndex = this.random(possibleMoves.length);
- newMoves.push(possibleMoves[moveIndex]);
- possibleMoves.splice(moveIndex, 1);
- }
- const newMoveSlots = changeMoves(this, target, newMoves);
- target.m.datacorrupt = true;
- target.moveSlots = newMoveSlots;
- // @ts-ignore
- target.baseMoveSlots = newMoveSlots;
- },
- secondary: {
- chance: 100,
- volatileStatus: 'flinch',
- },
- target: "adjacentFoe",
- type: "Psychic",
- },
-
- // A Quag To The Past
- bountyplace: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Puts a bounty on the target. If the target is KOed by a direct attack, the attacker will gain +1 Attack, Defense, Special Attack, Special Defense, and Speed.",
- shortDesc: "If target is ever KOed, attacker omniboosts.",
- name: "Bounty Place",
- gen: 8,
- pp: 1,
- noPPBoosts: true,
- priority: 0,
- flags: {bypasssub: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Pay Day', target);
- this.add('-anim', source, 'Block', target);
- },
- onHit(target, source, move) {
- // See formats.ts for implementation
- target.m.hasBounty = true;
- this.add('-start', target, 'bounty', '[silent]');
- this.add('-message', `${source.name} placed a bounty on ${target.name}!`);
- },
- isZ: "quagniumz",
- secondary: null,
- target: "normal",
- type: "Ground",
- },
-
- // Arby
- quickhammer: {
- accuracy: 100,
- basePower: 40,
- category: "Special",
- desc: "Usually moves first (Priority +1). If this move KOes the opponent, the user gains +2 Special Attack. Otherwise, the user gains -1 Defense and Special Defense.",
- shortDesc: "+1 Prio. +2 SpA if KO, -1 Def/SpD if not.",
- name: "Quickhammer",
- gen: 8,
- pp: 10,
- priority: 1,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Crabhammer', target);
- },
- onAfterMoveSecondarySelf(pokemon, target, move) {
- if (!target || target.fainted || target.hp <= 0) {
- this.boost({spa: 2}, pokemon, pokemon, move);
- } else {
- this.boost({def: -1, spd: -1}, pokemon, pokemon, move);
- }
- },
- secondary: null,
- target: "normal",
- type: "Water",
- },
-
- // used for Arby's ability
- waveterrain: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "For 5 turns, the terrain becomes Wave Terrain. During the effect, the accuracy of Water type moves is multiplied by 1.2, even if the user is not grounded. Hazards and screens are removed and cannot be set while Wave Terrain is active. Fails if the current terrain is Inversion Terrain.",
- shortDesc: "5 turns. Removes hazards. Water move acc 1.2x.",
- name: "Wave Terrain",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {},
- terrain: 'waveterrain',
- condition: {
- duration: 5,
- durationCallback(source, effect) {
- if (source?.hasItem('terrainextender')) {
- return 8;
- }
- return 5;
- },
- onModifyAccuracy(accuracy, target, source, move) {
- if (move.type === 'Water') {
- return this.chainModify(1.2);
- }
- },
- onFieldStart(field, source, effect) {
- if (effect && effect.effectType === 'Ability') {
- this.add('-fieldstart', 'move: Wave Terrain', '[from] ability: ' + effect, '[of] ' + source);
- } else {
- this.add('-fieldstart', 'move: Wave Terrain');
- }
- this.add('-message', 'The battlefield suddenly flooded!');
- const removeAll = [
- 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes',
- 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
- ];
- const silentRemove = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist'];
- for (const sideCondition of removeAll) {
- if (source.side.foe.removeSideCondition(sideCondition)) {
- if (!silentRemove.includes(sideCondition)) {
- this.add('-sideend', source.side.foe, this.dex.conditions.get(sideCondition).name, '[from] move: Wave Terrain', '[of] ' + source);
- }
- }
- if (source.side.removeSideCondition(sideCondition)) {
- if (!silentRemove.includes(sideCondition)) {
- this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Wave Terrain', '[of] ' + source);
- }
- }
- }
- this.add('-message', `Hazards were removed by the terrain!`);
- },
- onFieldResidualOrder: 21,
- onFieldResidualSubOrder: 3,
- onFieldEnd() {
- this.add('-fieldend', 'move: Wave Terrain');
- },
- },
- secondary: null,
- target: "all",
- type: "Water",
- },
-
- // Archas
- broadsidebarrage: {
- accuracy: 90,
- basePower: 30,
- category: "Physical",
- desc: "Hits 4 times. If one hit breaks the target's substitute, it will take damage for the remaining hits. This move is super effective against Steel-type Pokemon.",
- shortDesc: "Hits 4 times. Super effective on Steel.",
- name: "Broadside Barrage",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', target, 'Close Combat', target);
- this.add('-anim', target, 'Earthquake', target);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Archas')}|Fire all guns! Fiiiiire!`);
- },
- onEffectiveness(typeMod, target, type) {
- if (type === 'Steel') return 1;
- },
- multihit: 4,
- secondary: null,
- target: "normal",
- type: "Steel",
- },
-
- // Arcticblast
- radiantburst: {
- accuracy: 100,
- basePower: 180,
- category: "Special",
- desc: "User gains Brilliant if not Brilliant without attacking. User attacks and loses Brilliant if Brilliant. Being Brilliant multiplies all stats by 1.5 and grants Perish Song immunity and Ingrain. This move loses priority if the user is already brilliant.",
- shortDesc: "Gain or lose Brilliant. Attack if Brilliant.",
- name: "Radiant Burst",
- gen: 8,
- pp: 10,
- priority: 1,
- flags: {protect: 1, snatch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onTry(source, target) {
- if (!source.volatiles['brilliant']) {
- this.add('-anim', source, 'Recover', source);
- source.addVolatile('brilliant');
- return null;
- }
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Diamond Storm', target);
- },
- onModifyPriority(priority, source, target, move) {
- if (source.volatiles['brilliant']) return 0;
- },
- onModifyMove(move, source) {
- if (!source.volatiles['brilliant']) {
- move.accuracy = true;
- move.target = "self";
- delete move.flags.protect;
- move.flags.bypasssub = 1;
- }
- },
- onHit(target, pokemon) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Arcticblast')}|YEET`);
- if (pokemon.volatiles['brilliant']) pokemon.removeVolatile('brilliant');
- },
- secondary: null,
- target: "normal",
- type: "Fairy",
- },
-
- // awa
- awa: {
- accuracy: 100,
- basePower: 90,
- category: "Physical",
- desc: "Sets up Sandstorm.",
- shortDesc: "Sets up Sandstorm.",
- name: "awa!",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Let\'s Snuggle Forever', target);
- },
- weather: 'sandstorm',
- secondary: null,
- target: "normal",
- type: "Rock",
- },
-
- // Beowulf
- buzzinspection: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "The user gains the ability Compound Eyes for the remainder of the battle and then switches out",
- shortDesc: "Gains Compound Eyes and switches.",
- name: "Buzz Inspection",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Night Shade', source);
- },
- onHit(pokemon) {
- pokemon.baseAbility = 'compoundeyes' as ID;
- pokemon.setAbility('compoundeyes');
- this.add('-ability', pokemon, pokemon.getAbility().name, '[from] move: Buzz Inspection');
- },
- selfSwitch: true,
- secondary: null,
- target: "self",
- type: "Bug",
- },
-
- // biggie
- juggernautpunch: {
- accuracy: 100,
- basePower: 150,
- category: "Physical",
- desc: "The user loses its focus and does nothing if it is hit by a damaging attack equal to or greater than 20% of the user's maxmimum HP this turn before it can execute the move.",
- shortDesc: "Fails if the user takes ≥20% before it hits.",
- name: "Juggernaut Punch",
- gen: 8,
- pp: 20,
- priority: -3,
- flags: {contact: 1, protect: 1, punch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Focus Punch', target);
- },
- beforeTurnCallback(pokemon) {
- pokemon.addVolatile('juggernautpunch');
- },
- beforeMoveCallback(pokemon) {
- if (pokemon.volatiles['juggernautpunch'] && pokemon.volatiles['juggernautpunch'].lostFocus) {
- this.add('cant', pokemon, 'Juggernaut Punch', 'Juggernaut Punch');
- return true;
- }
- },
- condition: {
- duration: 1,
- onStart(pokemon) {
- this.add('-singleturn', pokemon, 'move: Juggernaut Punch');
- },
- onDamagePriority: -101,
- onDamage(damage, target, source, effect) {
- if (effect.effectType !== 'Move') return;
- if (damage > target.baseMaxhp / 5) {
- target.volatiles['juggernautpunch'].lostFocus = true;
- }
- },
- },
- secondary: null,
- target: "normal",
- type: "Fighting",
- },
-
- // Billo
- fishingforhacks: {
- accuracy: 100,
- basePower: 80,
- category: "Special",
- desc: "Knocks off opponent's item and randomly sets Stealth Rocks, Spikes, or Toxic Spikes.",
- shortDesc: "Knock off foe's item. Set random hazard.",
- name: "Fishing for Hacks",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Mist Ball', target);
- },
- onAfterHit(target, source) {
- if (source.hp) {
- const item = target.takeItem(source);
- if (item) {
- this.add('-enditem', target, item.name, '[from] move: Fishing for Hacks', '[of] ' + source);
- }
- }
- const hazard = this.sample(['Stealth Rock', 'Spikes', 'Toxic Spikes']);
- target.side.addSideCondition(hazard);
- },
- secondary: null,
- target: "normal",
- type: "Fairy",
- },
-
- // Blaz
- bleakdecember: {
- accuracy: 100,
- basePower: 80,
- category: "Special",
- desc: "Damage is calculated using the user's Special Defense stat as its Special Attack, including stat stage changes. Other effects that modify the Special Attack stat are used as normal.",
- shortDesc: "Uses user's SpD stat as SpA in damage calculation.",
- name: "Bleak December",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Spirit Break', target);
- },
- overrideOffensiveStat: 'spd',
- secondary: null,
- target: "normal",
- type: "Fairy",
- },
-
- // Brandon
- flowershower: {
- accuracy: 100,
- basePower: 100,
- category: "Special",
- desc: "This move is physical if the target's Defense is lower than the target's Special Defense.",
- shortDesc: "Physical if target Def < Sp. Def.",
- name: "Flower Shower",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Petal Dance', target);
- },
- onModifyMove(move, source, target) {
- if (target && target.getStat('def', false, true) < target.getStat('spd', false, true)) {
- move.category = "Physical";
- }
- },
- secondary: null,
- target: "normal",
- type: "Grass",
- },
-
- // Used for Brandon's ability
- baneterrain: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "For 5 turns, the terrain becomes Bane Terrain. During the effect, moves hit off of the Pokemon's weaker attacking stat. Fails if the current terrain is Bane Terrain.",
- shortDesc: "5 turns. Moves hit off of weaker stat.",
- name: "Bane Terrain",
- pp: 10,
- priority: 0,
- flags: {nonsky: 1},
- terrain: 'baneterrain',
- condition: {
- duration: 5,
- durationCallback(source, effect) {
- if (source?.hasItem('terrainextender')) {
- return 8;
- }
- return 5;
- },
- onModifyMove(move, source, target) {
- if (move.overrideOffensiveStat && !['atk', 'spa'].includes(move.overrideOffensiveStat)) return;
- const attacker = move.overrideOffensivePokemon === 'target' ? target : source;
- if (!attacker) return;
- const attackerAtk = attacker.getStat('atk', false, true);
- const attackerSpa = attacker.getStat('spa', false, true);
- move.overrideOffensiveStat = attackerAtk > attackerSpa ? 'spa' : 'atk';
- },
- // Stat modifying in scripts.ts
- onFieldStart(field, source, effect) {
- if (effect?.effectType === 'Ability') {
- this.add('-fieldstart', 'move: Bane Terrain', '[from] ability: ' + effect, '[of] ' + source);
- } else {
- this.add('-fieldstart', 'move: Bane Terrain');
- }
- this.add('-message', 'The battlefield suddenly became grim!');
- },
- onFieldResidualOrder: 21,
- onFieldResidualSubOrder: 3,
- onFieldEnd() {
- this.add('-fieldend', 'move: Bane Terrain');
- },
- },
- secondary: null,
- target: "all",
- type: "Grass",
- zMove: {boost: {def: 1}},
- contestType: "Beautiful",
- },
-
- // brouha
- kinetosis: {
- accuracy: 100,
- basePower: 70,
- category: "Special",
- desc: "Badly poisons the target. If it is the user's first turn out, this move has +3 priority.",
- shortDesc: "First turn: +3 priority. Target: TOX.",
- name: "Kinetosis",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Aeroblast', target);
- this.add('-anim', source, 'Haze', target);
- },
- onModifyPriority(priority, source) {
- if (source.activeMoveActions < 1) return priority + 3;
- },
- secondary: {
- chance: 100,
- status: 'tox',
- },
- target: 'normal',
- type: 'Flying',
- },
-
- // Buffy
- pandorasbox: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Gains Protean and replaces Swords Dance and Pandora's Box with two moves from two random types.",
- shortDesc: "Gains Protean and some random moves.",
- name: "Pandora's Box",
- gen: 8,
- pp: 5,
- priority: 1,
- flags: {snatch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Teeter Dance', target);
- },
- volatileStatus: 'pandorasbox',
- condition: {
- onStart(target) {
- const typeMovePair: {[key: string]: string} = {
- Normal: 'Body Slam',
- Fighting: 'Drain Punch',
- Flying: 'Floaty Fall',
- Poison: 'Baneful Bunker',
- Ground: 'Shore Up',
- Rock: 'Stealth Rock',
- Bug: 'Sticky Web',
- Ghost: 'Shadow Sneak',
- Steel: 'Iron Defense',
- Fire: 'Fire Fang',
- Water: 'Life Dew',
- Grass: 'Synthesis',
- Electric: 'Thunder Fang',
- Psychic: 'Psychic Fangs',
- Ice: 'Icicle Crash',
- Dragon: 'Dragon Darts',
- Dark: 'Taunt',
- Fairy: 'Play Rough',
- };
- const newMoveTypes = Object.keys(typeMovePair);
- this.prng.shuffle(newMoveTypes);
- const moves = [typeMovePair[newMoveTypes[0]], typeMovePair[newMoveTypes[1]]];
- target.m.replacedMoves = moves;
- for (const moveSlot of target.moveSlots) {
- if (!(moveSlot.id === 'swordsdance' || moveSlot.id === 'pandorasbox')) continue;
- if (!target.m.backupMoves) {
- target.m.backupMoves = [this.dex.deepClone(moveSlot)];
- } else {
- target.m.backupMoves.push(this.dex.deepClone(moveSlot));
- }
- const moveData = this.dex.moves.get(this.toID(moves.pop()));
- if (!moveData.id) continue;
- target.moveSlots[target.moveSlots.indexOf(moveSlot)] = {
- move: moveData.name,
- id: moveData.id,
- pp: Math.floor(moveData.pp * (moveSlot.pp / moveSlot.maxpp)),
- maxpp: ((moveData.noPPBoosts || moveData.isZ) ? moveData.pp : moveData.pp * 8 / 5),
- target: moveData.target,
- disabled: false,
- disabledSource: '',
- used: false,
- };
- }
- target.setAbility('protean');
- this.add('-ability', target, target.getAbility().name, '[from] move: Pandora\'s Box');
- this.add('-message', `${target.name} learned new moves!`);
- },
- onEnd(pokemon) {
- if (!pokemon.m.backupMoves) return;
- for (const [index, moveSlot] of pokemon.moveSlots.entries()) {
- if (!(pokemon.m.replacedMoves.includes(moveSlot.move))) continue;
- pokemon.moveSlots[index] = pokemon.m.backupMoves.shift();
- pokemon.moveSlots[index].pp = Math.floor(pokemon.moveSlots[index].maxpp * (moveSlot.pp / moveSlot.maxpp));
- }
- delete pokemon.m.backupMoves;
- delete pokemon.m.replacedMoves;
- },
- },
- target: "self",
- type: "Dragon",
- },
-
- // Cake
- kevin: {
- accuracy: true,
- basePower: 100,
- category: "Physical",
- desc: "This move combines the user's current typing in its type effectiveness against the target. If the target lost HP, the user takes recoil damage equal to 1/8 of the HP lost by the target, rounded half up, but not less than 1 HP.",
- shortDesc: "This move is the user's type combo. 1/8 recoil.",
- name: "Kevin",
- gen: 8,
- pp: 10,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source, move) {
- this.add('-anim', source, 'Brave Bird', target);
- if (!this.randomChance(255, 256)) {
- this.attrLastMove('[miss]');
- this.add('-activate', target, 'move: Celebrate');
- this.add('-miss', source);
- this.hint("In Super Staff Bros, this move can still miss 1/256 of the time regardless of accuracy or evasion.");
- return null;
- }
- },
- onModifyType(move, pokemon, target) {
- move.type = pokemon.types[0];
- },
- onTryImmunity(target, pokemon) {
- if (pokemon.types[1]) {
- if (!target.runImmunity(pokemon.types[1])) return false;
- }
- return true;
- },
- onEffectiveness(typeMod, target, type, move) {
- if (!target) return;
- const pokemon = target.side.foe.active[0];
- if (pokemon.types[1]) {
- return typeMod + this.dex.getEffectiveness(pokemon.types[1], type);
- }
- return typeMod;
- },
- priority: 0,
- recoil: [1, 8],
- secondary: null,
- target: "normal",
- type: "Bird",
- },
-
- // cant say
- neverlucky: {
- accuracy: 85,
- basePower: 110,
- category: "Special",
- desc: "Doubles base power if statused. Has a 10% chance to boost every stat 1 stage. High Crit Ratio.",
- shortDesc: "x2 power if statused. 10% omniboost. High crit.",
- name: "Never Lucky",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Overheat', target);
- },
- onBasePower(basePower, pokemon) {
- if (pokemon.status && pokemon.status !== 'slp') {
- return this.chainModify(2);
- }
- },
- secondary: {
- chance: 10,
- self: {
- boosts: {
- atk: 1,
- def: 1,
- spa: 1,
- spd: 1,
- spe: 1,
- },
- },
- },
- critRatio: 2,
- target: "normal",
- type: "Fire",
- },
-
- // Celine
- statusguard: {
- accuracy: 100,
- basePower: 0,
- category: "Status",
- desc: "Protects from physical moves. If hit by physical move, opponent is either badly poisoned, burned, or paralyzed at random and is forced out. Special attacks and status moves go through this protect.",
- shortDesc: "Protected from physical moves. Gives brn/par/tox.",
- name: "Status Guard",
- gen: 8,
- pp: 10,
- priority: 4,
- flags: {},
- stallingMove: true,
- volatileStatus: 'statusguard',
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onHit(pokemon) {
- pokemon.addVolatile('stall');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Protect', source);
- },
- onTryHit(pokemon) {
- return !!this.queue.willAct() && this.runEvent('StallMove', pokemon);
- },
- condition: {
- duration: 1,
- onStart(target) {
- this.add('-singleturn', target, 'Protect');
- },
- onTryHitPriority: 3,
- onTryHit(target, source, move) {
- if (!move.flags['protect']) {
- if (move.isZ || (move.isMax && !move.breaksProtect)) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
- if (move.category === 'Special' || move.category === 'Status') {
- return;
- } else if (move.smartTarget) {
- move.smartTarget = false;
- } else {
- this.add('-activate', target, 'move: Protect');
- }
- const lockedmove = source.getVolatile('lockedmove');
- if (lockedmove) {
- // Outrage counter is reset
- if (source.volatiles['lockedmove'].duration === 2) {
- delete source.volatiles['lockedmove'];
- }
- }
- if (move.category === 'Physical') {
- const statuses = ['brn', 'par', 'tox'];
- source.trySetStatus(this.sample(statuses), target);
- source.forceSwitchFlag = true;
- }
- return this.NOT_FAIL;
- },
- onHit(target, source, move) {
- if (move.category === 'Physical') {
- const statuses = ['brn', 'par', 'tox'];
- source.trySetStatus(this.sample(statuses), target);
- source.forceSwitchFlag = true;
- }
- },
- },
- secondary: null,
- target: "self",
- type: "Normal",
- },
-
- // c.kilgannon
- soulsiphon: {
- accuracy: 100,
- basePower: 70,
- category: "Physical",
- desc: "Lowers the target's Attack by 1 stage. The user restores its HP equal to the target's Attack stat calculated with its stat stage before this move was used. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down. Fails if the target's Attack stat stage is -6.",
- shortDesc: "User heals HP=target's Atk stat. Lowers Atk by 1.",
- name: "Soul Siphon",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {contact: 1, mirror: 1, protect: 1, heal: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Supersonic Skystrike', target);
- },
- onHit(target, source) {
- if (target.boosts.atk === -6) return false;
- const atk = target.getStat('atk', false, true);
- const success = this.boost({atk: -1}, target, source, null, false, true);
- return !!(this.heal(atk, source, target) || success);
- },
- secondary: null,
- target: "normal",
- type: "Flying",
- },
-
- // Coconut
- devolutionbeam: {
- accuracy: 100,
- basePower: 80,
- category: "Special",
- desc: "If the target Pokemon is evolved, this move will reduce the target to its first-stage form. If the target Pokemon is single-stage or is already in its first-stage form, this move lowers all of the opponent's stats by 1. Hits Ghost types.",
- shortDesc: "Devolves evolved mons;-1 all stats to LC.",
- name: "Devolution Beam",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {protect: 1},
- ignoreImmunity: {'Normal': true},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Psywave', target);
- },
- onHit(target, source, move) {
- let species = target.species;
- if (species.isMega) species = this.dex.species.get(species.baseSpecies);
- const ability = target.ability;
- const isSingleStage = (species.nfe && !species.prevo) || (!species.nfe && !species.prevo);
- if (!isSingleStage) {
- let prevo = species.prevo;
- if (this.dex.species.get(prevo).prevo) {
- prevo = this.dex.species.get(prevo).prevo;
- }
- target.formeChange(prevo, this.effect);
- target.canMegaEvo = null;
- target.setAbility(ability);
- } else {
- this.boost({atk: -1, def: -1, spa: -1, spd: -1, spe: -1}, target, source);
- }
- },
- secondary: null,
- target: "normal",
- type: "Normal",
- },
-
- // dogknees
- bellyrubs: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Heals the user by 25% of their maximum HP. Boosts the user's Attack and Defense by 1 stage.",
- shortDesc: "Heals 25% HP. Boosts Atk/Def by 1 stage.",
- name: "Belly Rubs",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {heal: 1, snatch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Belly Drum', target);
- },
- self: {
- boosts: {
- atk: 1,
- def: 1,
- },
- },
- onHit(pokemon, target, move) {
- this.heal(pokemon.maxhp / 4, pokemon, pokemon, move);
- },
- secondary: null,
- zMove: {boost: {spe: 1}},
- target: "self",
- type: "Normal",
- },
-
- // drampa's grandpa
- getoffmylawn: {
- accuracy: 100,
- basePower: 78,
- category: "Special",
- desc: "The target is forced out after being damaged.",
- shortDesc: "Phazes target.",
- name: "GET OFF MY LAWN!",
- gen: 8,
- pp: 10,
- priority: -6,
- flags: {protect: 1, sound: 1, bypasssub: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Boomburst', target);
- },
- onHit() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('drampa\'s grandpa')}|GET OFF MY LAWN!!!`);
- },
- secondary: null,
- forceSwitch: true,
- target: "normal",
- type: "Normal",
- },
-
- // DragonWhale
- cloakdance: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "If Mimikyu's Disguise is intact, the user is not Mimikyu, or Mimikyu is the last remaining Pokemon, Attack goes up 2 stages. If Mimikyu's Disguise is busted and there are other Pokemon on Mimikyu's side, the Disguise will be repaired and Mimikyu will switch out.",
- shortDesc: "Busted: Repair, switch. Last mon/else: +2 Atk.",
- name: "Cloak Dance",
- pp: 5,
- priority: 0,
- flags: {snatch: 1, dance: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- const moveAnim = (!source.abilityState.busted || source.side.pokemonLeft === 1) ? 'Swords Dance' : 'Teleport';
- this.add('-anim', source, moveAnim, target);
- },
- onHit(target, source) {
- if (!source.abilityState.busted || source.side.pokemonLeft === 1) {
- this.boost({atk: 2}, target);
- } else {
- delete source.abilityState.busted;
- if (source.species.baseSpecies === 'Mimikyu') source.formeChange('Mimikyu', this.effect, true);
- source.switchFlag = true;
- }
- },
- secondary: null,
- target: "self",
- type: "Fairy",
- },
-
- // dream
- lockandkey: {
- accuracy: 100,
- basePower: 0,
- category: "Status",
- desc: "Raises the user's Special Attack and Special Defense stats by 1 stage and prevents the target from switching out.",
- shortDesc: "Raises user's SpA and SpD by 1. Traps foe.",
- name: "Lock and Key",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {snatch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Calm Mind', source);
- this.add('-anim', target, 'Imprison', target);
- },
- onHit(target, source, move) {
- if (source.isActive) target.addVolatile('trapped', source, move, 'trapper');
- },
- self: {
- boosts: {
- spa: 1,
- spd: 1,
- },
- },
- secondary: null,
- target: "allAdjacentFoes",
- type: "Steel",
- },
-
- // Elgino
- navisgrace: {
- accuracy: 100,
- basePower: 90,
- category: "Special",
- desc: "This move is super effective on Steel- and Poison-type Pokemon.",
- shortDesc: "Super effective on Steel- and Poison-types.",
- name: "Navi's Grace",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {protect: 1},
- secondary: null,
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Dazzling Gleam', target);
- this.add('-anim', source, 'Earth Power', target);
- },
- onEffectiveness(typeMod, target, type) {
- if (type === 'Poison' || type === 'Steel') return 1;
- },
- target: 'normal',
- type: 'Fairy',
- },
-
- // Emeri
- forcedlanding: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "The user restores 1/2 of its maximum HP, rounded half up. For 5 turns, the evasiveness of all active Pokemon is multiplied by 0.6. At the time of use, Bounce, Fly, Magnet Rise, Sky Drop, and Telekinesis end immediately for all active Pokemon. During the effect, Bounce, Fly, Flying Press, High Jump Kick, Jump Kick, Magnet Rise, Sky Drop, Splash, and Telekinesis are prevented from being used by all active Pokemon. Ground-type attacks, Spikes, Toxic Spikes, Sticky Web, and the Arena Trap Ability can affect Flying types or Pokemon with the Levitate Ability. Fails if this move is already in effect.",
- shortDesc: "Restore 50% HP + set Gravity.",
- name: "Forced Landing",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {heal: 1},
- onHit(pokemon, target, move) {
- this.heal(pokemon.maxhp / 2, pokemon, pokemon, move);
- },
- pseudoWeather: 'gravity',
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Roost', source);
- this.add('-anim', source, 'Gravity', source);
- },
- secondary: null,
- target: "self",
- type: "Flying",
- },
-
- // EpicNikolai
- epicrage: {
- accuracy: 95,
- basePower: 120,
- category: "Physical",
- desc: "Has a 25% chance to paralyze the target, and take 40% recoil. If the user is fire-type, it has a 25% chance to burn the target and take 33% recoil.",
- shortDesc: "25% Par + 40% recoil.Fire: 25% burn + 33% recoil.",
- name: "Epic Rage",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Draco Meteor', target);
- },
- onModifyMove(move, pokemon) {
- if (!pokemon.types.includes('Fire')) return;
- move.secondaries = [{
- chance: 25,
- status: 'brn',
- }];
- move.recoil = [33, 100];
- },
- recoil: [4, 10],
- secondary: {
- chance: 25,
- status: "par",
- },
- target: "normal",
- type: "Fire",
- },
-
- // estarossa
- sandbalance: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "The user uses Roar, then switches out after forcing out the opposing Pokemon.",
- shortDesc: "Uses Roar, switches out after.",
- name: "Sand Balance",
- gen: 8,
- pp: 10,
- priority: -6,
- flags: {bypasssub: 1, protect: 1, mirror: 1, sound: 1, reflectable: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Roar', target);
- this.add('-anim', source, 'Parting Shot', target);
- },
- forceSwitch: true,
- selfSwitch: true,
- secondary: null,
- target: "normal",
- type: "Ground",
- },
-
- // explodingdaisies
- youhavenohope: {
- accuracy: 100,
- basePower: 0,
- damageCallback(pokemon, target) {
- return target.getUndynamaxedHP() - pokemon.hp;
- },
- onTryImmunity(target, pokemon) {
- return pokemon.hp < target.hp;
- },
- category: "Physical",
- desc: "Lowers the target's HP to the user's HP. This move bypasses the target's substitute.",
- shortDesc: "Lowers the target's HP to the user's HP.",
- name: "You Have No Hope!",
- pp: 1,
- noPPBoosts: true,
- priority: 0,
- flags: {bypasssub: 1, contact: 1, protect: 1, mirror: 1},
- gen: 8,
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Endeavor', target);
- },
- onHit(target, source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('explodingdaisies')}|You have no hope ${target.name}!`);
- },
- secondary: null,
- target: "normal",
- type: "Normal",
- },
- // fart
- soupstealing7starstrikeredux: {
- accuracy: 100,
- basePower: 40,
- basePowerCallback() {
- if (this.field.pseudoWeather.soupstealing7starstrikeredux) {
- return 40 * this.field.pseudoWeather.soupstealing7starstrikeredux.multiplier;
- }
- return 40;
- },
- category: "Physical",
- desc: "This move is either a Water, Fire, or Grass type move. The selected type is added to the user of this move. For every consecutive turn that this move is used by at least one Pokemon, this move's power is multiplied by the number of turns to pass, but not more than 5.",
- shortDesc: "Change type to F/W/G. Power+ on repeat.",
- name: "Soup-Stealing 7-Star Strike: Redux",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
- onTry() {
- this.field.addPseudoWeather('soupstealing7starstrikeredux');
- },
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, "Conversion", source);
- },
- onModifyMove(move, pokemon) {
- const types = ['Fire', 'Water', 'Grass'];
- const randomType = this.sample(types);
- move.type = randomType;
- pokemon.addType(randomType);
- this.add('-start', pokemon, 'typeadd', randomType);
- },
- onHit(target, source) {
- this.add('-anim', source, 'Spectral Thief', target);
- if (this.randomChance(1, 2)) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|I hl on soup`);
- } else {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('fart')}|I walk with purpose. bring me soup.`);
- }
- },
- condition: {
- duration: 2,
- onFieldStart() {
- this.effectState.multiplier = 1;
- },
- onFieldRestart() {
- if (this.effectState.duration !== 2) {
- this.effectState.duration = 2;
- if (this.effectState.multiplier < 5) {
- this.effectState.multiplier++;
- }
- }
- },
- },
- secondary: null,
- target: "normal",
- type: "Normal",
- },
-
- // Felucia
- riggeddice: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Inverts target's stat boosts if they have any; taunts otherwise. User then switches out.",
- shortDesc: "If target has boosts, invert; else, taunt. Switch out.",
- name: "Rigged Dice",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, reflectable: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Smart Strike', source);
- },
- onHit(target, source, move) {
- let success = false;
- let i: BoostID;
- for (i in target.boosts) {
- if (target.boosts[i] === 0) continue;
- target.boosts[i] = -target.boosts[i];
- success = true;
- }
- if (success) {
- this.add('-invertboost', target, '[from] move: Rigged Dice');
- } else {
- target.addVolatile("taunt");
- }
- },
- selfSwitch: true,
- secondary: null,
- target: "normal",
- type: "Ice",
- },
-
- // Finland
- cradilychaos: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "All Pokemon on the field get a +1 boost to a random stat. The target is badly poisoned, regardless of typing. If the user is Alcremie, it changes to a non-Vanilla Cream forme.",
- shortDesc: "Random boosts to all mons. Tox. Change forme.",
- name: "Cradily Chaos",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, reflectable: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Psywave', target);
- },
- onHit(target, source, move) {
- const boosts: BoostID[] = ['atk', 'def', 'spa', 'spd', 'spe'];
- const selfBoost: SparseBoostsTable = {};
- selfBoost[boosts[this.random(5)]] = 1;
- const oppBoost: SparseBoostsTable = {};
- oppBoost[boosts[this.random(5)]] = 1;
- this.boost(selfBoost, source);
- this.boost(oppBoost, target);
- target.trySetStatus('tox', source);
- if (source.species.baseSpecies === 'Alcremie') {
- const formes = ['Finland', 'Finland-Tsikhe', 'Finland-Nezavisa', 'Finland-Järvilaulu']
- .filter(forme => ssbSets[forme].species !== source.species.name);
- const newSet = this.sample(formes);
- changeSet(this, source, ssbSets[newSet]);
- }
- },
- secondary: null,
- target: "normal",
- type: "Poison",
- },
-
- // frostyicelad
- frostywave: {
- accuracy: 100,
- basePower: 95,
- category: "Special",
- desc: "This move and its effects ignore the Abilities of other Pokemon.",
- shortDesc: "Ignores abilities.",
- name: "Frosty Wave",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
- ignoreAbility: true,
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Boomburst', target);
- this.add('-anim', source, 'Frost Breath', target);
- },
- secondary: null,
- target: "allAdjacentFoes",
- type: "Ice",
- },
-
- // gallant's pear
- kinggirigirislash: {
- accuracy: 100,
- basePower: 100,
- category: "Special",
- desc: "Removes the opponent's Reflect, Light Screen, Aurora Veil, and Safeguard. Secondary effect depends on the user's secondary typing: Psychic: 100% chance to lower target's Speed by 1; Fire: 10% burn; Steel: 10% flinch; Rock: apply Smack Down; Electric: 10% paralyze; else: no additional effect.",
- shortDesc: "Breaks screens. Secondary depends on type.",
- name: "King Giri Giri Slash",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onModifyMove(move, pokemon) {
- move.type = pokemon.types[1] || "Normal";
- if (!move.secondaries) move.secondaries = [];
- if (move.type === 'Rock') {
- move.secondaries.push({
- chance: 100,
- volatileStatus: 'smackdown',
- });
- } else if (move.type === 'Fire') {
- move.secondaries.push({
- chance: 10,
- status: 'brn',
- });
- } else if (move.type === 'Steel') {
- move.secondaries.push({
- chance: 10,
- volatileStatus: 'flinch',
- });
- } else if (move.type === 'Electric') {
- move.secondaries.push({
- chance: 10,
- status: 'par',
- });
- } else if (move.type === 'Psychic') {
- move.secondaries.push({
- chance: 100,
- boosts: {spe: -1},
- });
- }
- },
- onTryHit(pokemon, source, move) {
- // will shatter screens through sub, before you hit
- if (pokemon.runImmunity(move.type)) {
- pokemon.side.removeSideCondition('reflect');
- pokemon.side.removeSideCondition('lightscreen');
- pokemon.side.removeSideCondition('auroraveil');
- }
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Solar Blade', target);
- },
- secondary: null,
- target: "normal",
- type: "Normal",
- },
-
- // Gimmick
- randomscreaming: {
- accuracy: 100,
- basePower: 50,
- category: "Special",
- desc: "Has a 10% chance to freeze the target. If the target is frozen, this move will deal double damage and thaw the target.",
- shortDesc: "10% frz. FRZ: 2x damage then thaw.",
- name: "Random Screaming",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Hyper Voice', target);
- this.add('-anim', source, 'Misty Terrain', target);
- },
- onBasePower(basePower, source, target, move) {
- if (target.status === 'frz') {
- return this.chainModify(2);
- }
- },
- secondary: {
- chance: 10,
- status: 'frz',
- onHit() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Gimmick')}|Show me some more paaain, baaaby`);
- },
- },
- thawsTarget: true,
- target: "normal",
- type: "Fire",
- },
-
- // GMars
- gacha: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Lowers the user's Defense and Special Defense by 1 stage. Raises the user's Attack, Special Attack, and Speed by 2 stages. If the user is Minior-Meteor, its forme changes, with a different effect for each forme.",
- shortDesc: "Shell Smash; Minior: change forme.",
- name: "Gacha",
- pp: 15,
- priority: 0,
- flags: {snatch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Brick Break', source);
- },
- onHit(target, source, move) {
- if (target.species.id !== 'miniormeteor') return;
- let forme: string;
- let message = "";
- const random = this.random(100);
- let shiny = false;
- if (random < 3) {
- forme = "Minior-Violet";
- message = "Oof, Violet. Tough break. A Violet Minior is sluggish and won't always listen to your commands. Best of luck! Rating: ★ ☆ ☆ ☆ ☆ ";
- } else if (random < 13) {
- forme = "Minior-Indigo";
- message = "Uh oh, an Indigo Minior. Its inspiring color may have had some unintended effects and boosted your foe's attacking stats. Better hope you can take it down first! Rating: ★ ☆ ☆ ☆ ☆";
- } else if (random < 33) {
- forme = "Minior";
- message = "Nice one, a Red Minior is hard for your opponent to ignore. They'll be goaded into attacking the first time they see this! Rating: ★ ★ ★ ☆ ☆ ";
- } else if (random < 66) {
- forme = "Minior-Orange";
- message = "Solid, you pulled an Orange Minior. Nothing too fancy, but it can definitely get the job done if you use it right. Rating: ★ ★ ☆ ☆ ☆";
- } else if (random < 86) {
- forme = "Minior-Yellow";
- message = "Sweet, a Yellow Minior! This thing had a lot of static energy built up that released when you cracked it open, paralyzing the foe. Rating: ★ ★ ★ ☆ ☆ ";
- } else if (random < 96) {
- forme = "Minior-Blue";
- message = "Woah! You got a Blue Minior. This one's almost translucent; it looks like it'd be hard for an opponent to find a way to reduce its stats. Rating: ★ ★ ★ ★ ☆";
- } else if (random < 99) {
- forme = "Minior-Green";
- message = "Nice! You cracked a Green Minior, that's definitely a rare one. This type of Minior packs an extra punch, and it's great for breaking through defensive teams without risking multiple turns of setup. Rating: ★ ★ ★ ★ ★";
- } else {
- forme = "Minior";
- shiny = true;
- target.set.shiny = true;
- target.m.nowShiny = true;
- message = "YO!! I can't believe it, you cracked open a Shiny Minior! Its multicolored interior dazzles its opponents and throws off their priority moves. Big grats. Rating: ★ ★ ★ ★ ★ ★";
- }
- target.formeChange(forme, move, true);
- const details = target.species.name + (target.level === 100 ? '' : ', L' + target.level) +
- (target.gender === '' ? '' : ', ' + target.gender) + (target.set.shiny ? ', shiny' : '');
- if (shiny) this.add('replace', target, details);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('GMars')}|${message}`);
- target.setAbility('capsulearmor');
- target.baseAbility = target.ability;
- if (target.set.shiny) return;
- if (forme === 'Minior-Indigo') {
- this.boost({atk: 1, spa: 1}, target.side.foe.active[0]);
- } else if (forme === 'Minior') {
- target.side.foe.active[0].addVolatile('taunt');
- } else if (forme === 'Minior-Yellow') {
- target.side.foe.active[0].trySetStatus('par', target);
- } else if (forme === 'Minior-Green') {
- this.boost({atk: 1}, target);
- }
- },
- boosts: {
- def: -1,
- spd: -1,
- atk: 2,
- spa: 2,
- spe: 2,
- },
- secondary: null,
- target: "self",
- type: "Normal",
- },
-
- // grimAuxiliatrix
- skyscrapersuplex: {
- accuracy: 100,
- basePower: 75,
- onBasePower(basePower, pokemon, target) {
- if (target?.statsRaisedThisTurn) {
- return this.chainModify(2);
- }
- },
- category: "Special",
- desc: "Power doubles if the target had a stat stage raised this turn.",
- shortDesc: "2x power if the target that had a stat rise this turn.",
- name: "Skyscraper Suplex",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Steel Beam', target);
- },
- secondary: null,
- target: "normal",
- type: "Steel",
- },
-
- // HoeenHero
- landfall: {
- accuracy: 100,
- category: "Special",
- basePower: 0,
- basePowerCallback(target, source, move) {
- const windSpeeds = [65, 85, 85, 95, 95, 95, 95, 115, 115, 140];
- move.basePower = windSpeeds[this.random(0, 10)];
- return move.basePower;
- },
- desc: "The foe is hit with a hurricane with a Base Power that varies based on the strength (category) of the hurricane. Category 1 is 65, category 2 is 85, category 3 is 95, category 4 is 115, and category 5 is 140. In addition, the target's side of the field is covered in a storm surge. Storm surge applies a 75% Speed multiplier to pokemon on that side of the field. Storm surge will last for as many turns as the hurricane's category (not including the turn Landfall was used).",
- shortDesc: "Higher category = +dmg, foe side speed 75%.",
- name: "Landfall",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Hurricane', target);
- this.add('-anim', source, 'Surf', target);
- },
- onHit(target, source, move) {
- const windSpeeds = [65, 85, 95, 115, 140];
- const category = windSpeeds.indexOf(move.basePower) + 1;
- this.add('-message', `A category ${category} hurricane made landfall!`);
- },
- sideCondition: 'stormsurge', // Programmed in conditions.ts
- target: "normal",
- type: "Water",
- },
-
- // Hubriz
- steroidanaphylaxia: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Inverts the target's stat stages.",
- name: "Steroid Anaphylaxia",
- gen: 8,
- pp: 20,
- priority: 1,
- flags: {protect: 1, reflectable: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onHit(target) {
- let success = false;
- let i: BoostID;
- for (i in target.boosts) {
- if (target.boosts[i] === 0) continue;
- target.boosts[i] = -target.boosts[i];
- success = true;
- }
- if (!success) return false;
- this.add('-invertboost', target, '[from] move: Steroid Anaphylaxia');
- },
- target: "normal",
- type: "Poison",
- },
-
- // Hydro
- hydrostatics: {
- accuracy: 100,
- basePower: 75,
- category: "Special",
- desc: "Has a 70% chance to raise the user's Special Attack by 1 stage and a 50% chance to paralyze the target. This move combines Electric in its type effectiveness against the target.",
- shortDesc: "70% +1 SpA; 50% par; +Electric in type effect.",
- name: "Hydrostatics",
- gen: 8,
- pp: 10,
- priority: 2,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Origin Pulse', target);
- this.add('-anim', source, 'Charge Beam', target);
- },
- secondaries: [{
- chance: 70,
- self: {
- boosts: {
- spa: 1,
- },
- },
- }, {
- chance: 50,
- status: 'par',
- }],
- onEffectiveness(typeMod, target, type, move) {
- return typeMod + this.dex.getEffectiveness('Electric', type);
- },
- target: "normal",
- type: "Water",
- },
-
- // Inactive
- paranoia: {
- accuracy: 90,
- basePower: 100,
- category: "Physical",
- desc: "Has a 15% chance to burn the target.",
- name: "Paranoia",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Max Flare', target);
- },
- secondary: {
- chance: 15,
- status: 'brn',
- },
- target: "normal",
- type: "Dark",
- },
-
- // instruct
- sodabreak: {
- accuracy: true,
- basePower: 10,
- category: "Physical",
- desc: "Has a 100% chance to make the target flinch. Causes the user to switch out. Fails unless it is the user's first turn on the field.",
- shortDesc: "First turn: Flinches the target then switches out.",
- name: "Soda Break",
- isNonstandard: "Custom",
- gen: 8,
- pp: 10,
- priority: 3,
- flags: {contact: 1, protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Milk Drink', source);
- this.add('-anim', source, 'Fling', target);
- this.add('-anim', source, 'U-turn', target);
- },
- onTry(pokemon, target) {
- if (pokemon.activeMoveActions > 1) {
- this.attrLastMove('[still]');
- this.add('-fail', pokemon);
- this.hint("Soda Break only works on your first turn out.");
- return null;
- }
- },
- secondary: {
- chance: 100,
- volatileStatus: 'flinch',
- },
- selfSwitch: true,
- target: "normal",
- type: "???",
- },
-
- // Iyarito
- patronaattack: {
- accuracy: 100,
- basePower: 50,
- category: "Special",
- desc: "Usually goes first.",
- name: "Patrona Attack",
- gen: 8,
- pp: 20,
- priority: 1,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Moongeist Beam', target);
- },
- secondary: null,
- target: "normal",
- type: "Ghost",
- },
-
- // Jett
- thehuntison: {
- accuracy: 100,
- basePower: 55,
- basePowerCallback(pokemon, target, move) {
- // You can't get here unless the pursuit effect succeeds
- if (target.beingCalledBack) {
- this.debug('The Hunt is On! damage boost');
- return move.basePower * 2;
- }
- return move.basePower;
- },
- category: "Physical",
- desc: "If an opposing Pokemon switches out this turn, this move hits that Pokemon before it leaves the field, even if it was not the original target. If the user moves after an opponent using Parting Shot, U-turn, or Volt Switch, but not Baton Pass, it will hit that opponent before it leaves the field. Power doubles and no accuracy check is done if the user hits an opponent switching out, and the user's turn is over; if an opponent faints from this, the replacement Pokemon does not become active until the end of the turn.",
- shortDesc: "Foe: 2x power when switching.",
- name: "The Hunt is On!",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Sucker Punch', target);
- this.add('-anim', source, 'Pursuit', target);
- },
- beforeTurnCallback(pokemon) {
- for (const side of this.sides) {
- if (side === pokemon.side) continue;
- side.addSideCondition('thehuntison', pokemon);
- const data = side.getSideConditionData('thehuntison');
- if (!data.sources) {
- data.sources = [];
- }
- data.sources.push(pokemon);
- }
- },
- onModifyMove(move, source, target) {
- if (target?.beingCalledBack) move.accuracy = true;
- },
- onTryHit(target, pokemon) {
- target.side.removeSideCondition('thehuntison');
- },
- onAfterMoveSecondarySelf(pokemon, target, move) {
- if (!target || target.fainted || target.hp <= 0) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Jett')}|Owned!`);
- }
- },
- condition: {
- duration: 1,
- onBeforeSwitchOut(pokemon) {
- this.debug('Thehuntison start');
- let alreadyAdded = false;
- pokemon.removeVolatile('destinybond');
- for (const source of this.effectState.sources) {
- if (!this.queue.cancelMove(source) || !source.hp) continue;
- if (!alreadyAdded) {
- this.add('-activate', pokemon, 'move: The Hunt is On!');
- alreadyAdded = true;
- }
- this.actions.runMove('thehuntison', source, source.getLocOf(pokemon));
- }
- },
- },
- secondary: null,
- target: "normal",
- type: "Dark",
- },
-
- // Jho
- genrechange: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "If the user is a Toxtricity, it changes into its Low-Key forme and Nasty Plot and Overdrive change to Aura Sphere and Boomburst, respectively. If the user is a Toxtricity in its Low-Key forme, it changes into its Amped forme and Aura Sphere and Boomburst turn into Nasty Plot and Overdrive, respectively. Raises the user's Speed by 1 stage.",
- shortDesc: "Toxtricity: +1 Speed. Changes forme.",
- name: "Genre Change",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {snatch: 1, sound: 1},
- onTryMove(pokemon, target, move) {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Screech', source);
- // The transform animation is done via `formeChange`
- },
- onHit(pokemon) {
- if (pokemon.species.baseSpecies === 'Toxtricity') {
- if (pokemon.species.forme === 'Low-Key') {
- changeSet(this, pokemon, ssbSets['Jho']);
- } else {
- changeSet(this, pokemon, ssbSets['Jho-Low-Key']);
- }
- }
- },
- boosts: {
- spe: 1,
- },
- secondary: null,
- target: "self",
- type: "Normal",
- },
-
- // Jordy
- archeopssrage: {
- accuracy: 85,
- basePower: 90,
- category: "Physical",
- desc: "Upon damaging the target, the user gains +1 Speed.",
- shortDesc: "+1 Speed upon hit.",
- name: "Archeops's Rage",
- gen: 8,
- pp: 5,
- flags: {contact: 1, protect: 1, mirror: 1},
- priority: 0,
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Sunsteel Strike', target);
- },
- self: {
- boosts: {
- spe: 1,
- },
- },
- secondary: null,
- target: "normal",
- type: "Flying",
- },
-
- // Kaiju Bunny
- cozycuddle: {
- accuracy: 95,
- basePower: 0,
- category: "Status",
- desc: "Traps the target and lowers its Attack and Defense by 2 stages.",
- shortDesc: "Target: trapped, Atk and Def lowered by 2.",
- name: "Cozy Cuddle",
- gen: 8,
- pp: 20,
- priority: 0,
- flags: {contact: 1, protect: 1, reflectable: 1},
- volatileStatus: 'cozycuddle',
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onTryHit(target, source, move) {
- if (target.volatiles['cozycuddle']) return false;
- if (target.volatiles['trapped']) {
- delete move.volatileStatus;
- }
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Flatter', target);
- this.add('-anim', source, 'Let\'s Snuggle Forever', target);
- },
- onHit(target, source, move) {
- this.boost({atk: -2, def: -2}, target, target);
- },
- condition: {
- onStart(pokemon, source) {
- this.add('-start', pokemon, 'Cozy Cuddle');
- },
- onTrapPokemon(pokemon) {
- if (this.effectState.source?.isActive) pokemon.tryTrap();
- },
- },
- secondary: null,
- target: "normal",
- type: "Fairy",
- },
-
- // Kalalokki
- blackbird: {
- accuracy: 100,
- basePower: 70,
- category: "Special",
- desc: "If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button or through the effect of the Emergency Exit or Wimp Out Abilities.",
- shortDesc: "User switches out after damaging the target.",
- name: "Blackbird",
- gen: 8,
- pp: 20,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- selfSwitch: true,
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Gust', target);
- this.add('-anim', source, 'Parting Shot', target);
- },
- secondary: null,
- target: "normal",
- type: "Flying",
- },
- gaelstrom: {
- accuracy: true,
- basePower: 140,
- category: "Special",
- desc: "Hits foe and phazes them out, phaze the next one out and then another one, set a random entry hazard at the end of the move.",
- shortDesc: "Hits foe, phazes 3 times, sets random hazard.",
- name: "Gaelstrom",
- gen: 8,
- pp: 1,
- noPPBoosts: true,
- priority: 0,
- flags: {},
- isZ: "kalalokkiumz",
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Hurricane', target);
- },
- sideCondition: 'gaelstrom',
- condition: {
- duration: 1,
- onSwitchIn(pokemon) {
- if (!this.effectState.count) this.effectState.count = 1;
- if (this.effectState.count < 3) {
- pokemon.forceSwitchFlag = true;
- this.effectState.count++;
- return;
- }
- pokemon.side.removeSideCondition('gaelstrom');
- },
- onSideStart(side, source) {
- side.addSideCondition(['spikes', 'toxicspikes', 'stealthrock', 'stickyweb'][this.random(4)], source);
- },
- },
- forceSwitch: true,
- target: "normal",
- type: "Flying",
- },
-
- // Kennedy
- topbins: {
- accuracy: 70,
- basePower: 130,
- category: "Physical",
- desc: "Has a 20% chance to burn the target and a 10% chance to cause the target to flinch.",
- shortDesc: "20% chance to burn. 10% chance to flinch.",
- name: "Top Bins",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Pyro Ball', target);
- this.add('-anim', source, 'Blaze Kick', target);
- },
- secondaries: [{
- chance: 20,
- status: 'brn',
- }, {
- chance: 10,
- volatileStatus: 'flinch',
- }],
- target: "normal",
- type: "Fire",
- },
-
- // Kev
- kingstrident: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Raises the user's Special Attack by 1 stage and Speed by 2 stages.",
- shortDesc: "Gives user +1 SpA and +2 Spe.",
- name: "King's Trident",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {snatch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target) {
- this.add('-anim', target, 'Dragon Dance', target);
- },
- self: {
- boosts: {
- spa: 1,
- spe: 2,
- },
- },
- secondary: null,
- target: "self",
- type: "Water",
- },
-
- // Kingbaruk
- leaveittotheteam: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "The user faints and the Pokemon brought out to replace it gets Healing Wish effects and has its Attack, Defense, Special Attack, and Special Defense boosted by 1 stage.",
- shortDesc: "User faints. Next: healed & +1 Atk/Def/SpA/SpD.",
- name: "Leave it to the team!",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {snatch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onTryHit(source) {
- if (!this.canSwitch(source.side)) {
- this.attrLastMove('[still]');
- this.add('-fail', source);
- return this.NOT_FAIL;
- }
- },
- selfdestruct: "ifHit",
- sideCondition: 'leaveittotheteam',
- condition: {
- duration: 2,
- onSideStart(side, source) {
- this.debug('Leave it to the team! started on ' + side.name);
- this.effectState.positions = [];
- for (const i of side.active.keys()) {
- this.effectState.positions[i] = false;
- }
- this.effectState.positions[source.position] = true;
- },
- onSideRestart(side, source) {
- this.effectState.positions[source.position] = true;
- },
- onSwitchInPriority: 1,
- onSwitchIn(target) {
- const positions: boolean[] = this.effectState.positions;
- if (target.getSlot() !== this.effectState.sourceSlot) {
- return;
- }
- if (!target.fainted) {
- target.heal(target.maxhp);
- this.boost({atk: 1, def: 1, spa: 1, spd: 1}, target);
- target.clearStatus();
- for (const moveSlot of target.moveSlots) {
- moveSlot.pp = moveSlot.maxpp;
- }
- this.add('-heal', target, target.getHealth, '[from] move: Leave it to the team!');
- positions[target.position] = false;
- }
- if (!positions.some(affected => affected === true)) {
- target.side.removeSideCondition('leaveittotheteam');
- }
- },
- },
- secondary: null,
- target: "self",
- type: "Fairy",
- },
-
- // KingSwordYT
- clashofpangoros: {
- accuracy: 100,
- basePower: 90,
- category: "Physical",
- desc: "Target can't use status moves for its next 3 turns. Lowers the target's Attack by 1 stage. At the end of the move, the user switches out.",
- shortDesc: "Taunts, lowers Atk, switches out.",
- name: "Clash of Pangoros",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, heal: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Black Hole Eclipse', target);
- },
- onHit(target, pokemon, move) {
- this.boost({atk: -1}, target, target, move);
- target.addVolatile('taunt', pokemon);
- },
- selfSwitch: true,
- secondary: null,
- target: "normal",
- type: "Dark",
- },
-
- // Kipkluif
- kipup: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "The user will survive attacks made by other Pokemon during this turn with at least 1 HP. When used, if hit by an attack on the same turn this move was used, this Pokemon boosts its Defense and Special Defense by 2 stages if the relevant stat is at 0 or lower, or 1 stage if the relevant stat is at +1 or higher, and increases priority of the next used move by 1.",
- shortDesc: "Endure;If hit, +Def/SpD; next move +1 prio.",
- name: "Kip Up",
- pp: 10,
- priority: 3,
- flags: {},
- onTryMove(source) {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Focus Energy', source);
- },
- onHit(target, pokemon, move) {
- if (pokemon.volatiles['kipup']) return false;
- pokemon.addVolatile('kipup');
- },
- condition: {
- duration: 1,
- onStart(pokemon) {
- this.add('-message', 'This Pokémon prepares itself to be knocked down!');
- },
- onDamagePriority: -10,
- onDamage(damage, target, source, effect) {
- if (this.effectState.gotHit) return damage;
- if (effect?.effectType === 'Move' && damage >= target.hp) {
- this.add('-activate', target, 'move: Kip Up');
- return target.hp - 1;
- }
- },
- onHit(pokemon, source, move) {
- if (!pokemon.hp) return;
- if (this.effectState.gotHit) return;
- if (!pokemon.isAlly(source) && move.category !== 'Status') {
- this.effectState.gotHit = true;
- this.add('-message', 'Gossifleur was prepared for the impact!');
- const boosts: {[k: string]: number} = {def: 2, spd: 2};
- if (pokemon.boosts.def >= 1) boosts.def--;
- if (pokemon.boosts.spd >= 1) boosts.spd--;
- this.boost(boosts, pokemon);
- this.add('-message', "Gossifleur did a Kip Up and can jump right back into the action!");
- this.effectState.duration++;
- }
- },
- onModifyPriority(priority, pokemon, target, move) {
- if (!this.effectState.gotHit) return priority;
- return priority + 1;
- },
- },
- secondary: null,
- target: "self",
- type: "Fighting",
- },
-
- // Kris
- alphabetsoup: {
- accuracy: true,
- basePower: 100,
- category: "Special",
- desc: "The user changes into a random Pokemon with a first name letter that matches the forme Unown is currently in (A -> Alakazam, etc) that has base stats that would benefit from Unown's EV/IV/Nature spread and moves. Using it while in a forme that is not Unown will make it revert back to the Unown forme it transformed in (If an Unown transforms into Alakazam, it'll transform back to Unown-A when used again). Light of Ruin becomes Strange Steam, Psystrike becomes Psyshock, Secret Sword becomes Aura Sphere, Mind Blown becomes Flamethrower, and Seed Flare becomes Apple Acid while in a non-Unown forme. This move's type varies based on the user's primary type.",
- shortDesc: "Transform into Unown/mon. Type=user 1st type.",
- name: "Alphabet Soup",
- gen: 8,
- pp: 20,
- priority: 0,
- flags: {protect: 1},
- onTryMove(source) {
- this.attrLastMove('[still]');
- if (source.name !== 'Kris') {
- this.add('-fail', source);
- this.hint("Only Kris can use Alphabet Soup.");
- return null;
- }
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Dark Pulse', target);
- this.add('-anim', source, 'Teleport', source);
- },
- onModifyType(move, pokemon) {
- let type = pokemon.types[0];
- if (type === "Bird") type = "???";
- move.type = type;
- },
- onHit(target, source) {
- if (!source) return;
- if (source.species.id.includes('unown')) {
- const monList = Object.keys(this.dex.data.Pokedex).filter(speciesid => {
- const species = this.dex.species.get(speciesid);
- if (species.id.startsWith('unown')) return false;
- if (species.isNonstandard && ['Gigantamax', 'Unobtainable'].includes(species.isNonstandard)) return false;
- if (['Arceus', 'Silvally'].includes(species.baseSpecies) && species.types[0] !== 'Normal') return false;
- if (species.baseStats.spa < 80) return false;
- if (species.baseStats.spe < 80) return false;
- const unownLetter = source.species.id.charAt(5) || 'a';
- if (!species.id.startsWith(unownLetter.trim().toLowerCase())) return false;
- return true;
- });
- source.formeChange(this.sample(monList), this.effect);
- source.setAbility('Protean');
- source.moveSlots = source.moveSlots.map(slot => {
- const newMoves: {[k: string]: string} = {
- lightofruin: 'strangesteam',
- psystrike: 'psyshock',
- secretsword: 'aurasphere',
- mindblown: 'flamethrower',
- seedflare: 'appleacid',
- };
- if (slot.id in newMoves) {
- const newMove = this.dex.moves.get(newMoves[slot.id]);
- const newSlot = {
- id: newMove.id,
- move: newMove.name,
- pp: newMove.pp * 8 / 5,
- maxpp: newMove.pp * 8 / 5,
- disabled: slot.disabled,
- used: false,
- };
- return newSlot;
- }
- return slot;
- });
- } else {
- let transformingLetter = source.species.id[0];
- if (transformingLetter === 'a') transformingLetter = '';
- source.formeChange(`unown${transformingLetter}`, this.effect, true);
- source.moveSlots = source.moveSlots.map(slot => {
- const newMoves: {[k: string]: string} = {
- strangesteam: 'lightofruin',
- psyshock: 'psystrike',
- aurasphere: 'secretsword',
- flamethrower: 'mindblown',
- appleacid: 'seedflare',
- };
- if (slot.id in newMoves) {
- const newMove = this.dex.moves.get(newMoves[slot.id]);
- const newSlot = {
- id: newMove.id,
- move: newMove.name,
- pp: newMove.pp * 8 / 5,
- maxpp: newMove.pp * 8 / 5,
- disabled: slot.disabled,
- used: false,
- };
- return newSlot;
- }
- return slot;
- });
- }
- },
- secondary: null,
- target: "normal",
- type: "Dark",
- },
-
- // Lamp
- soulswap: {
- accuracy: 100,
- basePower: 90,
- category: "Special",
- desc: "The user copies the target's positive stat stage changes and then inverts the target's stats.",
- shortDesc: "Copies target's stat boosts then inverts.",
- name: "Soul Swap",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Spectral Thief', target);
- this.add('-anim', source, 'Teleport', source);
- this.add('-anim', source, 'Topsy-Turvy', target);
- },
- onHit(target, source) {
- let i: BoostID;
- const boosts: SparseBoostsTable = {};
- for (i in target.boosts) {
- const stage = target.boosts[i];
- if (stage > 0) {
- boosts[i] = stage;
- }
- if (target.boosts[i] !== 0) {
- target.boosts[i] = -target.boosts[i];
- }
- }
- this.add('-message', `${source.name} stole ${target.name}'s boosts!`);
- this.boost(boosts, source);
- this.add('-invertboost', target, '[from] move: Soul Swap');
- },
- secondary: null,
- target: "normal",
- type: "Ghost",
- },
-
- // Lionyx
- bigbang: {
- accuracy: 100,
- basePower: 120,
- category: "Special",
- desc: "The user loses HP equal to 33% of the damage dealt by this attack. Resets the field by clearing all hazards, terrains, screens, and weather.",
- shortDesc: "33% recoil; removes field conditions.",
- name: "Big Bang",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Extreme Evoboost', source);
- this.add('-anim', source, 'Light of Ruin', target);
- this.add('-anim', source, 'Dark Void', target);
- },
- onHit(target, source, move) {
- let success = false;
- const removeAll = [
- 'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist',
- 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb',
- ];
- const silentRemove = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist'];
- for (const sideCondition of removeAll) {
- if (target.side.removeSideCondition(sideCondition)) {
- if (!silentRemove.includes(sideCondition)) {
- this.add('-sideend', target.side, this.dex.conditions.get(sideCondition).name, '[from] move: Big Bang', '[of] ' + source);
- }
- success = true;
- }
- if (source.side.removeSideCondition(sideCondition)) {
- if (!silentRemove.includes(sideCondition)) {
- this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Big Bang', '[of] ' + source);
- }
- success = true;
- }
- }
- this.field.clearTerrain();
- this.field.clearWeather();
- return success;
- },
- recoil: [33, 100],
- secondary: null,
- target: "normal",
- type: "Fairy",
- },
-
- // LittEleven
- nexthunt: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "If this Pokemon does not take damage this turn, it switches out to another Pokemon in the party and gives it a +2 boost corresponding to its highest stat. Fails otherwise.",
- shortDesc: "Focus: switch out, next Pokemon +2 Beast Boost.",
- name: "/nexthunt",
- pp: 10,
- priority: -6,
- flags: {snatch: 1},
- beforeTurnCallback(pokemon) {
- pokemon.addVolatile('nexthuntcheck');
- },
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Teleport', source);
- },
- beforeMoveCallback(pokemon) {
- if (pokemon.volatiles['nexthuntcheck'] && pokemon.volatiles['nexthuntcheck'].lostFocus) {
- this.add('cant', pokemon, '/nexthunt', '/nexthunt');
- return true;
- }
- },
- onHit(target, source, move) {
- this.add('-message', 'Time for the next hunt!');
- },
- sideCondition: 'nexthunt',
- condition: {
- duration: 1,
- onSideStart(side, source) {
- this.debug('/nexthunt started on ' + side.name);
- this.effectState.positions = [];
- for (const i of side.active.keys()) {
- this.effectState.positions[i] = false;
- }
- this.effectState.positions[source.position] = true;
- },
- onSideRestart(side, source) {
- this.effectState.positions[source.position] = true;
- },
- onSwitchInPriority: 1,
- onSwitchIn(target) {
- this.add('-activate', target, 'move: /nexthunt');
- let statName = 'atk';
- let bestStat = 0;
- let s: StatIDExceptHP;
- for (s in target.storedStats) {
- if (target.storedStats[s] > bestStat) {
- statName = s;
- bestStat = target.storedStats[s];
- }
- }
- this.boost({[statName]: 2}, target, null, this.dex.getActiveMove('/nexthunt'));
- },
- },
- selfSwitch: true,
- secondary: null,
- target: "self",
- type: "Normal",
- },
-
- // Lunala
- hatofwisdom: {
- accuracy: 100,
- basePower: 110,
- category: "Special",
- desc: "The user switches out, and this move deals damage one turn after it is used. At the end of that turn, the damage is calculated at that time and dealt to the Pokemon at the position the target had when the move was used. If the user is no longer active at the time, damage is calculated based on the user's natural Special Attack stat, types, and level, with no boosts from its held item or Ability. Fails if this move, Future Sight, or Doom Desire is already in effect for the target's position.",
- shortDesc: "Hits 1 turn after being used. User switches.",
- name: "Hat of Wisdom",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {futuremove: 1},
- ignoreImmunity: true,
- onTry(source, target) {
- this.attrLastMove('[still]');
- if (!target.side.addSlotCondition(target, 'futuremove')) return false;
- this.add('-anim', source, 'Calm Mind', target);
- this.add('-anim', source, 'Teleport', target);
- Object.assign(target.side.slotConditions[target.position]['futuremove'], {
- duration: 2,
- move: 'hatofwisdom',
- source: source,
- moveData: {
- id: 'hatofwisdom',
- name: "Hat of Wisdom",
- accuracy: 100,
- basePower: 110,
- category: "Special",
- priority: 0,
- flags: {futuremove: 1},
- ignoreImmunity: false,
- effectType: 'Move',
- type: 'Psychic',
- },
- });
- this.add('-start', source, 'move: Hat of Wisdom');
- source.switchFlag = 'hatofwisdom' as ID;
- return this.NOT_FAIL;
- },
- secondary: null,
- target: "normal",
- type: "Psychic",
- },
-
- // Mad Monty ¾°
- callamaty: {
- accuracy: 100,
- basePower: 75,
- category: "Physical",
- desc: "30% chance to paralyze. Starts Rain Dance if not currently active.",
- shortDesc: "30% paralyze. Sets Rain Dance.",
- name: "Ca-LLAMA-ty",
- pp: 10,
- priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Dark Void', target);
- this.add('-anim', source, 'Plasma Fists', target);
- },
- secondary: {
- chance: 30,
- status: 'par',
- },
- self: {
- onHit(source) {
- this.field.setWeather('raindance');
- },
- },
- target: "normal",
- type: "Electric",
- },
-
- // MajorBowman
- corrosivecloud: {
- accuracy: true,
- basePower: 90,
- category: "Special",
- desc: "Has a 30% chance to burn the target. This move's type effectiveness against Steel is changed to be super effective no matter what this move's type is.",
- shortDesc: "30% chance to burn. Super effective on Steel.",
- name: "Corrosive Cloud",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Poison Gas', target);
- this.add('-anim', source, 'Fire Spin', target);
- },
- onEffectiveness(typeMod, target, type) {
- if (type === 'Steel') return 1;
- },
- ignoreImmunity: {'Poison': true},
- secondary: {
- chance: 30,
- status: 'brn',
- },
- target: "normal",
- type: "Poison",
- },
-
- // Marshmallon
- rawwwr: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Heals the user by 33% of its max HP. Forces the target to switch to a random ally. User switches out after.",
- shortDesc: "33% heal. Force out target, then switch.",
- name: "RAWWWR",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, heal: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Slack Off', source);
- this.add('-anim', source, 'Roar of Time', target);
- this.add('-anim', source, 'Roar', target);
- },
- onAfterMoveSecondarySelf(pokemon, target, move) {
- this.heal(pokemon.maxhp / 3, pokemon, pokemon, move);
- },
- forceSwitch: true,
- selfSwitch: true,
- secondary: null,
- target: "normal",
- type: "Dark",
- },
-
- // Meicoo
- spamguess: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Calls the following moves in order, each with their normal respective accuracy: Haze -> Worry Seed -> Poison Powder -> Stun Spore -> Leech Seed -> Struggle (150 BP)",
- shortDesc: "Does many things then struggles.",
- name: "spamguess",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- // fruit this move.
- onHit(target, source) {
- for (const move of ['Haze', 'Worry Seed', 'Poison Powder', 'Stun Spore', 'Leech Seed']) {
- this.actions.useMove(move, source);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Meicoo')}|That is not the answer - try again!`);
- }
- const strgl = this.dex.getActiveMove('Struggle');
- strgl.basePower = 150;
- this.actions.useMove(strgl, source);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Meicoo')}|That is not the answer - try again!`);
- },
- secondary: null,
- target: "self",
- type: "Fighting",
- },
-
-
- // Mitsuki
- terraforming: {
- accuracy: 100,
- basePower: 70,
- category: "Physical",
- desc: "Upon use, this move sets up Stealth Rock on the target's side of the field.",
- shortDesc: "Sets up Stealth Rock.",
- name: "Terraforming",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Rock Slide', target);
- this.add('-anim', source, 'Ingrain', target);
- this.add('-anim', source, 'Stealth Rock', target);
- },
- sideCondition: 'stealthrock',
- secondary: null,
- target: "normal",
- type: "Rock",
- },
-
- // n10siT
- "unbind": {
- accuracy: 100,
- basePower: 60,
- category: "Special",
- desc: "Has a 100% chance to raise the user's Speed by 1 stage. If the user is a Hoopa in its Confined forme, this move is Psychic type, and Hoopa will change into its Unbound forme. If the user is a Hoopa in its Unbound forme, this move is Dark type, and Hoopa will change into its Confined forme. This move cannot be used successfully unless the user's current form, while considering Transform, is Confined or Unbound Hoopa.",
- shortDesc: "Hoopa: Psychic; Unbound: Dark; 100% +1 Spe. Changes form.",
- name: "Unbind",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {protect: 1},
- onTryMove(pokemon, target, move) {
- this.attrLastMove('[still]');
- if (pokemon.species.baseSpecies === 'Hoopa') {
- return;
- }
- this.add('-fail', pokemon, 'move: Unbind');
- this.hint("Only a Pokemon whose form is Hoopa or Hoopa-Unbound can use this move.");
- return null;
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Hyperspace Hole', target);
- this.add('-anim', source, 'Hyperspace Fury', target);
- },
- onHit(target, pokemon, move) {
- if (pokemon.baseSpecies.baseSpecies === 'Hoopa') {
- const forme = pokemon.species.forme === 'Unbound' ? '' : '-Unbound';
- pokemon.formeChange(`Hoopa${forme}`, this.effect, false, '[msg]');
- this.boost({spe: 1}, pokemon, pokemon, move);
- }
- },
- onModifyType(move, pokemon) {
- if (pokemon.baseSpecies.baseSpecies !== 'Hoopa') return;
- move.type = pokemon.species.name === 'Hoopa-Unbound' ? 'Dark' : 'Psychic';
- },
- secondary: null,
- target: "normal",
- type: "Psychic",
- },
-
- // naziel
- notsoworthypirouette: {
- accuracy: 100,
- basePower: 0,
- category: "Status",
- desc: "50% chance to OHKO the target; otherwise, it OHKOes itself. On successive uses, this move has a 1/X chance of OHKOing the target, where X starts at 2 and doubles each time this move OHKOes the target. X resets to 2 if this move is not used in a turn.",
- shortDesc: "50/50 to KO target/self. Worse used repeatedly.",
- name: "Not-so-worthy Pirouette",
- pp: 5,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, "High Jump Kick", target);
- },
- onHit(target, source) {
- source.addVolatile('notsoworthypirouette');
- const chance = source.volatiles['notsoworthypirouette']?.counter ? source.volatiles['notsoworthypirouette'].counter : 2;
- if (this.randomChance(1, chance)) {
- target.faint();
- } else {
- source.faint();
- }
- },
- condition: {
- duration: 2,
- onStart() {
- this.effectState.counter = 2;
- },
- onRestart() {
- this.effectState.counter *= 2;
- this.effectState.duration = 2;
- },
- },
- secondary: null,
- target: "normal",
- type: "Fairy",
- },
-
- // Nol
- madhacks: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Raises the user's Defense, Special Attack, and Special Defense by 1 stage. Sets Trick Room.",
- shortDesc: "+1 Def/Spa/Spd. Sets Trick Room.",
- name: "Mad Hacks",
- gen: 8,
- pp: 5,
- priority: -7,
- flags: {snatch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Acupressure', source);
- },
- onHit(target, source) {
- this.field.addPseudoWeather('trickroom');
- },
- boosts: {
- def: 1,
- spa: 1,
- spd: 1,
- },
- secondary: null,
- target: "self",
- type: "Ghost",
- },
-
- // Notater517
- technotubertransmission: {
- accuracy: 90,
- basePower: 145,
- category: "Special",
- desc: "If this move is successful, the user must recharge on the following turn and cannot select a move.",
- shortDesc: "User cannot move next turn.",
- name: "Techno Tuber Transmission",
- pp: 5,
- priority: 0,
- flags: {recharge: 1, protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Techno Blast', target);
- this.add('-anim', source, 'Never-Ending Nightmare', target);
- },
- onHit() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Notater517')}|/html For more phantasmic music, check out this link.`);
- },
- self: {
- volatileStatus: 'mustrecharge',
- },
- secondary: null,
- target: "normal",
- type: "Ghost",
- },
-
- // nui
- wincondition: {
- accuracy: 100,
- basePower: 0,
- category: "Status",
- desc: "Inflicts the opponent with random status of sleep, paralysis, burn, or toxic. Then uses Dream Eater, Iron Head, Fire Blast, or Venoshock, respectively.",
- shortDesc: "Chooses one of four move combos at random.",
- name: "Win Condition",
- pp: 10,
- priority: 0,
- flags: {protect: 1, reflectable: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, "Celebrate", target);
- },
- onHit(target, source) {
- const hax = this.sample(['slp', 'brn', 'par', 'tox']);
- target.trySetStatus(hax, source);
- if (hax === 'slp') {
- this.actions.useMove('Dream Eater', source);
- } else if (hax === 'par') {
- this.actions.useMove('Iron Head', source);
- } else if (hax === 'brn') {
- this.actions.useMove('Fire Blast', source);
- } else if (hax === 'tox') {
- this.actions.useMove('Venoshock', source);
- }
- },
- secondary: null,
- target: "normal",
- type: "Fairy",
- },
-
- // OM~!
- omzoom: {
- accuracy: 100,
- basePower: 70,
- category: "Physical",
- desc: "If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button or through the effect of the Emergency Exit or Wimp Out Abilities.",
- shortDesc: "User switches out after damaging the target.",
- name: "OM Zoom",
- gen: 8,
- pp: 10,
- priority: 0,
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Icicle Spear', target);
- this.add('-anim', source, 'U-turn', target);
- },
- onHit() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('OM~!')}|Bang Bang`);
- },
- flags: {protect: 1, mirror: 1},
- selfSwitch: true,
- secondary: null,
- target: "normal",
- type: "Ice",
- },
-
- // Overneat
- healingyou: {
- accuracy: 100,
- basePower: 115,
- category: "Physical",
- desc: "Heals the target by 50% of their maximum HP and eliminates any status problem before dealing damage, and lowers the target's Defense and Special Defense stat by 1 stage after dealing damage.",
- shortDesc: "Foe: heal 50%HP & status, dmg, then -1 Def/SpD.",
- name: "Healing you?",
- gen: 8,
- pp: 5,
- priority: 0,
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Heal Pulse', target);
- this.heal(Math.ceil(target.baseMaxhp * 0.5));
- target.cureStatus();
- this.add('-anim', source, 'Close Combat', target);
- },
- flags: {contact: 1, mirror: 1, protect: 1},
- secondary: {
- chance: 100,
- boosts: {
- def: -1,
- spd: -1,
- },
- },
- target: "normal",
- type: "Dark",
- },
-
- // Pants
- wistfulthinking: {
- accuracy: 100,
- basePower: 0,
- category: "Status",
- desc: "Burns the target and switches out. The next Pokemon on the user's side heals 1/16 of their maximum HP per turn until they switch out.",
- shortDesc: "Burn foe; switch out. Heals replacement.",
- name: "Wistful Thinking",
- pp: 10,
- priority: 0,
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Will-O-Wisp', target);
- this.add('-anim', source, 'Parting Shot', target);
- },
- onHit(target, source) {
- target.trySetStatus('brn', source);
- },
- self: {
- sideCondition: 'givewistfulthinking',
- },
- condition: {
- onStart(pokemon) {
- this.add('-start', pokemon, 'move: Wistful Thinking');
- },
- onResidualOrder: 5,
- onResidualSubOrder: 5,
- onResidual(pokemon) {
- this.heal(pokemon.baseMaxhp / 16);
- },
- },
- flags: {protect: 1, reflectable: 1},
- selfSwitch: true,
- secondary: null,
- target: "normal",
- type: "Ghost",
- },
-
- // Paradise
- rapidturn: {
- accuracy: 100,
- basePower: 50,
- category: "Physical",
- desc: "Removes entry hazards, then user switches out after dealing damage",
- shortDesc: "Removes hazards then switches out",
- name: "Rapid Turn",
- gen: 8,
- pp: 20,
- priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Rapid Spin', target);
- this.add('-anim', source, 'U-turn', target);
- },
- onAfterHit(target, pokemon) {
- const sideConditions = [
- 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
- ];
- for (const condition of sideConditions) {
- if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
- this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Rapid Turn', '[of] ' + pokemon);
- }
- }
- if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
- pokemon.removeVolatile('partiallytrapped');
- }
- },
- onAfterSubDamage(damage, target, pokemon) {
- const sideConditions = [
- 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
- ];
- for (const condition of sideConditions) {
- if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
- this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Rapid Turn', '[of] ' + pokemon);
- }
- }
- if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
- pokemon.removeVolatile('partiallytrapped');
- }
- },
- selfSwitch: true,
- secondary: null,
- target: "normal",
- type: "Normal",
- },
-
- // PartMan
- balefulblaze: {
- accuracy: 100,
- basePower: 75,
- basePowerCallback(pokemon) {
- if (pokemon.set.shiny) {
- return 95;
- }
- return 75;
- },
- category: "Special",
- desc: "This move combines Ghost in its type effectiveness against the target. Raises the user's Special Attack by 1 stage if this move knocks out the target. If the user is shiny, the move's Base Power becomes 95.",
- shortDesc: "+Ghost. +1 SpA if KOes target. Shiny: BP=95.",
- name: "Baleful Blaze",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1, defrost: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Inferno', target);
- this.add('-anim', source, 'Hex', target);
- },
- onEffectiveness(typeMod, target, type, move) {
- return typeMod + this.dex.getEffectiveness('Ghost', type);
- },
- onAfterMoveSecondarySelf(pokemon, target, move) {
- if (!target || target.fainted || target.hp <= 0) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PartMan')}|FOR SNOM!`);
- this.boost({spa: 1}, pokemon, pokemon, move);
- }
- },
- secondary: null,
- target: "normal",
- type: "Fire",
- },
-
- // peapod c
- submartingale: {
- accuracy: 100,
- basePower: 0,
- category: "Status",
- desc: "Inflicts the target with burn, toxic, or paralysis, then sets up a Substitute.",
- shortDesc: "Inflicts burn/toxic/paralysis. Makes Substitute.",
- name: "Submartingale",
- pp: 10,
- priority: 0,
- flags: {protect: 1, reflectable: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, "Dark Void", target);
- this.add('-anim', source, "Celebrate", target);
- },
- onTryHit(target, source) {
- this.actions.useMove('Substitute', source);
- },
- onHit(target, source) {
- target.trySetStatus('brn', source);
- target.trySetStatus('tox', source);
- target.trySetStatus('par', source);
- },
- secondary: null,
- target: "normal",
- type: "Dark",
- },
-
- // Perish Song
- trickery: {
- accuracy: 95,
- basePower: 100,
- category: "Physical",
- desc: "Changes the target's item to something random.",
- shortDesc: "Changes the target's item to something random.",
- name: "Trickery",
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, "Amnesia", source);
- this.add('-anim', source, "Trick", target);
- },
- onHit(target, source, effect) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Perish Song')}|/html `);
- const item = target.takeItem(source);
- if (!target.item) {
- if (item) this.add('-enditem', target, item.name, '[from] move: Trickery', '[of] ' + source);
- const items = this.dex.items.all().map(i => i.name);
- let randomItem = '';
- if (items.length) randomItem = this.sample(items);
- if (!randomItem) {
- return;
- }
- if (target.setItem(randomItem)) {
- this.add('-item', target, randomItem, '[from] move: Trickery', '[of] ' + source);
- }
- }
- },
- secondary: null,
- target: "normal",
- type: "Ground",
- },
-
- // phiwings99
- ghostof1v1past: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Imprisons and traps the target, and then transforms into them. The user will be trapped after the use of this move. The user faints if the target faints.",
- shortDesc: "Trap + ImprisonForm. Faints if the target faints.",
- name: "Ghost of 1v1 Past",
- gen: 8,
- pp: 1,
- noPPBoosts: true,
- priority: 0,
- flags: {protect: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Imprison', source);
- this.add('-anim', source, 'Mean Look', target);
- this.add('-anim', source, 'Transform', target);
- },
- onHit(target, pokemon, move) {
- target.addVolatile('trapped', pokemon, move, 'trapper');
- pokemon.addVolatile('imprison', pokemon, move);
- if (!pokemon.transformInto(target)) {
- return false;
- }
- pokemon.addVolatile('trapped', target, move, 'trapper');
- pokemon.addVolatile('ghostof1v1past', pokemon);
- pokemon.volatiles['ghostof1v1past'].targetPokemon = target;
- },
- condition: {
- onAnyFaint(target) {
- if (target === this.effectState.targetPokemon) this.effectState.source.faint();
- },
- },
- secondary: null,
- target: "normal",
- type: "Ghost",
- },
-
- // piloswine gripado
- iciclespirits: {
- accuracy: 100,
- basePower: 90,
- category: "Physical",
- desc: "The user recovers 1/2 the HP lost by the target, rounded half up. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down.",
- shortDesc: "User recovers 50% of the damage dealt.",
- name: "Icicle Spirits",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, heal: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Horn Leech', target);
- },
- drain: [1, 2],
- secondary: null,
- target: "normal",
- type: "Ice",
- },
-
- // PiraTe Princess
- dungeonsdragons: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Prevents the target from switching out and adds Dragon to the target's type. Has a 5% chance to either confuse the user or guarantee that the next attack is a critical hit, 15% chance to raise the user's Attack, Defense, Special Attack, Special Defense, or Speed by 1 stage, and a 15% chance to raise user's Special Attack and Speed by 1 stage.",
- shortDesc: "Target: can't switch,+Dragon. Does other things.",
- name: "Dungeons & Dragons",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, reflectable: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Imprison', target);
- this.add('-anim', source, 'Trick-or-Treat', target);
- this.add('-anim', source, 'Shell Smash', source);
- },
- onHit(target, source, move) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('PiraTe Princess')}|did someone say d&d?`);
- target.addVolatile('trapped', source, move, 'trapper');
- if (!target.hasType('Dragon') && target.addType('Dragon')) {
- this.add('-start', target, 'typeadd', 'Dragon', '[from] move: Dungeons & Dragons');
- }
- const result = this.random(21);
- if (result === 20) {
- source.addVolatile('laserfocus');
- } else if (result >= 2 && result <= 16) {
- const boost: SparseBoostsTable = {};
- const stats: BoostID[] = ['atk', 'def', 'spa', 'spd', 'spe'];
- boost[stats[this.random(5)]] = 1;
- this.boost(boost, source);
- } else if (result >= 17 && result <= 19) {
- this.boost({spa: 1, spe: 1}, source);
- } else {
- source.addVolatile('confusion');
- }
- },
- target: "normal",
- type: "Dragon",
- },
-
- // Psynergy
- clearbreath: {
- accuracy: 100,
- basePower: 0,
- basePowerCallback(pokemon, target) {
- let power = 60 + 20 * target.positiveBoosts();
- if (power > 200) power = 200;
- return power;
- },
- category: "Special",
- desc: "Power is equal to 60+(X*20), where X is the target's total stat stage changes that are greater than 0, but not more than 200 power.",
- shortDesc: "60 power +20 for each of the target's stat boosts.",
- gen: 8,
- name: "Clear Breath",
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Dragon Breath', target);
- this.add('-anim', source, 'Haze', target);
- },
- secondary: null,
- target: "normal",
- type: "Flying",
- },
-
- // ptoad
- croak: {
- accuracy: 100,
- basePower: 20,
- basePowerCallback(pokemon, target, move) {
- const bp = move.basePower + 20 * pokemon.positiveBoosts();
- return bp;
- },
- category: "Special",
- desc: "Power is equal to 20+(X*20), where X is the user's total stat stage changes that are greater than 0. User raises 2 random stats by 1 if it has less than 8 positive stat changes.",
- shortDesc: "+20 power/boost. +1 2 random stats < 8 boosts.",
- name: "Croak",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source, move) {
- this.add('-anim', source, 'Splash', source);
- if (source.positiveBoosts() < 8) {
- const stats: BoostID[] = [];
- let stat: BoostID;
- const exclude: string[] = ['accuracy', 'evasion'];
- for (stat in source.boosts) {
- if (source.boosts[stat] < 6 && !exclude.includes(stat)) {
- stats.push(stat);
- }
- }
- if (stats.length) {
- let randomStat = this.sample(stats);
- const boost: SparseBoostsTable = {};
- boost[randomStat] = 1;
- if (stats.length > 1) {
- stats.splice(stats.indexOf(randomStat), 1);
- randomStat = this.sample(stats);
- boost[randomStat] = 1;
- }
- this.boost(boost, source, source, move);
- }
- }
- this.add('-anim', source, 'Hyper Voice', source);
- },
- secondary: null,
- target: "normal",
- type: "Water",
- },
-
- // used for ptoad's ability
- swampyterrain: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "For 5 turns, the terrain becomes Swampy Terrain. During the effect, the power of Electric-type, Grass-type, and Ice-type attacks made by grounded Pokemon are halved and Water and Ground types heal 1/16 at the end of each turn if grounded. Fails if the current terrain is Swampy Terrain.",
- shortDesc: "5trn. Grounded:-Elec/Grs/Ice pow, Wtr/Grd:Lefts.",
- name: "Swampy Terrain",
- pp: 10,
- priority: 0,
- flags: {nonsky: 1},
- terrain: 'swampyterrain',
- condition: {
- duration: 5,
- durationCallback(source, effect) {
- if (source?.hasItem('terrainextender')) {
- return 8;
- }
- return 5;
- },
- onBasePowerPriority: 6,
- onBasePower(basePower, attacker, defender, move) {
- if (['Electric', 'Grass', 'Ice'].includes(move.type) && attacker.isGrounded() && !attacker.isSemiInvulnerable()) {
- this.debug('swampy terrain weaken');
- return this.chainModify(0.5);
- }
- },
- onFieldStart(field, source, effect) {
- if (effect?.effectType === 'Ability') {
- this.add('-fieldstart', 'move: Swampy Terrain', '[from] ability: ' + effect, '[of] ' + source);
- } else {
- this.add('-fieldstart', 'move: Swampy Terrain');
- }
- this.add('-message', 'The battlefield became swamped!');
- },
- onResidualOrder: 5,
- onResidual(pokemon) {
- if ((pokemon.hasType('Water') || pokemon.hasType('Ground')) && pokemon.isGrounded() && !pokemon.isSemiInvulnerable()) {
- this.debug('Pokemon is grounded and a Water or Ground type, healing through Swampy Terrain.');
- if (this.heal(pokemon.baseMaxhp / 16, pokemon, pokemon)) {
- this.add('-message', `${pokemon.name} was healed by the terrain!`);
- }
- }
- },
- onFieldResidualOrder: 21,
- onFieldResidualSubOrder: 3,
- onFieldEnd() {
- this.add('-fieldend', 'move: Swampy Terrain');
- },
- },
- secondary: null,
- target: "all",
- type: "Ground",
- },
-
- // Rabia
- psychodrive: {
- accuracy: 100,
- basePower: 80,
- category: "Special",
- desc: "Has a 30% chance to boost the user's Speed by 1 stage.",
- shortDesc: "30% chance to boost the user's Spe by 1.",
- name: "Psycho Drive",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Genesis Supernova', target);
- },
- secondary: {
- chance: 30,
- self: {
- boosts: {spe: 1},
- },
- },
- target: "normal",
- type: "Psychic",
- },
-
- // Rach
- spindawheel: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "The user uses a random hazard-setting move; burns, badly poisons, or paralyzes the target; and then switches out.",
- shortDesc: "Sets random hazard; brn/tox/par; switches.",
- name: "Spinda Wheel",
- gen: 8,
- pp: 20,
- priority: 0,
- flags: {reflectable: 1, protect: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- target.m.spindaHazard = this.sample(['Sticky Web', 'Stealth Rock', 'Spikes', 'Toxic Spikes', 'G-Max Steelsurge']);
- target.m.spindaStatus = this.sample(['Thunder Wave', 'Toxic', 'Will-O-Wisp']);
- if (target.m.spindaHazard) {
- this.add('-anim', source, target.m.spindaHazard, target);
- }
- if (target.m.spindaStatus) {
- this.add('-anim', source, target.m.spindaStatus, target);
- }
- },
- onHit(target, source, move) {
- if (target) {
- if (target.m.spindaHazard) {
- target.side.addSideCondition(target.m.spindaHazard);
- }
- if (target.m.spindaStatus) {
- const s = target.m.spindaStatus;
- target.trySetStatus(s === 'Toxic' ? 'tox' : s === 'Thunder Wave' ? 'par' : 'brn');
- }
- }
- },
- selfSwitch: true,
- secondary: null,
- target: "normal",
- type: "Normal",
- },
-
- // Rage
- shockedlapras: {
- accuracy: 100,
- basePower: 75,
- category: "Special",
- desc: "Has a 100% chance to paralyze the user.",
- shortDesc: "100% chance to paralyze the user.",
- name: ":shockedlapras:",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Thunder', target);
- if (!source.status) this.add('-anim', source, 'Thunder Wave', source);
- },
- onHit() {
- this.add(`raw|`);
- },
- secondary: {
- chance: 100,
- self: {
- status: 'par',
- },
- },
- target: "normal",
- type: "Electric",
- },
-
- // used for Rage's ability
- inversionterrain: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "For 5 turns, the terrain becomes Inversion Terrain. During the effect, the the type chart is inverted, and grounded, paralyzed Pokemon have their Speed doubled. Fails if the current terrain is Inversion Terrain.",
- shortDesc: "5 turns. Type chart inverted. Par: 2x Spe.",
- name: "Inversion Terrain",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {},
- terrain: 'inversionterrain',
- condition: {
- duration: 5,
- durationCallback(source, effect) {
- if (source?.hasItem('terrainextender')) {
- return 8;
- }
- return 5;
- },
- onNegateImmunity: false,
- onEffectivenessPriority: 1,
- onEffectiveness(typeMod, target, type, move) {
- // The effectiveness of Freeze Dry on Water isn't reverted
- if (move && move.id === 'freezedry' && type === 'Water') return;
- if (move && !this.dex.getImmunity(move, type)) return 1;
- return -typeMod;
- },
- onFieldStart(field, source, effect) {
- if (effect?.effectType === 'Ability') {
- this.add('-fieldstart', 'move: Inversion Terrain', '[from] ability: ' + effect, '[of] ' + source);
- } else {
- this.add('-fieldstart', 'move: Inversion Terrain');
- }
- this.add('-message', 'The battlefield became upside down!');
- },
- onFieldResidualOrder: 21,
- onFieldResidualSubOrder: 3,
- onFieldEnd() {
- this.add('-fieldend', 'move: Inversion Terrain');
- },
- },
- secondary: null,
- target: "all",
- type: "Psychic",
- },
-
- // Raihan Kibana
- stonykibbles: {
- accuracy: 100,
- basePower: 90,
- category: "Physical",
- desc: "For 5 turns, the weather becomes Sandstorm. At the end of each turn except the last, all active Pokemon lose 1/16 of their maximum HP, rounded down, unless they are a Ground, Rock, or Steel type, or have the Magic Guard, Overcoat, Sand Force, Sand Rush, or Sand Veil Abilities. During the effect, the Special Defense of Rock-type Pokemon is multiplied by 1.5 when taking damage from a special attack. Lasts for 8 turns if the user is holding Smooth Rock. Fails if the current weather is Sandstorm.",
- shortDesc: "Sets Sandstorm.",
- name: "Stony Kibbles",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onHit() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Raihan Kibana')}|Let the winds blow! Stream forward, Sandstorm!`);
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Rock Slide', target);
- this.add('-anim', source, 'Crunch', target);
- this.add('-anim', source, 'Sandstorm', target);
- },
- weather: 'Sandstorm',
- target: "normal",
- type: "Normal",
- },
-
- // Raj.Shoot
- fanservice: {
- accuracy: 100,
- basePower: 90,
- category: "Physical",
- desc: "The user has its Attack and Speed raised by 1 stage after KOing a target. If the user is a Charizard in its base form, it will Mega Evolve into Mega Charizard X.",
- shortDesc: "+1 Atk/Spe after KO. Mega evolves user.",
- name: "Fan Service",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {contact: 1, protect: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source, move) {
- this.add('-anim', source, 'Sacred Fire', target);
- },
- onAfterMoveSecondarySelf(pokemon, target, move) {
- if (!target || target.fainted || target.hp <= 0) {
- this.boost({atk: 1, spe: 1}, pokemon, pokemon, move);
- }
- },
- onHit(target, source) {
- if (source.species.id === 'charizard') {
- this.actions.runMegaEvo(source);
- }
- },
- secondary: null,
- target: "normal",
- type: "Grass",
- },
-
- // Ransei
- ripsei: {
- accuracy: 100,
- basePower: 0,
- damageCallback(pokemon) {
- const damage = pokemon.hp;
- return damage;
- },
- category: "Special",
- desc: "Deals damage to the target equal to the user's current HP. If this move is successful, the user faints.",
- shortDesc: "Does damage equal to the user's HP. User faints.",
- name: "ripsei",
- gen: 8,
- pp: 5,
- priority: 1,
- flags: {contact: 1, protect: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Final Gambit', target);
- },
- onAfterMove(pokemon, target, move) {
- if (pokemon.moveThisTurnResult === true) {
- pokemon.faint();
- }
- },
- secondary: null,
- target: "normal",
- type: "Fighting",
- },
-
- // RavioliQueen
- witchinghour: {
- accuracy: 90,
- basePower: 60,
- category: "Special",
- desc: "50% chance to trap the target, dealing 1/8th of their HP, rounded down, in damage each turn it is trapped.",
- shortDesc: "50% to trap, dealing 1/8 each turn.",
- name: "Witching Hour",
- pp: 5,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Spirit Shackle', target);
- this.add('-anim', source, 'Curse', target);
- },
- secondary: {
- chance: 50,
- volatileStatus: 'haunting',
- },
- target: "normal",
- type: "Ghost",
- },
-
- // for RavioliQueen's ability
- pitchblackterrain: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "For 5 turns, Non Ghost types take 1/16th damage; Has boosting effects on Mismagius.",
- shortDesc: "5 turns. Non Ghost types take 1/16th damage; Has boosting effects on Mismagius.",
- name: "Pitch Black Terrain",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {},
- terrain: 'pitchblackterrain',
- condition: {
- duration: 5,
- durationCallback(source, effect) {
- if (source?.hasItem('terrainextender')) {
- return 8;
- }
- return 5;
- },
- onHit(target, source, move) {
- if (!target.hp || target.species.name !== 'Mismagius') return;
- if (move?.effectType === 'Move' && move.category !== 'Status') {
- if (this.boost({spe: 1}, target)) {
- this.add('-message', `${target.name} got a boost by the terrain!`);
- }
- }
- },
- onSwitchInPriority: -1,
- onSwitchIn(target) {
- if (target?.species.name !== 'Mismagius') return;
- if (this.boost({spa: 1, spd: 1}, target)) {
- this.add('-message', `${target.name} got a boost by the terrain!`);
- }
- },
- onFieldStart(field, source, effect) {
- if (effect?.effectType === 'Ability') {
- this.add('-fieldstart', 'move: Pitch Black Terrain', '[from] ability: ' + effect, '[of] ' + source);
- } else {
- this.add('-fieldstart', 'move: Pitch Black Terrain');
- }
- this.add('-message', 'The battlefield became dark!');
- if (source?.species.name !== 'Mismagius') return;
- if (this.boost({spa: 1, spd: 1}, source)) {
- this.add('-message', `${source.name} got a boost by the terrain!`);
- }
- },
- onResidualOrder: 5,
- onResidual(pokemon) {
- if (pokemon.isSemiInvulnerable()) return;
- if (!pokemon || pokemon.hasType('Ghost')) return;
- if (this.damage(pokemon.baseMaxhp / 16, pokemon)) {
- this.add('-message', `${pokemon.name} was hurt by the terrain!`);
- }
- },
- onFieldResidualOrder: 21,
- onFieldResidualSubOrder: 3,
- onFieldEnd() {
- this.add('-fieldend', 'move: Pitch Black Terrain');
- },
- },
- secondary: null,
- target: "all",
- type: "Ghost",
- },
-
- // Robb576
- integeroverflow: {
- accuracy: true,
- basePower: 200,
- category: "Special",
- desc: "This move becomes a physical attack if the user's Attack is greater than its Special Attack, including stat stage changes. This move and its effects ignore the Abilities of other Pokemon.",
- shortDesc: "Physical if user's Atk > Sp. Atk. Ignores Abilities.",
- name: "Integer Overflow",
- gen: 8,
- pp: 1,
- noPPBoosts: true,
- priority: 0,
- flags: {},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Light That Burns The Sky', target);
- },
- onModifyMove(move, pokemon) {
- if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) move.category = 'Physical';
- },
- ignoreAbility: true,
- isZ: "modium6z",
- secondary: null,
- target: "normal",
- type: "Psychic",
- },
-
- mode5offensive: {
- accuracy: true,
- basePower: 30,
- category: "Special",
- desc: "This move hits three times. Every hit has a 20% chance to drop the target's SpD by 1 stage.",
- shortDesc: "3 hits. Each hit: 20% -1 SpD.",
- name: "Mode [5: Offensive]",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Focus Blast', target);
- this.add('-anim', source, 'Zap Cannon', target);
- },
- secondary: {
- chance: 20,
- boosts: {
- spd: -1,
- },
- },
- multihit: 3,
- target: "normal",
- type: "Fighting",
- },
-
- mode7defensive: {
- accuracy: 100,
- basePower: 0,
- category: "Status",
- desc: "This move cures the user's party of all status conditions, and then forces the target to switch to a random ally.",
- shortDesc: "Heal Bell + Whirlwind.",
- name: "Mode [7: Defensive]",
- gen: 8,
- pp: 15,
- priority: -6,
- flags: {reflectable: 1, protect: 1, sound: 1, bypasssub: 1},
- forceSwitch: true,
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Heal Bell', source);
- this.add('-anim', source, 'Roar', source);
- },
- onHit(pokemon, source) {
- this.add('-activate', source, 'move: Mode [7: Defensive]');
- const side = source.side;
- let success = false;
- for (const ally of side.pokemon) {
- if (ally.hasAbility('soundproof')) continue;
- if (ally.cureStatus()) success = true;
- }
- return success;
- },
- target: "normal",
- type: "Normal",
- },
-
- // Sectonia
- homunculussvanity: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Raises the Defense and Special Defense by 1 stage. Lowers the foe's higher offensive stat by 1 stage.",
- shortDesc: "+1 Def & SpD. -1 to foe's highest offensive stat.",
- name: "Homunculus's Vanity",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {snatch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Cosmic Power', source);
- this.add('-anim', source, 'Psychic', target);
- },
- self: {
- onHit(source) {
- let totalatk = 0;
- let totalspa = 0;
- for (const target of source.foes()) {
- totalatk += target.getStat('atk', false, true);
- totalspa += target.getStat('spa', false, true);
- if (totalatk && totalatk >= totalspa) {
- this.boost({atk: -1}, target);
- } else if (totalspa) {
- this.boost({spa: -1}, target);
- }
- }
- this.boost({def: 1, spd: 1}, source);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Sectonia')}|Jelly baby ;w;`);
- },
- },
- secondary: null,
- target: "self",
- type: "Psychic",
- zMove: {boost: {atk: 1}},
- },
-
- // Segmr
- tsukuyomi: {
- accuracy: 100,
- basePower: 0,
- category: "Status",
- desc: "The user loses 1/4 of its maximum HP, rounded down and even if it would cause fainting, in exchange for the target losing 1/4 of its maximum HP, rounded down, at the end of each turn while it is active. If the target uses Baton Pass, the replacement will continue to be affected. Fails if there is no target or if the target is already affected. Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, Teleport, U-turn, or Volt Switch. If the target leaves the field using Baton Pass, the replacement will remain trapped. The effect ends if the user leaves the field.",
- shortDesc: "Curses the target for 1/4 HP and traps it.",
- name: "Tsukuyomi",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {bypasssub: 1, protect: 1, reflectable: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Dark Void', target);
- this.add('-anim', source, 'Curse', target);
- },
- onHit(pokemon, source, move) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Segmr')}|I don't like naruto actually let someone else write this message plz.`);
- this.directDamage(source.maxhp / 4, source, source);
- pokemon.addVolatile('curse');
- pokemon.addVolatile('trapped', source, move, 'trapper');
- },
- secondary: null,
- target: "normal",
- type: "Dark",
- },
-
- // sejesensei
- badopinion: {
- accuracy: 90,
- basePower: 120,
- category: "Physical",
- desc: "Forces the opponent out. The user's Defense is raised by 1 stage upon hitting.",
- shortDesc: "Forces the opponent out. +1 Def.",
- name: "Bad Opinion",
- gen: 8,
- pp: 10,
- priority: -6,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Hyper Voice', target);
- this.add('-anim', source, 'Sludge Bomb', target);
- },
- onHit() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('sejesensei')}|Please go read To Love-Ru I swear its really good, wait... don’t leave…`);
- },
- self: {
- boosts: {
- def: 1,
- },
- },
- forceSwitch: true,
- secondary: null,
- target: "normal",
- type: "Poison",
- },
-
- // Seso
- legendaryswordsman: {
- accuracy: 85,
- basePower: 95,
- onTry(source, target) {
- this.attrLastMove('[still]');
- const action = this.queue.willMove(target);
- const move = action?.choice === 'move' ? action.move : null;
- if (!move || (move.category === 'Status' && move.id !== 'mefirst') || target.volatiles['mustrecharge']) {
- if (move?.category === 'Status') {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Seso')}|Irritating a better swordsman than yourself is always a good way to end up dead.`);
- } else {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Seso')}|Scars on the back are a swordsman's shame.`);
- }
- return false;
- }
- },
- category: "Physical",
- desc: "If the move hits, the user gains +1 Speed. This move deals not very effective damage to Flying-type Pokemon. This move fails if the target does not intend to attack.",
- shortDesc: "+1 Spe on hit. Fails if target doesn't attack.",
- name: "Legendary Swordsman",
- gen: 8,
- pp: 10,
- priority: 1,
- flags: {contact: 1, protect: 1},
- ignoreImmunity: {'Ground': true},
- onEffectiveness(typeMod, target, type) {
- if (type === 'Flying') return -1;
- },
- onTryMove(source, target, move) {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Seso')}|FORWARD!`);
- this.add('-anim', source, 'Gear Grind', target);
- this.add('-anim', source, 'Thief', target);
- },
- secondary: {
- chance: 100,
- self: {
- boosts: {
- spe: 1,
- },
- },
- },
- target: "normal",
- type: "Ground",
- },
-
- // Shadecession
- shadeuppercut: {
- accuracy: 100,
- basePower: 90,
- category: "Physical",
- desc: "This move ignores type effectiveness, substitutes, and the opposing side's Reflect, Light Screen, Safeguard, Mist and Aurora Veil.",
- shortDesc: "Ignores typing, sub, & screens.",
- name: "Shade Uppercut",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Sky Uppercut', target);
- this.add('-anim', source, 'Shadow Sneak', target);
- },
- onEffectiveness(typeMod, target, type) {
- return 0;
- },
- infiltrates: true,
- secondary: null,
- target: "normal",
- type: "Dark",
- },
-
- // Soft Flex
- updraft: {
- accuracy: 75,
- basePower: 75,
- category: "Special",
- desc: "Changes target's secondary typing to Flying for 2-5 turns unless the target is Ground-type or affected by Ingrain. This move cannot miss in rain.",
- shortDesc: "Target: +Flying type. Rain: never misses.",
- name: "Updraft",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Twister', target);
- },
- onModifyMove(move, pokemon, target) {
- if (target && ['raindance', 'primordialsea'].includes(target.effectiveWeather())) {
- move.accuracy = true;
- }
- },
- condition: {
- noCopy: true,
- duration: 5,
- durationCallback(target, source) {
- return this.random(5, 7);
- },
- onStart(target) {
- this.effectState.origTypes = target.getTypes(); // store original types
- if (target.getTypes().length === 1) { // single type mons
- if (!target.addType('Flying')) return false;
- this.add('-start', target, 'typeadd', 'Flying', '[from] move: Updraft');
- } else { // dual typed mons
- const primary = target.getTypes()[0]; // take the first type
- if (!target.setType([primary, 'Flying'])) return false;
- this.add('-start', target, 'typechange', primary + '/Flying', '[from] move: Updraft');
- }
- },
- onEnd(target) {
- if (!target.setType(this.effectState.origTypes)) return false; // reset the types
- this.add('-start', target, 'typechange', this.effectState.origTypes.join('/'), '[silent]');
- },
- },
- secondary: {
- chance: 100,
- onHit(target) {
- if (target.hasType(['Flying', 'Ground']) || target.volatiles['ingrain'] || target.volatiles['brilliant']) return false;
- target.addVolatile('updraft');
- },
- },
- target: "normal",
- type: "Flying",
- },
-
- // used for Soft Flex's ability
- tempestterrain: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Heals Electric types for 1/16 of their maximum HP, rounded down, at the end of each turn. Causes Flying- and Steel-types and Levitate users to lose 1/16 of their maximum HP, rounded down, at the end of each turn; if the Pokemon is also Electric-type, they only get the healing effect.",
- shortDesc: "Heals Electrics. Hurts Flyings and Steels.",
- name: "Tempest Terrain",
- pp: 10,
- priority: 0,
- flags: {nonsky: 1},
- terrain: 'tempestterrain',
- condition: {
- duration: 5,
- durationCallback(source, effect) {
- if (source?.hasItem('terrainextender')) {
- return 8;
- }
- return 5;
- },
- onResidualOrder: 5,
- onResidual(pokemon) {
- if (pokemon.hasType('Electric')) {
- if (this.heal(pokemon.baseMaxhp / 8, pokemon)) {
- this.add('-message', `${pokemon.name} was healed by the terrain!`);
- }
- } else if (!pokemon.hasType('Electric') && (pokemon.hasType(['Flying', 'Steel']) || pokemon.hasAbility('levitate'))) {
- if (this.damage(pokemon.baseMaxhp / 8, pokemon)) {
- this.add('-message', `${pokemon.name} was hurt by the terrain!`);
- }
- }
- },
- onFieldStart(field, source, effect) {
- if (effect?.effectType === 'Ability') {
- this.add('-fieldstart', 'move: Tempest Terrain', '[from] ability: ' + effect, '[of] ' + source);
- } else {
- this.add('-fieldstart', 'move: Tempest Terrain');
- }
- this.add('-message', 'The battlefield became stormy!');
- },
- onFieldResidualOrder: 21,
- onFieldResidualSubOrder: 3,
- onFieldEnd() {
- this.add('-fieldend', 'move: Tempest Terrain');
- },
- },
- secondary: null,
- target: "all",
- type: "Electric",
- zMove: {boost: {spe: 1}},
- contestType: "Clever",
- },
-
- // Spandan
- imtoxicyoureslippinunder: {
- accuracy: true,
- basePower: 110,
- category: "Physical",
- overrideOffensivePokemon: 'target',
- overrideOffensiveStat: 'spd',
- desc: "This move uses the target's Special Defense to calculate damage (like Foul Play). This move is neutrally effective against Steel-types.",
- shortDesc: "Uses foe's SpD as user's Atk. Hits Steel.",
- name: "I'm Toxic You're Slippin' Under",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Sludge Bomb', target);
- this.add('-anim', source, 'Sludge Wave', target);
- },
- ignoreImmunity: {'Poison': true},
- secondary: null,
- target: "normal",
- type: "Poison",
- },
-
- // Struchni
- veto: {
- accuracy: 100,
- basePower: 80,
- category: "Physical",
- desc: "If the user's stats was raised on the previous turn, double power and gain +1 priority.",
- shortDesc: "If stat raised last turn: x2 power, +1 prio.",
- name: "Veto",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {contact: 1, protect: 1},
- onTryMove(source) {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Head Smash', target);
- },
- // Veto interactions located in formats.ts
- onModifyPriority(priority, source, target, move) {
- if (source.m.statsRaisedLastTurn) {
- return priority + 1;
- }
- },
- basePowerCallback(pokemon, target, move) {
- if (pokemon.m.statsRaisedLastTurn) {
- return move.basePower * 2;
- }
- return move.basePower;
- },
- onHit(target, source) {
- if (source.m.statsRaisedLastTurn) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Struchni')}|**veto**`);
- }
- },
- target: "normal",
- type: "Steel",
- },
-
- // Teclis
- kaboom: {
- accuracy: 100,
- basePower: 150,
- category: "Special",
- desc: "This move's Base Power is equal to 70+(80*user's current HP/user's max HP). Sets Sunny Day.",
- shortDesc: "Better Eruption. Sets Sun.",
- name: "Kaboom",
- pp: 5,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- weather: 'sunnyday',
- basePowerCallback(pokemon, target, move) {
- return 70 + 80 * Math.floor(pokemon.hp / pokemon.maxhp);
- },
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Eruption', target);
- this.add('-anim', source, 'Earthquake', target);
- },
- secondary: null,
- target: "normal",
- type: "Fire",
- },
-
- // temp
- dropadraco: {
- accuracy: 90,
- basePower: 130,
- category: "Special",
- desc: "Lowers the user's Special Attack by 2 stages, then raises it by 1 stage.",
- shortDesc: "Lowers user's Sp. Atk by 2, then raises by 1.",
- name: "DROP A DRACO",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Draco Meteor', target);
- },
- self: {
- boosts: {
- spa: -2,
- },
- },
- onAfterMoveSecondarySelf(source, target) {
- this.boost({spa: 1}, source, source, this.dex.getActiveMove('dropadraco'));
- },
- secondary: null,
- target: "normal",
- type: "Dragon",
- },
-
- // The Immortal
- wattup: {
- accuracy: 100,
- basePower: 73,
- category: "Special",
- desc: "Has a 75% chance to raise the user's Speed by 1 stage.",
- shortDesc: "75% chance to raise the user's Speed by 1 stage.",
- name: "Watt Up",
- gen: 8,
- pp: 15,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Volt Switch', target);
- this.add('-anim', source, 'Nasty Plot', source);
- },
- secondary: {
- chance: 75,
- self: {
- boosts: {
- spe: 1,
- },
- },
- },
- target: "normal",
- type: "Electric",
- },
-
- // thewaffleman
- icepress: {
- accuracy: 100,
- basePower: 80,
- category: "Physical",
- desc: "Damage is calculated using the user's Defense stat as its Attack, including stat stage changes. Other effects that modify the Attack stat are used as normal. This move has a 10% chance to freeze the target and is super effective against Fire-types.",
- shortDesc: "Body Press. 10% Frz. SE vs Fire.",
- name: "Ice Press",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1, contact: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Body Press', target);
- },
- onEffectiveness(typeMod, target, type) {
- if (type === 'Fire') return 1;
- },
- overrideOffensiveStat: 'def',
- secondary: {
- chance: 10,
- status: "frz",
- },
- target: "normal",
- type: "Ice",
- },
-
- // tiki
- rightoncue: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Randomly uses 1-5 different support moves.",
- shortDesc: "Uses 1-5 support moves.",
- name: "Right. On. Cue!",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, snatch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onHit(target, source) {
- const supportMoves = [
- 'Wish', 'Heal Bell', 'Defog', 'Spikes', 'Taunt', 'Torment',
- 'Haze', 'Encore', 'Reflect', 'Light Screen', 'Sticky Web', 'Acupressure',
- 'Gastro Acid', 'Hail', 'Heal Block', 'Spite', 'Parting Shot', 'Trick Room',
- ];
- const randomTurns = this.random(5) + 1;
- let successes = 0;
- for (let x = 1; x <= randomTurns; x++) {
- const randomMove = this.sample(supportMoves);
- supportMoves.splice(supportMoves.indexOf(randomMove), 1);
- this.actions.useMove(randomMove, target);
- successes++;
- }
- if (successes === 1) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('tiki')}|truly a dumpster fire`);
- } else if (successes >= 4) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('tiki')}|whos ${source.side.foe.name}?`);
- }
- },
- secondary: null,
- target: "self",
- type: "Normal",
- },
-
- // trace
- herocreation: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "The user switches out and raises the incoming Pokemon's Attack and Special Attack by 1 stage.",
- shortDesc: "User switches, +1 Atk/SpA to replacement.",
- name: "Hero Creation",
- gen: 8,
- pp: 10,
- priority: -6,
- flags: {snatch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Teleport', source);
- this.add('-anim', source, 'Work Up', source);
- },
- selfSwitch: true,
- sideCondition: 'herocreation',
- condition: {
- duration: 1,
- onSideStart(side, source) {
- this.debug('Hero Creation started on ' + side.name);
- this.effectState.positions = [];
- for (const i of side.active.keys()) {
- this.effectState.positions[i] = false;
- }
- this.effectState.positions[source.position] = true;
- },
- onSideRestart(side, source) {
- this.effectState.positions[source.position] = true;
- },
- onSwitchInPriority: 1,
- onSwitchIn(target) {
- this.add('-activate', target, 'move: Hero Creation');
- this.boost({atk: 1, spa: 1}, target, null, this.dex.getActiveMove('herocreation'));
- },
- },
- secondary: null,
- target: "self",
- type: "Psychic",
- },
-
- // Trickster
- soulshatteringstare: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "The user loses 1/4 of its maximum HP, rounded down and even if it would cause fainting, in exchange for the target losing 1/4 of its maximum HP, rounded down, at the end of each turn while it is active. If the target uses Baton Pass, the replacement will continue to be affected. For 5 turns, the target is prevented from restoring any HP as long as it remains active. During the effect, healing and draining moves are unusable, and Abilities and items that grant healing will not heal the user. If an affected Pokemon uses Baton Pass, the replacement will remain unable to restore its HP. Pain Split and the Regenerator Ability are unaffected.",
- shortDesc: "Curses target for 1/4 HP & blocks it from healing.",
- name: "Soul-Shattering Stare",
- gen: 8,
- pp: 10,
- priority: -7,
- flags: {bypasssub: 1, protect: 1, reflectable: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Glare', target);
- this.add('-anim', source, 'Trick-or-Treat', source);
- },
- onHit(pokemon, source) {
- this.directDamage(source.maxhp / 4, source, source);
- pokemon.addVolatile('curse');
- pokemon.addVolatile('healblock');
- },
- secondary: null,
- target: "normal",
- type: "Ghost",
- },
-
- // Vexen
- asteriusstrike: {
- accuracy: 85,
- basePower: 100,
- category: "Physical",
- desc: "Has a 25% chance to confuse the target.",
- shortDesc: "25% chance to confuse the target.",
- name: "Asterius Strike",
- gen: 8,
- pp: 5,
- priority: 0,
- flags: {protect: 1, contact: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Giga Impact', target);
- },
- secondary: {
- chance: 25,
- volatileStatus: 'confusion',
- },
- target: "normal",
- type: "Normal",
- },
-
- // vivalospride
- dripbayless: {
- accuracy: true,
- basePower: 85,
- category: "Special",
- desc: "This move's type effectiveness against Water is changed to be super effective no matter what this move's type is.",
- shortDesc: "Super effective on Water.",
- name: "DRIP BAYLESS",
- gen: 8,
- pp: 20,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Lava Plume', target);
- this.add('-anim', source, 'Sunny Day', target);
- },
- onEffectiveness(typeMod, target, type) {
- if (type === 'Water') return 1;
- },
- secondary: null,
- target: "normal",
- type: "Fire",
- },
-
- // Volco
- glitchexploiting: {
- accuracy: 100,
- basePower: 60,
- category: "Special",
- desc: "1/4096 chance to KO the target and then the user, and a 1/1024 chance to force out the target and then the user; 20% chance to burn the target, and a 5% chance to freeze or paralyze a random Pokemon on the field; 30% chance to confuse the target.",
- shortDesc: "Has a chance to do many things.",
- name: "Glitch Exploiting",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Explosion', target);
- this.add('-anim', source, 'Tackle', source);
- this.add('-anim', source, 'Blue Flare', target);
- },
- onHit(target, source, move) {
- const random = this.random(4096);
- if (random === 1) {
- target.faint(source, move);
- source.faint(source, move);
- } else if ([1024, 2048, 3072, 4096].includes(random)) {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Volco')}|haha memory corruption go brrr...`);
- target.forceSwitchFlag = true;
- source.forceSwitchFlag = true;
- } else if (random === 69) {
- this.add(`raw|Pokemon Showdown has not crashed!
It just got sick of all the rng in Volco's Glitch Exploiting move and gave up.
(Do not report this, this is intended.)
`);
- this.tie();
- }
- },
- secondaries: [
- {
- chance: 5,
- onHit(target, source) {
- const status = this.sample(['frz', 'par']);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Volco')}|Ever just screw up the trick and corrupt the memory and cause the wrong thing to happen possibly ruining a run? No? Just me? okay...`);
- if (this.randomChance(1, 2)) {
- target.trySetStatus(status);
- } else {
- source.trySetStatus(status);
- }
- },
- },
- {
- chance: 20,
- status: 'brn',
- },
- {
- chance: 30,
- volatileStatus: 'confusion',
- },
- ],
- target: "normal",
- type: "Fire",
- },
-
- // vooper
- pandaexpress: {
- accuracy: 100,
- basePower: 0,
- category: "Status",
- desc: "Lowers the target's Attack and Special Attack by 2 stages. If this move is successful, the user switches out even if it is trapped and is replaced immediately by a selected party member. The user does not switch out if the target's Attack and Special Attack stat stages were both unchanged, or if there are no unfainted party members.",
- shortDesc: "Double strength Parting Shot.",
- name: "Panda Express",
- gen: 8,
- pp: 20,
- priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Parting Shot', target);
- },
- onHit(target, source, move) {
- const success = this.boost({atk: -2, spa: -2}, target, source);
- if (!success && !target.hasAbility('mirrorarmor')) {
- delete move.selfSwitch;
- }
- },
- selfSwitch: true,
- secondary: null,
- target: "normal",
- type: "Dark",
- },
-
- // yuki
- classchange: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "If the user is a cosplay Pikachu forme, it randomly changes forme and has an effect depending on the forme chosen: Cleric uses Strength Sap, Ninja uses Confuse Ray, Dancer uses Feather Dance, Songstress uses Sing, and Jester uses Charm.",
- shortDesc: "Pikachu: Random forme and effect.",
- name: "Class Change",
- gen: 8,
- pp: 6,
- noPPBoosts: true,
- priority: 0,
- flags: {},
- onTryMove(source) {
- this.attrLastMove('[still]');
- },
- onPrepareHit(foe, source, move) {
- const formes = ['Cleric', 'Ninja', 'Dancer', 'Songstress', 'Jester']
- .filter(forme => ssbSets[`yuki-${forme}`].species !== source.species.name);
- source.m.yukiCosplayForme = this.sample(formes);
- switch (source.m.yukiCosplayForme) {
- case 'Cleric':
- this.actions.useMove("Strength Sap", source);
- break;
- case 'Ninja':
- this.actions.useMove("Confuse Ray", source);
- break;
- case 'Dancer':
- this.actions.useMove("Feather Dance", source);
- break;
- case 'Songstress':
- this.actions.useMove("Sing", source);
- break;
- case 'Jester':
- this.actions.useMove("Charm", source);
- break;
- }
- },
- onHit(target, source) {
- if (source.baseSpecies.baseSpecies !== 'Pikachu') return;
- switch (source.m.yukiCosplayForme) {
- case 'Cleric':
- changeSet(this, source, ssbSets['yuki-Cleric']);
- this.add('-message', 'yuki patches up her wounds!');
- return;
- case 'Ninja':
- changeSet(this, source, ssbSets['yuki-Ninja']);
- this.add('-message', `yuki's fast movements confuse ${target.name}!`);
- return;
- case 'Dancer':
- changeSet(this, source, ssbSets['yuki-Dancer']);
- this.add('-message', `yuki dazzles ${target.name} with her moves!`);
- return;
- case 'Songstress':
- changeSet(this, source, ssbSets['yuki-Songstress']);
- this.add('-message', `yuki sang an entrancing melody!`);
- return;
- case 'Jester':
- changeSet(this, source, ssbSets['yuki-Jester']);
- this.add('-message', `yuki tries her best to impress ${target.name}!`);
- return;
- }
- },
- secondary: null,
- target: "self",
- type: "Normal",
- },
-
- // Zalm
- ingredientforaging: {
- accuracy: 100,
- basePower: 70,
- category: "Special",
- desc: "Heals 50% of the user's max HP, rounded down, if the target is holding an item. Removes the target's item and enables Belch on the user.",
- shortDesc: "If foe has item: Heal 50% and remove it.",
- name: "Ingredient Foraging",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Thief', target);
- },
- onAfterHit(target, source) {
- const item = target.getItem();
- if (source.hp && target.takeItem(source)) {
- this.add('-enditem', target, item.name, '[from] stealeat', '[move] Ingredient Foraging', '[of] ' + source);
- this.heal(source.maxhp / 2, source);
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zalm')}|Yum`);
- source.ateBerry = true;
- }
- },
- secondary: null,
- target: "normal",
- type: "Bug",
- },
-
- // Zarel
- relicdance: {
- accuracy: 100,
- basePower: 80,
- category: "Special",
- desc: "+1 Special Attack and, if the user is a Meloetta forme, transforms into the other Meloetta forme with its accompanying moveset, regardless of the outcome of the move. The move becomes fighting if Meloetta-P uses the move. If the user is Meloetta-Pirouette, this move is Fighting-type.",
- shortDesc: "+1 SpA. Meloetta transforms. Fighting type if Melo-P.",
- name: "Relic Dance",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {protect: 1, mirror: 1, dance: 1},
- secondary: null,
- onTryMove(pokemon, target, move) {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Relic Song', target);
- },
- onAfterMove(source) {
- this.boost({spa: 1}, source);
- if (source.species.baseSpecies !== 'Meloetta') return;
- if (source.species.name === "Meloetta-Pirouette") {
- changeSet(this, source, ssbSets['Zarel']);
- } else {
- changeSet(this, source, ssbSets['Zarel-Pirouette']);
- }
- },
- onModifyMove(move, pokemon) {
- if (pokemon.species.name === "Meloetta-Pirouette") move.type = "Fighting";
- },
- target: "allAdjacentFoes",
- type: "Psychic",
- },
-
- // Zodiax
- bigstormcoming: {
- accuracy: true,
- basePower: 0,
- category: "Special",
- desc: "Uses Hurricane, Thunder, Blizzard, and then Weather Ball, each at 30% of their normal Base Power.",
- shortDesc: "30% power: Hurricane, Thunder, Blizzard, W. Ball.",
- name: "Big Storm Coming",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit() {
- this.add(`c:|${Math.floor(Date.now() / 1000)}|${getName('Zodiax')}|There is a hail no storm okayyyyyy`);
- },
- onTry(pokemon, target) {
- pokemon.addVolatile('bigstormcomingmod');
- this.actions.useMove("Hurricane", pokemon);
- this.actions.useMove("Thunder", pokemon);
- this.actions.useMove("Blizzard", pokemon);
- this.actions.useMove("Weather Ball", pokemon);
- },
- secondary: null,
- target: "normal",
- type: "Flying",
- },
- // Zyg
- luckofthedraw: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Raises the user's Attack, Defense, and Speed by 1 stage.",
- shortDesc: "Raises the user's Attack, Defense, Speed by 1.",
- name: "Luck of the Draw",
- gen: 8,
- pp: 10,
- priority: 0,
- flags: {snatch: 1},
- onTryMove() {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, 'Quiver Dance', source);
- },
- boosts: {
- atk: 1,
- def: 1,
- spe: 1,
- },
- secondary: null,
- target: "self",
- type: "Psychic",
- },
- // These moves need modified to support Alpha's move
- auroraveil: {
- inherit: true,
- desc: "For 5 turns, the user and its party members take 0.5x damage from physical and special attacks, or 0.66x damage if in a Double Battle; does not reduce damage further with Reflect or Light Screen. Critical hits ignore this protection. It is removed from the user's side if the user or an ally is successfully hit by Brick Break, Psychic Fangs, or Defog. Brick Break and Psychic Fangs remove the effect before damage is calculated. Lasts for 8 turns if the user is holding Light Clay. Fails unless the weather is Heavy Hailstorm or Hail.",
- shortDesc: "For 5 turns, damage to allies is halved. Hail-like weather only.",
- onTryHitSide() {
- if (!this.field.isWeather(['winterhail', 'heavyhailstorm', 'hail'])) return false;
- },
- },
- blizzard: {
- inherit: true,
- desc: "Has a 10% chance to freeze the target. If the weather is Heavy Hailstorm or Hail, this move does not check accuracy.",
- shortDesc: "10% freeze foe(s). Can't miss in Hail-like weather.",
- onModifyMove(move) {
- if (this.field.isWeather(['winterhail', 'heavyhailstorm', 'hail'])) move.accuracy = true;
- },
- },
- dig: {
- inherit: true,
- condition: {
- duration: 2,
- onImmunity(type, pokemon) {
- if (['sandstorm', 'winterhail', 'heavyhailstorm', 'hail'].includes(type)) return false;
- },
- onInvulnerability(target, source, move) {
- if (['earthquake', 'magnitude'].includes(move.id)) {
- return;
- }
- return false;
- },
- onSourceModifyDamage(damage, source, target, move) {
- if (move.id === 'earthquake' || move.id === 'magnitude') {
- return this.chainModify(2);
- }
- },
- },
- },
- dive: {
- inherit: true,
- condition: {
- duration: 2,
- onImmunity(type, pokemon) {
- if (['sandstorm', 'winterhail', 'heavyhailstorm', 'hail'].includes(type)) return false;
- },
- onInvulnerability(target, source, move) {
- if (['surf', 'whirlpool'].includes(move.id)) {
- return;
- }
- return false;
- },
- onSourceModifyDamage(damage, source, target, move) {
- if (move.id === 'surf' || move.id === 'whirlpool') {
- return this.chainModify(2);
- }
- },
- },
- },
- moonlight: {
- inherit: true,
- desc: "The user restores 1/2 of its maximum HP if Delta Stream or no weather conditions are in effect or if the user is holding Utility Umbrella, 2/3 of its maximum HP if the weather is Desolate Land or Sunny Day, and 1/4 of its maximum HP if the weather is Heavy Hailstorm, Hail, Primordial Sea, Rain Dance, or Sandstorm, all rounded half down.",
- onHit(pokemon) {
- let factor = 0.5;
- switch (pokemon.effectiveWeather()) {
- case 'sunnyday':
- case 'desolateland':
- factor = 0.667;
- break;
- case 'raindance':
- case 'primordialsea':
- case 'sandstorm':
- case 'heavyhailstorm':
- case 'winterhail':
- case 'hail':
- factor = 0.25;
- break;
- }
- return !!this.heal(this.modify(pokemon.maxhp, factor));
- },
- },
- morningsun: {
- inherit: true,
- desc: "The user restores 1/2 of its maximum HP if Delta Stream or no weather conditions are in effect or if the user is holding Utility Umbrella, 2/3 of its maximum HP if the weather is Desolate Land or Sunny Day, and 1/4 of its maximum HP if the weather is Heavy Hailstorm, Hail, Primordial Sea, Rain Dance, or Sandstorm, all rounded half down.",
- onHit(pokemon) {
- let factor = 0.5;
- switch (pokemon.effectiveWeather()) {
- case 'sunnyday':
- case 'desolateland':
- factor = 0.667;
- break;
- case 'raindance':
- case 'primordialsea':
- case 'sandstorm':
- case 'heavyhailstorm':
- case 'winterhail':
- case 'hail':
- factor = 0.25;
- break;
- }
- return !!this.heal(this.modify(pokemon.maxhp, factor));
- },
- },
- solarbeam: {
- inherit: true,
- desc: "This attack charges on the first turn and executes on the second. Power is halved if the weather is Heavy Hailstorm, Hail, Primordial Sea, Rain Dance, or Sandstorm and the user is not holding Utility Umbrella. If the user is holding a Power Herb or the weather is Desolate Land or Sunny Day, the move completes in one turn. If the user is holding Utility Umbrella and the weather is Desolate Land or Sunny Day, the move still requires a turn to charge.",
- onBasePower(basePower, pokemon, target) {
- const weathers = ['raindance', 'primordialsea', 'sandstorm', 'winterhail', 'heavyhailstorm', 'hail'];
- if (weathers.includes(pokemon.effectiveWeather())) {
- this.debug('weakened by weather');
- return this.chainModify(0.5);
- }
- },
- },
- solarblade: {
- inherit: true,
- desc: "This attack charges on the first turn and executes on the second. Power is halved if the weather is Heavy Hailstorm, Hail, Primordial Sea, Rain Dance, or Sandstorm and the user is not holding Utility Umbrella. If the user is holding a Power Herb or the weather is Desolate Land or Sunny Day, the move completes in one turn. If the user is holding Utility Umbrella and the weather is Desolate Land or Sunny Day, the move still requires a turn to charge.",
- onBasePower(basePower, pokemon, target) {
- const weathers = ['raindance', 'primordialsea', 'sandstorm', 'winterhail', 'heavyhailstorm', 'hail'];
- if (weathers.includes(pokemon.effectiveWeather())) {
- this.debug('weakened by weather');
- return this.chainModify(0.5);
- }
- },
- },
- synthesis: {
- inherit: true,
- desc: "The user restores 1/2 of its maximum HP if Delta Stream or no weather conditions are in effect or if the user is holding Utility Umbrella, 2/3 of its maximum HP if the weather is Desolate Land or Sunny Day, and 1/4 of its maximum HP if the weather is Heavy Hailstorm, Hail, Primordial Sea, Rain Dance, or Sandstorm, all rounded half down.",
- onHit(pokemon) {
- let factor = 0.5;
- switch (pokemon.effectiveWeather()) {
- case 'sunnyday':
- case 'desolateland':
- factor = 0.667;
- break;
- case 'raindance':
- case 'primordialsea':
- case 'sandstorm':
- case 'heavyhailstorm':
- case 'winterhail':
- case 'hail':
- factor = 0.25;
- break;
- }
- return !!this.heal(this.modify(pokemon.maxhp, factor));
- },
- },
- weatherball: {
- inherit: true,
- desc: "Power doubles if a weather condition other than Delta Stream is active, and this move's type changes to match. Ice type during Heavy Hailstorm or Hail, Water type during Primordial Sea or Rain Dance, Rock type during Sandstorm, and Fire type during Desolate Land or Sunny Day. If the user is holding Utility Umbrella and uses Weather Ball during Primordial Sea, Rain Dance, Desolate Land, or Sunny Day, the move is still Normal-type and does not have a base power boost.",
- onModifyType(move, pokemon) {
- switch (pokemon.effectiveWeather()) {
- case 'sunnyday':
- case 'desolateland':
- move.type = 'Fire';
- break;
- case 'raindance':
- case 'primordialsea':
- move.type = 'Water';
- break;
- case 'sandstorm':
- move.type = 'Rock';
- break;
- case 'heavyhailstorm':
- case 'winterhail':
- case 'hail':
- move.type = 'Ice';
- break;
- }
- },
- onModifyMove(move, pokemon) {
- switch (pokemon.effectiveWeather()) {
- case 'sunnyday':
- case 'desolateland':
- move.basePower *= 2;
- break;
- case 'raindance':
- case 'primordialsea':
- move.basePower *= 2;
- break;
- case 'sandstorm':
- move.basePower *= 2;
- break;
- case 'heavyhailstorm':
- case 'winterhail':
- case 'hail':
- move.basePower *= 2;
- break;
- }
- },
- },
- // Modified move descriptions for support of Segmr's move
- doomdesire: {
- inherit: true,
- desc: "Deals damage two turns after this move is used. At the end of that turn, the damage is calculated at that time and dealt to the Pokemon at the position the target had when the move was used. If the user is no longer active at the time, damage is calculated based on the user's natural Special Attack stat, types, and level, with no boosts from its held item or Ability. Fails if this move, Disconnect, or Future Sight is already in effect for the target's position.",
- },
- futuresight: {
- inherit: true,
- desc: "Deals damage two turns after this move is used. At the end of that turn, the damage is calculated at that time and dealt to the Pokemon at the position the target had when the move was used. If the user is no longer active at the time, damage is calculated based on the user's natural Special Attack stat, types, and level, with no boosts from its held item or Ability. Fails if this move, Doom Desire, or Disconnect is already in effect for the target's position.",
- },
- // Terrain Pulse for consistency
- terrainpulse: {
- inherit: true,
- onModifyType(move, pokemon) {
- if (!pokemon.isGrounded()) return;
- switch (this.field.terrain) {
- case 'electricterrain':
- move.type = 'Electric';
- break;
- case 'grassyterrain':
- move.type = 'Grass';
- break;
- case 'mistyterrain':
- move.type = 'Fairy';
- break;
- case 'psychicterrain':
- move.type = 'Psychic';
- break;
- case 'baneterrain':
- move.type = 'Ice';
- break;
- case 'swampyterrain':
- move.type = 'Ground';
- break;
- case 'inversionterrain':
- move.type = '???';
- break;
- case 'pitchblack':
- move.type = 'Ghost';
- break;
- case 'waveterrain':
- move.type = 'Water';
- break;
- case 'tempestterrain':
- move.type = 'Flying';
- break;
- }
- },
- },
- // genderless infatuation for nui's Condition Override
- attract: {
- inherit: true,
- condition: {
- noCopy: true, // doesn't get copied by Baton Pass
- onStart(pokemon, source, effect) {
- if (!source.hasAbility('conditionoverride')) {
- if (!(pokemon.gender === 'M' && source.gender === 'F') && !(pokemon.gender === 'F' && source.gender === 'M')) {
- this.debug('incompatible gender');
- return false;
- }
- }
- if (!this.runEvent('Attract', pokemon, source)) {
- this.debug('Attract event failed');
- return false;
- }
-
- if (effect.id === 'cutecharm') {
- this.add('-start', pokemon, 'Attract', '[from] ability: Cute Charm', '[of] ' + source);
- } else if (effect.id === 'destinyknot') {
- this.add('-start', pokemon, 'Attract', '[from] item: Destiny Knot', '[of] ' + source);
- } else {
- this.add('-start', pokemon, 'Attract');
- }
- },
- onUpdate(pokemon) {
- if (this.effectState.source && !this.effectState.source.isActive && pokemon.volatiles['attract']) {
- this.debug('Removing Attract volatile on ' + pokemon);
- pokemon.removeVolatile('attract');
- }
- },
- onModifySpDPriority: 1,
- onModifySpD(spd, pokemon) {
- for (const target of this.getAllActive()) {
- if (target === pokemon) continue;
- if (target.hasAbility('conditionoverride')) return this.chainModify(0.75);
- }
- return;
- },
- onBeforeMovePriority: 2,
- onBeforeMove(pokemon, target, move) {
- this.add('-activate', pokemon, 'move: Attract', '[of] ' + this.effectState.source);
- if (this.randomChance(1, 2)) {
- this.add('cant', pokemon, 'Attract');
- return false;
- }
- },
- onEnd(pokemon) {
- this.add('-end', pokemon, 'Attract', '[silent]');
- },
- },
- onTryImmunity(target, source) {
- if (source.hasAbility('conditionoverride')) return true;
- return (target.gender === 'M' && source.gender === 'F') || (target.gender === 'F' && source.gender === 'M');
- },
- },
-
- // Try playing Staff Bros without dynamax and see what happens
- supermetronome: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- desc: "Uses 2-5 random moves. Does not include 1-Base Power Z-Moves, Super Metronome, Metronome, or 10-Base Power Max moves.",
- shortDesc: "Uses 2-5 random moves.",
- name: "Super Metronome",
- isNonstandard: "Custom",
- pp: 100,
- noPPBoosts: true,
- priority: 0,
- flags: {},
- onTryMove(pokemon) {
- this.attrLastMove('[still]');
- },
- onPrepareHit(target, source) {
- this.add('-anim', source, "Metronome", source);
- },
- onHit(target, source, effect) {
- const moves = [];
- for (const id in this.dex.data.Moves) {
- const move = this.dex.moves.get(id);
- if (move.realMove || move.id.includes('metronome')) continue;
- // Calling 1 BP move is somewhat lame and disappointing. However,
- // signature Z moves are fine, as they actually have a base power.
- if (move.isZ && move.basePower === 1) continue;
- if (move.gen > this.gen) continue;
- if (move.isMax === true && move.basePower === 10) continue;
- moves.push(move.name);
- }
- let randomMove: string;
- if (moves.length) {
- randomMove = this.sample(moves);
- } else {
- return false;
- }
- this.actions.useMove(randomMove, target);
- },
- multihit: [2, 5],
- secondary: null,
- target: "self",
- type: "???",
- },
-};
diff --git a/data/mods/ssb/pokedex.ts b/data/mods/ssb/pokedex.ts
deleted file mode 100644
index 2376792acefe..000000000000
--- a/data/mods/ssb/pokedex.ts
+++ /dev/null
@@ -1,265 +0,0 @@
-export const Pokedex: {[k: string]: ModdedSpeciesData} = {
- /*
- // Example
- id: {
- inherit: true, // Always use this, makes the pokemon inherit its default values from the parent mod (gen7)
- baseStats: {hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100}, // the base stats for the pokemon
- },
- */
- // Abdelrahman
- cameruptmega: {
- inherit: true,
- abilities: {0: "Water Absorb"},
- },
- // Aelita
- zygardecomplete: {
- inherit: true,
- abilities: {0: "Scyphozoa"},
- },
- // aegii
- aegislash: {
- inherit: true,
- abilities: {0: "Set the Stage"},
- },
- aegislashblade: {
- inherit: true,
- abilities: {0: "Set the Stage"},
- },
- // Aeonic
- nosepass: {
- inherit: true,
- baseStats: {hp: 70, atk: 85, def: 135, spa: 45, spd: 90, spe: 70},
- },
- // Aethernum
- lotad: {
- inherit: true,
- baseStats: {hp: 40, atk: 70, def: 70, spa: 80, spd: 90, spe: 70},
- },
- // Annika
- mewtwomegay: {
- inherit: true,
- baseStats: {hp: 106, atk: 110, def: 90, spa: 154, spd: 90, spe: 130},
- abilities: {0: "Overprotective"},
- },
- // A Quag To The Past
- quagsire: {
- inherit: true,
- baseStats: {hp: 95, atk: 65, def: 85, spa: 65, spd: 85, spe: 35},
- },
- // Billo
- cosmog: {
- inherit: true,
- baseStats: {hp: 86, atk: 58, def: 62, spa: 87, spd: 62, spe: 74},
- },
- // dogknees
- furret: {
- inherit: true,
- types: ["Normal", "Ghost"],
- },
- // Elgino
- celebi: {
- inherit: true,
- types: ["Grass", "Fairy"],
- },
- // EpicNikolai
- garchompmega: {
- inherit: true,
- abilities: {0: "Dragon Heart"},
- types: ["Dragon", "Fire"],
- },
- // Felucia
- uxie: {
- inherit: true,
- types: ["Psychic", "Normal"],
- },
- // frostyicelad
- laprasgmax: {
- inherit: true,
- heightm: 2.5,
- weightkg: 220,
- },
- // GMars
- minior: {
- inherit: true,
- abilities: {0: "Capsule Armor"},
- },
- miniorviolet: {
- inherit: true,
- abilities: {0: "Capsule Armor"},
- },
- miniorindigo: {
- inherit: true,
- abilities: {0: "Capsule Armor"},
- },
- miniorblue: {
- inherit: true,
- abilities: {0: "Capsule Armor"},
- },
- miniorgreen: {
- inherit: true,
- abilities: {0: "Capsule Armor"},
- },
- minioryellow: {
- inherit: true,
- abilities: {0: "Capsule Armor"},
- },
- miniororange: {
- inherit: true,
- abilities: {0: "Capsule Armor"},
- },
- miniormeteor: {
- inherit: true,
- abilities: {0: "Capsule Armor"},
- },
- // Hydro
- pichu: {
- inherit: true,
- types: ["Electric", "Water"],
- baseStats: {hp: 67, atk: 58, def: 57, spa: 81, spd: 67, spe: 101},
- },
- // Inactive
- gyaradosmega: {
- inherit: true,
- abilities: {0: "Dragon's Fury"},
- },
- // Jho
- toxtricity: {
- inherit: true,
- abilities: {0: "Punk Rock"},
- },
- toxtricitylowkey: {
- inherit: true,
- abilities: {0: "Venomize"},
- },
- // Kaiju Bunny
- lopunnymega: {
- inherit: true,
- abilities: {0: "Second Wind"},
- types: ["Normal", "Fairy"],
- },
- // Kris
- unown: {
- inherit: true,
- baseStats: {hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100},
- // For reverting back to an Unown forme
- abilities: {0: "Protean"},
- },
- // Lamp
- lampent: {
- inherit: true,
- baseStats: {hp: 60, atk: 80, def: 100, spa: 135, spd: 100, spe: 95},
- },
- // Meicoo
- venusaurmega: {
- inherit: true,
- abilities: {0: "Unaware"},
- },
- // nui
- jigglypuff: {
- inherit: true,
- baseStats: {hp: 115, atk: 128, def: 62, spa: 128, spd: 78, spe: 62},
- },
- // Overneat
- absolmega: {
- inherit: true,
- abilities: {0: "Fluffy"},
- types: ["Dark", "Fairy"],
- },
- // PartMan
- chandelure: {
- inherit: true,
- abilities: {0: "Hecatomb"},
- },
- // Psynergy
- rayquaza: {
- inherit: true,
- abilities: {0: "Supernova"},
- },
- rayquazamega: {
- inherit: true,
- abilities: {0: "Supernova"},
- requiredMove: "Clear Breath",
- },
- // Robb576
- necrozmadawnwings: {
- inherit: true,
- abilities: {0: "The Numbers Game"},
- },
- necrozmaduskmane: {
- inherit: true,
- abilities: {0: "The Numbers Game"},
- },
- necrozmaultra: {
- inherit: true,
- abilities: {0: "The Numbers Game"},
- },
- // Strucni
- aggronmega: {
- inherit: true,
- abilities: {0: "Overasked Clause"},
- },
- // Finland
- alcremie: {
- inherit: true,
- abilities: {0: "Winding Song"},
- },
- // tiki
- snom: {
- inherit: true,
- baseStats: {hp: 70, atk: 65, def: 60, spa: 125, spd: 90, spe: 65},
- },
- // vivalospride's interaction with Coconut's move
- darumaka: {
- inherit: true,
- evos: ["Darmanitan", "Darmanitan-Zen"],
- },
- darmanitanzen: {
- inherit: true,
- prevo: "Darumaka",
- },
- // yuki
- pikachucosplay: {
- inherit: true,
- baseStats: {hp: 60, atk: 85, def: 50, spa: 95, spd: 85, spe: 110},
- abilities: {0: "Combat Training"},
- },
- pikachuphd: {
- inherit: true,
- baseStats: {hp: 60, atk: 85, def: 50, spa: 95, spd: 85, spe: 110},
- abilities: {0: "Triage"},
- },
- pikachulibre: {
- inherit: true,
- baseStats: {hp: 60, atk: 85, def: 50, spa: 95, spd: 85, spe: 110},
- abilities: {0: "White Smoke"},
- },
- pikachupopstar: {
- inherit: true,
- baseStats: {hp: 60, atk: 85, def: 50, spa: 95, spd: 85, spe: 110},
- abilities: {0: "Dancer"},
- },
- pikachurockstar: {
- inherit: true,
- baseStats: {hp: 60, atk: 85, def: 50, spa: 95, spd: 85, spe: 110},
- abilities: {0: "Punk Rock"},
- },
- pikachubelle: {
- inherit: true,
- baseStats: {hp: 60, atk: 85, def: 50, spa: 95, spd: 85, spe: 110},
- abilities: {0: "Weak Armor"},
- },
- // Zalm
- weedle: {
- inherit: true,
- baseStats: {hp: 100, atk: 35, def: 100, spa: 90, spd: 90, spe: 100},
- },
- // Zarel
- meloetta: {
- inherit: true,
- abilities: {0: "Dancer"},
- },
- meloettapirouette: {
- inherit: true,
- abilities: {0: "Serene Grace"},
- },
-};
diff --git a/data/mods/ssb/random-teams.ts b/data/mods/ssb/random-teams.ts
deleted file mode 100644
index 6758947171dd..000000000000
--- a/data/mods/ssb/random-teams.ts
+++ /dev/null
@@ -1,980 +0,0 @@
-import RandomGen8Teams from '../gen8/random-teams';
-
-export interface SSBSet {
- species: string;
- ability: string | string[];
- item: string | string[];
- gender: GenderName;
- moves: (string | string[])[];
- signatureMove: string;
- evs?: {hp?: number, atk?: number, def?: number, spa?: number, spd?: number, spe?: number};
- ivs?: {hp?: number, atk?: number, def?: number, spa?: number, spd?: number, spe?: number};
- nature?: string | string[];
- shiny?: number | boolean;
- level?: number;
- happiness?: number;
- skip?: string;
-}
-interface SSBSets {[k: string]: SSBSet}
-
-export const ssbSets: SSBSets = {
- /*
- // Example:
- Username: {
- species: 'Species', ability: 'Ability', item: 'Item', gender: '',
- moves: ['Move Name', ['Move Name', 'Move Name']],
- signatureMove: 'Move Name',
- evs: {stat: number}, ivs: {stat: number}, nature: 'Nature', level: 100, shiny: false,
- },
- // Species, ability, and item need to be captialized properly ex: Ludicolo, Swift Swim, Life Orb
- // Gender can be M, F, N, or left as an empty string
- // each slot in moves needs to be a string (the move name, captialized properly ex: Hydro Pump), or an array of strings (also move names)
- // signatureMove also needs to be capitalized properly ex: Scripting
- // You can skip Evs (defaults to 82 all) and/or Ivs (defaults to 31 all), or just skip part of the Evs (skipped evs are 0) and/or Ivs (skipped Ivs are 31)
- // You can also skip shiny, defaults to false. Level can be skipped (defaults to 100).
- // Nature needs to be a valid nature with the first letter capitalized ex: Modest
- */
- // Please keep sets organized alphabetically based on staff member name!
- Abdelrahman: {
- species: 'Camerupt', ability: 'Water Absorb', item: 'Cameruptite', gender: 'M',
- moves: ['Eruption', 'Earth Power', 'Fire Blast'],
- signatureMove: 'The Town Outplay',
- evs: {hp: 252, spd: 172, spe: 84}, nature: 'Calm',
- },
- Adri: {
- species: 'Latios', ability: 'Psychic Surge', item: 'Leftovers', gender: 'M',
- moves: ['Psyshock', 'Calm Mind', 'Aura Sphere'],
- signatureMove: 'Skystriker',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- Aelita: {
- species: 'Zygarde', ability: 'Scyphozoa', item: 'Focus Sash', gender: 'F',
- moves: ['Protect', 'Leech Seed', 'Thousand Arrows'],
- signatureMove: 'XANA\'s Keys To Lyoko',
- evs: {hp: 252, atk: 4, spd: 252}, nature: 'Careful',
- },
- aegii: {
- species: 'Aegislash', ability: 'Set the Stage', item: 'Life Orb', gender: 'M',
- moves: ['Shadow Claw', 'Iron Head', 'Shadow Sneak'],
- signatureMove: 'Reset',
- evs: {hp: 252, def: 192, spd: 64}, nature: 'Sassy',
- },
- 'aegii-Alt': {
- species: 'Aegislash', ability: 'Set the Stage', item: 'Life Orb', gender: 'M',
- moves: ['Shadow Ball', 'Flash Cannon', 'Shadow Sneak'],
- signatureMove: 'Reset',
- evs: {hp: 252, def: 192, spd: 64}, nature: 'Sassy',
- skip: 'aegii',
- },
- Aeonic: {
- species: 'Nosepass', ability: 'Arsene', item: 'Stone Plate', gender: 'M',
- moves: ['Diamond Storm', 'Earthquake', 'Milk Drink'],
- signatureMove: 'Looking Cool',
- evs: {atk: 252, def: 4, spd: 252}, nature: 'Impish',
- },
- Aethernum: {
- species: 'Lotad', ability: 'Rainy Season', item: 'Big Root', gender: 'M',
- moves: ['Giga Drain', 'Muddy Water', 'Hurricane'],
- signatureMove: 'Lilypad Overflow',
- evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest',
- },
- Akir: {
- species: 'Forretress', ability: 'Fortifications', item: 'Leftovers', gender: 'M',
- moves: ['Rapid Spin', 'Stealth Rock', ['U-turn', 'Toxic']],
- signatureMove: 'Ravelin',
- evs: {hp: 248, def: 252, spe: 8}, ivs: {spa: 0}, nature: 'Impish',
- },
- Alpha: {
- species: 'Aurorus', ability: 'Snow Warning', item: 'Caionium Z', gender: 'M',
- moves: ['Freeze-Dry', 'Ancient Power', 'Earth Power'],
- signatureMove: 'Blizzard',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true,
- },
- Andrew: {
- species: 'Spectrier', ability: 'Neutralizing Gas', item: 'Choice Specs', gender: 'M',
- moves: ['Moongeist Beam', 'Pollen Puff', 'Trick'],
- signatureMove: 'Whammer Jammer',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- Annika: {
- species: 'Mewtwo', ability: 'Overprotective', item: 'Mewtwonite Y', gender: 'F',
- moves: [['Rising Voltage', 'Lava Plume'], ['Hex', 'Aurora Beam'], ['Psychic', 'Psyshock']],
- signatureMove: 'Data Corruption',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Quirky', shiny: true,
- },
- 'A Quag To The Past': {
- species: 'Quagsire', ability: 'Carefree', item: 'Quagnium Z', gender: 'M',
- moves: ['Shore Up', 'Flip Turn', ['Haze', 'Toxic']],
- signatureMove: 'Scorching Sands',
- evs: {hp: 252, def: 252, spd: 4}, ivs: {spe: 0}, nature: 'Relaxed',
- },
- Arby: {
- species: 'Keldeo-Resolute', ability: 'Wave Surge', item: 'Expert Belt', gender: '',
- moves: ['Hydro Pump', 'Secret Sword', 'Ice Beam'],
- signatureMove: 'Quickhammer',
- evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- Arcticblast: {
- species: 'Tapu Fini', ability: 'Misty Surge', item: 'Misty Seed', gender: '',
- moves: ['Heal Order', 'Sparkling Aria', ['Clear Smog', 'Moonblast']],
- signatureMove: 'Radiant Burst',
- evs: {hp: 252, def: 252, spe: 4}, ivs: {atk: 0}, nature: 'Bold',
- },
- Archas: {
- species: 'Naviathan', ability: 'Indomitable', item: 'Iron Plate', gender: 'F',
- moves: ['Waterfall', 'Icicle Crash', 'No Retreat'],
- signatureMove: 'Broadside Barrage',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
- },
- 'awa!': {
- species: 'Lycanroc', ability: 'Sand Rush', item: 'Life Orb', gender: 'F',
- moves: ['Earthquake', 'Close Combat', 'Swords Dance'],
- signatureMove: 'awa!',
- evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant',
- },
- Beowulf: {
- species: 'Beedrill', ability: 'Intrepid Sword', item: 'Beedrillite', gender: '',
- moves: ['Megahorn', 'Gunk Shot', ['Precipice Blades', 'Head Smash']],
- signatureMove: 'Buzz Inspection',
- evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', shiny: 2,
- },
- biggie: {
- species: 'Snorlax', ability: 'Super Armor', item: 'Leftovers', gender: 'M',
- moves: ['Body Slam', 'Darkest Lariat', 'Assist'],
- signatureMove: 'Juggernaut Punch',
- evs: {hp: 4, def: 252, spd: 252}, nature: 'Brave',
- },
- Billo: {
- species: 'Cosmog', ability: 'Proof Policy', item: 'Eviolite', gender: 'N',
- moves: ['Cosmic Power', 'Calm Mind', 'Stored Power'],
- signatureMove: 'Fishing for Hacks',
- evs: {hp: 252, spa: 252, spd: 4}, ivs: {atk: 0}, nature: 'Modest', shiny: true,
- },
- Blaz: {
- species: 'Carbink', ability: 'Solid Rock', item: 'Leftovers', gender: 'N',
- moves: ['Cosmic Power', 'Body Press', 'Recover'],
- signatureMove: 'Bleak December',
- evs: {hp: 4, def: 252, spd: 252}, ivs: {atk: 0}, nature: 'Careful', shiny: true,
- },
- Brandon: {
- species: 'Shaymin', ability: 'Bane Surge', item: ['Leftovers', 'Terrain Extender'], gender: 'M',
- moves: [['Ice Beam', 'Paleo Wave'], ['Earthquake', 'Flamethrower'], 'Recover'],
- signatureMove: 'Flower Shower',
- evs: {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84}, nature: 'Quirky',
- },
- brouha: {
- species: 'Mantine', ability: 'Turbulence', item: 'Leftovers', gender: 'M',
- moves: ['Scald', 'Recover', 'Haze'],
- signatureMove: 'Kinetosis',
- evs: {hp: 248, def: 8, spd: 252}, ivs: {atk: 0}, nature: 'Calm',
- },
- Buffy: {
- species: 'Dragonite', ability: 'Speed Control', item: 'Metal Coat', gender: '',
- moves: ['Swords Dance', 'Thousand Arrows', 'Double Iron Bash'],
- signatureMove: 'Pandora\'s Box',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', shiny: 2,
- },
- Cake: {
- species: 'Dunsparce', ability: 'Wonder Guard', item: 'Shell Bell', gender: 'M',
- moves: ['Haze', 'Jungle Healing', ['Baton Pass', 'Poison Gas', 'Corrosive Gas', 'Magic Powder', 'Speed Swap', 'Spite', 'Screech', 'Trick Room', 'Heal Block', 'Geomancy']],
- signatureMove: 'Kevin',
- evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant',
- },
- 'cant say': {
- species: 'Volcarona', ability: 'Rage Quit', item: 'Kee Berry', gender: 'M',
- moves: ['Quiver Dance', 'Roost', 'Will-O-Wisp'],
- signatureMove: 'Never Lucky',
- evs: {hp: 248, def: 36, spe: 224}, ivs: {atk: 0}, nature: 'Timid',
- },
- Celine: {
- species: 'Lucario', ability: 'Guardian Armor', item: 'Leftovers', gender: 'F',
- moves: ['Wish', 'Teleport', 'Drain Punch'],
- signatureMove: 'Status Guard',
- evs: {hp: 248, def: 252, spd: 8}, nature: 'Impish',
- },
- 'c.kilgannon': {
- species: 'Yveltal', ability: 'Infiltrator', item: 'Choice Scarf', gender: 'N',
- moves: ['Knock Off', 'Steel Wing', 'U-turn'],
- signatureMove: 'Soul Siphon',
- evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant',
- },
- Coconut: {
- species: 'Misdreavus', ability: 'Levitate', item: 'Focus Sash', gender: 'F',
- moves: ['Dazzling Gleam', 'Shadow Ball', 'Snatch'],
- signatureMove: 'Devolution Beam',
- evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid',
- },
- dogknees: {
- species: 'Furret', ability: 'Adaptability', item: ['Normalium Z', 'Ghostium Z'], gender: 'M',
- moves: ['Extreme Speed', 'Shadow Claw', 'Explosion'],
- signatureMove: 'Belly Rubs',
- evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly',
- },
- DragonWhale: {
- species: 'Mimikyu', ability: 'Disguise', item: 'Life Orb', gender: 'M',
- moves: ['Play Rough', 'Spectral Thief', 'Shadow Sneak'],
- signatureMove: 'Cloak Dance',
- evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly',
- },
- 'drampa\'s grandpa': {
- species: 'Drampa', ability: 'Old Manpa', item: 'Wise Glasses', gender: 'M',
- moves: [
- ['Spikes', 'Stealth Rock', 'Toxic Spikes'], 'Slack Off', ['Core Enforcer', 'Snarl', 'Lava Plume', 'Scorching Sands'],
- ],
- signatureMove: 'GET OFF MY LAWN!',
- evs: {hp: 248, def: 8, spa: 252}, ivs: {atk: 0}, nature: 'Modest',
- },
- dream: {
- species: 'Klefki', ability: 'Greed Punisher', item: 'Life Orb', gender: 'N',
- moves: ['Light of Ruin', 'Steel Beam', 'Mind Blown'],
- signatureMove: 'Lock and Key',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Modest',
- },
- Elgino: {
- species: 'Celebi', ability: 'Magic Guard', item: 'Life Orb', gender: 'M',
- moves: ['Leaf Storm', 'Nasty Plot', 'Power Gem'],
- signatureMove: 'Navi\'s Grace',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true,
- },
- Emeri: {
- species: 'Flygon', ability: 'Drake Skin', item: 'Throat Spray', gender: 'M',
- moves: ['Boomburst', 'Earth Power', 'Agility'],
- signatureMove: 'Forced Landing',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- estarossa: {
- species: 'Hippowdon', ability: 'Sands of Time', item: 'Leftovers', gender: 'M',
- moves: ['Earthquake', 'Stone Edge', 'Slack Off'],
- signatureMove: 'Sand Balance',
- evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant',
- },
- EpicNikolai: {
- species: 'Garchomp', ability: 'Dragon Heart', item: 'Garchompite', gender: 'M',
- moves: ['Outrage', 'Earthquake', 'Swords Dance'],
- signatureMove: 'Epic Rage',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
- },
- explodingdaisies: {
- species: 'Shedinja', ability: 'Wonder Guard', item: 'Heavy-Duty Boots', gender: 'M',
- moves: ['Swords Dance', 'X-Scissor', 'Shadow Sneak'],
- signatureMove: 'You Have No Hope!',
- evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant',
- },
- fart: {
- species: 'Kartana', ability: 'Bipolar', item: 'Metronome', gender: 'M',
- moves: ['U-turn'],
- signatureMove: 'Soup-Stealing 7-Star Strike: Redux',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', level: 100, shiny: true,
- },
- Felucia: {
- species: 'Uxie', ability: 'Regenerator', item: 'Red Card', gender: 'F',
- moves: ['Strength Sap', ['Psyshock', 'Night Shade'], ['Thief', 'Toxic']],
- signatureMove: 'Rigged Dice',
- evs: {hp: 252, def: 4, spd: 252}, nature: 'Calm',
- },
- Finland: {
- species: 'Alcremie', ability: 'Winding Song', item: 'Leftovers', gender: 'M',
- moves: ['Shore Up', 'Moonblast', ['Infestation', 'Whirlwind']],
- signatureMove: 'Cradily Chaos',
- evs: {hp: 252, def: 64, spa: 64, spd: 64, spe: 64}, ivs: {atk: 0}, nature: 'Serious',
- },
- 'Finland-Tsikhe': {
- species: 'Alcremie-Lemon-Cream', ability: 'Winding Song', item: 'Leftovers', gender: 'M',
- moves: ['Shore Up', 'Spiky Shield', ['Reflect', 'Light Screen']],
- signatureMove: 'Cradily Chaos',
- evs: {hp: 252, def: 64, spa: 64, spd: 64, spe: 64}, ivs: {atk: 0}, nature: 'Serious',
- skip: 'Finland',
- },
- 'Finland-Nezavisa': {
- species: 'Alcremie-Ruby-Swirl', ability: 'Winding Song', item: 'Leftovers', gender: 'M',
- moves: ['Lava Plume', 'Scorching Sands', ['Refresh', 'Destiny Bond']],
- signatureMove: 'Cradily Chaos',
- evs: {hp: 252, def: 64, spa: 64, spd: 64, spe: 64}, ivs: {atk: 0}, nature: 'Serious',
- skip: 'Finland',
- },
- 'Finland-Järvilaulu': {
- species: 'Alcremie-Mint-Cream', ability: 'Winding Song', item: 'Leftovers', gender: 'M',
- moves: ['Sticky Web', 'Parting Shot', ['Light of Ruin', 'Sparkling Aria']],
- signatureMove: 'Cradily Chaos',
- evs: {hp: 252, def: 64, spa: 64, spd: 64, spe: 64}, ivs: {atk: 0}, nature: 'Serious',
- skip: 'Finland',
- },
- 'frostyicelad ❆': {
- species: 'Lapras-Gmax', ability: 'Ice Shield', item: 'Life Orb', gender: 'M',
- moves: ['Quiver Dance', 'Sparkling Aria', 'Recover'],
- signatureMove: 'Frosty Wave',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- 'gallant\'s pear': {
- species: 'Orbeetle', ability: 'Armor Time', item: ['Life Orb', 'Heavy-Duty Boots'], gender: 'M',
- moves: ['Bug Buzz', 'Nasty Plot', 'Snipe Shot'],
- signatureMove: 'King Giri Giri Slash',
- evs: {hp: 252, def: 4, spe: 252}, nature: 'Timid',
- },
- Gimmick: {
- species: 'Grimmsnarl', ability: 'IC3PEAK', item: 'Throat Spray', gender: 'M',
- moves: ['Boomburst', 'Disarming Voice', 'Snarl'],
- signatureMove: 'Random Screaming',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true,
- },
- GMars: {
- species: 'Minior-Meteor', ability: 'Capsule Armor', item: 'White Herb', gender: 'N',
- moves: ['Acrobatics', 'Earthquake', 'Diamond Storm'],
- signatureMove: 'Gacha',
- evs: {hp: 68, atk: 252, spe: 188}, nature: 'Adamant',
- },
- grimAuxiliatrix: {
- species: 'Duraludon', ability: 'Aluminum Alloy', item: 'Assault Vest', gender: '',
- moves: [['Core Enforcer', 'Draco Meteor'], 'Fire Blast', ['Thunderbolt', 'Earth Power']],
- signatureMove: 'Skyscraper Suplex',
- evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid',
- },
- HoeenHero: {
- species: 'Ludicolo', ability: 'Tropical Cyclone', item: 'Life Orb', gender: 'M',
- moves: ['Scald', 'Giga Drain', 'Hurricane'],
- signatureMove: 'Landfall',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest',
- },
- Hubriz: {
- species: 'Roserade', ability: 'Stakeout', item: 'Rose Incense', gender: 'F',
- moves: [['Toxic Spikes', 'Spikes'], 'Leaf Storm', 'Sludge Bomb'],
- signatureMove: 'Steroid Anaphylaxia',
- evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- Hydro: {
- species: 'Pichu', ability: 'Hydrostatic', item: 'Eviolite', gender: 'M',
- moves: ['Hydro Pump', 'Thunder', 'Ice Beam'],
- signatureMove: 'Hydrostatics',
- evs: {def: 4, spa: 252, spe: 252}, nature: 'Modest',
- },
- Inactive: {
- species: 'Gyarados', ability: 'Dragon\'s Fury', item: 'Gyaradosite', gender: '',
- moves: ['Dragon Dance', 'Earthquake', 'Crabhammer'],
- signatureMove: 'Paranoia',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
- },
- instruct: {
- species: 'Riolu', ability: 'Truant', item: 'Heavy-Duty Boots', gender: '',
- moves: ['Explosion', 'Lunar Dance', 'Memento'],
- signatureMove: 'Soda Break',
- evs: {hp: 252, atk: 4, spe: 252}, nature: 'Jolly',
- },
- Iyarito: {
- species: 'Gengar', ability: 'Pollo Diablo', item: 'Choice Specs', gender: 'F',
- moves: ['Sludge Wave', 'Volt Switch', 'Fusion Flare'],
- signatureMove: 'Patrona Attack',
- evs: {def: 4, spa: 252, spe: 252}, nature: 'Timid', shiny: true,
- },
- Jett: {
- species: 'Sneasel', ability: 'Deceiver', item: 'Heavy Duty Boots', gender: 'F',
- moves: ['Knock Off', 'Triple Axel', 'Counter'],
- signatureMove: 'The Hunt is On!',
- evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly',
- },
- Jho: {
- species: 'Toxtricity', ability: 'Punk Rock', item: 'Throat Spray', gender: 'M',
- moves: ['Nasty Plot', 'Overdrive', 'Volt Switch'],
- signatureMove: 'Genre Change',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- 'Jho-Low-Key': {
- species: 'Toxtricity-Low-Key', ability: 'Venomize', item: 'Throat Spray', gender: 'M',
- moves: ['Aura Sphere', 'Boomburst', 'Volt Switch'],
- signatureMove: 'Genre Change',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- skip: 'Jho',
- },
- Jordy: {
- species: 'Archeops', ability: 'Divine Sandstorm', item: 'Life Orb', gender: 'M',
- moves: ['Brave Bird', 'Head Smash', ['U-turn', 'Roost', 'Icicle Crash']],
- signatureMove: 'Archeops\'s Rage',
- evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly',
- },
- 'Kaiju Bunny': {
- species: 'Lopunny', ability: 'Second Wind', item: 'Lopunnite', gender: 'F',
- moves: ['Return', 'Play Rough', ['Drain Punch', 'High Jump Kick']],
- signatureMove: 'Cozy Cuddle',
- evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', shiny: true,
- },
- Kalalokki: {
- species: 'Wingull', ability: 'Magic Guard', item: 'Kalalokkium Z', gender: 'M',
- moves: ['Tailwind', 'Encore', 'Healing Wish'],
- signatureMove: 'Blackbird',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- Kennedy: {
- species: 'Cinderace', ability: 'False Nine', item: 'Choice Band', gender: 'M',
- moves: ['High Jump Kick', 'Triple Axel', 'U-turn'],
- signatureMove: 'Top Bins',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant',
- },
- Kev: {
- species: 'Kingdra', ability: 'King of Atlantis', item: 'Life Orb', gender: 'M',
- moves: ['Hydro Pump', 'Core Enforcer', 'Hurricane'],
- signatureMove: 'King\'s Trident',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest',
- },
- Kingbaruk: {
- species: 'Stonjourner', ability: 'Sturdy', item: 'Heavy Duty Boots', gender: 'M',
- moves: ['Diamond Storm', ['Superpower', 'Earthquake'], 'King\'s Shield'],
- signatureMove: 'Leave it to the team!',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
- },
- KingSwordYT: {
- species: 'Pangoro', ability: 'Bamboo Kingdom', item: 'Rocky Helmet', gender: 'M',
- moves: ['Body Press', 'Spiky Shield', 'Shore Up'],
- signatureMove: 'Clash of Pangoros',
- evs: {hp: 252, atk: 4, def: 252}, nature: 'Impish', shiny: true,
- },
- Kipkluif: {
- species: 'Gossifleur', ability: 'Degenerator', item: 'Eviolite', gender: 'M',
- moves: ['Strength Sap', 'Apple Acid', 'Court Change'],
- signatureMove: 'Kip Up',
- evs: {hp: 196, def: 116, spa: 36, spd: 116, spe: 36}, ivs: {atk: 0}, nature: 'Modest', shiny: true,
- },
- Kris: {
- species: 'Unown', ability: 'Protean', item: 'Life Orb', gender: 'N',
- moves: ['Light of Ruin', 'Psystrike', ['Secret Sword', 'Mind Blown', 'Seed Flare']],
- signatureMove: 'Alphabet Soup',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- Lamp: {
- species: 'Lampent', ability: 'Soul-Heart', item: 'Eviolite', gender: 'M',
- moves: ['Nasty Plot', 'Searing Shot', 'Recover'],
- signatureMove: 'Soul Swap',
- evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- Lionyx: {
- species: 'Gardevoir', ability: 'Tension', item: 'Blunder Policy', gender: 'F',
- moves: [
- ['Psychic', 'Psystrike'], 'Quiver Dance', [
- 'Blizzard', 'Focus Blast', 'Hurricane', 'Hydro Pump', 'Inferno', 'Zap Cannon',
- ],
- ],
- signatureMove: 'Big Bang',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true,
- },
- 'Litt♥Eleven': {
- species: 'Bisharp', ability: 'Dark Royalty', item: 'Black Glasses', gender: 'M',
- moves: ['Sucker Punch', 'Knock Off', 'Iron Head'],
- signatureMove: '/nexthunt',
- evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', shiny: true,
- },
- Lunala: {
- species: 'Hattrem', ability: 'Magic Hat', item: 'Eviolite', gender: 'F',
- moves: ['Nuzzle', 'Flamethrower', 'Healing Wish'],
- signatureMove: 'Hat of Wisdom',
- evs: {hp: 252, def: 4, spd: 252}, ivs: {atk: 0}, nature: 'Sassy',
- },
- 'Mad Monty ¾°': {
- species: 'Zekrom', ability: 'Petrichor', item: 'Damp Rock', gender: 'N',
- moves: ['Bolt Strike', 'Dragon Claw', 'Liquidation'],
- signatureMove: 'Ca-LLAMA-ty',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', shiny: true,
- },
- MajorBowman: {
- species: 'Weezing-Galar', ability: 'Neutralizing Gas', item: 'Black Sludge', gender: 'M',
- moves: ['Strange Steam', ['Toxic Spikes', 'Haze'], 'Recover'],
- signatureMove: 'Corrosive Cloud',
- evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold',
- },
- Marshmallon: {
- species: 'Munchlax', ability: 'Stubbornness', item: 'Eviolite', gender: 'M',
- moves: ['Head Charge', 'Flare Blitz', 'Wood Hammer', 'Head Smash'],
- signatureMove: 'RAWWWR',
- evs: {hp: 248, def: 252, spd: 8}, ivs: {spe: 0}, nature: 'Relaxed',
- },
- Meicoo: {
- species: 'Venusaur', ability: 'Regenerator', item: 'Venusaurite', gender: 'M',
- moves: ['Sludge Bomb', ['Giga Drain', 'Knock Off', 'Flamethrower'], ['Recover', 'Strength Sap']],
- signatureMove: 'spamguess',
- evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold',
- },
- Mitsuki: {
- species: 'Leafeon', ability: 'Photosynthesis', item: ['Life Orb', 'Miracle Seed'], gender: 'M',
- moves: ['Leaf Blade', 'Attack Order', 'Thousand Arrows'],
- signatureMove: 'Terraforming',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
- },
- n10siT: {
- species: 'Hoopa', ability: 'Greedy Magician', item: 'Focus Sash', gender: 'N',
- moves: ['Hyperspace Hole', 'Shadow Ball', 'Aura Sphere'],
- signatureMove: 'Unbind',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- Naziel: {
- species: 'Kirlia', ability: 'Prankster', item: 'Eviolite', gender: '',
- moves: ['Glare', 'Defog', 'Swagger'],
- signatureMove: 'Not-so-worthy Pirouette',
- evs: {hp: 252, def: 200, spd: 56}, ivs: {atk: 0}, nature: 'Calm', shiny: true,
- },
- Nol: {
- species: 'Litwick', ability: 'Burning Soul', item: 'Spooky Plate', gender: 'F',
- moves: ['Shadow Ball', 'Flamethrower', 'Giga Drain'],
- signatureMove: 'Mad Hacks',
- evs: {hp: 252, spa: 252, spd: 4}, ivs: {atk: 0, spe: 0}, nature: 'Quiet', shiny: true,
- },
- Notater517: {
- species: 'Jellicent', ability: 'Last-Minute Lag', item: 'Leftovers', gender: 'M',
- moves: ['Hydro Cannon', 'Blast Burn', ['Toxic Spikes', 'Recover']],
- signatureMove: 'Techno Tuber Transmission',
- evs: {hp: 236, spa: 252, spe: 20}, ivs: {atk: 0}, nature: 'Modest',
- },
- nui: {
- species: 'Jigglypuff', ability: 'Condition Override', item: 'King\'s Rock', gender: 'M',
- moves: ['Stealth Rock', 'Attract', 'Heal Order'],
- signatureMove: 'Win Condition',
- evs: {hp: 248, def: 92, spd: 168}, nature: 'Bold', shiny: true,
- },
- 'OM~!': {
- species: 'Glastrier', ability: 'Filter', item: 'Heavy Duty Boots', gender: 'M',
- moves: ['Recover', 'Stealth Rock', 'Earthquake'],
- signatureMove: 'OM Zoom',
- evs: {hp: 252, def: 252, spd: 4}, ivs: {spe: 0}, nature: 'Relaxed',
- },
- Overneat: {
- species: 'Absol', ability: 'Intimidate', item: 'Absolite', gender: 'M',
- moves: ['Play Rough', 'U-turn', 'Close Combat'],
- signatureMove: 'Healing you?',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
- },
- pants: {
- species: 'Phantump', ability: 'Ghost Spores', item: 'Eviolite', gender: 'M',
- moves: ['Taunt', 'Spirit Shackle', ['Horn Leech', 'U-turn', 'Flip Turn']],
- signatureMove: 'Wistful Thinking',
- evs: {hp: 252, def: 4, spd: 252}, nature: 'Impish', shiny: true,
- },
- 'Paradise ╱╲☼': {
- species: 'Slaking', ability: 'Unaware', item: 'Choice Scarf', gender: '',
- moves: ['Sacred Fire', 'Spectral Thief', 'Icicle Crash'],
- signatureMove: 'Rapid Turn',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
- },
- PartMan: {
- species: 'Chandelure', ability: 'Hecatomb', item: 'Focus Sash', gender: 'M',
- moves: ['Nasty Plot', 'Draining Kiss', 'Dark Pulse'],
- signatureMove: 'Baleful Blaze',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- 'PartMan-Shiny': {
- species: 'Chandelure', ability: 'Hecatomb', item: 'Focus Sash', gender: 'M',
- moves: ['Nasty Plot', 'Light of Ruin', 'Fiery Wrath'],
- signatureMove: 'Baleful Blaze',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true,
- skip: 'PartMan',
- },
- 'peapod c': {
- species: 'Dragapult', ability: 'Stealth Black', item: 'Leftovers', gender: 'M',
- moves: ['Hex', 'Dragon Darts', 'Work Up'],
- signatureMove: 'Submartingale',
- evs: {atk: 4, spa: 252, spe: 252}, nature: 'Mild',
- },
- 'Perish Song': {
- species: 'Rhydon', ability: 'Soup Sipper', item: 'Rocky Helmet', gender: 'M',
- moves: ['Swords Dance', 'Stealth Rock', 'Rock Blast'],
- signatureMove: 'Trickery',
- evs: {hp: 252, atk: 4, def: 252}, nature: 'Impish',
- },
- phiwings99: {
- species: 'Froslass', ability: 'Plausible Deniability', item: 'Heavy Duty Boots', gender: 'M',
- moves: ['Moongeist Beam', 'Spikes', 'Haze'],
- signatureMove: 'Ghost of 1v1 Past',
- evs: {hp: 252, spa: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- 'piloswine gripado': {
- species: 'Piloswine', ability: 'Forever Winter Nights', item: 'Eviolite', gender: 'M',
- moves: ['Earthquake', 'Bulk Up', 'refresh'],
- signatureMove: 'Icicle Spirits',
- evs: {hp: 252, atk: 252, def: 4}, nature: 'Adamant',
- },
- 'PiraTe Princess': {
- species: 'Polteageist', ability: 'Wild Magic Surge', item: 'Expert Belt', gender: 'F',
- moves: [
- 'Moongeist Beam', 'Spacial Rend', [
- 'Tri Attack', 'Fiery Dance', 'Scald', 'Discharge', 'Apple Acid', 'Ice Beam',
- 'Aura Sphere', 'Sludge Bomb', 'Earth Power', 'Oblivion Wing', 'Psyshock', 'Bug Buzz',
- 'Power Gem', 'Dark Pulse', 'Flash Cannon', 'Dazzling Gleam',
- ],
- ],
- signatureMove: 'Dungeons & Dragons',
- evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- Psynergy: {
- species: 'Rayquaza', ability: 'Supernova', item: 'Wise Glasses', gender: 'M',
- moves: ['Bouncy Bubble', 'Discharge', 'Lava Plume'],
- signatureMove: 'Clear Breath',
- evs: {spa: 252, spd: 4, spe: 252}, nature: 'Serious', shiny: true,
- },
- ptoad: {
- species: 'Palpitoad', ability: 'Swampy Surge', item: 'Eviolite', gender: 'M',
- moves: ['Recover', 'Refresh', ['Sludge Bomb', 'Sludge Wave']],
- signatureMove: 'Croak',
- evs: {hp: 248, def: 8, spd: 252}, ivs: {atk: 0}, nature: 'Calm',
- },
- Rabia: {
- species: 'Mew', ability: 'Psychic Surge', item: 'Life Orb', gender: 'M',
- moves: ['Nasty Plot', ['Flamethrower', 'Fire Blast'], 'Roost'],
- signatureMove: 'Psycho Drive',
- evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', shiny: true,
- },
- Rach: {
- species: 'Spinda', ability: 'BURN IT DOWN!', item: 'Leftovers', gender: 'F',
- moves: ['Extreme Speed', 'Recover', 'Knock Off'],
- signatureMove: 'Spinda Wheel',
- evs: {hp: 252, atk: 4, def: 252}, nature: 'Impish',
- },
- Rage: {
- species: 'Espeon', ability: 'Inversion Surge', item: 'Leftovers', gender: 'M',
- moves: ['Psychic', 'Calm Mind', 'Hyper Voice'],
- signatureMove: ':shockedlapras:',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- 'Raihan Kibana': {
- species: 'Stoutland', ability: 'Royal Coat', item: 'Leftovers', gender: 'M',
- moves: ['Knock Off', 'Thousand Waves', ['Play Rough', 'Power Whip']],
- signatureMove: 'Stony Kibbles',
- evs: {atk: 128, spd: 252, spe: 128}, nature: 'Jolly',
- },
- 'Raj.Shoot': {
- species: 'Charizard', ability: 'Tough Claws', item: 'Heavy-Duty Boots', gender: 'N',
- moves: ['Flare Blitz', 'Dragon Claw', 'Roost'],
- signatureMove: 'Fan Service',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
- },
- Ransei: {
- species: 'Audino', ability: 'Neutralizing Gas', item: 'Choice Scarf', gender: 'M',
- moves: ['Trick', 'Recover', 'Spectral Thief'],
- signatureMove: 'ripsei',
- evs: {hp: 252, atk: 4, spe: 252}, nature: 'Jolly',
- },
- RavioliQueen: {
- species: 'Mismagius', ability: 'Phantom Plane', item: 'Spell Tag', gender: '',
- moves: ['Shadow Ball', 'Dark Pulse', 'Psychic'],
- signatureMove: 'Witching Hour',
- evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Modest',
- },
- Robb576: {
- species: 'Necrozma-Dawn-Wings', ability: 'The Numbers Game', item: 'Metronome', gender: 'M',
- moves: ['Moongeist Beam', 'Psystrike', 'Thunder Wave'],
- signatureMove: 'Mode [5: Offensive]',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest',
- },
- 'Robb576-Dusk-Mane': {
- species: 'Necrozma-Dusk-Mane', ability: 'The Numbers Game', item: 'Leftovers', gender: 'M',
- moves: ['Sunsteel Strike', 'Toxic', 'Rapid Spin'],
- signatureMove: 'Mode [7: Defensive]',
- evs: {hp: 252, atk: 4, spd: 252}, nature: 'Careful',
- skip: 'Robb576', // This set is transformed into by The Numbers Game ability
- },
- 'Robb576-Ultra': {
- species: 'Necrozma-Ultra', ability: 'The Numbers Game', item: 'Modium-6 Z', gender: 'M',
- moves: ['Earthquake', 'Dynamax Cannon', 'Fusion Flare'],
- signatureMove: 'Photon Geyser',
- evs: {atk: 204, spa: 200, spe: 104}, nature: 'Hasty',
- skip: 'Robb576', // This set is transformed into by The Numbers Game ability
- },
- Sectonia: {
- species: 'Reuniclus', ability: 'Royal Aura', item: 'Leftovers', gender: 'M',
- moves: ['Eerie Spell', 'Moonblast', 'Recover'],
- signatureMove: 'Homunculus\'s Vanity',
- evs: {hp: 252, def: 252, spd: 4}, ivs: {atk: 0, spe: 0}, nature: 'Relaxed', shiny: true,
- },
- Segmr: {
- species: 'Runerigus', ability: 'Skill Drain', item: 'Leftovers', gender: 'M',
- moves: ['Recover', 'Will-O-Wisp', 'Protect'],
- signatureMove: 'Tsukuyomi',
- evs: {hp: 252, def: 4, spd: 252}, nature: 'Calm', shiny: true,
- },
- sejesensei: {
- species: 'Garbodor', ability: 'Trash Consumer', item: 'Red Card', gender: 'M',
- moves: ['Toxic Spikes', 'Spikes', 'Thousand Waves'],
- signatureMove: 'Bad Opinion',
- evs: {hp: 252, atk: 56, def: 200}, nature: 'Impish', shiny: 2,
- },
- Seso: {
- species: 'Nidoking', ability: 'Intrepid Sword', item: 'Weakness Policy', gender: 'M',
- moves: ['Sacred Sword', 'Leaf Blade', 'Behemoth Blade'],
- signatureMove: 'Legendary Swordsman',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', shiny: true,
- },
- Shadecession: {
- species: 'Honchkrow', ability: 'Shady Deal', item: 'Heavy Duty Boots', gender: 'M',
- moves: ['Knock Off', 'Roost', 'Brave Bird'],
- signatureMove: 'Shade Uppercut',
- evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', shiny: true,
- },
- 'Soft Flex': {
- species: 'Zapdos', ability: 'Eye of the Storm', item: ['Leftovers', 'Damp Rock'], gender: '',
- moves: ['Thunder', 'Roost', ['Defog', 'Toxic']],
- signatureMove: 'Updraft',
- evs: {hp: 252, def: 252, spe: 8}, ivs: {atk: 0}, nature: 'Bold', shiny: 1024,
- },
- Spandan: {
- species: 'Mareanie', ability: 'Hacked Corrosion', item: 'Eviolite', gender: 'M',
- moves: ['Toxic', 'Recover', 'Spiky Shield'],
- signatureMove: 'I\'m Toxic You\'re Slippin\' Under',
- evs: {hp: 252, def: 4, spd: 252}, nature: 'Calm',
- },
- Struchni: {
- species: 'Aggron', ability: 'Overasked Clause', item: 'Choice Band', gender: 'M',
- moves: ['Pursuit', 'U-turn', 'Fishious Rend'],
- signatureMove: 'Veto',
- evs: {hp: 251, atk: 5, def: 11, spd: 241}, nature: 'Careful',
- },
- Teclis: {
- species: 'Typhlosion', ability: 'Fiery Fur', item: 'Heavy Duty Boots', gender: 'M',
- moves: ['Earth Power', 'Seed Flare', 'Spiky Shield'],
- signatureMove: 'Kaboom',
- evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Modest',
- },
- temp: {
- species: 'Latias', ability: 'Charged Up', item: 'Dragon Fang', gender: 'F',
- moves: ['Psychic', 'Surf', 'Roost'],
- signatureMove: 'DROP A DRACO',
- evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true,
- },
- 'The Immortal': {
- species: 'Xurkitree', ability: 'Teravolt', item: 'Electrium Z', gender: '',
- moves: ['Tail Glow', 'Freeze Dry', 'Secret Sword'],
- signatureMove: 'Watt Up',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid',
- },
- thewaffleman: {
- species: 'Mr. Rime', ability: 'Prankster', item: 'Kasib Berry', gender: 'M',
- moves: ['Cotton Guard', 'Slack Off', 'Focus Blast'],
- signatureMove: 'Ice Press',
- evs: {hp: 252, def: 4, spd: 252}, ivs: {atk: 0}, nature: 'Calm',
- },
- tiki: {
- species: 'Snom', ability: 'True Grit', item: 'Eviolite', gender: 'M',
- moves: ['Toxic', 'Strength Sap', 'U-turn'],
- signatureMove: 'Right. On. Cue!',
- evs: {hp: 128, def: 144, spd: 236}, ivs: {atk: 0}, nature: 'Bold',
- },
- trace: {
- species: 'Jirachi', ability: 'Trace', item: 'Leftovers', gender: '',
- moves: ['Wish', 'Protect', 'Psychic'],
- signatureMove: 'Hero Creation',
- evs: {hp: 248, def: 8, spd: 252}, ivs: {atk: 0}, nature: 'Calm',
- },
- Trickster: {
- species: 'Shiinotic', ability: 'Trillionage Roots', item: 'Leftovers', gender: '',
- moves: ['Strength Sap', 'Cosmic Power', 'Knock Off'],
- signatureMove: 'Soul-Shattering Stare',
- evs: {hp: 252, def: 252, spd: 4}, nature: 'Bold', shiny: true,
- },
- Vexen: {
- species: 'Tauros', ability: 'Aquila\'s Blessing', item: 'Life Orb', gender: 'M',
- moves: ['Earthquake', 'Zen Headbutt', 'Rock Slide'],
- signatureMove: 'Asterius Strike',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
- },
- vivalospride: {
- species: 'Darmanitan-Zen', ability: 'Regenerator', item: 'Heavy Duty Boots', gender: 'M',
- moves: ['Teleport', 'Future Sight', 'Toxic'],
- signatureMove: 'DRIP BAYLESS',
- evs: {hp: 252, spa: 252, def: 4}, ivs: {atk: 0}, nature: 'Modest',
- },
- Volco: {
- species: 'Volcanion', ability: 'Speedrunning', item: 'Choice Scarf',
- moves: ['Steam Eruption', ['Vacuum Wave', 'Secret Sword'], 'Overdrive'],
- signatureMove: 'Glitch Exploiting',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', gender: 'N',
- },
- vooper: {
- species: 'Pancham', ability: 'Qi-Gong', item: 'Eviolite', gender: 'M',
- moves: ['Drain Punch', 'Knock Off', 'Swords Dance'],
- signatureMove: 'Panda Express',
- evs: {hp: 252, atk: 252, spd: 4}, ivs: {atk: 0}, nature: 'Adamant',
- },
- yuki: {
- species: 'Pikachu-Cosplay', ability: 'Combat Training', item: 'Light Ball', gender: 'F',
- moves: ['Quick Attack', 'Agility'],
- signatureMove: 'Class Change',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: ['Modest', 'Timid'],
- },
- 'yuki-Cleric': {
- species: 'Pikachu-PhD', ability: 'Triage', item: 'Light Ball', gender: 'F',
- moves: ['Parabolic Charge', 'Wish', 'Baton Pass'],
- signatureMove: 'Class Change',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0},
- skip: 'yuki',
- },
- 'yuki-Dancer': {
- species: 'Pikachu-Pop-Star', ability: 'Dancer', item: 'Light Ball', gender: 'F',
- moves: ['Fiery Dance', 'Revelation Dance', 'Quiver Dance'],
- signatureMove: 'Class Change',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0},
- skip: 'yuki',
- },
- 'yuki-Ninja': {
- species: 'Pikachu-Libre', ability: 'White Smoke', item: 'Light Ball', gender: 'F',
- moves: ['Water Shuriken', 'Frost Breath', 'Toxic'],
- signatureMove: 'Class Change',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0},
- skip: 'yuki',
- },
- 'yuki-Songstress': {
- species: 'Pikachu-Rock-Star', ability: 'Punk Rock', item: 'Light Ball', gender: 'F',
- moves: ['Hyper Voice', 'Overdrive', 'Sing'],
- signatureMove: 'Class Change',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0},
- skip: 'yuki',
- },
- 'yuki-Jester': {
- species: 'Pikachu-Belle', ability: 'Weak Armor', item: 'Light Ball', gender: 'F',
- moves: ['Fire Blast', 'Thunder', 'Blizzard'],
- signatureMove: 'Class Change',
- evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0},
- skip: 'yuki',
- },
- Zalm: {
- species: 'Weedle', ability: 'Berserk', item: 'Sitrus Berry', gender: 'M',
- moves: ['Quiver Dance', 'Belch', ['Snipe Shot', 'Power Gem']],
- signatureMove: 'Ingredient Foraging',
- evs: {hp: 252, spa: 252, spd: 4}, ivs: {atk: 0}, nature: 'Modest',
- },
- Zarel: {
- species: 'Meloetta', ability: 'Dancer', item: 'Leftovers', gender: 'N',
- moves: ['Quiver Dance', 'Feather Dance', 'Lunar Dance'],
- signatureMove: 'Relic Dance',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest',
- },
- 'Zarel-Pirouette': {
- species: 'Meloetta-Pirouette', ability: 'Serene Grace', item: 'Leftovers', gender: 'N',
- moves: ['Revelation Dance', 'Fiery Dance', 'Petal Dance'],
- signatureMove: 'Relic Dance',
- evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest',
- skip: 'Zarel',
- },
- Zodiax: {
- species: 'Oricorio-Pom-Pom', ability: 'Primordial Sea', item: 'Heavy-Duty Boots', gender: 'M',
- moves: ['Quiver Dance', 'Hurricane', 'Thunder'],
- signatureMove: 'Big Storm Coming',
- evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid',
- },
- Zyg: {
- species: 'Azelf', ability: 'Magic Bounce', item: ['Life Orb', 'Expert Belt'], gender: 'M',
- moves: ['Photon Geyser', 'Knock Off', ['U-turn', 'Play Rough', 'Close Combat']],
- signatureMove: 'Luck of the Draw',
- evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly',
- },
-};
-
-const afdSSBSets: SSBSets = {
- 'Fox': {
- species: 'Delphox', ability: 'No Ability', item: '', gender: '',
- moves: [],
- signatureMove: 'Super Metronome',
- },
-};
-
-export class RandomStaffBrosTeams extends RandomGen8Teams {
- randomStaffBrosTeam(options: {inBattle?: boolean} = {}) {
- this.enforceNoDirectCustomBanlistChanges();
-
- const team: PokemonSet[] = [];
- const debug: string[] = []; // Set this to a list of SSB sets to override the normal pool for debugging.
- const ruleTable = this.dex.formats.getRuleTable(this.format);
- const wiiulegacy = !ruleTable.has('dynamaxclause');
- const monotype = ruleTable.has('sametypeclause') ? this.sample([...this.dex.types.names()]) : false;
-
- let pool = debug.length ? debug : wiiulegacy ? Object.keys(afdSSBSets) : Object.keys(ssbSets);
- if (monotype && !debug.length) {
- pool = pool.filter(x => this.dex.species.get(ssbSets[x].species).types.includes(monotype));
- }
- const typePool: {[k: string]: number} = {};
- let depth = 0;
- while (pool.length && team.length < this.maxTeamSize) {
- if (depth >= 200) throw new Error(`Infinite loop in Super Staff Bros team generation.`);
- depth++;
- const name = wiiulegacy ? this.sample(pool) : this.sampleNoReplace(pool);
- const ssbSet: SSBSet = wiiulegacy ? this.dex.deepClone(afdSSBSets[name]) : this.dex.deepClone(ssbSets[name]);
- if (ssbSet.skip) continue;
-
- // Enforce typing limits
- if (!(debug.length || monotype || wiiulegacy)) { // Type limits are ignored for debugging, monotype, or memes.
- const species = this.dex.species.get(ssbSet.species);
- if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;
-
- const weaknesses = [];
- for (const type of this.dex.types.names()) {
- const typeMod = this.dex.getEffectiveness(type, species.types);
- if (typeMod > 0) weaknesses.push(type);
- }
- let rejected = false;
- for (const type of weaknesses) {
- if (typePool[type] === undefined) typePool[type] = 0;
- if (typePool[type] >= 3) {
- // Reject
- rejected = true;
- break;
- }
- }
- if (ssbSet.ability === 'Wonder Guard') {
- if (!typePool['wonderguard']) {
- typePool['wonderguard'] = 1;
- } else {
- rejected = true;
- }
- }
- if (rejected) continue;
- // Update type counts
- for (const type of weaknesses) {
- typePool[type]++;
- }
- }
-
- const set: PokemonSet = {
- name: name,
- species: ssbSet.species,
- item: Array.isArray(ssbSet.item) ? this.sampleNoReplace(ssbSet.item) : ssbSet.item,
- ability: Array.isArray(ssbSet.ability) ? this.sampleNoReplace(ssbSet.ability) : ssbSet.ability,
- moves: [],
- nature: ssbSet.nature ? Array.isArray(ssbSet.nature) ? this.sampleNoReplace(ssbSet.nature) : ssbSet.nature : 'Serious',
- gender: ssbSet.gender || this.sample(['M', 'F', 'N']),
- evs: ssbSet.evs ? {...{hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}, ...ssbSet.evs} :
- {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84},
- ivs: {...{hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}, ...ssbSet.ivs},
- level: this.adjustLevel || ssbSet.level || 100,
- happiness: typeof ssbSet.happiness === 'number' ? ssbSet.happiness : 255,
- shiny: typeof ssbSet.shiny === 'number' ? this.randomChance(1, ssbSet.shiny) : !!ssbSet.shiny,
- };
- while (set.moves.length < 3 && ssbSet.moves.length > 0) {
- let move = this.sampleNoReplace(ssbSet.moves);
- if (Array.isArray(move)) move = this.sampleNoReplace(move);
- set.moves.push(move);
- }
- set.moves.push(ssbSet.signatureMove);
-
- // Any set specific tweaks occur here.
- if (set.name === 'Marshmallon' && !set.moves.includes('Head Charge')) set.moves[this.random(3)] = 'Head Charge';
-
- if (wiiulegacy) {
- const egg = this.random(100);
- if (egg === 69) {
- set.name = 'Falco';
- set.species = 'Swellow';
- } else if (egg === 96) {
- set.name = 'Captain Falcon';
- set.species = 'Talonflame';
- }
- if (this.randomChance(1, 100)) {
- set.item = 'Mail';
- }
- }
-
- team.push(set);
-
- // Team specific tweaks occur here
- // Swap last and second to last sets if last set has Illusion
- if (team.length === this.maxTeamSize && set.ability === 'Illusion') {
- team[this.maxTeamSize - 1] = team[this.maxTeamSize - 2];
- team[this.maxTeamSize - 2] = set;
- }
- }
- return team;
- }
-}
-
-export default RandomStaffBrosTeams;
diff --git a/data/mods/ssb/scripts.ts b/data/mods/ssb/scripts.ts
deleted file mode 100644
index 778c403aaf35..000000000000
--- a/data/mods/ssb/scripts.ts
+++ /dev/null
@@ -1,1037 +0,0 @@
-export const Scripts: ModdedBattleScriptsData = {
- gen: 8,
- inherit: 'gen8',
- actions: {
- // 1 mega per pokemon
- runMegaEvo(pokemon) {
- if (pokemon.name === 'Struchni' && pokemon.species.name === 'Aggron') pokemon.canMegaEvo = 'Aggron-Mega';
- if (pokemon.name === 'Raj.Shoot' && pokemon.species.name === 'Charizard') pokemon.canMegaEvo = 'Charizard-Mega-X';
- const speciesid = pokemon.canMegaEvo || pokemon.canUltraBurst;
- if (!speciesid) return false;
-
- pokemon.formeChange(speciesid, pokemon.getItem(), true);
- if (pokemon.canMegaEvo) {
- pokemon.canMegaEvo = null;
- } else {
- pokemon.canUltraBurst = null;
- }
-
- this.battle.runEvent('AfterMega', pokemon);
-
- if (['Kaiju Bunny', 'Overneat', 'EpicNikolai'].includes(pokemon.name) && !pokemon.illusion) {
- this.battle.add('-start', pokemon, 'typechange', pokemon.types.join('/'));
- }
-
- this.battle.add('-ability', pokemon, `${pokemon.getAbility().name}`);
-
- return true;
- },
-
- // Modded for Mega Rayquaza
- canMegaEvo(pokemon) {
- const species = pokemon.baseSpecies;
- const altForme = species.otherFormes && this.dex.species.get(species.otherFormes[0]);
- const item = pokemon.getItem();
- // Mega Rayquaza
- if (altForme?.isMega && altForme?.requiredMove &&
- pokemon.baseMoves.includes(this.battle.toID(altForme.requiredMove)) && !item.zMove) {
- return altForme.name;
- }
- // a hacked-in Megazard X can mega evolve into Megazard Y, but not into Megazard X
- if (item.megaEvolves === species.baseSpecies && item.megaStone !== species.name) {
- return item.megaStone;
- }
- return null;
- },
-
- // 1 Z per pokemon
- canZMove(pokemon) {
- if (pokemon.m.zMoveUsed ||
- (pokemon.transformed &&
- (pokemon.species.isMega || pokemon.species.isPrimal || pokemon.species.forme === "Ultra"))
- ) return;
- const item = pokemon.getItem();
- if (!item.zMove) return;
- if (item.itemUser && !item.itemUser.includes(pokemon.species.name)) return;
- let atLeastOne = false;
- let mustStruggle = true;
- const zMoves: ZMoveOptions = [];
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.pp <= 0) {
- zMoves.push(null);
- continue;
- }
- if (!moveSlot.disabled) {
- mustStruggle = false;
- }
- const move = this.dex.moves.get(moveSlot.move);
- let zMoveName = this.getZMove(move, pokemon, true) || '';
- if (zMoveName) {
- const zMove = this.dex.moves.get(zMoveName);
- if (!zMove.isZ && zMove.category === 'Status') zMoveName = "Z-" + zMoveName;
- zMoves.push({move: zMoveName, target: zMove.target});
- } else {
- zMoves.push(null);
- }
- if (zMoveName) atLeastOne = true;
- }
- if (atLeastOne && !mustStruggle) return zMoves;
- },
-
- getZMove(move, pokemon, skipChecks) {
- const item = pokemon.getItem();
- if (!skipChecks) {
- if (pokemon.m.zMoveUsed) return;
- if (!item.zMove) return;
- if (item.itemUser && !item.itemUser.includes(pokemon.species.name)) return;
- const moveData = pokemon.getMoveData(move);
- // Draining the PP of the base move prevents the corresponding Z-move from being used.
- if (!moveData?.pp) return;
- }
-
- if (move.name === item.zMoveFrom) {
- return item.zMove as string;
- } else if (item.zMove === true && move.type === item.zMoveType) {
- if (move.category === "Status") {
- return move.name;
- } else if (move.zMove?.basePower) {
- return this.Z_MOVES[move.type];
- }
- }
- },
-
- runMove(moveOrMoveName, pokemon, targetLoc, sourceEffect, zMove, externalMove, maxMove, originalTarget) {
- pokemon.activeMoveActions++;
- let target = this.battle.getTarget(pokemon, maxMove || zMove || moveOrMoveName, targetLoc, originalTarget);
- let baseMove = this.dex.getActiveMove(moveOrMoveName);
- const pranksterBoosted = baseMove.pranksterBoosted;
- if (baseMove.id !== 'struggle' && !zMove && !maxMove && !externalMove) {
- const changedMove = this.battle.runEvent('OverrideAction', pokemon, target, baseMove);
- if (changedMove && changedMove !== true) {
- baseMove = this.dex.getActiveMove(changedMove);
- if (pranksterBoosted) baseMove.pranksterBoosted = pranksterBoosted;
- target = this.battle.getRandomTarget(pokemon, baseMove);
- }
- }
- let move = baseMove;
- if (zMove) {
- move = this.getActiveZMove(baseMove, pokemon);
- } else if (maxMove) {
- move = this.getActiveMaxMove(baseMove, pokemon);
- }
-
- move.isExternal = externalMove;
-
- this.battle.setActiveMove(move, pokemon, target);
-
- /* if (pokemon.moveThisTurn) {
- // THIS IS PURELY A SANITY CHECK
- // DO NOT TAKE ADVANTAGE OF THIS TO PREVENT A POKEMON FROM MOVING;
- // USE this.battle.queue.cancelMove INSTEAD
- this.battle.debug('' + pokemon.id + ' INCONSISTENT STATE, ALREADY MOVED: ' + pokemon.moveThisTurn);
- this.battle.clearActiveMove(true);
- return;
- } */
- const willTryMove = this.battle.runEvent('BeforeMove', pokemon, target, move);
- if (!willTryMove) {
- this.battle.runEvent('MoveAborted', pokemon, target, move);
- this.battle.clearActiveMove(true);
- // The event 'BeforeMove' could have returned false or null
- // false indicates that this counts as a move failing for the purpose of calculating Stomping Tantrum's base power
- // null indicates the opposite, as the Pokemon didn't have an option to choose anything
- pokemon.moveThisTurnResult = willTryMove;
- return;
- }
- if (move.beforeMoveCallback) {
- if (move.beforeMoveCallback.call(this.battle, pokemon, target, move)) {
- this.battle.clearActiveMove(true);
- pokemon.moveThisTurnResult = false;
- return;
- }
- }
- pokemon.lastDamage = 0;
- let lockedMove;
- if (!externalMove) {
- lockedMove = this.battle.runEvent('LockMove', pokemon);
- if (lockedMove === true) lockedMove = false;
- if (!lockedMove) {
- if (!pokemon.deductPP(baseMove, null, target) && (move.id !== 'struggle')) {
- this.battle.add('cant', pokemon, 'nopp', move);
- const gameConsole = [
- null, 'Game Boy', 'Game Boy Color', 'Game Boy Advance', 'DS', 'DS', '3DS', '3DS',
- ][this.battle.gen] || 'Switch';
- this.battle.hint(`This is not a bug, this is really how it works on the ${gameConsole}; try it yourself if you don't believe us.`);
- this.battle.clearActiveMove(true);
- pokemon.moveThisTurnResult = false;
- return;
- }
- } else {
- sourceEffect = this.dex.conditions.get('lockedmove');
- }
- pokemon.moveUsed(move, targetLoc);
- }
-
- // Dancer Petal Dance hack
- // TODO: implement properly
- const noLock = externalMove && !pokemon.volatiles['lockedmove'];
-
- if (zMove) {
- if (pokemon.illusion) {
- this.battle.singleEvent('End', this.dex.abilities.get('Illusion'), pokemon.abilityState, pokemon);
- }
- this.battle.add('-zpower', pokemon);
- // In SSB Z-Moves are limited to 1 per pokemon.
- pokemon.m.zMoveUsed = true;
- }
- const moveDidSomething = this.battle.actions.useMove(baseMove, pokemon, target, sourceEffect, zMove, maxMove);
- if (this.battle.activeMove) move = this.battle.activeMove;
- this.battle.singleEvent('AfterMove', move, null, pokemon, target, move);
- this.battle.runEvent('AfterMove', pokemon, target, move);
-
- // Dancer's activation order is completely different from any other event, so it's handled separately
- if (move.flags['dance'] && moveDidSomething && !move.isExternal) {
- const dancers = [];
- for (const currentPoke of this.battle.getAllActive()) {
- if (pokemon === currentPoke) continue;
- if (currentPoke.hasAbility('dancer') && !currentPoke.isSemiInvulnerable()) {
- dancers.push(currentPoke);
- }
- }
- // Dancer activates in order of lowest speed stat to highest
- // Note that the speed stat used is after any volatile replacements like Speed Swap,
- // but before any multipliers like Agility or Choice Scarf
- // Ties go to whichever Pokemon has had the ability for the least amount of time
- dancers.sort(
- (a, b) => -(b.storedStats['spe'] - a.storedStats['spe']) || b.abilityOrder - a.abilityOrder
- );
- for (const dancer of dancers) {
- if (this.battle.faintMessages()) break;
- if (dancer.fainted) continue;
- this.battle.add('-activate', dancer, 'ability: Dancer');
- const dancersTarget = !target!.isAlly(dancer) && pokemon.isAlly(dancer) ? target! : pokemon;
- const dancersTargetLoc = dancer.getLocOf(dancersTarget);
- this.runMove(move.id, dancer, dancersTargetLoc, this.dex.abilities.get('dancer'), undefined, true);
- }
- }
- if (noLock && pokemon.volatiles['lockedmove']) delete pokemon.volatiles['lockedmove'];
- },
-
- // Dollar Store Brand prankster immunity implementation
- hitStepTryImmunity(targets, pokemon, move) {
- const hitResults = [];
- for (const [i, target] of targets.entries()) {
- if (this.battle.gen >= 6 && move.flags['powder'] && target !== pokemon && !this.dex.getImmunity('powder', target)) {
- this.battle.debug('natural powder immunity');
- this.battle.add('-immune', target);
- hitResults[i] = false;
- } else if (!this.battle.singleEvent('TryImmunity', move, {}, target, pokemon, move)) {
- this.battle.add('-immune', target);
- hitResults[i] = false;
- } else if (
- this.battle.gen >= 7 && move.pranksterBoosted &&
- (pokemon.hasAbility('prankster') || pokemon.hasAbility('plausibledeniability') || pokemon.volatiles['nol']) &&
- !targets[i].isAlly(pokemon) && !this.dex.getImmunity('prankster', target)
- ) {
- this.battle.debug('natural prankster immunity');
- if (!target.illusion) this.battle.hint("Since gen 7, Dark is immune to Prankster moves.");
- this.battle.add('-immune', target);
- hitResults[i] = false;
- } else {
- hitResults[i] = true;
- }
- }
- return hitResults;
- },
-
- // For Jett's The Hunt is On!
- useMoveInner(moveOrMoveName, pokemon, target, sourceEffect, zMove, maxMove) {
- if (!sourceEffect && this.battle.effect.id) sourceEffect = this.battle.effect;
- if (sourceEffect && ['instruct', 'custapberry'].includes(sourceEffect.id)) sourceEffect = null;
-
- let move = this.dex.getActiveMove(moveOrMoveName);
- if (move.id === 'weatherball' && zMove) {
- // Z-Weather Ball only changes types if it's used directly,
- // not if it's called by Z-Sleep Talk or something.
- this.battle.singleEvent('ModifyType', move, null, pokemon, target, move, move);
- if (move.type !== 'Normal') sourceEffect = move;
- }
- if (zMove || (move.category !== 'Status' && sourceEffect && (sourceEffect as ActiveMove).isZ)) {
- move = this.getActiveZMove(move, pokemon);
- }
- if (maxMove && move.category !== 'Status') {
- // Max move outcome is dependent on the move type after type modifications from ability and the move itself
- this.battle.singleEvent('ModifyType', move, null, pokemon, target, move, move);
- this.battle.runEvent('ModifyType', pokemon, target, move, move);
- }
- if (maxMove || (move.category !== 'Status' && sourceEffect && (sourceEffect as ActiveMove).isMax)) {
- move = this.getActiveMaxMove(move, pokemon);
- }
-
- if (this.battle.activeMove) {
- move.priority = this.battle.activeMove.priority;
- if (!move.hasBounced) move.pranksterBoosted = this.battle.activeMove.pranksterBoosted;
- }
- const baseTarget = move.target;
- if (target === undefined) target = this.battle.getRandomTarget(pokemon, move);
- if (move.target === 'self' || move.target === 'allies') {
- target = pokemon;
- }
- if (sourceEffect) {
- move.sourceEffect = sourceEffect.id;
- move.ignoreAbility = false;
- }
- let moveResult = false;
-
- this.battle.setActiveMove(move, pokemon, target);
-
- this.battle.singleEvent('ModifyType', move, null, pokemon, target, move, move);
- this.battle.singleEvent('ModifyMove', move, null, pokemon, target, move, move);
- if (baseTarget !== move.target) {
- // Target changed in ModifyMove, so we must adjust it here
- // Adjust before the next event so the correct target is passed to the
- // event
- target = this.battle.getRandomTarget(pokemon, move);
- }
- move = this.battle.runEvent('ModifyType', pokemon, target, move, move);
- move = this.battle.runEvent('ModifyMove', pokemon, target, move, move);
- if (baseTarget !== move.target) {
- // Adjust again
- target = this.battle.getRandomTarget(pokemon, move);
- }
- if (!move || pokemon.fainted) {
- return false;
- }
-
- let attrs = '';
-
- let movename = move.name;
- if (move.id === 'hiddenpower') movename = 'Hidden Power';
- if (sourceEffect) attrs += '|[from]' + this.dex.conditions.get(sourceEffect);
- if (zMove && move.isZ === true) {
- attrs = '|[anim]' + movename + attrs;
- movename = 'Z-' + movename;
- }
- this.battle.addMove('move', pokemon, movename, target + attrs);
-
- if (zMove) this.runZPower(move, pokemon);
-
- if (!target) {
- this.battle.attrLastMove('[notarget]');
- this.battle.add(this.battle.gen >= 5 ? '-fail' : '-notarget', pokemon);
- return false;
- }
-
- const {targets, pressureTargets} = pokemon.getMoveTargets(move, target);
- if (targets.length) {
- target = targets[targets.length - 1]; // in case of redirection
- }
-
- if (!sourceEffect || sourceEffect.id === 'pursuit' || sourceEffect.id === 'thehuntison') {
- let extraPP = 0;
- for (const source of pressureTargets) {
- const ppDrop = this.battle.runEvent('DeductPP', source, pokemon, move);
- if (ppDrop !== true) {
- extraPP += ppDrop || 0;
- }
- }
- if (extraPP > 0) {
- pokemon.deductPP(move, extraPP);
- }
- }
-
- if (!this.battle.singleEvent('TryMove', move, null, pokemon, target, move) ||
- !this.battle.runEvent('TryMove', pokemon, target, move)) {
- move.mindBlownRecoil = false;
- return false;
- }
-
- this.battle.singleEvent('UseMoveMessage', move, null, pokemon, target, move);
-
- if (move.ignoreImmunity === undefined) {
- move.ignoreImmunity = (move.category === 'Status');
- }
-
- if (this.battle.gen !== 4 && move.selfdestruct === 'always') {
- this.battle.faint(pokemon, pokemon, move);
- }
-
- let damage: number | false | undefined | '' = false;
- if (move.target === 'all' || move.target === 'foeSide' || move.target === 'allySide' || move.target === 'allyTeam') {
- damage = this.tryMoveHit(target, pokemon, move);
- if (damage === this.battle.NOT_FAIL) pokemon.moveThisTurnResult = null;
- if (damage || damage === 0 || damage === undefined) moveResult = true;
- } else {
- if (!targets.length) {
- this.battle.attrLastMove('[notarget]');
- this.battle.add(this.battle.gen >= 5 ? '-fail' : '-notarget', pokemon);
- return false;
- }
- if (this.battle.gen === 4 && move.selfdestruct === 'always') {
- this.battle.faint(pokemon, pokemon, move);
- }
- moveResult = this.trySpreadMoveHit(targets, pokemon, move);
- }
- if (move.selfBoost && moveResult) this.moveHit(pokemon, pokemon, move, move.selfBoost, false, true);
- if (!pokemon.hp) {
- this.battle.faint(pokemon, pokemon, move);
- }
-
- if (!moveResult) {
- this.battle.singleEvent('MoveFail', move, null, target, pokemon, move);
- return false;
- }
-
- if (
- !move.negateSecondary &&
- !(move.hasSheerForce && pokemon.hasAbility(['sheerforce', 'aquilasblessing'])) &&
- !this.battle.getAllActive().some(x => x.hasAbility('skilldrain'))
- ) {
- const originalHp = pokemon.hp;
- this.battle.singleEvent('AfterMoveSecondarySelf', move, null, pokemon, target, move);
- this.battle.runEvent('AfterMoveSecondarySelf', pokemon, target, move);
- if (pokemon !== target && move.category !== 'Status') {
- if (pokemon.hp <= pokemon.maxhp / 2 && originalHp > pokemon.maxhp / 2) {
- this.battle.runEvent('EmergencyExit', pokemon, pokemon);
- }
- }
- }
-
- if (move.selfSwitch && this.battle.getAllActive().some(x => x.hasAbility('skilldrain'))) {
- this.battle.hint(`Self-switching doesn't trigger when a Pokemon with Skill Drain is active.`);
- }
-
- return true;
- },
- afterMoveSecondaryEvent(targets, pokemon, move) {
- // console.log(`${targets}, ${pokemon}, ${move}`)
- if (
- !move.negateSecondary &&
- !(move.hasSheerForce && pokemon.hasAbility(['sheerforce', 'aquilasblessing'])) &&
- !this.battle.getAllActive().some(x => x.hasAbility('skilldrain'))
- ) {
- this.battle.singleEvent('AfterMoveSecondary', move, null, targets[0], pokemon, move);
- this.battle.runEvent('AfterMoveSecondary', targets, pokemon, move);
- }
- return undefined;
- },
- hitStepMoveHitLoop(targets, pokemon, move) { // Temporary name
- const damage: (number | boolean | undefined)[] = [];
- for (const i of targets.keys()) {
- damage[i] = 0;
- }
- move.totalDamage = 0;
- pokemon.lastDamage = 0;
- let targetHits = move.multihit || 1;
- if (Array.isArray(targetHits)) {
- // yes, it's hardcoded... meh
- if (targetHits[0] === 2 && targetHits[1] === 5) {
- if (this.battle.gen >= 5) {
- targetHits = this.battle.sample([2, 2, 3, 3, 4, 5]);
- } else {
- targetHits = this.battle.sample([2, 2, 2, 3, 3, 3, 4, 5]);
- }
- } else {
- targetHits = this.battle.random(targetHits[0], targetHits[1] + 1);
- }
- }
- targetHits = Math.floor(targetHits);
- let nullDamage = true;
- let moveDamage: (number | boolean | undefined)[];
- // There is no need to recursively check the ´sleepUsable´ flag as Sleep Talk can only be used while asleep.
- const isSleepUsable = move.sleepUsable || this.dex.moves.get(move.sourceEffect).sleepUsable;
-
- let targetsCopy: (Pokemon | false | null)[] = targets.slice(0);
- let hit: number;
- for (hit = 1; hit <= targetHits; hit++) {
- if (damage.includes(false)) break;
- if (hit > 1 && pokemon.status === 'slp' && !isSleepUsable) break;
- if (targets.every(target => !target?.hp)) break;
- move.hit = hit;
- if (move.smartTarget && targets.length > 1) {
- targetsCopy = [targets[hit - 1]];
- } else {
- targetsCopy = targets.slice(0);
- }
- const target = targetsCopy[0]; // some relevant-to-single-target-moves-only things are hardcoded
- if (target && typeof move.smartTarget === 'boolean') {
- if (hit > 1) {
- this.battle.addMove('-anim', pokemon, move.name, target);
- } else {
- this.battle.retargetLastMove(target);
- }
- }
-
- // like this (Triple Kick)
- if (target && move.multiaccuracy && hit > 1) {
- let accuracy = move.accuracy;
- const boostTable = [1, 4 / 3, 5 / 3, 2, 7 / 3, 8 / 3, 3];
- if (accuracy !== true) {
- if (!move.ignoreAccuracy) {
- const boosts = this.battle.runEvent('ModifyBoost', pokemon, null, null, {...pokemon.boosts});
- const boost = this.battle.clampIntRange(boosts['accuracy'], -6, 6);
- if (boost > 0) {
- accuracy *= boostTable[boost];
- } else {
- accuracy /= boostTable[-boost];
- }
- }
- if (!move.ignoreEvasion) {
- const boosts = this.battle.runEvent('ModifyBoost', target, null, null, {...target.boosts});
- const boost = this.battle.clampIntRange(boosts['evasion'], -6, 6);
- if (boost > 0) {
- accuracy /= boostTable[boost];
- } else if (boost < 0) {
- accuracy *= boostTable[-boost];
- }
- }
- }
- accuracy = this.battle.runEvent('ModifyAccuracy', target, pokemon, move, accuracy);
- if (!move.alwaysHit) {
- accuracy = this.battle.runEvent('Accuracy', target, pokemon, move, accuracy);
- if (accuracy !== true && !this.battle.randomChance(accuracy, 100)) break;
- }
- }
-
- const moveData = move;
- if (!moveData.flags) moveData.flags = {};
-
- // Modifies targetsCopy (which is why it's a copy)
- [moveDamage, targetsCopy] = this.spreadMoveHit(targetsCopy, pokemon, move, moveData);
-
- if (!moveDamage.some(val => val !== false)) break;
- nullDamage = false;
-
- for (const [i, md] of moveDamage.entries()) {
- // Damage from each hit is individually counted for the
- // purposes of Counter, Metal Burst, and Mirror Coat.
- damage[i] = md === true || !md ? 0 : md;
- // Total damage dealt is accumulated for the purposes of recoil (Parental Bond).
- // @ts-ignore
- move.totalDamage += damage[i];
- }
- if (move.mindBlownRecoil) {
- this.battle.damage(Math.round(pokemon.maxhp / 2), pokemon, pokemon, this.dex.conditions.get('Mind Blown'), true);
- move.mindBlownRecoil = false;
- }
- this.battle.eachEvent('Update');
- if (!pokemon.hp && targets.length === 1) {
- hit++; // report the correct number of hits for multihit moves
- break;
- }
- }
- // hit is 1 higher than the actual hit count
- if (hit === 1) return damage.fill(false);
- if (nullDamage) damage.fill(false);
- if (move.multihit && typeof move.smartTarget !== 'boolean') {
- this.battle.add('-hitcount', targets[0], hit - 1);
- }
-
- if (move.recoil && move.totalDamage) {
- this.battle.damage(this.calcRecoilDamage(move.totalDamage, move), pokemon, pokemon, 'recoil');
- }
-
- if (move.struggleRecoil) {
- let recoilDamage;
- if (this.dex.gen >= 5) {
- recoilDamage = this.battle.clampIntRange(Math.round(pokemon.baseMaxhp / 4), 1);
- } else {
- recoilDamage = this.battle.trunc(pokemon.maxhp / 4);
- }
- this.battle.directDamage(recoilDamage, pokemon, pokemon, {id: 'strugglerecoil'} as Condition);
- }
-
- // smartTarget messes up targetsCopy, but smartTarget should in theory ensure that targets will never fail, anyway
- if (move.smartTarget) targetsCopy = targets.slice(0);
-
- for (const [i, target] of targetsCopy.entries()) {
- if (target && pokemon !== target) {
- target.gotAttacked(move, damage[i] as number | false | undefined, pokemon);
- }
- }
-
- if (move.ohko && !targets[0].hp) this.battle.add('-ohko');
-
- if (!damage.some(val => !!val || val === 0)) return damage;
-
- this.battle.eachEvent('Update');
-
- this.afterMoveSecondaryEvent(targetsCopy.filter(val => !!val) as Pokemon[], pokemon, move);
-
- if (
- !move.negateSecondary &&
- !(move.hasSheerForce && pokemon.hasAbility(['sheerforce', 'aquilasblessing'])) &&
- !this.battle.getAllActive().some(x => x.hasAbility('skilldrain'))
- ) {
- for (const [i, d] of damage.entries()) {
- // There are no multihit spread moves, so it's safe to use move.totalDamage for multihit moves
- // The previous check was for `move.multihit`, but that fails for Dragon Darts
- const curDamage = targets.length === 1 ? move.totalDamage : d;
- if (typeof curDamage === 'number' && targets[i].hp) {
- if (targets[i].hp <= targets[i].maxhp / 2 && targets[i].hp + curDamage > targets[i].maxhp / 2) {
- this.battle.runEvent('EmergencyExit', targets[i], pokemon);
- }
- }
- }
- }
-
- return damage;
- },
-
- // For Spandan's custom move and Brandon's ability
- getDamage(source, target, move, suppressMessages = false) {
- if (typeof move === 'string') move = this.dex.getActiveMove(move);
-
- if (typeof move === 'number') {
- const basePower = move;
- move = new Dex.Move({
- basePower,
- type: '???',
- category: 'Physical',
- willCrit: false,
- }) as unknown as ActiveMove;
- move.hit = 0;
- }
-
- if (!move.ignoreImmunity || (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type])) {
- if (!target.runImmunity(move.type, !suppressMessages)) {
- return false;
- }
- }
-
- if (move.ohko) return target.maxhp;
- if (move.damageCallback) return move.damageCallback.call(this.battle, source, target);
- if (move.damage === 'level') {
- return source.level;
- } else if (move.damage) {
- return move.damage;
- }
-
- const category = this.battle.getCategory(move);
-
- let basePower: number | false | null = move.basePower;
- if (move.basePowerCallback) {
- basePower = move.basePowerCallback.call(this.battle, source, target, move);
- }
- if (!basePower) return basePower === 0 ? undefined : basePower;
- basePower = this.battle.clampIntRange(basePower, 1);
-
- let critMult;
- let critRatio = this.battle.runEvent('ModifyCritRatio', source, target, move, move.critRatio || 0);
- if (this.battle.gen <= 5) {
- critRatio = this.battle.clampIntRange(critRatio, 0, 5);
- critMult = [0, 16, 8, 4, 3, 2];
- } else {
- critRatio = this.battle.clampIntRange(critRatio, 0, 4);
- if (this.battle.gen === 6) {
- critMult = [0, 16, 8, 2, 1];
- } else {
- critMult = [0, 24, 8, 2, 1];
- }
- }
-
- const moveHit = target.getMoveHitData(move);
- moveHit.crit = move.willCrit || false;
- if (move.willCrit === undefined) {
- if (critRatio) {
- moveHit.crit = this.battle.randomChance(1, critMult[critRatio]);
- }
- }
-
- if (moveHit.crit) {
- moveHit.crit = this.battle.runEvent('CriticalHit', target, null, move);
- }
-
- // happens after crit calculation
- basePower = this.battle.runEvent('BasePower', source, target, move, basePower, true);
-
- if (!basePower) return 0;
- basePower = this.battle.clampIntRange(basePower, 1);
-
- const level = source.level;
-
- const attacker = move.overrideOffensivePokemon === 'target' ? target : source;
- const defender = move.overrideDefensivePokemon === 'source' ? source : target;
-
- const isPhysical = move.category === 'Physical';
- let attackStat: StatIDExceptHP = move.overrideOffensiveStat || (isPhysical ? 'atk' : 'spa');
- const defenseStat: StatIDExceptHP = move.overrideDefensiveStat || (isPhysical ? 'def' : 'spd');
-
- const statTable = {atk: 'Atk', def: 'Def', spa: 'SpA', spd: 'SpD', spe: 'Spe'};
-
- let atkBoosts = attacker.boosts[attackStat];
- let defBoosts = defender.boosts[defenseStat];
-
- let ignoreNegativeOffensive = !!move.ignoreNegativeOffensive;
- let ignorePositiveDefensive = !!move.ignorePositiveDefensive;
-
- if (moveHit.crit) {
- ignoreNegativeOffensive = true;
- ignorePositiveDefensive = true;
- }
- const ignoreOffensive = !!(move.ignoreOffensive || (ignoreNegativeOffensive && atkBoosts < 0));
- const ignoreDefensive = !!(move.ignoreDefensive || (ignorePositiveDefensive && defBoosts > 0));
-
- if (ignoreOffensive) {
- this.battle.debug('Negating (sp)atk boost/penalty.');
- atkBoosts = 0;
- }
- if (ignoreDefensive) {
- this.battle.debug('Negating (sp)def boost/penalty.');
- defBoosts = 0;
- }
-
- let attack = attacker.calculateStat(attackStat, atkBoosts);
- let defense = defender.calculateStat(defenseStat, defBoosts);
-
- attackStat = (category === 'Physical' ? 'atk' : 'spa');
-
- // Apply Stat Modifiers
- attack = this.battle.runEvent('Modify' + statTable[attackStat], source, target, move, attack);
- defense = this.battle.runEvent('Modify' + statTable[defenseStat], target, source, move, defense);
-
- if (this.battle.gen <= 4 && ['explosion', 'selfdestruct'].includes(move.id) && defenseStat === 'def') {
- defense = this.battle.clampIntRange(Math.floor(defense / 2), 1);
- }
-
- const tr = this.battle.trunc;
-
- // int(int(int(2 * L / 5 + 2) * A * P / D) / 50);
- const baseDamage = tr(tr(tr(tr(2 * level / 5 + 2) * basePower * attack) / defense) / 50);
-
- // Calculate damage modifiers separately (order differs between generations)
- return this.modifyDamage(baseDamage, source, target, move, suppressMessages);
- },
-
- runMoveEffects(damage, targets, pokemon, move, moveData, isSecondary, isSelf) {
- let didAnything: number | boolean | null | undefined = damage.reduce(this.combineResults);
- for (const [i, target] of targets.entries()) {
- if (target === false) continue;
- let hitResult;
- let didSomething: number | boolean | null | undefined = undefined;
-
- if (target) {
- if (moveData.boosts && !target.fainted) {
- hitResult = this.battle.boost(moveData.boosts, target, pokemon, move, isSecondary, isSelf);
- didSomething = this.combineResults(didSomething, hitResult);
- }
- if (moveData.heal && !target.fainted) {
- if (target.hp >= target.maxhp) {
- this.battle.add('-fail', target, 'heal');
- this.battle.attrLastMove('[still]');
- damage[i] = this.combineResults(damage[i], false);
- didAnything = this.combineResults(didAnything, null);
- continue;
- }
- const amount = target.baseMaxhp * moveData.heal[0] / moveData.heal[1];
- const d = target.heal((this.battle.gen < 5 ? Math.floor : Math.round)(amount));
- if (!d && d !== 0) {
- this.battle.add('-fail', pokemon);
- this.battle.attrLastMove('[still]');
- this.battle.debug('heal interrupted');
- damage[i] = this.combineResults(damage[i], false);
- didAnything = this.combineResults(didAnything, null);
- continue;
- }
- this.battle.add('-heal', target, target.getHealth);
- didSomething = true;
- }
- if (moveData.status) {
- hitResult = target.trySetStatus(moveData.status, pokemon, moveData.ability ? moveData.ability : move);
- if (!hitResult && move.status) {
- damage[i] = this.combineResults(damage[i], false);
- didAnything = this.combineResults(didAnything, null);
- continue;
- }
- didSomething = this.combineResults(didSomething, hitResult);
- }
- if (moveData.forceStatus) {
- hitResult = target.setStatus(moveData.forceStatus, pokemon, move);
- didSomething = this.combineResults(didSomething, hitResult);
- }
- if (moveData.volatileStatus) {
- hitResult = target.addVolatile(moveData.volatileStatus, pokemon, move);
- didSomething = this.combineResults(didSomething, hitResult);
- }
- if (moveData.sideCondition) {
- hitResult = target.side.addSideCondition(moveData.sideCondition, pokemon, move);
- didSomething = this.combineResults(didSomething, hitResult);
- }
- if (moveData.slotCondition) {
- hitResult = target.side.addSlotCondition(target, moveData.slotCondition, pokemon, move);
- didSomething = this.combineResults(didSomething, hitResult);
- }
- if (moveData.weather) {
- hitResult = this.battle.field.setWeather(moveData.weather, pokemon, move);
- didSomething = this.combineResults(didSomething, hitResult);
- }
- if (moveData.terrain) {
- hitResult = this.battle.field.setTerrain(moveData.terrain, pokemon, move);
- didSomething = this.combineResults(didSomething, hitResult);
- }
- if (moveData.pseudoWeather) {
- hitResult = this.battle.field.addPseudoWeather(moveData.pseudoWeather, pokemon, move);
- didSomething = this.combineResults(didSomething, hitResult);
- }
- if (moveData.forceSwitch && !this.battle.getAllActive().some(x => x.hasAbility('skilldrain'))) {
- hitResult = !!this.battle.canSwitch(target.side);
- didSomething = this.combineResults(didSomething, hitResult);
- }
- // Hit events
- // These are like the TryHit events, except we don't need a FieldHit event.
- // Scroll up for the TryHit event documentation, and just ignore the "Try" part. ;)
- if (move.target === 'all' && !isSelf) {
- if (moveData.onHitField) {
- hitResult = this.battle.singleEvent('HitField', moveData, {}, target, pokemon, move);
- didSomething = this.combineResults(didSomething, hitResult);
- }
- } else if ((move.target === 'foeSide' || move.target === 'allySide') && !isSelf) {
- if (moveData.onHitSide) {
- hitResult = this.battle.singleEvent('HitSide', moveData, {}, target.side, pokemon, move);
- didSomething = this.combineResults(didSomething, hitResult);
- }
- } else {
- if (moveData.onHit) {
- hitResult = this.battle.singleEvent('Hit', moveData, {}, target, pokemon, move);
- didSomething = this.combineResults(didSomething, hitResult);
- }
- if (!isSelf && !isSecondary) {
- this.battle.runEvent('Hit', target, pokemon, move);
- }
- }
- }
- if (moveData.selfdestruct === 'ifHit' && damage[i] !== false) {
- this.battle.faint(pokemon, pokemon, move);
- }
- if (moveData.selfSwitch && !this.battle.getAllActive().some(x => x.hasAbility('skilldrain'))) {
- if (this.battle.canSwitch(pokemon.side)) {
- didSomething = true;
- } else {
- didSomething = this.combineResults(didSomething, false);
- }
- }
- // Move didn't fail because it didn't try to do anything
- if (didSomething === undefined) didSomething = true;
- damage[i] = this.combineResults(damage[i], didSomething === null ? false : didSomething);
- didAnything = this.combineResults(didAnything, didSomething);
- }
-
-
- if (!didAnything && didAnything !== 0 && !moveData.self && !moveData.selfdestruct) {
- if (!isSelf && !isSecondary) {
- if (didAnything === false) {
- this.battle.add('-fail', pokemon);
- this.battle.attrLastMove('[still]');
- }
- }
- this.battle.debug('move failed because it did nothing');
- } else if (move.selfSwitch && pokemon.hp && !this.battle.getAllActive().some(x => x.hasAbility('skilldrain'))) {
- pokemon.switchFlag = move.id;
- }
-
- return damage;
- },
- },
-
- pokemon: {
- isGrounded(negateImmunity) {
- if ('gravity' in this.battle.field.pseudoWeather) return true;
- if ('ingrain' in this.volatiles && this.battle.gen >= 4) return true;
- if ('smackdown' in this.volatiles) return true;
- const item = (this.ignoringItem() ? '' : this.item);
- if (item === 'ironball') return true;
- // If a Fire/Flying type uses Burn Up and Roost, it becomes ???/Flying-type, but it's still grounded.
- if (!negateImmunity && this.hasType('Flying') && !('roost' in this.volatiles)) return false;
- if (this.hasAbility('levitate') && !this.battle.suppressingAbility()) return null;
- if ('magnetrise' in this.volatiles) return false;
- if ('telekinesis' in this.volatiles) return false;
- return item !== 'airballoon';
- },
- setStatus(status, source, sourceEffect, ignoreImmunities) {
- if (!this.hp) return false;
- status = this.battle.dex.conditions.get(status);
- if (this.battle.event) {
- if (!source) source = this.battle.event.source;
- if (!sourceEffect) sourceEffect = this.battle.effect;
- }
- if (!source) source = this;
-
- if (this.status === status.id) {
- if ((sourceEffect as Move)?.status === this.status) {
- this.battle.add('-fail', this, this.status);
- } else if ((sourceEffect as Move)?.status) {
- this.battle.add('-fail', source);
- this.battle.attrLastMove('[still]');
- }
- return false;
- }
-
- if (!ignoreImmunities && status.id &&
- !((source?.hasAbility('corrosion') || source?.hasAbility('hackedcorrosion') || sourceEffect?.id === 'cradilychaos') &&
- ['tox', 'psn'].includes(status.id))) {
- // the game currently never ignores immunities
- if (!this.runStatusImmunity(status.id === 'tox' ? 'psn' : status.id)) {
- this.battle.debug('immune to status');
- if ((sourceEffect as Move)?.status) {
- this.battle.add('-immune', this);
- }
- return false;
- }
- }
- const prevStatus = this.status;
- const prevStatusState = this.statusState;
- if (status.id) {
- const result: boolean = this.battle.runEvent('SetStatus', this, source, sourceEffect, status);
- if (!result) {
- this.battle.debug('set status [' + status.id + '] interrupted');
- return result;
- }
- }
-
- this.status = status.id;
- this.statusState = {id: status.id, target: this};
- if (source) this.statusState.source = source;
- if (status.duration) this.statusState.duration = status.duration;
- if (status.durationCallback) {
- this.statusState.duration = status.durationCallback.call(this.battle, this, source, sourceEffect);
- }
-
- if (status.id && !this.battle.singleEvent('Start', status, this.statusState, this, source, sourceEffect)) {
- this.battle.debug('status start [' + status.id + '] interrupted');
- // cancel the setstatus
- this.status = prevStatus;
- this.statusState = prevStatusState;
- return false;
- }
- if (status.id && !this.battle.runEvent('AfterSetStatus', this, source, sourceEffect, status)) {
- return false;
- }
- return true;
- },
- },
-
- // Modded to add a property to work with Struchni's move
- nextTurn() {
- this.turn++;
- this.lastSuccessfulMoveThisTurn = null;
-
- const trappedBySide: boolean[] = [];
- const stalenessBySide: ('internal' | 'external' | undefined)[] = [];
- for (const side of this.sides) {
- let sideTrapped = true;
- let sideStaleness: 'internal' | 'external' | undefined;
- for (const pokemon of side.active) {
- if (!pokemon) continue;
- pokemon.moveThisTurn = '';
- pokemon.newlySwitched = false;
- pokemon.moveLastTurnResult = pokemon.moveThisTurnResult;
- pokemon.moveThisTurnResult = undefined;
- if (this.turn !== 1) {
- pokemon.usedItemThisTurn = false;
- // Used for Veto
- pokemon.m.statsRaisedLastTurn = !!pokemon.statsRaisedThisTurn;
- pokemon.statsRaisedThisTurn = false;
- pokemon.statsLoweredThisTurn = false;
- // It shouldn't be possible in a normal battle for a Pokemon to be damaged before turn 1's move selection
- // However, this could be potentially relevant in certain OMs
- pokemon.hurtThisTurn = null;
- }
-
- pokemon.maybeDisabled = false;
- for (const moveSlot of pokemon.moveSlots) {
- moveSlot.disabled = false;
- moveSlot.disabledSource = '';
- }
- this.runEvent('DisableMove', pokemon);
- if (!pokemon.ateBerry) pokemon.disableMove('belch');
- if (!pokemon.getItem().isBerry) pokemon.disableMove('stuffcheeks');
-
- // If it was an illusion, it's not any more
- if (pokemon.getLastAttackedBy() && this.gen >= 7) pokemon.knownType = true;
-
- for (let i = pokemon.attackedBy.length - 1; i >= 0; i--) {
- const attack = pokemon.attackedBy[i];
- if (attack.source.isActive) {
- attack.thisTurn = false;
- } else {
- pokemon.attackedBy.splice(pokemon.attackedBy.indexOf(attack), 1);
- }
- }
-
- if (this.gen >= 7) {
- // In Gen 7, the real type of every Pokemon is visible to all players via the bottom screen while making choices
- const seenPokemon = pokemon.illusion || pokemon;
- const realTypeString = seenPokemon.getTypes(true).join('/');
- if (realTypeString !== seenPokemon.apparentType) {
- this.add('-start', pokemon, 'typechange', realTypeString, '[silent]');
- seenPokemon.apparentType = realTypeString;
- if (pokemon.addedType) {
- // The typechange message removes the added type, so put it back
- this.add('-start', pokemon, 'typeadd', pokemon.addedType, '[silent]');
- }
- }
- }
-
- pokemon.trapped = pokemon.maybeTrapped = false;
- this.runEvent('TrapPokemon', pokemon);
- if (!pokemon.knownType || this.dex.getImmunity('trapped', pokemon)) {
- this.runEvent('MaybeTrapPokemon', pokemon);
- }
- // canceling switches would leak information
- // if a foe might have a trapping ability
- if (this.gen > 2) {
- for (const source of pokemon.foes()) {
- const species = (source.illusion || source).species;
- if (!species.abilities) continue;
- for (const abilitySlot in species.abilities) {
- const abilityName = species.abilities[abilitySlot as keyof Species['abilities']];
- if (abilityName === source.ability) {
- // pokemon event was already run above so we don't need
- // to run it again.
- continue;
- }
- const ruleTable = this.ruleTable;
- if ((ruleTable.has('+hackmons') || !ruleTable.has('obtainableabilities')) && !this.format.team) {
- // hackmons format
- continue;
- } else if (abilitySlot === 'H' && species.unreleasedHidden) {
- // unreleased hidden ability
- continue;
- }
- const ability = this.dex.abilities.get(abilityName);
- if (ruleTable.has('-ability:' + ability.id)) continue;
- if (pokemon.knownType && !this.dex.getImmunity('trapped', pokemon)) continue;
- this.singleEvent('FoeMaybeTrapPokemon', ability, {}, pokemon, source);
- }
- }
- }
-
- if (pokemon.fainted) continue;
-
- sideTrapped = sideTrapped && pokemon.trapped;
- const staleness = pokemon.volatileStaleness || pokemon.staleness;
- if (staleness) sideStaleness = sideStaleness === 'external' ? sideStaleness : staleness;
- pokemon.activeTurns++;
- }
- trappedBySide.push(sideTrapped);
- stalenessBySide.push(sideStaleness);
- side.faintedLastTurn = side.faintedThisTurn;
- side.faintedThisTurn = null;
- }
-
- if (this.maybeTriggerEndlessBattleClause(trappedBySide, stalenessBySide)) return;
-
- if (this.gameType === 'triples' && !this.sides.filter(side => side.pokemonLeft > 1).length) {
- // If both sides have one Pokemon left in triples and they are not adjacent, they are both moved to the center.
- const actives = this.getAllActive();
- if (actives.length > 1 && !actives[0].isAdjacent(actives[1])) {
- this.swapPosition(actives[0], 1, '[silent]');
- this.swapPosition(actives[1], 1, '[silent]');
- this.add('-center');
- }
- }
-
- this.add('turn', this.turn);
-
- this.makeRequest('move');
- },
-};
diff --git a/data/mods/thecardgame/abilities.ts b/data/mods/thecardgame/abilities.ts
index 5c9af8011c37..5dcf9c71d947 100644
--- a/data/mods/thecardgame/abilities.ts
+++ b/data/mods/thecardgame/abilities.ts
@@ -1,4 +1,4 @@
-export const Abilities: {[k: string]: ModdedAbilityData} = {
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
aerilate: {
inherit: true,
onModifyType(move, pokemon) {
diff --git a/data/mods/thecardgame/conditions.ts b/data/mods/thecardgame/conditions.ts
index 8a47e300630f..f56bbc9811f0 100644
--- a/data/mods/thecardgame/conditions.ts
+++ b/data/mods/thecardgame/conditions.ts
@@ -1,4 +1,4 @@
-export const Conditions: {[k: string]: ModdedConditionData} = {
+export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = {
deltastream: {
inherit: true,
onEffectiveness(typeMod, target, type, move) {
diff --git a/data/mods/thecardgame/items.ts b/data/mods/thecardgame/items.ts
index 9d47db5e5976..b7bbed8f4b9e 100644
--- a/data/mods/thecardgame/items.ts
+++ b/data/mods/thecardgame/items.ts
@@ -1,4 +1,4 @@
-export const Items: {[k: string]: ModdedItemData} = {
+export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
buggem: {
inherit: true,
onSourceTryPrimaryHit(target, source, move) {
diff --git a/data/mods/thecardgame/moves.ts b/data/mods/thecardgame/moves.ts
index 61714cd75f58..3be0468d7699 100644
--- a/data/mods/thecardgame/moves.ts
+++ b/data/mods/thecardgame/moves.ts
@@ -1,4 +1,4 @@
-export const Moves: {[k: string]: ModdedMoveData} = {
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
camouflage: {
inherit: true,
onHit(target) {
@@ -21,6 +21,22 @@ export const Moves: {[k: string]: ModdedMoveData} = {
return typeMod + this.dex.getEffectiveness('Normal', type);
},
},
+ ivycudgel: {
+ inherit: true,
+ onModifyType(move, pokemon) {
+ switch (pokemon.species.name) {
+ case 'Ogerpon-Wellspring': case 'Ogerpon-Wellspring-Tera':
+ move.type = 'Water';
+ break;
+ case 'Ogerpon-Hearthflame': case 'Ogerpon-Hearthflame-Tera':
+ move.type = 'Fire';
+ break;
+ case 'Ogerpon-Cornerstone': case 'Ogerpon-Cornerstone-Tera':
+ move.type = 'Fighting';
+ break;
+ }
+ },
+ },
roost: {
inherit: true,
condition: {
diff --git a/data/mods/thecardgame/typechart.ts b/data/mods/thecardgame/typechart.ts
index 61e7d0fe950b..9b1f9a7371c7 100644
--- a/data/mods/thecardgame/typechart.ts
+++ b/data/mods/thecardgame/typechart.ts
@@ -1,4 +1,4 @@
-export const TypeChart: {[k: string]: ModdedTypeData} = {
+export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = {
dark: {
inherit: true,
damageTaken: {
diff --git a/data/mods/trademarked/scripts.ts b/data/mods/trademarked/scripts.ts
index 2a38c693f6a8..7f5654e3feff 100644
--- a/data/mods/trademarked/scripts.ts
+++ b/data/mods/trademarked/scripts.ts
@@ -1,7 +1,9 @@
+import {Utils} from '../../../lib';
+
export const Scripts: ModdedBattleScriptsData = {
gen: 9,
inherit: 'gen9',
- nextTurn() {
+ endTurn() {
this.turn++;
this.lastSuccessfulMoveThisTurn = null;
@@ -71,7 +73,11 @@ export const Scripts: ModdedBattleScriptsData = {
}
this.runEvent('DisableMove', pokemon);
for (const moveSlot of pokemon.moveSlots) {
- this.singleEvent('DisableMove', this.dex.getActiveMove(moveSlot.id), null, pokemon);
+ const activeMove = this.dex.getActiveMove(moveSlot.id);
+ this.singleEvent('DisableMove', activeMove, null, pokemon);
+ if (activeMove.flags['cantusetwice'] && pokemon.lastMove?.id === moveSlot.id) {
+ pokemon.disableMove(pokemon.lastMove.id);
+ }
}
// If it was an illusion, it's not any more
@@ -178,7 +184,7 @@ export const Scripts: ModdedBattleScriptsData = {
// Please remove me once there is client support.
if (this.ruleTable.has('crazyhouserule')) {
for (const side of this.sides) {
- let buf = `raw|${side.name}'s team:
`;
+ let buf = `raw|${Utils.escapeHTML(side.name)}'s team:
`;
for (const pokemon of side.pokemon) {
if (!buf.endsWith('
')) buf += '/';
if (pokemon.fainted) {
@@ -200,6 +206,7 @@ export const Scripts: ModdedBattleScriptsData = {
return {
id: move.id,
name: move.name,
+ flags: {},
// Does not need activation message with this
fullname: 'ability: ' + move.name,
onStart(this: Battle, pokemon: Pokemon) {
@@ -223,7 +230,8 @@ export const Scripts: ModdedBattleScriptsData = {
const species = pokemon.species;
if (pokemon.fainted || this.illusion || pokemon.illusion || (pokemon.volatiles['substitute'] && this.battle.gen >= 5) ||
(pokemon.transformed && this.battle.gen >= 2) || (this.transformed && this.battle.gen >= 5) ||
- species.name === 'Eternatus-Eternamax') {
+ species.name === 'Eternatus-Eternamax' || (['Ogerpon', 'Terapagos'].includes(species.baseSpecies) &&
+ (this.terastallized || pokemon.terastallized)) || this.terastallized === 'Stellar') {
return false;
}
@@ -251,7 +259,6 @@ export const Scripts: ModdedBattleScriptsData = {
if (this.modifiedStats) this.modifiedStats[statName] = pokemon.modifiedStats![statName]; // Gen 1: Copy modified stats.
}
this.moveSlots = [];
- this.set.ivs = (this.battle.gen >= 5 ? this.set.ivs : pokemon.set.ivs);
this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType);
this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower);
this.timesAttacked = pokemon.timesAttacked;
@@ -276,13 +283,14 @@ export const Scripts: ModdedBattleScriptsData = {
this.boosts[boostName] = pokemon.boosts[boostName];
}
if (this.battle.gen >= 6) {
- const volatilesToCopy = ['focusenergy', 'gmaxchistrike', 'laserfocus'];
+ const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus'];
+ // we need to remove all the crit volatiles before adding any crit volatile
+ for (const volatile of volatilesToCopy) this.removeVolatile(volatile);
for (const volatile of volatilesToCopy) {
if (pokemon.volatiles[volatile]) {
this.addVolatile(volatile);
if (volatile === 'gmaxchistrike') this.volatiles[volatile].layers = pokemon.volatiles[volatile].layers;
- } else {
- this.removeVolatile(volatile);
+ if (volatile === 'dragoncheer') this.volatiles[volatile].hasDragonType = pokemon.volatiles[volatile].hasDragonType;
}
}
}
@@ -319,6 +327,11 @@ export const Scripts: ModdedBattleScriptsData = {
}
}
+ // Pokemon transformed into Ogerpon cannot Terastallize
+ // restoring their ability to tera after they untransform is handled ELSEWHERE
+ if (this.species.baseSpecies === 'Ogerpon' && this.canTerastallize) this.canTerastallize = false;
+ if (this.species.baseSpecies === 'Terapagos' && this.canTerastallize) this.canTerastallize = false;
+
return true;
},
},
diff --git a/data/moves.ts b/data/moves.ts
index dabd68d866c1..1305ab57fb6c 100644
--- a/data/moves.ts
+++ b/data/moves.ts
@@ -1,6 +1,6 @@
// List of flags and their descriptions can be found in sim/dex-moves.ts
-export const Moves: {[moveid: string]: MoveData} = {
+export const Moves: import('../sim/dex-moves').MoveDataTable = {
"10000000voltthunderbolt": {
num: 719,
accuracy: true,
@@ -26,7 +26,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Absorb",
pp: 25,
priority: 0,
- flags: {protect: 1, mirror: 1, heal: 1},
+ flags: {protect: 1, mirror: 1, heal: 1, metronome: 1},
drain: [1, 2],
secondary: null,
target: "normal",
@@ -41,7 +41,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Accelerock",
pp: 20,
priority: 1,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Rock",
@@ -55,7 +55,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Acid",
pp: 30,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
boosts: {
@@ -74,7 +74,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Acid Armor",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
def: 2,
},
@@ -108,7 +108,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Acid Spray",
pp: 20,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: {
chance: 100,
boosts: {
@@ -134,7 +134,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Acrobatics",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, distance: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1},
secondary: null,
target: "any",
type: "Flying",
@@ -148,7 +148,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Acupressure",
pp: 30,
priority: 0,
- flags: {},
+ flags: {metronome: 1},
onHit(target) {
const stats: BoostID[] = [];
let stat: BoostID;
@@ -180,7 +180,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Aerial Ace",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, distance: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1, slicing: 1},
secondary: null,
target: "any",
type: "Flying",
@@ -191,11 +191,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 95,
basePower: 100,
category: "Special",
- isNonstandard: "Past",
name: "Aeroblast",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1, distance: 1},
+ flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, wind: 1},
critRatio: 2,
secondary: null,
target: "any",
@@ -212,7 +211,7 @@ export const Moves: {[moveid: string]: MoveData} = {
priority: 0,
flags: {bypasssub: 1, allyanim: 1},
onHit(target) {
- if (target.side.active.length < 2) return false; // fails in singles
+ if (this.activePerHalf === 1) return false; // fails in singles
const action = this.queue.willMove(target);
if (action) {
this.queue.prioritizeAction(action);
@@ -235,7 +234,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Agility",
pp: 30,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
spe: 2,
},
@@ -253,7 +252,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Air Cutter",
pp: 25,
priority: 0,
- flags: {protect: 1, mirror: 1, slicing: 1, wind: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1, wind: 1},
critRatio: 2,
secondary: null,
target: "allAdjacentFoes",
@@ -268,7 +267,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Air Slash",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, distance: 1, slicing: 1},
+ flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, slicing: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -293,6 +292,26 @@ export const Moves: {[moveid: string]: MoveData} = {
type: "Fighting",
contestType: "Cool",
},
+ alluringvoice: {
+ num: 914,
+ accuracy: 100,
+ basePower: 80,
+ category: "Special",
+ name: "Alluring Voice",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
+ secondary: {
+ chance: 100,
+ onHit(target, source, move) {
+ if (target?.statsRaisedThisTurn) {
+ target.addVolatile('confusion', source, move);
+ }
+ },
+ },
+ target: "normal",
+ type: "Fairy",
+ },
allyswitch: {
num: 502,
accuracy: true,
@@ -301,22 +320,50 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ally Switch",
pp: 15,
priority: 2,
- flags: {},
- stallingMove: true,
+ flags: {metronome: 1},
onPrepareHit(pokemon) {
- return !!this.queue.willAct() && this.runEvent('StallMove', pokemon);
- },
- onTryHit(source) {
- if (source.side.active.length === 1) return false;
- if (source.side.active.length === 3 && source.position === 1) return false;
+ return pokemon.addVolatile('allyswitch');
},
onHit(pokemon) {
- pokemon.addVolatile('stall');
+ let success = true;
+ // Fail in formats where you don't control allies
+ if (this.format.gameType !== 'doubles' && this.format.gameType !== 'triples') success = false;
+
+ // Fail in triples if the Pokemon is in the middle
+ if (pokemon.side.active.length === 3 && pokemon.position === 1) success = false;
+
const newPosition = (pokemon.position === 0 ? pokemon.side.active.length - 1 : 0);
- if (!pokemon.side.active[newPosition]) return false;
- if (pokemon.side.active[newPosition].fainted) return false;
+ if (!pokemon.side.active[newPosition]) success = false;
+ if (pokemon.side.active[newPosition].fainted) success = false;
+ if (!success) {
+ this.add('-fail', pokemon, 'move: Ally Switch');
+ this.attrLastMove('[still]');
+ return this.NOT_FAIL;
+ }
this.swapPosition(pokemon, newPosition, '[from] move: Ally Switch');
},
+ condition: {
+ duration: 2,
+ counterMax: 729,
+ onStart() {
+ this.effectState.counter = 3;
+ },
+ onRestart(pokemon) {
+ // this.effectState.counter should never be undefined here.
+ // However, just in case, use 1 if it is undefined.
+ const counter = this.effectState.counter || 1;
+ this.debug("Ally Switch success chance: " + Math.round(100 / counter) + "%");
+ const success = this.randomChance(1, counter);
+ if (!success) {
+ delete pokemon.volatiles['allyswitch'];
+ return false;
+ }
+ if (this.effectState.counter < (this.effect as Condition).counterMax!) {
+ this.effectState.counter *= 3;
+ }
+ this.effectState.duration = 2;
+ },
+ },
secondary: null,
target: "self",
type: "Psychic",
@@ -331,7 +378,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Amnesia",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
spd: 2,
},
@@ -350,7 +397,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Anchor Shot",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
onHit(target, source, move) {
@@ -369,7 +416,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ancient Power",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
self: {
@@ -412,7 +459,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Aqua Cutter",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1, slicing: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -427,7 +474,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Aqua Jet",
pp: 20,
priority: 1,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Water",
@@ -441,7 +488,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Aqua Ring",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
volatileStatus: 'aquaring',
condition: {
onStart(pokemon) {
@@ -466,7 +513,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Aqua Step",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, dance: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, dance: 1, metronome: 1},
secondary: {
chance: 100,
self: {
@@ -487,7 +534,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Aqua Tail",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Water",
@@ -520,7 +567,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Arm Thrust",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -536,7 +583,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Aromatherapy",
pp: 5,
priority: 0,
- flags: {snatch: 1, distance: 1},
+ flags: {snatch: 1, distance: 1, metronome: 1},
onHit(target, source, move) {
this.add('-activate', source, 'move: Aromatherapy');
let success = false;
@@ -563,7 +610,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Aromatic Mist",
pp: 20,
priority: 0,
- flags: {bypasssub: 1},
+ flags: {bypasssub: 1, metronome: 1},
boosts: {
spd: 1,
},
@@ -582,7 +629,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Assist",
pp: 20,
priority: 0,
- flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1},
+ flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1},
onHit(target) {
const moves = [];
for (const pokemon of target.side.pokemon) {
@@ -603,6 +650,7 @@ export const Moves: {[moveid: string]: MoveData} = {
}
this.actions.useMove(randomMove, target);
},
+ callsMove: true,
secondary: null,
target: "self",
type: "Normal",
@@ -623,7 +671,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Assurance",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Dark",
@@ -637,7 +685,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Astonish",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -667,7 +715,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Attack Order",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -682,7 +730,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Attract",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1},
volatileStatus: 'attract',
condition: {
noCopy: true, // doesn't get copied by Baton Pass
@@ -739,7 +787,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Aura Sphere",
pp: 20,
priority: 0,
- flags: {bullet: 1, protect: 1, pulse: 1, mirror: 1, distance: 1},
+ flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, bullet: 1, pulse: 1},
secondary: null,
target: "any",
type: "Fighting",
@@ -750,7 +798,6 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 110,
category: "Physical",
- isNonstandard: "Past",
name: "Aura Wheel",
pp: 10,
priority: 0,
@@ -790,7 +837,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Aurora Beam",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
boosts: {
@@ -809,7 +856,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Aurora Veil",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
sideCondition: 'auroraveil',
onTry() {
return this.field.isWeather(['hail', 'snow']);
@@ -859,7 +906,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Autotomize",
pp: 15,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
onTryHit(pokemon) {
const hasContrary = pokemon.hasAbility('contrary');
if ((!hasContrary && pokemon.boosts.spe === 6) || (hasContrary && pokemon.boosts.spe === -6)) {
@@ -899,7 +946,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Avalanche",
pp: 10,
priority: -4,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Ice",
@@ -913,7 +960,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Axe Kick",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
hasCrashDamage: true,
onMoveFail(target, source, move) {
this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick'));
@@ -933,7 +980,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Baby-Doll Eyes",
pp: 30,
priority: 1,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
boosts: {
atk: -1,
},
@@ -1024,11 +1071,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 60,
category: "Physical",
- isNonstandard: "Unobtainable",
name: "Barb Barrage",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onBasePower(basePower, pokemon, target) {
if (target.status === 'psn' || target.status === 'tox') {
return this.chainModify(2);
@@ -1050,7 +1096,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Barrage",
pp: 20,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -1066,7 +1112,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Barrier",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
def: 2,
},
@@ -1084,8 +1130,8 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Baton Pass",
pp: 40,
priority: 0,
- flags: {},
- onTryHit(target) {
+ flags: {metronome: 1},
+ onHit(target) {
if (!this.canSwitch(target.side) || target.volatiles['commanded']) {
this.attrLastMove('[still]');
this.add('-fail', target);
@@ -1109,11 +1155,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 100,
category: "Physical",
- isNonstandard: "Past",
name: "Beak Blast",
pp: 15,
priority: -3,
- flags: {bullet: 1, protect: 1, noassist: 1, failmefirst: 1, nosleeptalk: 1, failcopycat: 1, failinstruct: 1},
+ flags: {protect: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, bullet: 1},
priorityChargeCallback(pokemon) {
pokemon.addVolatile('beakblast');
},
@@ -1151,7 +1196,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Beat Up",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1},
onModifyMove(move, pokemon) {
move.allies = pokemon.side.pokemon.filter(ally => ally === pokemon || !ally.fainted && !ally.status);
move.multihit = move.allies.length;
@@ -1182,7 +1227,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Behemoth Blade",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1, failcopycat: 1, failmimic: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, failcopycat: 1, failmimic: 1, slicing: 1},
secondary: null,
target: "normal",
type: "Steel",
@@ -1195,7 +1240,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Belch",
pp: 10,
priority: 0,
- flags: {protect: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1},
+ flags: {protect: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1},
onDisableMove(pokemon) {
if (!pokemon.ateBerry) pokemon.disableMove('belch');
},
@@ -1212,7 +1257,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Belly Drum",
pp: 10,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
onHit(target) {
if (target.hp <= target.maxhp / 2 || target.boosts.atk >= 6 || target.maxhp === 1) { // Shedinja clause
return false;
@@ -1263,7 +1308,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bide",
pp: 10,
priority: 1,
- flags: {contact: 1, protect: 1, nosleeptalk: 1, failinstruct: 1},
+ flags: {contact: 1, protect: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1},
volatileStatus: 'bide',
ignoreImmunity: true,
beforeMoveCallback(pokemon) {
@@ -1336,7 +1381,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bind",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
volatileStatus: 'partiallytrapped',
secondary: null,
target: "normal",
@@ -1351,7 +1396,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bite",
pp: 25,
priority: 0,
- flags: {bite: 1, contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -1368,7 +1413,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bitter Blade",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1, slicing: 1},
drain: [1, 2],
secondary: null,
target: "normal",
@@ -1382,7 +1427,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bitter Malice",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -1416,7 +1461,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Blast Burn",
pp: 5,
priority: 0,
- flags: {recharge: 1, protect: 1, mirror: 1},
+ flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1},
self: {
volatileStatus: 'mustrecharge',
},
@@ -1433,7 +1478,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Blaze Kick",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
secondary: {
chance: 10,
@@ -1453,7 +1498,8 @@ export const Moves: {[moveid: string]: MoveData} = {
pp: 10,
priority: 0,
flags: {
- protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1,
+ protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1,
+ failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1,
},
secondary: {
chance: 30,
@@ -1467,11 +1513,15 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 80,
basePower: 100,
category: "Special",
- isNonstandard: "Unobtainable",
name: "Bleakwind Storm",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, wind: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, wind: 1},
+ onModifyMove(move, pokemon, target) {
+ if (target && ['raindance', 'primordialsea'].includes(target.effectiveWeather())) {
+ move.accuracy = true;
+ }
+ },
secondary: {
chance: 30,
boosts: {
@@ -1489,7 +1539,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Blizzard",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1, wind: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, wind: 1},
onModifyMove(move) {
if (this.field.isWeather(['hail', 'snow'])) move.accuracy = true;
},
@@ -1509,7 +1559,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Block",
pp: 5,
priority: 0,
- flags: {reflectable: 1, mirror: 1},
+ flags: {reflectable: 1, mirror: 1, metronome: 1},
onHit(target, source, move) {
return target.addVolatile('trapped', source, move, 'trapper');
},
@@ -1519,6 +1569,19 @@ export const Moves: {[moveid: string]: MoveData} = {
zMove: {boost: {def: 1}},
contestType: "Cute",
},
+ bloodmoon: {
+ num: 901,
+ accuracy: 100,
+ basePower: 140,
+ category: "Special",
+ name: "Blood Moon",
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, metronome: 1, cantusetwice: 1},
+ secondary: null,
+ target: "normal",
+ type: "Normal",
+ },
bloomdoom: {
num: 644,
accuracy: true,
@@ -1540,11 +1603,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 85,
basePower: 130,
category: "Special",
- isNonstandard: "Past",
name: "Blue Flare",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 20,
status: 'brn',
@@ -1575,7 +1637,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Body Slam",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1},
secondary: {
chance: 30,
status: 'par',
@@ -1601,7 +1663,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bolt Beak",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Electric",
@@ -1611,11 +1673,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 85,
basePower: 130,
category: "Physical",
- isNonstandard: "Past",
name: "Bolt Strike",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 20,
status: 'par',
@@ -1633,7 +1694,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bone Club",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
volatileStatus: 'flinch',
@@ -1651,7 +1712,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bonemerang",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
multihit: 2,
secondary: null,
target: "normal",
@@ -1667,7 +1728,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bone Rush",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -1684,7 +1745,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Boomburst",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
secondary: null,
target: "allAdjacent",
type: "Normal",
@@ -1699,7 +1760,8 @@ export const Moves: {[moveid: string]: MoveData} = {
pp: 5,
priority: 0,
flags: {
- contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1,
+ contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1,
+ metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1,
},
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
@@ -1771,7 +1833,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Brave Bird",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, distance: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1},
recoil: [33, 100],
secondary: null,
target: "any",
@@ -1820,7 +1882,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Brick Break",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onTryHit(pokemon) {
// will shatter screens through sub, before you hit
pokemon.side.removeSideCondition('reflect');
@@ -1840,7 +1902,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Brine",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onBasePower(basePower, pokemon, target) {
if (target.hp * 2 <= target.maxhp) {
return this.chainModify(2);
@@ -1859,7 +1921,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Brutal Swing",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "allAdjacent",
type: "Dark",
@@ -1874,7 +1936,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bubble",
pp: 30,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
boosts: {
@@ -1893,7 +1955,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bubble Beam",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
boosts: {
@@ -1912,7 +1974,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bug Bite",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onHit(target, source) {
const item = target.getItem();
if (source.hp && item.isBerry && target.takeItem(source)) {
@@ -1937,7 +1999,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bug Buzz",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
secondary: {
chance: 10,
boosts: {
@@ -1956,7 +2018,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bulk Up",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
atk: 1,
def: 1,
@@ -1975,7 +2037,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bulldoze",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1, nonsky: 1},
+ flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -1994,7 +2056,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bullet Punch",
pp: 30,
priority: 1,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Steel",
@@ -2008,7 +2070,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Bullet Seed",
pp: 30,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -2017,6 +2079,62 @@ export const Moves: {[moveid: string]: MoveData} = {
maxMove: {basePower: 130},
contestType: "Cool",
},
+ burningbulwark: {
+ num: 908,
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Burning Bulwark",
+ pp: 10,
+ priority: 4,
+ flags: {metronome: 1, noassist: 1, failcopycat: 1},
+ stallingMove: true,
+ volatileStatus: 'burningbulwark',
+ onPrepareHit(pokemon) {
+ return !!this.queue.willAct() && this.runEvent('StallMove', pokemon);
+ },
+ onHit(pokemon) {
+ pokemon.addVolatile('stall');
+ },
+ condition: {
+ duration: 1,
+ onStart(target) {
+ this.add('-singleturn', target, 'move: Protect');
+ },
+ onTryHitPriority: 3,
+ onTryHit(target, source, move) {
+ if (!move.flags['protect'] || move.category === 'Status') {
+ if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
+ if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
+ return;
+ }
+ if (move.smartTarget) {
+ move.smartTarget = false;
+ } else {
+ this.add('-activate', target, 'move: Protect');
+ }
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ if (this.checkMoveMakesContact(move, source, target)) {
+ source.trySetStatus('brn', target);
+ }
+ return this.NOT_FAIL;
+ },
+ onHit(target, source, move) {
+ if (move.isZOrMaxPowered && this.checkMoveMakesContact(move, source, target)) {
+ source.trySetStatus('brn', target);
+ }
+ },
+ },
+ secondary: null,
+ target: "self",
+ type: "Fire",
+ },
burningjealousy: {
num: 807,
accuracy: 100,
@@ -2025,7 +2143,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Burning Jealousy",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
onHit(target, source, move) {
@@ -2043,10 +2161,11 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 130,
category: "Special",
+ isNonstandard: "Unobtainable",
name: "Burn Up",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1, defrost: 1},
+ flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1},
onTryMove(pokemon, target, move) {
if (pokemon.hasType('Fire')) return;
this.add('-fail', pokemon, 'move: Burn Up');
@@ -2090,7 +2209,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Calm Mind",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
spa: 1,
spd: 1,
@@ -2110,7 +2229,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Camouflage",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
onHit(target) {
let newType = 'Normal';
if (this.field.isTerrain('electricterrain')) {
@@ -2141,7 +2260,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Captivate",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
onTryImmunity(pokemon, source) {
return (pokemon.gender === 'M' && source.gender === 'F') || (pokemon.gender === 'F' && source.gender === 'M');
},
@@ -2175,19 +2294,25 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 90,
basePower: 65,
category: "Physical",
- isNonstandard: "Unobtainable",
name: "Ceaseless Edge",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
- self: {
- onHit(source) {
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
+ onAfterHit(target, source, move) {
+ if (!move.hasSheerForce && source.hp) {
for (const side of source.side.foeSidesWithConditions()) {
side.addSideCondition('spikes');
}
- },
+ }
+ },
+ onAfterSubDamage(damage, target, source, move) {
+ if (!move.hasSheerForce && source.hp) {
+ for (const side of source.side.foeSidesWithConditions()) {
+ side.addSideCondition('spikes');
+ }
+ }
},
- secondary: {}, // allows sheer force to trigger
+ secondary: {}, // Sheer Force-boosted
target: "normal",
type: "Dark",
},
@@ -2199,7 +2324,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Celebrate",
pp: 40,
priority: 0,
- flags: {nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1},
+ flags: {nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1},
onTryHit(target, source) {
this.add('-activate', target, 'move: Celebrate');
},
@@ -2217,7 +2342,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Charge",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
volatileStatus: 'charge',
condition: {
onStart(pokemon, source, effect) {
@@ -2272,7 +2397,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Charge Beam",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 70,
self: {
@@ -2293,7 +2418,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Charm",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
boosts: {
atk: -2,
},
@@ -2313,10 +2438,9 @@ export const Moves: {[moveid: string]: MoveData} = {
pp: 20,
priority: 0,
flags: {
- protect: 1, mirror: 1, sound: 1, distance: 1, bypasssub: 1, nosleeptalk: 1, noassist: 1,
- failcopycat: 1, failinstruct: 1, failmimic: 1,
+ protect: 1, mirror: 1, sound: 1, distance: 1, bypasssub: 1,
+ nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1,
},
- noSketch: true,
secondary: {
chance: 100,
volatileStatus: 'confusion',
@@ -2370,7 +2494,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Chip Away",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
ignoreDefensive: true,
ignoreEvasion: true,
secondary: null,
@@ -2383,21 +2507,11 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 95,
basePower: 150,
category: "Special",
- isNonstandard: "Unobtainable",
name: "Chloroblast",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
- mindBlownRecoil: true,
- onAfterMove(pokemon, target, move) {
- if (move.mindBlownRecoil && !move.multihit) {
- const hpBeforeRecoil = pokemon.hp;
- this.damage(Math.round(pokemon.maxhp / 2), pokemon, pokemon, this.dex.conditions.get('Chloroblast'), true);
- if (pokemon.hp <= pokemon.maxhp / 2 && hpBeforeRecoil > pokemon.maxhp / 2) {
- this.runEvent('EmergencyExit', pokemon, pokemon);
- }
- }
- },
+ flags: {protect: 1, mirror: 1, metronome: 1},
+ // Recoil implemented in battle-actions.ts
secondary: null,
target: "normal",
type: "Grass",
@@ -2410,7 +2524,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Circle Throw",
pp: 10,
priority: -6,
- flags: {contact: 1, protect: 1, mirror: 1, noassist: 1, failcopycat: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, noassist: 1, failcopycat: 1},
forceSwitch: true,
target: "normal",
type: "Fighting",
@@ -2425,7 +2539,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Clamp",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
volatileStatus: 'partiallytrapped',
secondary: null,
target: "normal",
@@ -2437,11 +2551,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 110,
category: "Special",
- isNonstandard: "Past",
name: "Clanging Scales",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
selfBoost: {
boosts: {
def: -1,
@@ -2457,7 +2570,6 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 0,
category: "Status",
- isNonstandard: "Past",
name: "Clangorous Soul",
pp: 5,
priority: 0,
@@ -2518,7 +2630,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Clear Smog",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onHit(target) {
target.clearBoosts();
this.add('-clearboost', target);
@@ -2536,7 +2648,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Close Combat",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
self: {
boosts: {
def: -1,
@@ -2556,7 +2668,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Coaching",
pp: 10,
priority: 0,
- flags: {bypasssub: 1, allyanim: 1},
+ flags: {bypasssub: 1, allyanim: 1, metronome: 1},
secondary: null,
boosts: {
atk: 1,
@@ -2573,7 +2685,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Coil",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
atk: 1,
def: 1,
@@ -2616,7 +2728,8 @@ export const Moves: {[moveid: string]: MoveData} = {
pp: 10,
priority: 0,
flags: {
- protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1,
+ protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1,
+ failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1,
},
secondary: {
chance: 30,
@@ -2634,7 +2747,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Comet Punch",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -2681,7 +2794,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Confide",
pp: 20,
priority: 0,
- flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
boosts: {
spa: -1,
},
@@ -2699,7 +2812,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Confuse Ray",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
volatileStatus: 'confusion',
secondary: null,
target: "normal",
@@ -2715,7 +2828,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Confusion",
pp: 25,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
volatileStatus: 'confusion',
@@ -2733,7 +2846,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Constrict",
pp: 35,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
boosts: {
@@ -2765,11 +2878,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Past",
name: "Conversion",
pp: 30,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
onHit(target) {
const type = this.dex.moves.get(target.moveSlots[0].id).type;
if (target.hasType(type) || !target.setType(type)) return false;
@@ -2786,22 +2898,21 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Past",
name: "Conversion 2",
pp: 30,
priority: 0,
- flags: {bypasssub: 1},
+ flags: {bypasssub: 1, metronome: 1},
onHit(target, source) {
if (!target.lastMoveUsed) {
return false;
}
const possibleTypes = [];
const attackType = target.lastMoveUsed.type;
- for (const type of this.dex.types.names()) {
- if (source.hasType(type)) continue;
- const typeCheck = this.dex.types.get(type).damageTaken[attackType];
+ for (const typeName of this.dex.types.names()) {
+ if (source.hasType(typeName)) continue;
+ const typeCheck = this.dex.types.get(typeName).damageTaken[attackType];
if (typeCheck === 2 || typeCheck === 3) {
- possibleTypes.push(type);
+ possibleTypes.push(typeName);
}
}
if (!possibleTypes.length) {
@@ -2826,7 +2937,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Copycat",
pp: 20,
priority: 0,
- flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1},
+ flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1},
onHit(pokemon) {
let move: Move | ActiveMove | null = this.lastMove;
if (!move) return;
@@ -2837,6 +2948,7 @@ export const Moves: {[moveid: string]: MoveData} = {
}
this.actions.useMove(move.id, pokemon);
},
+ callsMove: true,
secondary: null,
target: "self",
type: "Normal",
@@ -2852,14 +2964,14 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Core Enforcer",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onHit(target) {
- if (target.getAbility().isPermanent) return;
+ if (target.getAbility().flags['cantsuppress']) return;
if (target.newlySwitched || this.queue.willMove(target)) return;
target.addVolatile('gastroacid');
},
onAfterSubDamage(damage, target) {
- if (target.getAbility().isPermanent) return;
+ if (target.getAbility().flags['cantsuppress']) return;
if (target.newlySwitched || this.queue.willMove(target)) return;
target.addVolatile('gastroacid');
},
@@ -2890,10 +3002,11 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 0,
category: "Status",
+ isNonstandard: "Unobtainable",
name: "Corrosive Gas",
pp: 40,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
onHit(target, source) {
const item = target.takeItem(source);
if (item) {
@@ -2911,11 +3024,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Unobtainable",
name: "Cosmic Power",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
def: 1,
spd: 1,
@@ -2934,7 +3046,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Cotton Guard",
pp: 10,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
def: 3,
},
@@ -2952,7 +3064,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Cotton Spore",
pp: 40,
priority: 0,
- flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1},
boosts: {
spe: -2,
},
@@ -3016,10 +3128,10 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Court Change",
pp: 10,
priority: 0,
- flags: {mirror: 1},
+ flags: {mirror: 1, metronome: 1},
onHitField(target, source) {
const sideConditions = [
- 'mist', 'lightscreen', 'reflect', 'spikes', 'safeguard', 'tailwind', 'toxicspikes', 'stealthrock', 'waterpledge', 'firepledge', 'grasspledge', 'stickyweb', 'auroraveil', 'gmaxsteelsurge', 'gmaxcannonade', 'gmaxvinelash', 'gmaxwildfire',
+ 'mist', 'lightscreen', 'reflect', 'spikes', 'safeguard', 'tailwind', 'toxicspikes', 'stealthrock', 'waterpledge', 'firepledge', 'grasspledge', 'stickyweb', 'auroraveil', 'luckychant', 'gmaxsteelsurge', 'gmaxcannonade', 'gmaxvinelash', 'gmaxwildfire', 'gmaxvolcalith',
];
let success = false;
if (this.gameType === "freeforall") {
@@ -3119,7 +3231,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Crabhammer",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -3166,7 +3278,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Cross Chop",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -3181,7 +3293,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Cross Poison",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
secondary: {
chance: 10,
status: 'psn',
@@ -3199,7 +3311,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Crunch",
pp: 15,
priority: 0,
- flags: {bite: 1, contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1},
secondary: {
chance: 20,
boosts: {
@@ -3218,7 +3330,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Crush Claw",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 50,
boosts: {
@@ -3241,11 +3353,10 @@ export const Moves: {[moveid: string]: MoveData} = {
return bp;
},
category: "Physical",
- isNonstandard: "Past",
name: "Crush Grip",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -3261,7 +3372,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Curse",
pp: 10,
priority: 0,
- flags: {bypasssub: 1},
+ flags: {bypasssub: 1, metronome: 1},
volatileStatus: 'curse',
onModifyMove(move, source, target) {
if (!source.hasType('Ghost')) {
@@ -3303,10 +3414,11 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 95,
basePower: 50,
category: "Physical",
+ isNonstandard: "Unobtainable",
name: "Cut",
pp: 30,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -3320,7 +3432,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Darkest Lariat",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
ignoreEvasion: true,
ignoreDefensive: true,
secondary: null,
@@ -3336,7 +3448,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dark Pulse",
pp: 15,
priority: 0,
- flags: {protect: 1, pulse: 1, mirror: 1, distance: 1},
+ flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1},
secondary: {
chance: 20,
volatileStatus: 'flinch',
@@ -3350,11 +3462,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 50,
basePower: 0,
category: "Status",
- isNonstandard: "Past",
name: "Dark Void",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, nosketch: 1},
status: 'slp',
onTry(source, target, move) {
if (source.species.name === 'Darkrai' || move.hasBounced) {
@@ -3378,7 +3489,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dazzling Gleam",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "allAdjacentFoes",
type: "Fairy",
@@ -3389,7 +3500,6 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Past",
name: "Decorate",
pp: 15,
priority: 0,
@@ -3410,7 +3520,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Defend Order",
pp: 10,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
def: 1,
spd: 1,
@@ -3429,7 +3539,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Defense Curl",
pp: 40,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
def: 1,
},
@@ -3452,7 +3562,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Defog",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1},
onHit(target, source, move) {
let success = false;
if (!target.volatiles['substitute'] || move.infiltrates) success = !!this.boost({evasion: -1});
@@ -3597,7 +3707,10 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dig",
pp: 10,
priority: 0,
- flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1},
+ flags: {
+ contact: 1, charge: 1, protect: 1, mirror: 1,
+ nonsky: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1,
+ },
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
return;
@@ -3639,7 +3752,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Disable",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1},
volatileStatus: 'disable',
onTryHit(target) {
if (!target.lastMove || target.lastMove.isZ || target.lastMove.isMax || target.lastMove.id === 'struggle') {
@@ -3670,7 +3783,7 @@ export const Moves: {[moveid: string]: MoveData} = {
}
}
if (effect.effectType === 'Ability') {
- this.add('-start', pokemon, 'Disable', pokemon.lastMove.name, '[from] ability: Cursed Body', '[of] ' + source);
+ this.add('-start', pokemon, 'Disable', pokemon.lastMove.name, '[from] ability: ' + effect.name, '[of] ' + source);
} else {
this.add('-start', pokemon, 'Disable', pokemon.lastMove.name);
}
@@ -3709,7 +3822,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Disarming Voice",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
secondary: null,
target: "allAdjacentFoes",
type: "Fairy",
@@ -3723,7 +3836,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Discharge",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
status: 'par',
@@ -3737,11 +3850,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 80,
category: "Physical",
- isNonstandard: "Unobtainable",
name: "Dire Claw",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 50,
onHit(target, source) {
@@ -3767,7 +3879,8 @@ export const Moves: {[moveid: string]: MoveData} = {
pp: 10,
priority: 0,
flags: {
- contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, allyanim: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1,
+ contact: 1, charge: 1, protect: 1, mirror: 1,
+ nonsky: 1, allyanim: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1,
},
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
@@ -3815,7 +3928,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dizzy Punch",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
secondary: {
chance: 20,
volatileStatus: 'confusion',
@@ -3835,14 +3948,16 @@ export const Moves: {[moveid: string]: MoveData} = {
flags: {},
onHit(target, source, move) {
let success: boolean | null = false;
- for (const pokemon of source.alliesAndSelf()) {
- if (pokemon.ability === target.ability) continue;
- const oldAbility = pokemon.setAbility(target.ability);
- if (oldAbility) {
- this.add('-ability', pokemon, target.getAbility().name, '[from] move: Doodle');
- success = true;
- } else if (!success && oldAbility === null) {
- success = null;
+ if (!target.getAbility().flags['failroleplay']) {
+ for (const pokemon of source.alliesAndSelf()) {
+ if (pokemon.ability === target.ability || pokemon.getAbility().flags['cantsuppress']) continue;
+ const oldAbility = pokemon.setAbility(target.ability);
+ if (oldAbility) {
+ this.add('-ability', pokemon, target.getAbility().name, '[from] move: Doodle');
+ success = true;
+ } else if (!success && oldAbility === null) {
+ success = null;
+ }
}
}
if (!success) {
@@ -3862,11 +3977,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 140,
category: "Special",
- isNonstandard: "Past",
name: "Doom Desire",
pp: 5,
priority: 0,
- flags: {futuremove: 1},
+ flags: {metronome: 1, futuremove: 1},
onTry(source, target) {
if (!target.side.addSlotCondition(target, 'futuremove')) return false;
Object.assign(target.side.slotConditions[target.position]['futuremove'], {
@@ -3879,7 +3993,7 @@ export const Moves: {[moveid: string]: MoveData} = {
basePower: 140,
category: "Special",
priority: 0,
- flags: {futuremove: 1},
+ flags: {metronome: 1, futuremove: 1},
effectType: 'Move',
type: 'Steel',
},
@@ -3900,7 +4014,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Double-Edge",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
recoil: [33, 100],
secondary: null,
target: "normal",
@@ -3915,7 +4029,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Double Hit",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: 2,
secondary: null,
target: "normal",
@@ -3953,7 +4067,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Double Kick",
pp: 30,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: 2,
secondary: null,
target: "normal",
@@ -3996,7 +4110,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Double Slap",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -4011,7 +4125,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Double Team",
pp: 15,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
evasion: 1,
},
@@ -4029,7 +4143,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Draco Meteor",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
self: {
boosts: {
spa: -2,
@@ -4067,7 +4181,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dragon Breath",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
status: 'par',
@@ -4076,15 +4190,47 @@ export const Moves: {[moveid: string]: MoveData} = {
type: "Dragon",
contestType: "Cool",
},
- dragonclaw: {
- num: 337,
- accuracy: 100,
- basePower: 80,
- category: "Physical",
+ dragoncheer: {
+ num: 913,
+ accuracy: true,
+ basePower: 0,
+ category: "Status",
+ name: "Dragon Cheer",
+ pp: 15,
+ priority: 0,
+ flags: {bypasssub: 1, allyanim: 1, metronome: 1},
+ volatileStatus: 'dragoncheer',
+ condition: {
+ onStart(target, source, effect) {
+ if (target.volatiles['focusenergy']) return false;
+ if (effect && (['costar', 'imposter', 'psychup', 'transform'].includes(effect.id))) {
+ this.add('-start', target, 'move: Dragon Cheer', '[silent]');
+ } else {
+ this.add('-start', target, 'move: Dragon Cheer');
+ }
+ // Store at the start because the boost doesn't change if a Pokemon
+ // Terastallizes into Dragon while having this volatile
+ // Found by DarkFE:
+ // https://www.smogon.com/forums/threads/scarlet-violet-battle-mechanics-research.3709545/post-9894139
+ this.effectState.hasDragonType = target.hasType("Dragon");
+ },
+ onModifyCritRatio(critRatio, source) {
+ return critRatio + (this.effectState.hasDragonType ? 2 : 1);
+ },
+ },
+ secondary: null,
+ target: "adjacentAlly",
+ type: "Dragon",
+ },
+ dragonclaw: {
+ num: 337,
+ accuracy: 100,
+ basePower: 80,
+ category: "Physical",
name: "Dragon Claw",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Dragon",
@@ -4098,7 +4244,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dragon Dance",
pp: 20,
priority: 0,
- flags: {snatch: 1, dance: 1},
+ flags: {snatch: 1, dance: 1, metronome: 1},
boosts: {
atk: 1,
spe: 1,
@@ -4117,7 +4263,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dragon Darts",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, noparentalbond: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, noparentalbond: 1},
multihit: 2,
smartTarget: true,
secondary: null,
@@ -4148,11 +4294,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 90,
category: "Physical",
- isNonstandard: "Past",
name: "Dragon Hammer",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Dragon",
@@ -4166,7 +4311,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dragon Pulse",
pp: 10,
priority: 0,
- flags: {protect: 1, pulse: 1, mirror: 1, distance: 1},
+ flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1},
secondary: null,
target: "any",
type: "Dragon",
@@ -4182,7 +4327,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dragon Rage",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Dragon",
@@ -4196,7 +4341,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dragon Rush",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 20,
volatileStatus: 'flinch',
@@ -4213,7 +4358,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dragon Tail",
pp: 10,
priority: -6,
- flags: {contact: 1, protect: 1, mirror: 1, noassist: 1, failcopycat: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, noassist: 1, failcopycat: 1},
forceSwitch: true,
target: "normal",
type: "Dragon",
@@ -4227,7 +4372,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Draining Kiss",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, heal: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1},
drain: [3, 4],
secondary: null,
target: "normal",
@@ -4242,7 +4387,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Drain Punch",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1, heal: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, heal: 1, metronome: 1},
drain: [1, 2],
secondary: null,
target: "normal",
@@ -4257,7 +4402,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dream Eater",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, heal: 1},
+ flags: {protect: 1, mirror: 1, heal: 1, metronome: 1},
drain: [1, 2],
onTryImmunity(target) {
return target.status === 'slp' || target.hasAbility('comatose');
@@ -4275,7 +4420,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Drill Peck",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, distance: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1},
secondary: null,
target: "any",
type: "Flying",
@@ -4289,7 +4434,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Drill Run",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -4323,7 +4468,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dual Chop",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: 2,
secondary: null,
target: "normal",
@@ -4339,7 +4484,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dual Wingbeat",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: 2,
secondary: null,
target: "normal",
@@ -4354,7 +4499,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dynamax Cannon",
pp: 5,
priority: 0,
- flags: {protect: 1, failencore: 1, nosleeptalk: 1, noparentalbond: 1, failcopycat: 1, failinstruct: 1, failmimic: 1},
+ flags: {protect: 1, failencore: 1, nosleeptalk: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, noparentalbond: 1},
secondary: null,
target: "normal",
type: "Dragon",
@@ -4367,7 +4512,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Dynamic Punch",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
secondary: {
chance: 100,
volatileStatus: 'confusion',
@@ -4384,7 +4529,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Earth Power",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, nonsky: 1},
+ flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1},
secondary: {
chance: 10,
boosts: {
@@ -4403,7 +4548,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Earthquake",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, nonsky: 1},
+ flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1},
secondary: null,
target: "allAdjacent",
type: "Ground",
@@ -4425,7 +4570,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Echoed Voice",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
onTry() {
this.field.addPseudoWeather('echoedvoice');
},
@@ -4456,7 +4601,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Eerie Impulse",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
boosts: {
spa: -2,
},
@@ -4474,7 +4619,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Eerie Spell",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
secondary: {
chance: 100,
onHit(target) {
@@ -4500,7 +4645,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Egg Bomb",
pp: 10,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -4514,7 +4659,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Electric Terrain",
pp: 10,
priority: 0,
- flags: {nonsky: 1},
+ flags: {nonsky: 1, metronome: 1},
terrain: 'electricterrain',
condition: {
duration: 5,
@@ -4574,7 +4719,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Electrify",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1},
volatileStatus: 'electrify',
onTryHit(target) {
if (!this.queue.willMove(target) && target.activeTurns) return false;
@@ -4613,7 +4758,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Electro Ball",
pp: 10,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: null,
target: "normal",
type: "Electric",
@@ -4642,6 +4787,37 @@ export const Moves: {[moveid: string]: MoveData} = {
type: "Electric",
contestType: "Cool",
},
+ electroshot: {
+ num: 905,
+ accuracy: 100,
+ basePower: 130,
+ category: "Special",
+ name: "Electro Shot",
+ pp: 10,
+ priority: 0,
+ flags: {charge: 1, protect: 1, mirror: 1, metronome: 1},
+ onTryMove(attacker, defender, move) {
+ if (attacker.removeVolatile(move.id)) {
+ return;
+ }
+ this.add('-prepare', attacker, move.name);
+ this.boost({spa: 1}, attacker, attacker, move);
+ if (['raindance', 'primordialsea'].includes(attacker.effectiveWeather())) {
+ this.attrLastMove('[still]');
+ this.addMove('-anim', attacker, move.name, defender);
+ return;
+ }
+ if (!this.runEvent('ChargeMove', attacker, defender, move)) {
+ return;
+ }
+ attacker.addVolatile('twoturnmove', defender);
+ return null;
+ },
+ secondary: null,
+ hasSheerForce: true,
+ target: "normal",
+ type: "Electric",
+ },
electroweb: {
num: 527,
accuracy: 95,
@@ -4650,7 +4826,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Electroweb",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -4670,7 +4846,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Embargo",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
volatileStatus: 'embargo',
condition: {
duration: 5,
@@ -4698,7 +4874,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ember",
pp: 25,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
status: 'brn',
@@ -4715,7 +4891,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Encore",
pp: 5,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, failencore: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1, failencore: 1},
volatileStatus: 'encore',
condition: {
duration: 3,
@@ -4741,7 +4917,7 @@ export const Moves: {[moveid: string]: MoveData} = {
},
onResidualOrder: 16,
onResidual(target) {
- if (target.moves.includes(this.effectState.move) &&
+ if (!target.moves.includes(this.effectState.move) ||
target.moveSlots[target.moves.indexOf(this.effectState.move)].pp <= 0) {
// early termination if you run out of PP
target.removeVolatile('encore');
@@ -4778,7 +4954,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Endeavor",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, noparentalbond: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, noparentalbond: 1},
onTryImmunity(target, pokemon) {
return pokemon.hp < target.hp;
},
@@ -4833,7 +5009,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Energy Ball",
pp: 10,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: {
chance: 10,
boosts: {
@@ -4852,18 +5028,13 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Entrainment",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
onTryHit(target, source) {
if (target === source || target.volatiles['dynamax']) return false;
-
- const additionalBannedSourceAbilities = [
- // Zen Mode included here for compatability with Gen 5-6
- 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode',
- ];
if (
target.ability === source.ability ||
- target.getAbility().isPermanent || target.ability === 'truant' ||
- source.getAbility().isPermanent || additionalBannedSourceAbilities.includes(source.ability)
+ target.getAbility().flags['cantsuppress'] || target.ability === 'truant' ||
+ source.getAbility().flags['noentrain']
) {
return false;
}
@@ -4896,7 +5067,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Eruption",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "allAdjacentFoes",
type: "Fire",
@@ -4907,11 +5078,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 80,
category: "Special",
- isNonstandard: "Unobtainable",
name: "Esper Wing",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
secondary: {
chance: 100,
@@ -4949,7 +5119,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Expanding Force",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onBasePower(basePower, source) {
if (this.field.isTerrain('psychicterrain') && source.isGrounded()) {
this.debug('terrain buff');
@@ -4973,7 +5143,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Explosion",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1, noparentalbond: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, noparentalbond: 1},
selfdestruct: "always",
secondary: null,
target: "allAdjacent",
@@ -4988,7 +5158,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Extrasensory",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
volatileStatus: 'flinch',
@@ -5028,7 +5198,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Extreme Speed",
pp: 5,
priority: 2,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -5042,7 +5212,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Facade",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onBasePower(basePower, pokemon) {
if (pokemon.status && pokemon.status !== 'slp') {
return this.chainModify(2);
@@ -5061,7 +5231,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fairy Lock",
pp: 10,
priority: 0,
- flags: {mirror: 1, bypasssub: 1},
+ flags: {mirror: 1, bypasssub: 1, metronome: 1},
pseudoWeather: 'fairylock',
condition: {
duration: 2,
@@ -5086,7 +5256,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fairy Wind",
pp: 30,
priority: 0,
- flags: {protect: 1, mirror: 1, wind: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, wind: 1},
secondary: null,
target: "normal",
type: "Fairy",
@@ -5100,7 +5270,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fake Out",
pp: 10,
priority: 3,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onTry(source) {
if (source.activeMoveActions > 1) {
this.hint("Fake Out only works on your first turn out.");
@@ -5123,7 +5293,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fake Tears",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
boosts: {
spd: -2,
},
@@ -5154,7 +5324,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "False Swipe",
pp: 40,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onDamagePriority: -20,
onDamage(damage, target, source, effect) {
if (damage >= target.hp) return target.hp - 1;
@@ -5172,7 +5342,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Feather Dance",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, dance: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, dance: 1, allyanim: 1, metronome: 1},
boosts: {
atk: -2,
},
@@ -5207,7 +5377,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Feint Attack",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Dark",
@@ -5221,7 +5391,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fell Stinger",
pp: 25,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onAfterMoveSecondarySelf(pokemon, target, move) {
if (!target || target.fainted || target.hp <= 0) this.boost({atk: 3}, pokemon, pokemon, move);
},
@@ -5230,6 +5400,26 @@ export const Moves: {[moveid: string]: MoveData} = {
type: "Bug",
contestType: "Cool",
},
+ ficklebeam: {
+ num: 907,
+ accuracy: 100,
+ basePower: 80,
+ category: "Special",
+ name: "Fickle Beam",
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, metronome: 1},
+ onBasePower(basePower, pokemon) {
+ if (this.randomChance(3, 10)) {
+ this.attrLastMove('[anim] Fickle Beam All Out');
+ this.add('-activate', pokemon, 'move: Fickle Beam');
+ return this.chainModify(2);
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Dragon",
+ },
fierydance: {
num: 552,
accuracy: 100,
@@ -5238,7 +5428,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fiery Dance",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, dance: 1},
+ flags: {protect: 1, mirror: 1, dance: 1, metronome: 1},
secondary: {
chance: 50,
self: {
@@ -5304,11 +5494,12 @@ export const Moves: {[moveid: string]: MoveData} = {
pokemon.faint();
return damage;
},
+ selfdestruct: "ifHit",
category: "Special",
name: "Final Gambit",
pp: 5,
priority: 0,
- flags: {protect: 1, noparentalbond: 1},
+ flags: {protect: 1, metronome: 1, noparentalbond: 1},
secondary: null,
target: "normal",
type: "Fighting",
@@ -5323,7 +5514,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fire Blast",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
status: 'brn',
@@ -5340,7 +5531,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fire Fang",
pp: 15,
priority: 0,
- flags: {bite: 1, contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1},
secondaries: [
{
chance: 10,
@@ -5362,7 +5553,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fire Lash",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -5382,13 +5573,13 @@ export const Moves: {[moveid: string]: MoveData} = {
this.add('-combine');
return 150;
}
- return 80;
+ return move.basePower;
},
category: "Special",
name: "Fire Pledge",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, nonsky: 1, pledgecombo: 1},
+ flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1, pledgecombo: 1},
onPrepareHit(target, source, move) {
for (const action of this.queue.list as MoveAction[]) {
if (
@@ -5445,7 +5636,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fire Punch",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
secondary: {
chance: 10,
status: 'brn',
@@ -5462,7 +5653,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fire Spin",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
volatileStatus: 'partiallytrapped',
secondary: null,
target: "normal",
@@ -5477,7 +5668,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "First Impression",
pp: 10,
priority: 2,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onTry(source) {
if (source.activeMoveActions > 1) {
this.hint("First Impression only works on your first turn out.");
@@ -5506,7 +5697,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fishious Rend",
pp: 10,
priority: 0,
- flags: {bite: 1, contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1},
secondary: null,
target: "normal",
type: "Water",
@@ -5519,7 +5710,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fissure",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1, nonsky: 1},
+ flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1},
ohko: true,
secondary: null,
target: "normal",
@@ -5532,7 +5723,7 @@ export const Moves: {[moveid: string]: MoveData} = {
num: 175,
accuracy: 100,
basePower: 0,
- basePowerCallback(pokemon, target) {
+ basePowerCallback(pokemon) {
const ratio = Math.max(Math.floor(pokemon.hp * 48 / pokemon.maxhp), 1);
let bp;
if (ratio < 2) {
@@ -5555,7 +5746,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Flail",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -5572,7 +5763,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Flame Burst",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onHit(target, source, move) {
for (const ally of target.adjacentAllies()) {
this.damage(ally.baseMaxhp / 16, ally, source, this.dex.conditions.get('Flame Burst'));
@@ -5596,7 +5787,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Flame Charge",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
self: {
@@ -5617,7 +5808,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Flame Wheel",
pp: 25,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, defrost: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, defrost: 1, metronome: 1},
secondary: {
chance: 10,
status: 'brn',
@@ -5634,7 +5825,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Flamethrower",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
status: 'brn',
@@ -5651,7 +5842,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Flare Blitz",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, defrost: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, defrost: 1, metronome: 1},
recoil: [33, 100],
secondary: {
chance: 10,
@@ -5670,7 +5861,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Flash",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
boosts: {
accuracy: -1,
},
@@ -5688,7 +5879,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Flash Cannon",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
boosts: {
@@ -5707,7 +5898,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Flatter",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
volatileStatus: 'confusion',
boosts: {
spa: 1,
@@ -5745,7 +5936,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fling",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, allyanim: 1, noparentalbond: 1},
+ flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1, noparentalbond: 1},
onPrepareHit(target, source, move) {
if (source.ignoringItem()) return false;
const item = source.getItem();
@@ -5797,7 +5988,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Flip Turn",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
selfSwitch: true,
secondary: null,
target: "normal",
@@ -5826,11 +6017,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Past",
name: "Floral Healing",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, heal: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, heal: 1, allyanim: 1, metronome: 1},
onHit(target, source) {
let success = false;
if (this.field.isTerrain('grassyterrain')) {
@@ -5862,7 +6052,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Flower Shield",
pp: 10,
priority: 0,
- flags: {distance: 1},
+ flags: {distance: 1, metronome: 1},
onHitField(t, source, move) {
const targets: Pokemon[] = [];
for (const pokemon of this.getAllActive()) {
@@ -5895,7 +6085,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Flower Trick",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
willCrit: true,
secondary: null,
target: "normal",
@@ -5910,7 +6100,8 @@ export const Moves: {[moveid: string]: MoveData} = {
pp: 15,
priority: 0,
flags: {
- contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1,
+ contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1,
+ metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1,
},
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
@@ -5949,7 +6140,7 @@ export const Moves: {[moveid: string]: MoveData} = {
category: "Physical",
name: "Flying Press",
pp: 10,
- flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nonsky: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nonsky: 1, metronome: 1},
onEffectiveness(typeMod, target, type, move) {
return typeMod + this.dex.getEffectiveness('Flying', type);
},
@@ -5968,7 +6159,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Focus Blast",
pp: 5,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: {
chance: 10,
boosts: {
@@ -5987,10 +6178,11 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Focus Energy",
pp: 30,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
volatileStatus: 'focusenergy',
condition: {
onStart(target, source, effect) {
+ if (target.volatiles['dragoncheer']) return false;
if (effect?.id === 'zpower') {
this.add('-start', target, 'move: Focus Energy', '[zeffect]');
} else if (effect && (['costar', 'imposter', 'psychup', 'transform'].includes(effect.id))) {
@@ -6091,7 +6283,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Force Palm",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
status: 'par',
@@ -6109,7 +6301,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Foresight",
pp: 40,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1},
volatileStatus: 'foresight',
onTryHit(target) {
if (target.volatiles['miracleeye']) return false;
@@ -6139,11 +6331,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 0,
category: "Status",
- isNonstandard: "Past",
name: "Forest's Curse",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
onHit(target) {
if (target.hasType('Grass')) return false;
if (!target.addType('Grass')) return false;
@@ -6163,7 +6354,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Foul Play",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
overrideOffensivePokemon: 'target',
secondary: null,
target: "normal",
@@ -6178,7 +6369,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Freeze-Dry",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onEffectiveness(typeMod, target, type) {
if (type === 'Water') return 1;
},
@@ -6195,7 +6386,6 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 90,
basePower: 140,
category: "Physical",
- isNonstandard: "Past",
name: "Freeze Shock",
pp: 5,
priority: 0,
@@ -6264,7 +6454,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Frenzy Plant",
pp: 5,
priority: 0,
- flags: {recharge: 1, protect: 1, mirror: 1, nonsky: 1},
+ flags: {recharge: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1},
self: {
volatileStatus: 'mustrecharge',
},
@@ -6281,7 +6471,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Frost Breath",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
willCrit: true,
secondary: null,
target: "normal",
@@ -6300,7 +6490,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Frustration",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -6316,7 +6506,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fury Attack",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -6339,7 +6529,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fury Cutter",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
condition: {
duration: 2,
onStart() {
@@ -6365,7 +6555,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Fury Swipes",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -6378,11 +6568,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 100,
category: "Physical",
- isNonstandard: "Past",
name: "Fusion Bolt",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onBasePower(basePower, pokemon) {
if (this.lastSuccessfulMoveThisTurn === 'fusionflare') {
this.debug('double power');
@@ -6399,11 +6588,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 100,
category: "Special",
- isNonstandard: "Past",
name: "Fusion Flare",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1, defrost: 1},
+ flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1},
onBasePower(basePower, pokemon) {
if (this.lastSuccessfulMoveThisTurn === 'fusionbolt') {
this.debug('double power');
@@ -6423,12 +6611,11 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Future Sight",
pp: 10,
priority: 0,
- flags: {allyanim: 1, futuremove: 1},
+ flags: {allyanim: 1, metronome: 1, futuremove: 1},
ignoreImmunity: true,
onTry(source, target) {
if (!target.side.addSlotCondition(target, 'futuremove')) return false;
Object.assign(target.side.slotConditions[target.position]['futuremove'], {
- duration: 3,
move: 'futuresight',
source: source,
moveData: {
@@ -6438,7 +6625,7 @@ export const Moves: {[moveid: string]: MoveData} = {
basePower: 120,
category: "Special",
priority: 0,
- flags: {allyanim: 1, futuremove: 1},
+ flags: {allyanim: 1, metronome: 1, futuremove: 1},
ignoreImmunity: false,
effectType: 'Move',
type: 'Psychic',
@@ -6460,10 +6647,10 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Gastro Acid",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
volatileStatus: 'gastroacid',
onTryHit(target) {
- if (target.getAbility().isPermanent) {
+ if (target.getAbility().flags['cantsuppress']) {
return false;
}
if (target.hasItem('Ability Shield')) {
@@ -6479,7 +6666,7 @@ export const Moves: {[moveid: string]: MoveData} = {
this.singleEvent('End', pokemon.getAbility(), pokemon.abilityState, pokemon, pokemon, 'gastroacid');
},
onCopy(pokemon) {
- if (pokemon.getAbility().isPermanent) pokemon.removeVolatile('gastroacid');
+ if (pokemon.getAbility().flags['cantsuppress']) pokemon.removeVolatile('gastroacid');
},
},
secondary: null,
@@ -6497,7 +6684,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Gear Grind",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: 2,
secondary: null,
target: "normal",
@@ -6515,7 +6702,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Gear Up",
pp: 20,
priority: 0,
- flags: {snatch: 1, bypasssub: 1},
+ flags: {snatch: 1, bypasssub: 1, metronome: 1},
onHitSide(side, source, move) {
const targets = side.allies().filter(target => (
target.hasAbility(['plus', 'minus']) &&
@@ -6566,7 +6753,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Geomancy",
pp: 10,
priority: 0,
- flags: {charge: 1, nonsky: 1, nosleeptalk: 1, failinstruct: 1},
+ flags: {charge: 1, nonsky: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1},
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
return;
@@ -6597,7 +6784,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Giga Drain",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, heal: 1},
+ flags: {protect: 1, mirror: 1, heal: 1, metronome: 1},
drain: [1, 2],
secondary: null,
target: "normal",
@@ -6612,7 +6799,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Giga Impact",
pp: 5,
priority: 0,
- flags: {contact: 1, recharge: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, recharge: 1, protect: 1, mirror: 1, metronome: 1},
self: {
volatileStatus: 'mustrecharge',
},
@@ -6629,19 +6816,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Gigaton Hammer",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
- onDisableMove(pokemon) {
- if (pokemon.lastMove?.id === 'gigatonhammer') pokemon.disableMove('gigatonhammer');
- },
- beforeMoveCallback(pokemon) {
- if (pokemon.lastMove?.id === 'gigatonhammer') pokemon.addVolatile('gigatonhammer');
- },
- onAfterMove(pokemon) {
- if (pokemon.removeVolatile('gigatonhammer')) {
- this.add('-hint', "Some effects can force a Pokemon to use Gigaton Hammer again in a row.");
- }
- },
- condition: {},
+ flags: {protect: 1, mirror: 1, metronome: 1, cantusetwice: 1},
secondary: null,
target: "normal",
type: "Steel",
@@ -6680,11 +6855,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 95,
basePower: 65,
category: "Special",
- isNonstandard: "Past",
name: "Glaciate",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -6703,7 +6877,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Glaive Rush",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
self: {
volatileStatus: 'glaiverush',
},
@@ -6736,7 +6910,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Glare",
pp: 30,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
status: 'par',
secondary: null,
target: "normal",
@@ -7653,7 +7827,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Grass Knot",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1},
onTryHit(target, source, move) {
if (target.volatiles['dynamax']) {
this.add('-fail', source, 'move: Grass Knot', '[from] Dynamax');
@@ -7677,13 +7851,13 @@ export const Moves: {[moveid: string]: MoveData} = {
this.add('-combine');
return 150;
}
- return 80;
+ return move.basePower;
},
category: "Special",
name: "Grass Pledge",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, nonsky: 1, pledgecombo: 1},
+ flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1, pledgecombo: 1},
onPrepareHit(target, source, move) {
for (const action of this.queue.list as MoveAction[]) {
if (
@@ -7739,7 +7913,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Grass Whistle",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
status: 'slp',
secondary: null,
target: "normal",
@@ -7750,12 +7924,12 @@ export const Moves: {[moveid: string]: MoveData} = {
grassyglide: {
num: 803,
accuracy: 100,
- basePower: 60,
+ basePower: 55,
category: "Physical",
name: "Grassy Glide",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onModifyPriority(priority, source, target, move) {
if (this.field.isTerrain('grassyterrain') && source.isGrounded()) {
return priority + 1;
@@ -7774,7 +7948,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Grassy Terrain",
pp: 10,
priority: 0,
- flags: {nonsky: 1},
+ flags: {nonsky: 1, metronome: 1},
terrain: 'grassyterrain',
condition: {
duration: 5,
@@ -7855,7 +8029,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Gravity",
pp: 5,
priority: 0,
- flags: {nonsky: 1},
+ flags: {nonsky: 1, metronome: 1},
pseudoWeather: 'gravity',
condition: {
duration: 5,
@@ -7945,7 +8119,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Growl",
pp: 40,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
boosts: {
atk: -1,
},
@@ -7963,7 +8137,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Growth",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
onModifyMove(move, pokemon) {
if (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) move.boosts = {atk: 2, spa: 2};
},
@@ -7986,7 +8160,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Grudge",
pp: 5,
priority: 0,
- flags: {bypasssub: 1},
+ flags: {bypasssub: 1, metronome: 1},
volatileStatus: 'grudge',
condition: {
onStart(pokemon) {
@@ -8053,7 +8227,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Guard Split",
pp: 10,
priority: 0,
- flags: {protect: 1, allyanim: 1},
+ flags: {protect: 1, allyanim: 1, metronome: 1},
onHit(target, source) {
const newdef = Math.floor((target.storedStats.def + source.storedStats.def) / 2);
target.storedStats.def = newdef;
@@ -8077,7 +8251,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Guard Swap",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1},
+ flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1},
onHit(target, source) {
const targetBoosts: SparseBoostsTable = {};
const sourceBoosts: SparseBoostsTable = {};
@@ -8107,7 +8281,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Guillotine",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
ohko: true,
secondary: null,
target: "normal",
@@ -8124,7 +8298,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Gunk Shot",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
status: 'psn',
@@ -8141,7 +8315,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Gust",
pp: 35,
priority: 0,
- flags: {protect: 1, mirror: 1, distance: 1, wind: 1},
+ flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, wind: 1},
secondary: null,
target: "any",
type: "Flying",
@@ -8162,7 +8336,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Gyro Ball",
pp: 5,
priority: 0,
- flags: {bullet: 1, contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: null,
target: "normal",
type: "Steel",
@@ -8179,7 +8353,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hail",
pp: 10,
priority: 0,
- flags: {},
+ flags: {metronome: 1},
weather: 'hail',
secondary: null,
target: "all",
@@ -8195,7 +8369,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hammer Arm",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
self: {
boosts: {
spe: -1,
@@ -8214,7 +8388,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Happy Hour",
pp: 30,
priority: 0,
- flags: {},
+ flags: {metronome: 1},
onTryHit(target, source) {
this.add('-activate', target, 'move: Happy Hour');
},
@@ -8232,7 +8406,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Harden",
pp: 30,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
def: 1,
},
@@ -8242,6 +8416,26 @@ export const Moves: {[moveid: string]: MoveData} = {
zMove: {boost: {def: 1}},
contestType: "Tough",
},
+ hardpress: {
+ num: 912,
+ accuracy: 100,
+ basePower: 0,
+ basePowerCallback(pokemon, target) {
+ const hp = target.hp;
+ const maxHP = target.maxhp;
+ const bp = Math.floor(Math.floor((100 * (100 * Math.floor(hp * 4096 / maxHP)) + 2048 - 1) / 4096) / 100) || 1;
+ this.debug('BP for ' + hp + '/' + maxHP + " HP: " + bp);
+ return bp;
+ },
+ category: "Physical",
+ name: "Hard Press",
+ pp: 10,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
+ secondary: null,
+ target: "normal",
+ type: "Steel",
+ },
haze: {
num: 114,
accuracy: true,
@@ -8250,7 +8444,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Haze",
pp: 30,
priority: 0,
- flags: {bypasssub: 1},
+ flags: {bypasssub: 1, metronome: 1},
onHitField() {
this.add('-clearallboost');
for (const pokemon of this.getAllActive()) {
@@ -8271,7 +8465,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Headbutt",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -8289,7 +8483,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Head Charge",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
recoil: [1, 4],
secondary: null,
target: "normal",
@@ -8304,7 +8498,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Headlong Rush",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
self: {
boosts: {
def: -1,
@@ -8323,7 +8517,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Head Smash",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
recoil: [1, 2],
secondary: null,
target: "normal",
@@ -8335,11 +8529,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Unobtainable",
name: "Heal Bell",
pp: 5,
priority: 0,
- flags: {snatch: 1, sound: 1, distance: 1, bypasssub: 1},
+ flags: {snatch: 1, sound: 1, distance: 1, bypasssub: 1, metronome: 1},
onHit(target, source) {
this.add('-activate', source, 'move: Heal Bell');
let success = false;
@@ -8364,11 +8557,14 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Heal Block",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
volatileStatus: 'healblock',
condition: {
duration: 5,
durationCallback(target, source, effect) {
+ if (effect?.name === "Psychic Noise") {
+ return 2;
+ }
if (source?.hasAbility('persistent')) {
this.add('-activate', source, 'ability: Persistent', '[move] Heal Block');
return 7;
@@ -8407,7 +8603,9 @@ export const Moves: {[moveid: string]: MoveData} = {
if ((effect?.id === 'zpower') || this.effectState.isZ) return damage;
return false;
},
- onRestart(target, source) {
+ onRestart(target, source, effect) {
+ if (effect?.name === 'Psychic Noise') return;
+
this.add('-fail', target, 'move: Heal Block'); // Succeeds to supress downstream messages
if (!source.moveThisTurnResult) {
source.moveThisTurnResult = false;
@@ -8428,7 +8626,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Healing Wish",
pp: 10,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
onTryHit(source) {
if (!this.canSwitch(source.side)) {
this.attrLastMove('[still]');
@@ -8462,7 +8660,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Heal Order",
pp: 10,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
heal: [1, 2],
secondary: null,
target: "self",
@@ -8478,7 +8676,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Heal Pulse",
pp: 10,
priority: 0,
- flags: {protect: 1, pulse: 1, reflectable: 1, distance: 1, heal: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, distance: 1, heal: 1, allyanim: 1, metronome: 1, pulse: 1},
onHit(target, source) {
let success = false;
if (source.hasAbility('megalauncher')) {
@@ -8510,7 +8708,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Heart Stamp",
pp: 25,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -8527,7 +8725,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Heart Swap",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1},
+ flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1},
onHit(target, source) {
const targetBoosts: SparseBoostsTable = {};
const sourceBoosts: SparseBoostsTable = {};
@@ -8575,7 +8773,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Heat Crash",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1},
onTryHit(target, pokemon, move) {
if (target.volatiles['dynamax']) {
this.add('-fail', pokemon, 'Dynamax');
@@ -8598,7 +8796,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Heat Wave",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, wind: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, wind: 1},
secondary: {
chance: 10,
status: 'brn',
@@ -8633,7 +8831,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Heavy Slam",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1},
onTryHit(target, pokemon, move) {
if (target.volatiles['dynamax']) {
this.add('-fail', pokemon, 'Dynamax');
@@ -8698,7 +8896,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hex",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Ghost",
@@ -8714,7 +8912,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hidden Power",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onModifyType(move, pokemon) {
move.type = pokemon.hpType || 'Dark';
},
@@ -8987,7 +9185,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "High Horsepower",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Ground",
@@ -9001,7 +9199,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "High Jump Kick",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, gravity: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, metronome: 1},
hasCrashDamage: true,
onMoveFail(target, source, move) {
this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick'));
@@ -9016,10 +9214,11 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 40,
category: "Physical",
+ isNonstandard: "Unobtainable",
name: "Hold Back",
pp: 40,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onDamagePriority: -20,
onDamage(damage, target, source, effect) {
if (damage >= target.hp) return target.hp - 1;
@@ -9034,10 +9233,11 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
+ isNonstandard: "Unobtainable",
name: "Hold Hands",
pp: 40,
priority: 0,
- flags: {bypasssub: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1},
+ flags: {bypasssub: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1},
secondary: null,
target: "adjacentAlly",
type: "Normal",
@@ -9052,7 +9252,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hone Claws",
pp: 15,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
atk: 1,
accuracy: 1,
@@ -9071,7 +9271,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Horn Attack",
pp: 25,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -9085,7 +9285,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Horn Drill",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
ohko: true,
secondary: null,
target: "normal",
@@ -9102,7 +9302,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Horn Leech",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, heal: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1},
drain: [1, 2],
secondary: null,
target: "normal",
@@ -9117,7 +9317,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Howl",
pp: 40,
priority: 0,
- flags: {snatch: 1, sound: 1},
+ flags: {snatch: 1, sound: 1, metronome: 1},
boosts: {
atk: 1,
},
@@ -9135,7 +9335,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hurricane",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, distance: 1, wind: 1},
+ flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, wind: 1},
onModifyMove(move, pokemon, target) {
switch (target?.effectiveWeather()) {
case 'raindance':
@@ -9164,7 +9364,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hydro Cannon",
pp: 5,
priority: 0,
- flags: {recharge: 1, protect: 1, mirror: 1},
+ flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1},
self: {
volatileStatus: 'mustrecharge',
},
@@ -9181,7 +9381,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hydro Pump",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Water",
@@ -9195,7 +9395,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hydro Steam",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, defrost: 1},
+ flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1},
// Damage boost in Sun applied in conditions.ts
thawsTarget: true,
secondary: null,
@@ -9226,7 +9426,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hyper Beam",
pp: 5,
priority: 0,
- flags: {recharge: 1, protect: 1, mirror: 1},
+ flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1},
self: {
volatileStatus: 'mustrecharge',
},
@@ -9258,7 +9458,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hyper Fang",
pp: 15,
priority: 0,
- flags: {bite: 1, contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1},
secondary: {
chance: 10,
volatileStatus: 'flinch',
@@ -9275,7 +9475,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hyperspace Fury",
pp: 5,
priority: 0,
- flags: {mirror: 1, bypasssub: 1},
+ flags: {mirror: 1, bypasssub: 1, nosketch: 1},
breaksProtect: true,
onTry(source) {
if (source.species.name === 'Hoopa-Unbound') {
@@ -9324,7 +9524,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hyper Voice",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
secondary: null,
target: "allAdjacentFoes",
type: "Normal",
@@ -9338,7 +9538,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Hypnosis",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
status: 'slp',
secondary: null,
target: "normal",
@@ -9374,14 +9574,11 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ice Ball",
pp: 20,
priority: 0,
- flags: {bullet: 1, contact: 1, protect: 1, mirror: 1, noparentalbond: 1, failinstruct: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1, bullet: 1, noparentalbond: 1},
onModifyMove(move, pokemon, target) {
if (pokemon.volatiles['iceball'] || pokemon.status === 'slp' || !target) return;
pokemon.addVolatile('iceball');
- // @ts-ignore
- // TS thinks pokemon.volatiles['iceball'] doesn't exist because of the condition on the return above
- // but it does exist now because addVolatile created it
- pokemon.volatiles['iceball'].targetSlot = move.sourceEffect ? pokemon.lastMoveTargetLoc : pokemon.getLocOf(target);
+ if (move.sourceEffect) pokemon.lastMoveTargetLoc = pokemon.getLocOf(target);
},
onAfterMove(source, target, move) {
const iceballData = source.volatiles["iceball"];
@@ -9425,7 +9622,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ice Beam",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
status: 'frz',
@@ -9439,7 +9636,6 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 90,
basePower: 140,
category: "Special",
- isNonstandard: "Past",
name: "Ice Burn",
pp: 5,
priority: 0,
@@ -9471,7 +9667,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ice Fang",
pp: 15,
priority: 0,
- flags: {bite: 1, contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1},
secondaries: [
{
chance: 10,
@@ -9493,7 +9689,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ice Hammer",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
self: {
boosts: {
spe: -1,
@@ -9512,7 +9708,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ice Punch",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
secondary: {
chance: 10,
status: 'frz',
@@ -9529,7 +9725,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ice Shard",
pp: 30,
priority: 1,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Ice",
@@ -9543,12 +9739,16 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ice Spinner",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
- onHit() {
- this.field.clearTerrain();
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
+ onAfterHit(target, source) {
+ if (source.hp) {
+ this.field.clearTerrain();
+ }
},
- onAfterSubDamage() {
- this.field.clearTerrain();
+ onAfterSubDamage(damage, target, source) {
+ if (source.hp) {
+ this.field.clearTerrain();
+ }
},
secondary: null,
target: "normal",
@@ -9562,7 +9762,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Icicle Crash",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -9579,7 +9779,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Icicle Spear",
pp: 30,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -9596,7 +9796,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Icy Wind",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, wind: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, wind: 1},
secondary: {
chance: 100,
boosts: {
@@ -9615,7 +9815,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Imprison",
pp: 10,
priority: 0,
- flags: {snatch: 1, bypasssub: 1, mustpressure: 1},
+ flags: {snatch: 1, bypasssub: 1, metronome: 1, mustpressure: 1},
volatileStatus: 'imprison',
condition: {
noCopy: true,
@@ -9651,7 +9851,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Incinerate",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onHit(pokemon, source) {
const item = pokemon.getItem();
if ((item.isBerry || item.isGem) && pokemon.takeItem(source)) {
@@ -9672,11 +9872,10 @@ export const Moves: {[moveid: string]: MoveData} = {
return move.basePower;
},
category: "Special",
- isNonstandard: "Unobtainable",
name: "Infernal Parade",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
status: 'brn',
@@ -9692,7 +9891,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Inferno",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
status: 'brn',
@@ -9725,7 +9924,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Infestation",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
volatileStatus: 'partiallytrapped',
secondary: null,
target: "normal",
@@ -9740,7 +9939,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ingrain",
pp: 20,
priority: 0,
- flags: {snatch: 1, nonsky: 1},
+ flags: {snatch: 1, nonsky: 1, metronome: 1},
volatileStatus: 'ingrain',
condition: {
onStart(pokemon) {
@@ -9809,7 +10008,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ion Deluge",
pp: 25,
priority: 1,
- flags: {},
+ flags: {metronome: 1},
pseudoWeather: 'iondeluge',
condition: {
duration: 1,
@@ -9839,7 +10038,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Iron Defense",
pp: 15,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
def: 2,
},
@@ -9857,7 +10056,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Iron Head",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -9874,7 +10073,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Iron Tail",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
boosts: {
@@ -9885,6 +10084,38 @@ export const Moves: {[moveid: string]: MoveData} = {
type: "Steel",
contestType: "Cool",
},
+ ivycudgel: {
+ num: 904,
+ accuracy: 100,
+ basePower: 100,
+ category: "Physical",
+ name: "Ivy Cudgel",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, metronome: 1},
+ critRatio: 2,
+ onPrepareHit(target, source, move) {
+ if (move.type !== "Grass") {
+ this.attrLastMove('[anim] Ivy Cudgel ' + move.type);
+ }
+ },
+ onModifyType(move, pokemon) {
+ switch (pokemon.species.name) {
+ case 'Ogerpon-Wellspring': case 'Ogerpon-Wellspring-Tera':
+ move.type = 'Water';
+ break;
+ case 'Ogerpon-Hearthflame': case 'Ogerpon-Hearthflame-Tera':
+ move.type = 'Fire';
+ break;
+ case 'Ogerpon-Cornerstone': case 'Ogerpon-Cornerstone-Tera':
+ move.type = 'Rock';
+ break;
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Grass",
+ },
jawlock: {
num: 746,
accuracy: 100,
@@ -9893,7 +10124,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Jaw Lock",
pp: 10,
priority: 0,
- flags: {bite: 1, contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1},
onHit(target, source, move) {
source.addVolatile('trapped', target, move, 'trapper');
target.addVolatile('trapped', source, move, 'trapper');
@@ -9912,7 +10143,6 @@ export const Moves: {[moveid: string]: MoveData} = {
priority: 1,
flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
secondary: null,
- hasSheerForce: true,
target: "normal",
type: "Water",
contestType: "Cool",
@@ -9925,7 +10155,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Judgment",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onModifyType(move, pokemon) {
if (pokemon.ignoringItem()) return;
const item = pokemon.getItem();
@@ -9947,7 +10177,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Jump Kick",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, gravity: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, metronome: 1},
hasCrashDamage: true,
onMoveFail(target, source, move) {
this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('Jump Kick'));
@@ -9983,7 +10213,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Karate Chop",
pp: 25,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -9999,7 +10229,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Kinesis",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
boosts: {
accuracy: -1,
},
@@ -10076,7 +10306,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Knock Off",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onBasePower(basePower, source, target, move) {
const item = target.getItem();
if (!this.singleEvent('TakeItem', item, target.itemState, target, target, move, item)) return;
@@ -10105,7 +10335,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Kowtow Cleave",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
secondary: null,
target: "normal",
type: "Dark",
@@ -10119,7 +10349,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Land's Wrath",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, nonsky: 1},
+ flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1},
secondary: null,
target: "allAdjacentFoes",
type: "Ground",
@@ -10135,7 +10365,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Laser Focus",
pp: 30,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
volatileStatus: 'laserfocus',
condition: {
duration: 2,
@@ -10171,7 +10401,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Lash Out",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onBasePower(basePower, source) {
if (source.statsLoweredThisTurn) {
this.debug('lashout buff');
@@ -10190,7 +10420,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Last Resort",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onTry(source) {
if (source.moveSlots.length < 2) return false; // Last Resort fails unless the user knows at least 2 moves
let hasLastResort = false; // User must actually have Last Resort for it to succeed
@@ -10219,7 +10449,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Last Respects",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Ghost",
@@ -10232,7 +10462,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Lava Plume",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
status: 'brn',
@@ -10249,7 +10479,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Leafage",
pp: 40,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Grass",
@@ -10263,7 +10493,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Leaf Blade",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -10278,7 +10508,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Leaf Storm",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
self: {
boosts: {
spa: -2,
@@ -10298,7 +10528,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Leaf Tornado",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 50,
boosts: {
@@ -10317,7 +10547,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Leech Life",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, heal: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1},
drain: [1, 2],
secondary: null,
target: "normal",
@@ -10332,7 +10562,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Leech Seed",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
volatileStatus: 'leechseed',
condition: {
onStart(target) {
@@ -10368,7 +10598,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Leer",
pp: 30,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
boosts: {
def: -1,
},
@@ -10402,7 +10632,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Lick",
pp: 30,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
status: 'par',
@@ -10449,7 +10679,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Light Screen",
pp: 30,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
sideCondition: 'lightscreen',
condition: {
duration: 5,
@@ -10511,7 +10741,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Liquidation",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 20,
boosts: {
@@ -10530,7 +10760,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Lock-On",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onTryHit(target, source) {
if (source.volatiles['lockon']) return false;
},
@@ -10564,7 +10794,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Lovely Kiss",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
status: 'slp',
secondary: null,
target: "normal",
@@ -10599,7 +10829,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Low Kick",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onTryHit(target, pokemon, move) {
if (target.volatiles['dynamax']) {
this.add('-fail', pokemon, 'Dynamax');
@@ -10621,7 +10851,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Low Sweep",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -10641,7 +10871,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Lucky Chant",
pp: 30,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
sideCondition: 'luckychant',
condition: {
duration: 5,
@@ -10669,7 +10899,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Lumina Crash",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -10684,11 +10914,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Unobtainable",
name: "Lunar Blessing",
pp: 5,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
onHit(pokemon) {
const success = !!this.heal(this.modify(pokemon.maxhp, 0.25));
return pokemon.cureStatus() || success;
@@ -10705,7 +10934,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Lunar Dance",
pp: 10,
priority: 0,
- flags: {snatch: 1, heal: 1, dance: 1},
+ flags: {snatch: 1, dance: 1, heal: 1, metronome: 1},
onTryHit(source) {
if (!this.canSwitch(source.side)) {
this.attrLastMove('[still]');
@@ -10747,7 +10976,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Lunge",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -10761,13 +10990,12 @@ export const Moves: {[moveid: string]: MoveData} = {
lusterpurge: {
num: 295,
accuracy: 100,
- basePower: 70,
+ basePower: 95,
category: "Special",
- isNonstandard: "Past",
name: "Luster Purge",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 50,
boosts: {
@@ -10786,7 +11014,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mach Punch",
pp: 30,
priority: 1,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Fighting",
@@ -10800,7 +11028,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Magical Leaf",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Grass",
@@ -10816,7 +11044,8 @@ export const Moves: {[moveid: string]: MoveData} = {
pp: 10,
priority: 0,
flags: {
- protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1,
+ protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1,
+ failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1,
},
secondary: {
chance: 30,
@@ -10834,7 +11063,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Magic Coat",
pp: 15,
priority: 4,
- flags: {},
+ flags: {metronome: 1},
volatileStatus: 'magiccoat',
condition: {
duration: 1,
@@ -10852,7 +11081,7 @@ export const Moves: {[moveid: string]: MoveData} = {
const newMove = this.dex.getActiveMove(move.id);
newMove.hasBounced = true;
newMove.pranksterBoosted = this.effectState.pranksterBoosted;
- this.actions.useMove(newMove, target, source);
+ this.actions.useMove(newMove, target, {target: source});
return null;
},
onAllyTryHitSide(target, source, move) {
@@ -10862,7 +11091,7 @@ export const Moves: {[moveid: string]: MoveData} = {
const newMove = this.dex.getActiveMove(move.id);
newMove.hasBounced = true;
newMove.pranksterBoosted = false;
- this.actions.useMove(newMove, this.effectState.target, source);
+ this.actions.useMove(newMove, this.effectState.target, {target: source});
return null;
},
},
@@ -10880,7 +11109,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Magic Powder",
pp: 20,
priority: 0,
- flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1, powder: 1},
onHit(target) {
if (target.getTypes().join() === 'Psychic' || !target.setType('Psychic')) return false;
this.add('-start', target, 'typechange', 'Psychic');
@@ -10897,7 +11126,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Magic Room",
pp: 10,
priority: 0,
- flags: {mirror: 1},
+ flags: {mirror: 1, metronome: 1},
pseudoWeather: 'magicroom',
condition: {
duration: 5,
@@ -10942,7 +11171,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Magma Storm",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
volatileStatus: 'partiallytrapped',
secondary: null,
target: "normal",
@@ -10958,7 +11187,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Magnet Bomb",
pp: 20,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: null,
target: "normal",
type: "Steel",
@@ -10972,7 +11201,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Magnetic Flux",
pp: 20,
priority: 0,
- flags: {snatch: 1, distance: 1, bypasssub: 1},
+ flags: {snatch: 1, distance: 1, bypasssub: 1, metronome: 1},
onHitSide(side, source, move) {
const targets = side.allies().filter(ally => (
ally.hasAbility(['plus', 'minus']) &&
@@ -11000,7 +11229,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Magnet Rise",
pp: 10,
priority: 0,
- flags: {snatch: 1, gravity: 1},
+ flags: {snatch: 1, gravity: 1, metronome: 1},
volatileStatus: 'magnetrise',
onTry(source, target, move) {
if (target.volatiles['smackdown'] || target.volatiles['ingrain']) return false;
@@ -11039,7 +11268,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Magnitude",
pp: 30,
priority: 0,
- flags: {protect: 1, mirror: 1, nonsky: 1},
+ flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1},
onModifyMove(move, pokemon) {
const i = this.random(100);
if (i < 5) {
@@ -11110,6 +11339,22 @@ export const Moves: {[moveid: string]: MoveData} = {
type: "Dark",
contestType: "Cool",
},
+ malignantchain: {
+ num: 919,
+ accuracy: 100,
+ basePower: 100,
+ category: "Special",
+ name: "Malignant Chain",
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, metronome: 1},
+ secondary: {
+ chance: 50,
+ status: 'tox',
+ },
+ target: "normal",
+ type: "Poison",
+ },
matblock: {
num: 561,
accuracy: true,
@@ -11159,6 +11404,24 @@ export const Moves: {[moveid: string]: MoveData} = {
zMove: {boost: {def: 1}},
contestType: "Cool",
},
+ matchagotcha: {
+ num: 902,
+ accuracy: 90,
+ basePower: 80,
+ category: "Special",
+ name: "Matcha Gotcha",
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, defrost: 1, heal: 1, metronome: 1},
+ drain: [1, 2],
+ thawsTarget: true,
+ secondary: {
+ chance: 20,
+ status: 'brn',
+ },
+ target: "allAdjacentFoes",
+ type: "Grass",
+ },
maxairstream: {
num: 766,
accuracy: true,
@@ -11615,7 +11878,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mean Look",
pp: 5,
priority: 0,
- flags: {reflectable: 1, mirror: 1},
+ flags: {reflectable: 1, mirror: 1, metronome: 1},
onHit(target, source, move) {
return target.addVolatile('trapped', source, move, 'trapper');
},
@@ -11634,7 +11897,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Meditate",
pp: 40,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
atk: 1,
},
@@ -11655,7 +11918,8 @@ export const Moves: {[moveid: string]: MoveData} = {
priority: 0,
flags: {
protect: 1, bypasssub: 1,
- failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1,
+ failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1,
+ failcopycat: 1, failmimic: 1, failinstruct: 1,
},
onTryHit(target, pokemon) {
const action = this.queue.willMove(target);
@@ -11666,7 +11930,7 @@ export const Moves: {[moveid: string]: MoveData} = {
if (move.category === 'Status' || move.flags['failmefirst']) return false;
pokemon.addVolatile('mefirst');
- this.actions.useMove(move, pokemon, target);
+ this.actions.useMove(move, pokemon, {target});
return null;
},
condition: {
@@ -11676,6 +11940,7 @@ export const Moves: {[moveid: string]: MoveData} = {
return this.chainModify(1.5);
},
},
+ callsMove: true,
secondary: null,
target: "adjacentFoe",
type: "Normal",
@@ -11690,7 +11955,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mega Drain",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, heal: 1},
+ flags: {protect: 1, mirror: 1, heal: 1, metronome: 1},
drain: [1, 2],
secondary: null,
target: "normal",
@@ -11706,7 +11971,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Megahorn",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Bug",
@@ -11720,7 +11985,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mega Kick",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -11734,7 +11999,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mega Punch",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -11748,7 +12013,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Memento",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
boosts: {
atk: -2,
spa: -2,
@@ -11792,7 +12057,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Metal Burst",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, failmefirst: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, failmefirst: 1},
onTry(source) {
const lastDamagedBy = source.getLastDamagedBy(true);
if (lastDamagedBy === undefined || !lastDamagedBy.thisTurn) return false;
@@ -11816,7 +12081,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Metal Claw",
pp: 35,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
self: {
@@ -11837,7 +12102,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Metal Sound",
pp: 40,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, metronome: 1},
boosts: {
spd: -2,
},
@@ -11856,7 +12121,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Meteor Assault",
pp: 5,
priority: 0,
- flags: {protect: 1, recharge: 1, mirror: 1, failinstruct: 1},
+ flags: {recharge: 1, protect: 1, mirror: 1, failinstruct: 1},
self: {
volatileStatus: 'mustrecharge',
},
@@ -11872,7 +12137,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Meteor Beam",
pp: 10,
priority: 0,
- flags: {charge: 1, protect: 1, mirror: 1},
+ flags: {charge: 1, protect: 1, mirror: 1, metronome: 1},
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
return;
@@ -11897,7 +12162,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Meteor Mash",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
secondary: {
chance: 20,
self: {
@@ -11918,16 +12183,12 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Metronome",
pp: 10,
priority: 0,
- flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1},
- noMetronome: [
- "After You", "Apple Acid", "Armor Cannon", "Assist", "Astral Barrage", "Aura Wheel", "Baneful Bunker", "Beak Blast", "Behemoth Bash", "Behemoth Blade", "Belch", "Bestow", "Blazing Torque", "Body Press", "Branch Poke", "Breaking Swipe", "Celebrate", "Chatter", "Chilling Water", "Chilly Reception", "Clangorous Soul", "Collision Course", "Combat Torque", "Comeuppance", "Copycat", "Counter", "Covet", "Crafty Shield", "Decorate", "Destiny Bond", "Detect", "Diamond Storm", "Doodle", "Double Iron Bash", "Double Shock", "Dragon Ascent", "Dragon Energy", "Drum Beating", "Dynamax Cannon", "Electro Drift", "Endure", "Eternabeam", "False Surrender", "Feint", "Fiery Wrath", "Fillet Away", "Fleur Cannon", "Focus Punch", "Follow Me", "Freeze Shock", "Freezing Glare", "Glacial Lance", "Grav Apple", "Helping Hand", "Hold Hands", "Hyper Drill", "Hyperspace Fury", "Hyperspace Hole", "Ice Burn", "Instruct", "Jet Punch", "Jungle Healing", "King's Shield", "Life Dew", "Light of Ruin", "Magical Torque", "Make It Rain", "Mat Block", "Me First", "Meteor Assault", "Metronome", "Mimic", "Mind Blown", "Mirror Coat", "Mirror Move", "Moongeist Beam", "Nature Power", "Nature's Madness", "Noxious Torque", "Obstruct", "Order Up", "Origin Pulse", "Overdrive", "Photon Geyser", "Plasma Fists", "Population Bomb", "Pounce", "Power Shift", "Precipice Blades", "Protect", "Pyro Ball", "Quash", "Quick Guard", "Rage Fist", "Rage Powder", "Raging Bull", "Raging Fury", "Relic Song", "Revival Blessing", "Ruination", "Salt Cure", "Secret Sword", "Shed Tail", "Shell Trap", "Silk Trap", "Sketch", "Sleep Talk", "Snap Trap", "Snarl", "Snatch", "Snore", "Snowscape", "Spectral Thief", "Spicy Extract", "Spiky Shield", "Spirit Break", "Spotlight", "Springtide Storm", "Steam Eruption", "Steel Beam", "Strange Steam", "Struggle", "Sunsteel Strike", "Surging Strikes", "Switcheroo", "Techno Blast", "Thief", "Thousand Arrows", "Thousand Waves", "Thunder Cage", "Thunderous Kick", "Tidy Up", "Trailblaze", "Transform", "Trick", "Twin Beam", "V-create", "Wicked Blow", "Wicked Torque", "Wide Guard",
- ],
+ flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1},
onHit(target, source, effect) {
const moves = this.dex.moves.all().filter(move => (
(![2, 4].includes(this.gen) || !source.moves.includes(move.id)) &&
- !move.realMove && !move.isZ && !move.isMax &&
(!move.isNonstandard || move.isNonstandard === 'Unobtainable') &&
- !effect.noMetronome!.includes(move.name)
+ move.flags['metronome']
));
let randomMove = '';
if (moves.length) {
@@ -11938,11 +12199,25 @@ export const Moves: {[moveid: string]: MoveData} = {
source.side.lastSelectedMove = this.toID(randomMove);
this.actions.useMove(randomMove, target);
},
+ callsMove: true,
secondary: null,
target: "self",
type: "Normal",
contestType: "Cute",
},
+ mightycleave: {
+ num: 910,
+ accuracy: 100,
+ basePower: 95,
+ category: "Physical",
+ name: "Mighty Cleave",
+ pp: 5,
+ priority: 0,
+ flags: {contact: 1, mirror: 1, metronome: 1, slicing: 1},
+ secondary: null,
+ target: "normal",
+ type: "Rock",
+ },
milkdrink: {
num: 208,
accuracy: true,
@@ -11951,7 +12226,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Milk Drink",
pp: 5,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
heal: [1, 2],
secondary: null,
target: "self",
@@ -11969,7 +12244,7 @@ export const Moves: {[moveid: string]: MoveData} = {
priority: 0,
flags: {
protect: 1, bypasssub: 1, allyanim: 1,
- failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1,
+ failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1,
},
onHit(target, source) {
const move = target.lastMove;
@@ -12032,7 +12307,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mind Reader",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onTryHit(target, source) {
if (source.volatiles['lockon']) return false;
},
@@ -12054,14 +12329,14 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Minimize",
pp: 10,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
volatileStatus: 'minimize',
condition: {
noCopy: true,
onRestart: () => null,
onSourceModifyDamage(damage, source, target, move) {
const boostedMoves = [
- 'stomp', 'steamroller', 'bodyslam', 'flyingpress', 'dragonrush', 'heatcrash', 'heavyslam', 'maliciousmoonsault',
+ 'stomp', 'steamroller', 'bodyslam', 'flyingpress', 'dragonrush', 'heatcrash', 'heavyslam', 'maliciousmoonsault', 'supercellslam',
];
if (boostedMoves.includes(move.id)) {
return this.chainModify(2);
@@ -12069,7 +12344,7 @@ export const Moves: {[moveid: string]: MoveData} = {
},
onAccuracy(accuracy, target, source, move) {
const boostedMoves = [
- 'stomp', 'steamroller', 'bodyslam', 'flyingpress', 'dragonrush', 'heatcrash', 'heavyslam', 'maliciousmoonsault',
+ 'stomp', 'steamroller', 'bodyslam', 'flyingpress', 'dragonrush', 'heatcrash', 'heavyslam', 'maliciousmoonsault', 'supercellslam',
];
if (boostedMoves.includes(move.id)) {
return true;
@@ -12095,7 +12370,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Miracle Eye",
pp: 40,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1},
volatileStatus: 'miracleeye',
onTryHit(target) {
if (target.volatiles['foresight']) return false;
@@ -12174,15 +12449,16 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mirror Move",
pp: 20,
priority: 0,
- flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1},
+ flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1},
onTryHit(target, pokemon) {
const move = target.lastMove;
if (!move?.flags['mirror'] || move.isZ || move.isMax) {
return false;
}
- this.actions.useMove(move.id, pokemon, target);
+ this.actions.useMove(move.id, pokemon, {target});
return null;
},
+ callsMove: true,
secondary: null,
target: "normal",
type: "Flying",
@@ -12198,7 +12474,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mirror Shot",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
boosts: {
@@ -12217,7 +12493,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mist",
pp: 30,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
sideCondition: 'mist',
condition: {
duration: 5,
@@ -12255,13 +12531,12 @@ export const Moves: {[moveid: string]: MoveData} = {
mistball: {
num: 296,
accuracy: 100,
- basePower: 70,
+ basePower: 95,
category: "Special",
- isNonstandard: "Past",
name: "Mist Ball",
pp: 5,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: {
chance: 50,
boosts: {
@@ -12280,7 +12555,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Misty Explosion",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
selfdestruct: "always",
onBasePower(basePower, source) {
if (this.field.isTerrain('mistyterrain') && source.isGrounded()) {
@@ -12300,7 +12575,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Misty Terrain",
pp: 10,
priority: 0,
- flags: {nonsky: 1},
+ flags: {nonsky: 1, metronome: 1},
terrain: 'mistyterrain',
condition: {
duration: 5,
@@ -12358,7 +12633,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Moonblast",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
boosts: {
@@ -12374,7 +12649,6 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 100,
category: "Special",
- isNonstandard: "Past",
name: "Moongeist Beam",
pp: 5,
priority: 0,
@@ -12393,7 +12667,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Moonlight",
pp: 5,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
onHit(pokemon) {
let factor = 0.5;
switch (pokemon.effectiveWeather()) {
@@ -12430,7 +12704,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Morning Sun",
pp: 5,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
onHit(pokemon) {
let factor = 0.5;
switch (pokemon.effectiveWeather()) {
@@ -12467,33 +12741,37 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mortal Spin",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
- onAfterHit(target, pokemon) {
- if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
- this.add('-end', pokemon, 'Leech Seed', '[from] move: Mortal Spin', '[of] ' + pokemon);
- }
- const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
- for (const condition of sideConditions) {
- if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
- this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Mortal Spin', '[of] ' + pokemon);
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
+ onAfterHit(target, pokemon, move) {
+ if (!move.hasSheerForce) {
+ if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
+ this.add('-end', pokemon, 'Leech Seed', '[from] move: Mortal Spin', '[of] ' + pokemon);
+ }
+ const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
+ for (const condition of sideConditions) {
+ if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
+ this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Mortal Spin', '[of] ' + pokemon);
+ }
+ }
+ if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
+ pokemon.removeVolatile('partiallytrapped');
}
- }
- if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
- pokemon.removeVolatile('partiallytrapped');
}
},
- onAfterSubDamage(damage, target, pokemon) {
- if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
- this.add('-end', pokemon, 'Leech Seed', '[from] move: Mortal Spin', '[of] ' + pokemon);
- }
- const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
- for (const condition of sideConditions) {
- if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
- this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Mortal Spin', '[of] ' + pokemon);
+ onAfterSubDamage(damage, target, pokemon, move) {
+ if (!move.hasSheerForce) {
+ if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
+ this.add('-end', pokemon, 'Leech Seed', '[from] move: Mortal Spin', '[of] ' + pokemon);
+ }
+ const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
+ for (const condition of sideConditions) {
+ if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
+ this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Mortal Spin', '[of] ' + pokemon);
+ }
+ }
+ if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
+ pokemon.removeVolatile('partiallytrapped');
}
- }
- if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
- pokemon.removeVolatile('partiallytrapped');
}
},
secondary: {
@@ -12508,11 +12786,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 85,
basePower: 100,
category: "Physical",
- isNonstandard: "Unobtainable",
name: "Mountain Gale",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -12529,7 +12806,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mud Bomb",
pp: 10,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: {
chance: 30,
boosts: {
@@ -12548,7 +12825,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mud Shot",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -12567,7 +12844,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mud-Slap",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -12587,7 +12864,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mud Sport",
pp: 15,
priority: 0,
- flags: {nonsky: 1},
+ flags: {nonsky: 1, metronome: 1},
pseudoWeather: 'mudsport',
condition: {
duration: 5,
@@ -12621,7 +12898,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Muddy Water",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, nonsky: 1},
+ flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1},
secondary: {
chance: 30,
boosts: {
@@ -12641,7 +12918,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Multi-Attack",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onModifyType(move, pokemon) {
if (pokemon.ignoringItem()) return;
move.type = this.runEvent('Memory', pokemon, null, move, 'Normal');
@@ -12661,7 +12938,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Mystical Fire",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -12677,11 +12954,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 90,
basePower: 70,
category: "Special",
- isNonstandard: "Unobtainable",
name: "Mystical Power",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
self: {
@@ -12701,7 +12977,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Nasty Plot",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
spa: 2,
},
@@ -12720,7 +12996,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Natural Gift",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onModifyType(move, pokemon) {
if (pokemon.ignoringItem()) return;
const item = pokemon.getItem();
@@ -12754,7 +13030,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Nature Power",
pp: 20,
priority: 0,
- flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1},
+ flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1},
onTryHit(target, pokemon) {
let move = 'triattack';
if (this.field.isTerrain('electricterrain')) {
@@ -12766,9 +13042,10 @@ export const Moves: {[moveid: string]: MoveData} = {
} else if (this.field.isTerrain('psychicterrain')) {
move = 'psychic';
}
- this.actions.useMove(move, pokemon, target);
+ this.actions.useMove(move, pokemon, {target});
return null;
},
+ callsMove: true,
secondary: null,
target: "normal",
type: "Normal",
@@ -12801,7 +13078,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Needle Arm",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -12834,7 +13111,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Night Daze",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 40,
boosts: {
@@ -12854,7 +13131,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Nightmare",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
volatileStatus: 'nightmare',
condition: {
noCopy: true,
@@ -12884,7 +13161,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Night Shade",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Ghost",
@@ -12898,7 +13175,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Night Slash",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -12913,7 +13190,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Noble Roar",
pp: 30,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
boosts: {
atk: -1,
spa: -1,
@@ -12932,7 +13209,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "No Retreat",
pp: 5,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
volatileStatus: 'noretreat',
onTry(source, target, move) {
if (source.volatiles['noretreat']) return false;
@@ -12969,7 +13246,8 @@ export const Moves: {[moveid: string]: MoveData} = {
pp: 10,
priority: 0,
flags: {
- protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1,
+ protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1,
+ failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1,
},
secondary: {
chance: 30,
@@ -12986,7 +13264,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Nuzzle",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
status: 'par',
@@ -13004,7 +13282,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Oblivion Wing",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, distance: 1, heal: 1},
+ flags: {protect: 1, mirror: 1, distance: 1, heal: 1, metronome: 1},
drain: [3, 4],
secondary: null,
target: "any",
@@ -13093,7 +13371,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Octazooka",
pp: 10,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: {
chance: 50,
boosts: {
@@ -13113,7 +13391,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Octolock",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onTryImmunity(target) {
return this.dex.getImmunity('trapped', target);
},
@@ -13149,7 +13427,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Odor Sleuth",
pp: 40,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1},
volatileStatus: 'foresight',
onTryHit(target) {
if (target.volatiles['miracleeye']) return false;
@@ -13169,7 +13447,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Ominous Wind",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
self: {
@@ -13224,7 +13502,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Origin Pulse",
pp: 10,
priority: 0,
- flags: {protect: 1, pulse: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, pulse: 1},
target: "allAdjacentFoes",
type: "Water",
contestType: "Beautiful",
@@ -13237,7 +13515,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Outrage",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, failinstruct: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1},
self: {
volatileStatus: 'lockedmove',
},
@@ -13272,7 +13550,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Overheat",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
self: {
boosts: {
spa: -2,
@@ -13291,7 +13569,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Pain Split",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1},
onHit(target, pokemon) {
const targetHP = target.getUndynamaxedHP();
const averagehp = Math.floor((targetHP + pokemon.hp) / 2) || 1;
@@ -13307,26 +13585,6 @@ export const Moves: {[moveid: string]: MoveData} = {
zMove: {boost: {def: 1}},
contestType: "Clever",
},
- paleowave: {
- num: 0,
- accuracy: 100,
- basePower: 85,
- category: "Special",
- isNonstandard: "CAP",
- name: "Paleo Wave",
- pp: 15,
- priority: 0,
- flags: {protect: 1, mirror: 1},
- secondary: {
- chance: 20,
- boosts: {
- atk: -1,
- },
- },
- target: "normal",
- type: "Rock",
- contestType: "Beautiful",
- },
paraboliccharge: {
num: 570,
accuracy: 100,
@@ -13335,7 +13593,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Parabolic Charge",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1, heal: 1},
+ flags: {protect: 1, mirror: 1, heal: 1, metronome: 1},
drain: [1, 2],
secondary: null,
target: "allAdjacent",
@@ -13350,7 +13608,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Parting Shot",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
onHit(target, source, move) {
const success = this.boost({atk: -1, spa: -1}, target, source);
if (!success && !target.hasAbility('mirrorarmor')) {
@@ -13380,7 +13638,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Payback",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Dark",
@@ -13394,7 +13652,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Pay Day",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -13408,7 +13666,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Peck",
pp: 35,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, distance: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1},
secondary: null,
target: "any",
type: "Flying",
@@ -13422,7 +13680,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Perish Song",
pp: 5,
priority: 0,
- flags: {sound: 1, distance: 1, bypasssub: 1},
+ flags: {sound: 1, distance: 1, bypasssub: 1, metronome: 1},
onHitField(target, source, move) {
let result = false;
let message = false;
@@ -13468,7 +13726,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Petal Blizzard",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, wind: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, wind: 1},
secondary: null,
target: "allAdjacent",
type: "Grass",
@@ -13482,7 +13740,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Petal Dance",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, dance: 1, failinstruct: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, dance: 1, metronome: 1, failinstruct: 1},
self: {
volatileStatus: 'lockedmove',
},
@@ -13504,7 +13762,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Phantom Force",
pp: 10,
priority: 0,
- flags: {contact: 1, charge: 1, mirror: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1},
+ flags: {contact: 1, charge: 1, mirror: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1},
breaksProtect: true,
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
@@ -13531,7 +13789,6 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 100,
category: "Special",
- isNonstandard: "Past",
name: "Photon Geyser",
pp: 5,
priority: 0,
@@ -13573,7 +13830,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Pin Missile",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -13606,7 +13863,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Play Nice",
pp: 20,
priority: 0,
- flags: {reflectable: 1, mirror: 1, bypasssub: 1},
+ flags: {reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1},
boosts: {
atk: -1,
},
@@ -13624,7 +13881,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Play Rough",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
boosts: {
@@ -13643,7 +13900,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Pluck",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, distance: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1},
onHit(target, source) {
const item = target.getItem();
if (source.hp && item.isBerry && target.takeItem(source)) {
@@ -13668,7 +13925,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Poison Fang",
pp: 15,
priority: 0,
- flags: {bite: 1, contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1},
secondary: {
chance: 50,
status: 'tox',
@@ -13685,7 +13942,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Poison Gas",
pp: 40,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
status: 'psn',
secondary: null,
target: "allAdjacentFoes",
@@ -13701,7 +13958,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Poison Jab",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
status: 'psn',
@@ -13718,7 +13975,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Poison Powder",
pp: 35,
priority: 0,
- flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1},
status: 'psn',
secondary: null,
target: "normal",
@@ -13734,7 +13991,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Poison Sting",
pp: 35,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
status: 'psn',
@@ -13751,7 +14008,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Poison Tail",
pp: 25,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
secondary: {
chance: 10,
@@ -13769,17 +14026,30 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Pollen Puff",
pp: 15,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1, bullet: 1},
onTryHit(target, source, move) {
if (source.isAlly(target)) {
move.basePower = 0;
move.infiltrates = true;
}
},
- onHit(target, source) {
+ onTryMove(source, target, move) {
+ if (source.isAlly(target) && source.volatiles['healblock']) {
+ this.attrLastMove('[still]');
+ this.add('cant', source, 'move: Heal Block', move);
+ return false;
+ }
+ },
+ onHit(target, source, move) {
if (source.isAlly(target)) {
if (!this.heal(Math.floor(target.baseMaxhp * 0.5))) {
- this.add('-immune', target);
+ if (target.volatiles['healblock'] && target.hp !== target.maxhp) {
+ this.attrLastMove('[still]');
+ // Wrong error message, correct one not supported yet
+ this.add('cant', source, 'move: Heal Block', move);
+ } else {
+ this.add('-immune', target);
+ }
return this.NOT_FAIL;
}
}
@@ -13797,7 +14067,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Poltergeist",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onTry(source, target) {
return !!target.item;
},
@@ -13850,7 +14120,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Pound",
pp: 35,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -13865,7 +14135,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Powder",
pp: 20,
priority: 1,
- flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1, powder: 1},
volatileStatus: 'powder',
condition: {
duration: 1,
@@ -13896,7 +14166,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Powder Snow",
pp: 25,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
status: 'frz',
@@ -13913,7 +14183,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Power Gem",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Rock",
@@ -13933,23 +14203,23 @@ export const Moves: {[moveid: string]: MoveData} = {
condition: {
onStart(pokemon) {
this.add('-start', pokemon, 'Power Shift');
- [pokemon.storedStats.atk, pokemon.storedStats.spa,
- pokemon.storedStats.def, pokemon.storedStats.spd] =
- [pokemon.storedStats.def, pokemon.storedStats.spd,
- pokemon.storedStats.atk, pokemon.storedStats.spa];
+ const newatk = pokemon.storedStats.def;
+ const newdef = pokemon.storedStats.atk;
+ pokemon.storedStats.atk = newatk;
+ pokemon.storedStats.def = newdef;
},
onCopy(pokemon) {
- [pokemon.storedStats.atk, pokemon.storedStats.spa,
- pokemon.storedStats.def, pokemon.storedStats.spd] =
- [pokemon.storedStats.def, pokemon.storedStats.spd,
- pokemon.storedStats.atk, pokemon.storedStats.spa];
+ const newatk = pokemon.storedStats.def;
+ const newdef = pokemon.storedStats.atk;
+ pokemon.storedStats.atk = newatk;
+ pokemon.storedStats.def = newdef;
},
onEnd(pokemon) {
this.add('-end', pokemon, 'Power Shift');
- [pokemon.storedStats.atk, pokemon.storedStats.spa,
- pokemon.storedStats.def, pokemon.storedStats.spd] =
- [pokemon.storedStats.def, pokemon.storedStats.spd,
- pokemon.storedStats.atk, pokemon.storedStats.spa];
+ const newatk = pokemon.storedStats.def;
+ const newdef = pokemon.storedStats.atk;
+ pokemon.storedStats.atk = newatk;
+ pokemon.storedStats.def = newdef;
},
onRestart(pokemon) {
pokemon.removeVolatile('Power Shift');
@@ -13967,7 +14237,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Power Split",
pp: 10,
priority: 0,
- flags: {protect: 1, allyanim: 1},
+ flags: {protect: 1, allyanim: 1, metronome: 1},
onHit(target, source) {
const newatk = Math.floor((target.storedStats.atk + source.storedStats.atk) / 2);
target.storedStats.atk = newatk;
@@ -13991,7 +14261,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Power Swap",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1},
+ flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1},
onHit(target, source) {
const targetBoosts: SparseBoostsTable = {};
const sourceBoosts: SparseBoostsTable = {};
@@ -14021,7 +14291,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Power Trick",
pp: 10,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
volatileStatus: 'powertrick',
condition: {
onStart(pokemon) {
@@ -14067,7 +14337,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Power Trip",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Dark",
@@ -14084,7 +14354,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Power-Up Punch",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
secondary: {
chance: 100,
self: {
@@ -14105,7 +14375,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Power Whip",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Grass",
@@ -14132,7 +14402,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Present",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onModifyMove(move, pokemon, target) {
const rand = this.random(10);
if (rand < 2) {
@@ -14156,11 +14426,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 160,
category: "Special",
- isNonstandard: "Past",
name: "Prismatic Laser",
pp: 10,
priority: 0,
- flags: {recharge: 1, protect: 1, mirror: 1},
+ flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1},
self: {
volatileStatus: 'mustrecharge',
},
@@ -14227,7 +14496,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Psybeam",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
volatileStatus: 'confusion',
@@ -14244,7 +14513,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Psyblade",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
secondary: null,
onBasePower(basePower, source) {
if (this.field.isTerrain('electricterrain')) {
@@ -14263,19 +14532,22 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Psych Up",
pp: 10,
priority: 0,
- flags: {bypasssub: 1, allyanim: 1},
+ flags: {bypasssub: 1, allyanim: 1, metronome: 1},
onHit(target, source) {
let i: BoostID;
for (i in target.boosts) {
source.boosts[i] = target.boosts[i];
}
- const volatilesToCopy = ['focusenergy', 'gmaxchistrike', 'laserfocus'];
+
+ const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus'];
+ // we need to remove all crit stage volatiles first; otherwise copying e.g. dragoncheer onto a mon with focusenergy
+ // will crash the server (since addVolatile fails due to overlap, leaving the source mon with no hasDragonType to set)
+ for (const volatile of volatilesToCopy) source.removeVolatile(volatile);
for (const volatile of volatilesToCopy) {
if (target.volatiles[volatile]) {
source.addVolatile(volatile);
if (volatile === 'gmaxchistrike') source.volatiles[volatile].layers = target.volatiles[volatile].layers;
- } else {
- source.removeVolatile(volatile);
+ if (volatile === 'dragoncheer') source.volatiles[volatile].hasDragonType = target.volatiles[volatile].hasDragonType;
}
}
this.add('-copyboost', source, target, '[from] move: Psych Up');
@@ -14294,7 +14566,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Psychic",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
boosts: {
@@ -14313,7 +14585,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Psychic Fangs",
pp: 10,
priority: 0,
- flags: {bite: 1, contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1},
onTryHit(pokemon) {
// will shatter screens through sub, before you hit
pokemon.side.removeSideCondition('reflect');
@@ -14325,6 +14597,22 @@ export const Moves: {[moveid: string]: MoveData} = {
type: "Psychic",
contestType: "Clever",
},
+ psychicnoise: {
+ num: 917,
+ accuracy: 100,
+ basePower: 75,
+ category: "Special",
+ name: "Psychic Noise",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
+ secondary: {
+ chance: 100,
+ volatileStatus: 'healblock',
+ },
+ target: "normal",
+ type: "Psychic",
+ },
psychicterrain: {
num: 678,
accuracy: true,
@@ -14333,7 +14621,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Psychic Terrain",
pp: 10,
priority: 0,
- flags: {nonsky: 1},
+ flags: {nonsky: 1, metronome: 1},
terrain: 'psychicterrain',
condition: {
duration: 5,
@@ -14390,11 +14678,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 90,
basePower: 140,
category: "Special",
- isNonstandard: "Past",
name: "Psycho Boost",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
self: {
boosts: {
spa: -2,
@@ -14413,7 +14700,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Psycho Cut",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1, slicing: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -14429,7 +14716,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Psycho Shift",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onTryHit(target, source, move) {
if (!source.status) return false;
move.status = source.status;
@@ -14450,11 +14737,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 90,
basePower: 70,
category: "Physical",
- isNonstandard: "Unobtainable",
name: "Psyshield Bash",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
self: {
@@ -14475,7 +14761,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Psyshock",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Psychic",
@@ -14490,7 +14776,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Psystrike",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Psychic",
@@ -14508,7 +14794,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Psywave",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Psychic",
@@ -14545,7 +14831,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Punishment",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Dark",
@@ -14562,7 +14848,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Purify",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, heal: 1},
+ flags: {protect: 1, reflectable: 1, heal: 1, metronome: 1},
onHit(target, source) {
if (!target.cureStatus()) {
this.add('-fail', source);
@@ -14594,7 +14880,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Pursuit",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
beforeTurnCallback(pokemon) {
for (const side of this.sides) {
if (side.hasAlly(pokemon)) continue;
@@ -14626,10 +14912,17 @@ export const Moves: {[moveid: string]: MoveData} = {
}
// Run through each action in queue to check if the Pursuit user is supposed to Mega Evolve this turn.
// If it is, then Mega Evolve before moving.
- if (source.canMegaEvo || source.canUltraBurst) {
+ if (source.canMegaEvo || source.canUltraBurst || source.canTerastallize) {
for (const [actionIndex, action] of this.queue.entries()) {
- if (action.pokemon === source && action.choice === 'megaEvo') {
- this.actions.runMegaEvo(source);
+ if (action.pokemon === source) {
+ if (action.choice === 'megaEvo') {
+ this.actions.runMegaEvo(source);
+ } else if (action.choice === 'terastallize') {
+ // Also a "forme" change that happens before moves, though only possible in NatDex
+ this.actions.terastallize(source);
+ } else {
+ continue;
+ }
this.queue.list.splice(actionIndex, 1);
break;
}
@@ -14691,7 +14984,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Quick Attack",
pp: 30,
priority: 1,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -14753,7 +15046,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Quiver Dance",
pp: 20,
priority: 0,
- flags: {snatch: 1, dance: 1},
+ flags: {snatch: 1, dance: 1, metronome: 1},
boosts: {
spa: 1,
spd: 1,
@@ -14774,7 +15067,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rage",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
self: {
volatileStatus: 'rage',
},
@@ -14822,7 +15115,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rage Powder",
pp: 20,
priority: 2,
- flags: {powder: 1, noassist: 1, failcopycat: 1},
+ flags: {noassist: 1, failcopycat: 1, powder: 1},
volatileStatus: 'ragepowder',
onTry(source) {
return this.activePerHalf > 1;
@@ -14887,7 +15180,6 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 120,
category: "Physical",
- isNonstandard: "Unobtainable",
name: "Raging Fury",
pp: 10,
priority: 0,
@@ -14912,7 +15204,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rain Dance",
pp: 5,
priority: 0,
- flags: {},
+ flags: {metronome: 1},
weather: 'RainDance',
secondary: null,
target: "all",
@@ -14928,33 +15220,37 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rapid Spin",
pp: 40,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
- onAfterHit(target, pokemon) {
- if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
- this.add('-end', pokemon, 'Leech Seed', '[from] move: Rapid Spin', '[of] ' + pokemon);
- }
- const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
- for (const condition of sideConditions) {
- if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
- this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Rapid Spin', '[of] ' + pokemon);
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
+ onAfterHit(target, pokemon, move) {
+ if (!move.hasSheerForce) {
+ if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
+ this.add('-end', pokemon, 'Leech Seed', '[from] move: Rapid Spin', '[of] ' + pokemon);
+ }
+ const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
+ for (const condition of sideConditions) {
+ if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
+ this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Rapid Spin', '[of] ' + pokemon);
+ }
+ }
+ if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
+ pokemon.removeVolatile('partiallytrapped');
}
- }
- if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
- pokemon.removeVolatile('partiallytrapped');
}
},
- onAfterSubDamage(damage, target, pokemon) {
- if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
- this.add('-end', pokemon, 'Leech Seed', '[from] move: Rapid Spin', '[of] ' + pokemon);
- }
- const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
- for (const condition of sideConditions) {
- if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
- this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Rapid Spin', '[of] ' + pokemon);
+ onAfterSubDamage(damage, target, pokemon, move) {
+ if (!move.hasSheerForce) {
+ if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
+ this.add('-end', pokemon, 'Leech Seed', '[from] move: Rapid Spin', '[of] ' + pokemon);
+ }
+ const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
+ for (const condition of sideConditions) {
+ if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
+ this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Rapid Spin', '[of] ' + pokemon);
+ }
+ }
+ if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
+ pokemon.removeVolatile('partiallytrapped');
}
- }
- if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
- pokemon.removeVolatile('partiallytrapped');
}
},
secondary: {
@@ -14977,7 +15273,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Razor Leaf",
pp: 25,
priority: 0,
- flags: {protect: 1, mirror: 1, slicing: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1},
critRatio: 2,
secondary: null,
target: "allAdjacentFoes",
@@ -14992,7 +15288,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Razor Shell",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
secondary: {
chance: 50,
boosts: {
@@ -15012,7 +15308,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Razor Wind",
pp: 10,
priority: 0,
- flags: {charge: 1, protect: 1, mirror: 1, nosleeptalk: 1, failinstruct: 1},
+ flags: {charge: 1, protect: 1, mirror: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1},
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
return;
@@ -15038,7 +15334,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Recover",
pp: 5,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
heal: [1, 2],
secondary: null,
target: "self",
@@ -15054,7 +15350,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Recycle",
pp: 10,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
onHit(pokemon) {
if (pokemon.item || !pokemon.lastItem) return false;
const item = pokemon.lastItem;
@@ -15076,7 +15372,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Reflect",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
sideCondition: 'reflect',
condition: {
duration: 5,
@@ -15118,7 +15414,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Reflect Type",
pp: 15,
priority: 0,
- flags: {protect: 1, bypasssub: 1, allyanim: 1},
+ flags: {protect: 1, bypasssub: 1, allyanim: 1, metronome: 1},
onHit(target, source) {
if (source.species && (source.species.num === 493 || source.species.num === 773)) return false;
if (source.terastallized) return false;
@@ -15152,7 +15448,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Refresh",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
onHit(pokemon) {
if (['', 'slp', 'frz'].includes(pokemon.status)) return false;
pokemon.cureStatus();
@@ -15184,7 +15480,7 @@ export const Moves: {[moveid: string]: MoveData} = {
onAfterMoveSecondarySelf(pokemon, target, move) {
if (move.willChangeForme) {
const meloettaForme = pokemon.species.id === 'meloettapirouette' ? '' : '-Pirouette';
- pokemon.formeChange('Meloetta' + meloettaForme, this.effect, false, '[msg]');
+ pokemon.formeChange('Meloetta' + meloettaForme, this.effect, false, '0', '[msg]');
}
},
target: "allAdjacentFoes",
@@ -15199,7 +15495,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rest",
pp: 5,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
onTry(source) {
if (source.status === 'slp' || source.hasAbility('comatose')) return false;
@@ -15207,8 +15503,13 @@ export const Moves: {[moveid: string]: MoveData} = {
this.add('-fail', source, 'heal');
return null;
}
- if (source.hasAbility(['insomnia', 'vitalspirit'])) {
- this.add('-fail', source, '[from] ability: ' + source.getAbility().name, '[of] ' + source);
+ // insomnia and vital spirit checks are separate so that the message is accurate in multi-ability mods
+ if (source.hasAbility('insomnia')) {
+ this.add('-fail', source, '[from] ability: Insomnia', '[of] ' + source);
+ return null;
+ }
+ if (source.hasAbility('vitalspirit')) {
+ this.add('-fail', source, '[from] ability: Vital Spirit', '[of] ' + source);
return null;
}
},
@@ -15233,7 +15534,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Retaliate",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onBasePower(basePower, pokemon) {
if (pokemon.side.faintedLastTurn) {
this.debug('Boosted for a faint last turn');
@@ -15257,7 +15558,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Return",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -15273,10 +15574,12 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Revelation Dance",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, dance: 1},
+ flags: {protect: 1, mirror: 1, dance: 1, metronome: 1},
onModifyType(move, pokemon) {
- let type = pokemon.getTypes()[0];
- if (type === "Bird") type = "???";
+ const types = pokemon.getTypes();
+ let type = types[0];
+ if (type === 'Bird') type = '???';
+ if (type === '???' && types[1]) type = types[1];
move.type = type;
},
secondary: null,
@@ -15303,7 +15606,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Revenge",
pp: 10,
priority: -4,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Fighting",
@@ -15313,7 +15616,7 @@ export const Moves: {[moveid: string]: MoveData} = {
num: 179,
accuracy: 100,
basePower: 0,
- basePowerCallback(pokemon, target) {
+ basePowerCallback(pokemon) {
const ratio = Math.max(Math.floor(pokemon.hp * 48 / pokemon.maxhp), 1);
let bp;
if (ratio < 2) {
@@ -15336,7 +15639,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Reversal",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Fighting",
@@ -15352,7 +15655,7 @@ export const Moves: {[moveid: string]: MoveData} = {
pp: 1,
noPPBoosts: true,
priority: 0,
- flags: {},
+ flags: {heal: 1, nosketch: 1},
onTryHit(source) {
if (!source.side.pokemon.filter(ally => ally.fainted).length) {
return false;
@@ -15386,7 +15689,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rising Voltage",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Electric",
@@ -15400,7 +15703,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Roar",
pp: 20,
priority: -6,
- flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, noassist: 1, failcopycat: 1},
+ flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, metronome: 1, noassist: 1, failcopycat: 1},
forceSwitch: true,
secondary: null,
target: "normal",
@@ -15416,7 +15719,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Roar of Time",
pp: 5,
priority: 0,
- flags: {recharge: 1, protect: 1, mirror: 1},
+ flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1},
self: {
volatileStatus: 'mustrecharge',
},
@@ -15433,7 +15736,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rock Blast",
pp: 10,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -15451,7 +15754,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rock Climb",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 20,
volatileStatus: 'confusion',
@@ -15468,7 +15771,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rock Polish",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
spe: 2,
},
@@ -15486,7 +15789,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rock Slide",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -15503,7 +15806,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rock Smash",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 50,
boosts: {
@@ -15522,7 +15825,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rock Throw",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Rock",
@@ -15536,7 +15839,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rock Tomb",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -15552,11 +15855,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 90,
basePower: 150,
category: "Physical",
- isNonstandard: "Past",
name: "Rock Wrecker",
pp: 5,
priority: 0,
- flags: {bullet: 1, recharge: 1, protect: 1, mirror: 1},
+ flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1, bullet: 1},
self: {
volatileStatus: 'mustrecharge',
},
@@ -15573,19 +15875,10 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Role Play",
pp: 10,
priority: 0,
- flags: {bypasssub: 1, allyanim: 1},
+ flags: {bypasssub: 1, allyanim: 1, metronome: 1},
onTryHit(target, source) {
if (target.ability === source.ability) return false;
-
- const additionalBannedTargetAbilities = [
- // Zen Mode included here for compatability with Gen 5-6
- 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard', 'zenmode',
- ];
-
- if (target.getAbility().isPermanent || additionalBannedTargetAbilities.includes(target.ability) ||
- source.getAbility().isPermanent) {
- return false;
- }
+ if (target.getAbility().flags['failroleplay'] || source.getAbility().flags['cantsuppress']) return false;
},
onHit(target, source) {
const oldAbility = source.setAbility(target.ability);
@@ -15610,7 +15903,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rolling Kick",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -15646,14 +15939,11 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rollout",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, noparentalbond: 1, failinstruct: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1, noparentalbond: 1},
onModifyMove(move, pokemon, target) {
if (pokemon.volatiles['rollout'] || pokemon.status === 'slp' || !target) return;
pokemon.addVolatile('rollout');
- // @ts-ignore
- // TS thinks pokemon.volatiles['rollout'] doesn't exist because of the condition on the return above
- // but it does exist now because addVolatile created it
- pokemon.volatiles['rollout'].targetSlot = move.sourceEffect ? pokemon.lastMoveTargetLoc : pokemon.getLocOf(target);
+ if (move.sourceEffect) pokemon.lastMoveTargetLoc = pokemon.getLocOf(target);
},
onAfterMove(source, target, move) {
const rolloutData = source.volatiles["rollout"];
@@ -15696,7 +15986,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Roost",
pp: 5,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
heal: [1, 2],
self: {
volatileStatus: 'roost',
@@ -15705,11 +15995,13 @@ export const Moves: {[moveid: string]: MoveData} = {
duration: 1,
onResidualOrder: 25,
onStart(target) {
- if (!target.terastallized) {
- this.add('-singleturn', target, 'move: Roost');
- } else if (target.terastallized === "Flying") {
- this.add('-hint', "If a Flying Terastallized Pokemon uses Roost, it remains Flying-type.");
+ if (target.terastallized) {
+ if (target.hasType('Flying')) {
+ this.add('-hint', "If a Terastallized Pokemon uses Roost, it remains Flying-type.");
+ }
+ return false;
}
+ this.add('-singleturn', target, 'move: Roost');
},
onTypePriority: -1,
onType(types, pokemon) {
@@ -15732,7 +16024,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Rototiller",
pp: 10,
priority: 0,
- flags: {distance: 1, nonsky: 1},
+ flags: {distance: 1, nonsky: 1, metronome: 1},
onHitField(target, source) {
const targets: Pokemon[] = [];
let anyAirborne = false;
@@ -15773,7 +16065,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Round",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
onTry(source, target, move) {
for (const action of this.queue.list as MoveAction[]) {
if (!action.pokemon || !action.move || action.maxMove || action.zmove) continue;
@@ -15810,11 +16102,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 95,
basePower: 100,
category: "Physical",
- isNonstandard: "Past",
name: "Sacred Fire",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1, defrost: 1},
+ flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1},
secondary: {
chance: 50,
status: 'brn',
@@ -15831,7 +16122,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sacred Sword",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
ignoreEvasion: true,
ignoreDefensive: true,
secondary: null,
@@ -15847,7 +16138,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Safeguard",
pp: 25,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
sideCondition: 'safeguard',
condition: {
duration: 5,
@@ -15934,7 +16225,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sand Attack",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
boosts: {
accuracy: -1,
},
@@ -15949,11 +16240,15 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 80,
basePower: 100,
category: "Special",
- isNonstandard: "Unobtainable",
name: "Sandsear Storm",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, wind: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, wind: 1},
+ onModifyMove(move, pokemon, target) {
+ if (target && ['raindance', 'primordialsea'].includes(target.effectiveWeather())) {
+ move.accuracy = true;
+ }
+ },
secondary: {
chance: 20,
status: 'brn',
@@ -15969,7 +16264,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sandstorm",
pp: 10,
priority: 0,
- flags: {wind: 1},
+ flags: {metronome: 1, wind: 1},
weather: 'Sandstorm',
secondary: null,
target: "all",
@@ -15985,7 +16280,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sand Tomb",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
volatileStatus: 'partiallytrapped',
secondary: null,
target: "normal",
@@ -16035,7 +16330,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Scald",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, defrost: 1},
+ flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1},
thawsTarget: true,
secondary: {
chance: 30,
@@ -16053,7 +16348,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Scale Shot",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
multihit: [2, 5],
selfBoost: {
boosts: {
@@ -16075,7 +16370,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Scary Face",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
boosts: {
spe: -2,
},
@@ -16093,7 +16388,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Scorching Sands",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, defrost: 1},
+ flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1},
thawsTarget: true,
secondary: {
chance: 30,
@@ -16110,7 +16405,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Scratch",
pp: 35,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -16124,7 +16419,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Screech",
pp: 40,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, metronome: 1},
boosts: {
def: -2,
},
@@ -16143,7 +16438,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Searing Shot",
pp: 5,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: {
chance: 30,
status: 'brn',
@@ -16178,7 +16473,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Secret Power",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onModifyMove(move, pokemon) {
if (this.field.isTerrain('')) return;
move.secondaries = [];
@@ -16221,12 +16516,11 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 85,
category: "Special",
- isNonstandard: "Past",
overrideDefensiveStat: 'def',
name: "Secret Sword",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, slicing: 1},
secondary: null,
target: "normal",
type: "Fighting",
@@ -16240,7 +16534,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Seed Bomb",
pp: 15,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: null,
target: "normal",
type: "Grass",
@@ -16251,11 +16545,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 85,
basePower: 120,
category: "Special",
- isNonstandard: "Past",
name: "Seed Flare",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 40,
boosts: {
@@ -16275,7 +16568,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Seismic Toss",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Fighting",
@@ -16290,7 +16583,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Self-Destruct",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1, noparentalbond: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, noparentalbond: 1},
selfdestruct: "always",
secondary: null,
target: "allAdjacent",
@@ -16305,7 +16598,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Shadow Ball",
pp: 15,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: {
chance: 20,
boosts: {
@@ -16325,7 +16618,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Shadow Bone",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 20,
boosts: {
@@ -16344,7 +16637,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Shadow Claw",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -16359,7 +16652,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Shadow Force",
pp: 5,
priority: 0,
- flags: {contact: 1, charge: 1, mirror: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1},
+ flags: {contact: 1, charge: 1, mirror: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1},
breaksProtect: true,
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
@@ -16389,7 +16682,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Shadow Punch",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Ghost",
@@ -16403,32 +16696,12 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Shadow Sneak",
pp: 30,
priority: 1,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Ghost",
contestType: "Clever",
},
- shadowstrike: {
- num: 0,
- accuracy: 95,
- basePower: 80,
- category: "Physical",
- isNonstandard: "CAP",
- name: "Shadow Strike",
- pp: 10,
- priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
- secondary: {
- chance: 50,
- boosts: {
- def: -1,
- },
- },
- target: "normal",
- type: "Ghost",
- contestType: "Clever",
- },
sharpen: {
num: 159,
accuracy: true,
@@ -16438,7 +16711,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sharpen",
pp: 30,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
atk: 1,
},
@@ -16475,7 +16748,7 @@ export const Moves: {[moveid: string]: MoveData} = {
flags: {},
volatileStatus: 'substitute',
onTryHit(source) {
- if (!this.canSwitch(source.side)) {
+ if (!this.canSwitch(source.side) || source.volatiles['commanded']) {
this.add('-fail', source);
return this.NOT_FAIL;
}
@@ -16510,7 +16783,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sheer Cold",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
ohko: 'Ice',
target: "normal",
@@ -16527,7 +16800,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Shell Side Arm",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onPrepareHit(target, source, move) {
if (!source.isAlly(target)) {
this.attrLastMove('[anim] Shell Side Arm ' + move.category);
@@ -16568,7 +16841,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Shell Smash",
pp: 15,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
def: -1,
spd: -1,
@@ -16627,11 +16900,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Unobtainable",
name: "Shelter",
pp: 10,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
def: 2,
},
@@ -16647,7 +16919,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Shift Gear",
pp: 10,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
spe: 2,
atk: 1,
@@ -16666,7 +16938,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Shock Wave",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Electric",
@@ -16680,7 +16952,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Shore Up",
pp: 5,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
onHit(pokemon) {
let factor = 0.5;
if (this.field.isWeather('sandstorm')) {
@@ -16708,7 +16980,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Signal Beam",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
volatileStatus: 'confusion',
@@ -16780,7 +17052,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Silver Wind",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
self: {
@@ -16802,13 +17074,12 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 0,
category: "Status",
- isNonstandard: "Unobtainable",
name: "Simple Beam",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
onTryHit(target) {
- if (target.getAbility().isPermanent || target.ability === 'simple' || target.ability === 'truant') {
+ if (target.getAbility().flags['cantsuppress'] || target.ability === 'simple' || target.ability === 'truant') {
return false;
}
},
@@ -16834,7 +17105,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sing",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
status: 'slp',
secondary: null,
target: "normal",
@@ -16881,19 +17152,18 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Past",
name: "Sketch",
pp: 1,
noPPBoosts: true,
priority: 0,
flags: {
- bypasssub: 1, allyanim: 1, failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1,
+ bypasssub: 1, allyanim: 1, failencore: 1, nosleeptalk: 1, noassist: 1,
+ failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1,
},
onHit(target, source) {
- const disallowedMoves = ['chatter', 'sketch', 'struggle'];
const move = target.lastMove;
if (source.transformed || !move || source.moves.includes(move.id)) return false;
- if (disallowedMoves.includes(move.id) || move.isZ || move.isMax) return false;
+ if (move.flags['nosketch'] || move.isZ || move.isMax) return false;
const sketchIndex = source.moves.indexOf('sketch');
if (sketchIndex < 0) return false;
const sketchedMove = {
@@ -16909,7 +17179,6 @@ export const Moves: {[moveid: string]: MoveData} = {
source.baseMoveSlots[sketchIndex] = sketchedMove;
this.add('-activate', source, 'move: Sketch', move.name);
},
- noSketch: true,
secondary: null,
target: "normal",
type: "Normal",
@@ -16924,17 +17193,11 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Skill Swap",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1},
+ flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1},
onTryHit(target, source) {
- const additionalBannedAbilities = ['hungerswitch', 'illusion', 'neutralizinggas', 'wonderguard'];
const targetAbility = target.getAbility();
const sourceAbility = source.getAbility();
- // TODO: research in what order these should be checked
- if (
- target.volatiles['dynamax'] ||
- targetAbility.isPermanent || sourceAbility.isPermanent ||
- additionalBannedAbilities.includes(target.ability) || additionalBannedAbilities.includes(source.ability)
- ) {
+ if (sourceAbility.flags['failskillswap'] || targetAbility.flags['failskillswap'] || target.volatiles['dynamax']) {
return false;
}
const sourceCanBeSet = this.runEvent('SetAbility', source, source, this.effect, targetAbility);
@@ -16956,6 +17219,7 @@ export const Moves: {[moveid: string]: MoveData} = {
target.ability = sourceAbility.id;
source.abilityState = {id: this.toID(source.ability), target: source};
target.abilityState = {id: this.toID(target.ability), target: target};
+ source.volatileStaleness = undefined;
if (!target.isAlly(source)) target.volatileStaleness = 'external';
this.singleEvent('Start', targetAbility, source.abilityState, source);
this.singleEvent('Start', sourceAbility, target.abilityState, target);
@@ -16974,7 +17238,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Skitter Smack",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -16993,7 +17257,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Skull Bash",
pp: 10,
priority: 0,
- flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nosleeptalk: 1, failinstruct: 1},
+ flags: {contact: 1, charge: 1, protect: 1, mirror: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1},
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
return;
@@ -17019,7 +17283,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sky Attack",
pp: 5,
priority: 0,
- flags: {charge: 1, protect: 1, mirror: 1, distance: 1, nosleeptalk: 1, failinstruct: 1},
+ flags: {charge: 1, protect: 1, mirror: 1, distance: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1},
critRatio: 2,
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
@@ -17050,7 +17314,8 @@ export const Moves: {[moveid: string]: MoveData} = {
pp: 10,
priority: 0,
flags: {
- contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1,
+ contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1,
+ metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1,
},
onModifyMove(move, source) {
if (!source.volatiles['skydrop']) {
@@ -17163,7 +17428,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sky Uppercut",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Fighting",
@@ -17177,7 +17442,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Slack Off",
pp: 5,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
heal: [1, 2],
secondary: null,
target: "self",
@@ -17193,7 +17458,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Slam",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -17207,7 +17472,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Slash",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -17222,7 +17487,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sleep Powder",
pp: 15,
priority: 0,
- flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1},
status: 'slp',
secondary: null,
target: "normal",
@@ -17238,7 +17503,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sleep Talk",
pp: 10,
priority: 0,
- flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1},
+ flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1},
sleepUsable: true,
onTry(source) {
return source.status === 'slp' || source.hasAbility('comatose');
@@ -17261,6 +17526,7 @@ export const Moves: {[moveid: string]: MoveData} = {
}
this.actions.useMove(randomMove, pokemon);
},
+ callsMove: true,
secondary: null,
target: "self",
type: "Normal",
@@ -17275,7 +17541,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sludge",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
status: 'psn',
@@ -17292,7 +17558,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sludge Bomb",
pp: 10,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: {
chance: 30,
status: 'psn',
@@ -17309,7 +17575,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sludge Wave",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
status: 'psn',
@@ -17326,7 +17592,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Smack Down",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, nonsky: 1},
+ flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1},
volatileStatus: 'smackdown',
condition: {
noCopy: true,
@@ -17373,7 +17639,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Smart Strike",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Steel",
@@ -17395,7 +17661,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Smelling Salts",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onHit(target) {
if (target.status === 'par') target.cureStatus();
},
@@ -17412,7 +17678,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Smog",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 40,
status: 'psn',
@@ -17429,7 +17695,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Smokescreen",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
boosts: {
accuracy: -1,
},
@@ -17516,7 +17782,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Snipe Shot",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
tracksTarget: true,
secondary: null,
@@ -17566,7 +17832,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Soak",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
onHit(target) {
if (target.getTypes().join() === 'Water' || !target.setType('Water')) {
// Soak should animate even when it fails.
@@ -17590,7 +17856,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Soft-Boiled",
pp: 5,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
heal: [1, 2],
secondary: null,
target: "self",
@@ -17606,7 +17872,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Solar Beam",
pp: 10,
priority: 0,
- flags: {charge: 1, protect: 1, mirror: 1, nosleeptalk: 1, failinstruct: 1},
+ flags: {charge: 1, protect: 1, mirror: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1},
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
return;
@@ -17643,7 +17909,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Solar Blade",
pp: 10,
priority: 0,
- flags: {contact: 1, charge: 1, protect: 1, mirror: 1, slicing: 1, nosleeptalk: 1, failinstruct: 1},
+ flags: {contact: 1, charge: 1, protect: 1, mirror: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1, slicing: 1},
onTryMove(attacker, defender, move) {
if (attacker.removeVolatile(move.id)) {
return;
@@ -17682,7 +17948,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sonic Boom",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -17712,7 +17978,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Spacial Rend",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -17727,7 +17993,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Spark",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
status: 'par',
@@ -17741,11 +18007,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 90,
category: "Special",
- isNonstandard: "Past",
name: "Sparkling Aria",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
secondary: {
dustproof: true,
chance: 100,
@@ -17813,7 +18078,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Speed Swap",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1},
+ flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1},
onHit(target, source) {
const targetSpe = target.storedStats.spe;
target.storedStats.spe = source.storedStats.spe;
@@ -17852,7 +18117,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Spider Web",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
onHit(target, source, move) {
return target.addVolatile('trapped', source, move, 'trapper');
},
@@ -17871,7 +18136,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Spike Cannon",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -17887,7 +18152,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Spikes",
pp: 20,
priority: 0,
- flags: {reflectable: 1, nonsky: 1, mustpressure: 1},
+ flags: {reflectable: 1, nonsky: 1, metronome: 1, mustpressure: 1},
sideCondition: 'spikes',
condition: {
// this is a side condition
@@ -17978,7 +18243,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Spin Out",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
self: {
boosts: {
spe: -2,
@@ -18014,7 +18279,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Spirit Shackle",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
onHit(target, source, move) {
@@ -18037,7 +18302,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Spit Up",
pp: 10,
priority: 0,
- flags: {protect: 1},
+ flags: {protect: 1, metronome: 1},
onTry(source) {
return !!source.volatiles['stockpile'];
},
@@ -18057,7 +18322,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Spite",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1},
onHit(target) {
let move: Move | ActiveMove | null = target.lastMove;
if (!move || move.isZ) return false;
@@ -18081,7 +18346,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Splash",
pp: 40,
priority: 0,
- flags: {gravity: 1},
+ flags: {gravity: 1, metronome: 1},
onTry(source, target, move) {
// Additional Gravity check for Z-move variant
if (this.field.getPseudoWeather('Gravity')) {
@@ -18146,7 +18411,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Spore",
pp: 15,
priority: 0,
- flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1},
status: 'slp',
secondary: null,
target: "normal",
@@ -18170,6 +18435,7 @@ export const Moves: {[moveid: string]: MoveData} = {
},
condition: {
duration: 1,
+ noCopy: true, // doesn't get copied by Baton Pass
onStart(pokemon) {
this.add('-singleturn', pokemon, 'move: Spotlight');
},
@@ -18192,7 +18458,6 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 80,
basePower: 100,
category: "Special",
- isNonstandard: "Unobtainable",
name: "Springtide Storm",
pp: 5,
priority: 0,
@@ -18214,7 +18479,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Stealth Rock",
pp: 20,
priority: 0,
- flags: {reflectable: 1, mustpressure: 1},
+ flags: {reflectable: 1, metronome: 1, mustpressure: 1},
sideCondition: 'stealthrock',
condition: {
// this is a side condition
@@ -18260,7 +18525,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Steamroller",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -18300,7 +18565,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Steel Roller",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onTry() {
return !this.field.isTerrain('');
},
@@ -18322,7 +18587,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Steel Wing",
pp: 25,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
self: {
@@ -18343,7 +18608,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sticky Web",
pp: 20,
priority: 0,
- flags: {reflectable: 1},
+ flags: {reflectable: 1, metronome: 1},
sideCondition: 'stickyweb',
condition: {
onSideStart(side) {
@@ -18352,7 +18617,7 @@ export const Moves: {[moveid: string]: MoveData} = {
onEntryHazard(pokemon) {
if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return;
this.add('-activate', pokemon, 'move: Sticky Web');
- this.boost({spe: -1}, pokemon, this.effectState.source, this.dex.getActiveMove('stickyweb'));
+ this.boost({spe: -1}, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb'));
},
},
secondary: null,
@@ -18369,7 +18634,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Stockpile",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
onTry(source) {
if (source.volatiles['stockpile'] && source.volatiles['stockpile'].layers >= 3) return false;
},
@@ -18442,7 +18707,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Stomp",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -18466,7 +18731,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Stomping Tantrum",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Ground",
@@ -18477,19 +18742,25 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 90,
basePower: 65,
category: "Physical",
- isNonstandard: "Unobtainable",
name: "Stone Axe",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
- self: {
- onHit(source) {
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
+ onAfterHit(target, source, move) {
+ if (!move.hasSheerForce && source.hp) {
for (const side of source.side.foeSidesWithConditions()) {
side.addSideCondition('stealthrock');
}
- },
+ }
},
- secondary: {}, // allows sheer force to trigger
+ onAfterSubDamage(damage, target, source, move) {
+ if (!move.hasSheerForce && source.hp) {
+ for (const side of source.side.foeSidesWithConditions()) {
+ side.addSideCondition('stealthrock');
+ }
+ }
+ },
+ secondary: {}, // Sheer Force-boosted
target: "normal",
type: "Rock",
},
@@ -18501,7 +18772,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Stone Edge",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
secondary: null,
target: "normal",
@@ -18521,7 +18792,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Stored Power",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Psychic",
@@ -18538,7 +18809,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Storm Throw",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
willCrit: true,
secondary: null,
target: "normal",
@@ -18550,7 +18821,6 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 95,
basePower: 90,
category: "Special",
- isNonstandard: "Past",
name: "Strange Steam",
pp: 10,
priority: 0,
@@ -18570,7 +18840,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Strength",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -18584,7 +18854,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Strength Sap",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, heal: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, heal: 1, metronome: 1},
onHit(target, source) {
if (target.boosts.atk === -6) return false;
const atk = target.getStat('atk', false, true);
@@ -18605,7 +18875,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "String Shot",
pp: 40,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
boosts: {
spe: -2,
},
@@ -18626,9 +18896,8 @@ export const Moves: {[moveid: string]: MoveData} = {
priority: 0,
flags: {
contact: 1, protect: 1,
- failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1,
+ failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1,
},
- noSketch: true,
onModifyMove(move, pokemon, target) {
move.type = '???';
this.add('-activate', pokemon, 'move: Struggle');
@@ -18647,7 +18916,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Struggle Bug",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -18666,7 +18935,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Stuff Cheeks",
pp: 10,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
onDisableMove(pokemon) {
if (!pokemon.getItem().isBerry) pokemon.disableMove('stuffcheeks');
},
@@ -18689,7 +18958,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Stun Spore",
pp: 30,
priority: 0,
- flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1},
status: 'par',
secondary: null,
target: "normal",
@@ -18706,7 +18975,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Submission",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
recoil: [1, 4],
secondary: null,
target: "normal",
@@ -18721,7 +18990,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Substitute",
pp: 10,
priority: 0,
- flags: {snatch: 1, nonsky: 1},
+ flags: {snatch: 1, nonsky: 1, metronome: 1},
volatileStatus: 'substitute',
onTryHit(source) {
if (source.volatiles['substitute']) {
@@ -18775,8 +19044,8 @@ export const Moves: {[moveid: string]: MoveData} = {
} else {
this.add('-activate', target, 'move: Substitute', '[damage]');
}
- if (move.recoil) {
- this.damage(this.actions.calcRecoilDamage(damage, move), source, target, 'recoil');
+ if (move.recoil || move.id === 'chloroblast') {
+ this.damage(this.actions.calcRecoilDamage(damage, move, source), source, target, 'recoil');
}
if (move.drain) {
this.heal(Math.ceil(damage * move.drain[0] / move.drain[1]), source, target, 'drain');
@@ -18819,7 +19088,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sucker Punch",
pp: 5,
priority: 1,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onTry(source, target) {
const action = this.queue.willMove(target);
const move = action?.choice === 'move' ? action.move : null;
@@ -18840,7 +19109,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sunny Day",
pp: 5,
priority: 0,
- flags: {},
+ flags: {metronome: 1},
weather: 'sunnyday',
secondary: null,
target: "all",
@@ -18853,7 +19122,6 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 100,
category: "Physical",
- isNonstandard: "Past",
name: "Sunsteel Strike",
pp: 5,
priority: 0,
@@ -18864,6 +19132,23 @@ export const Moves: {[moveid: string]: MoveData} = {
type: "Steel",
contestType: "Cool",
},
+ supercellslam: {
+ num: 916,
+ accuracy: 95,
+ basePower: 100,
+ category: "Physical",
+ name: "Supercell Slam",
+ pp: 15,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
+ hasCrashDamage: true,
+ onMoveFail(target, source, move) {
+ this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('Supercell Slam'));
+ },
+ secondary: null,
+ target: "normal",
+ type: "Electric",
+ },
superfang: {
num: 162,
accuracy: 90,
@@ -18875,7 +19160,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Super Fang",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -18889,7 +19174,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Superpower",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
self: {
boosts: {
atk: -1,
@@ -18909,7 +19194,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Supersonic",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
volatileStatus: 'confusion',
secondary: null,
target: "normal",
@@ -18941,7 +19226,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Surf",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1, nonsky: 1},
+ flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1},
secondary: null,
target: "allAdjacent",
type: "Water",
@@ -18955,7 +19240,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Surging Strikes",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, punch: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
willCrit: true,
multihit: 3,
secondary: null,
@@ -18972,7 +19257,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Swagger",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
volatileStatus: 'confusion',
boosts: {
atk: 2,
@@ -18991,13 +19276,15 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Swallow",
pp: 10,
priority: 0,
- flags: {snatch: 1, heal: 1},
- onTry(source) {
+ flags: {snatch: 1, heal: 1, metronome: 1},
+ onTry(source, target, move) {
+ if (move.sourceEffect === 'snatch') return;
return !!source.volatiles['stockpile'];
},
onHit(pokemon) {
+ const layers = pokemon.volatiles['stockpile']?.layers || 1;
const healAmount = [0.25, 0.5, 1];
- const success = !!this.heal(this.modify(pokemon.maxhp, healAmount[(pokemon.volatiles['stockpile'].layers - 1)]));
+ const success = !!this.heal(this.modify(pokemon.maxhp, healAmount[layers - 1]));
if (!success) this.add('-fail', pokemon, 'heal');
pokemon.removeVolatile('stockpile');
return success || this.NOT_FAIL;
@@ -19016,7 +19303,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sweet Kiss",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
volatileStatus: 'confusion',
secondary: null,
target: "normal",
@@ -19032,7 +19319,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Sweet Scent",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
boosts: {
evasion: -2,
},
@@ -19050,7 +19337,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Swift",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "allAdjacentFoes",
type: "Normal",
@@ -19112,7 +19399,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Swords Dance",
pp: 20,
priority: 0,
- flags: {snatch: 1, dance: 1},
+ flags: {snatch: 1, dance: 1, metronome: 1},
boosts: {
atk: 2,
},
@@ -19131,7 +19418,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Synchronoise",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onTryImmunity(target, source) {
return target.hasType(source.getTypes());
},
@@ -19148,7 +19435,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Synthesis",
pp: 5,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
onHit(pokemon) {
let factor = 0.5;
switch (pokemon.effectiveWeather()) {
@@ -19177,6 +19464,58 @@ export const Moves: {[moveid: string]: MoveData} = {
zMove: {effect: 'clearnegativeboost'},
contestType: "Clever",
},
+ syrupbomb: {
+ num: 903,
+ accuracy: 85,
+ basePower: 60,
+ category: "Special",
+ name: "Syrup Bomb",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
+ condition: {
+ noCopy: true,
+ duration: 4,
+ onStart(pokemon) {
+ this.add('-start', pokemon, 'Syrup Bomb');
+ },
+ onUpdate(pokemon) {
+ if (this.effectState.source && !this.effectState.source.isActive) {
+ pokemon.removeVolatile('syrupbomb');
+ }
+ },
+ onResidualOrder: 14,
+ onResidual(pokemon) {
+ this.boost({spe: -1}, pokemon, this.effectState.source);
+ },
+ onEnd(pokemon) {
+ this.add('-end', pokemon, 'Syrup Bomb', '[silent]');
+ },
+ },
+ secondary: {
+ chance: 100,
+ volatileStatus: 'syrupbomb',
+ },
+ target: "normal",
+ type: "Grass",
+ },
+ tachyoncutter: {
+ num: 911,
+ accuracy: true,
+ basePower: 50,
+ category: "Special",
+ name: "Tachyon Cutter",
+ pp: 10,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1},
+ multihit: 2,
+ secondary: null,
+ target: "normal",
+ type: "Steel",
+ zMove: {basePower: 180},
+ maxMove: {basePower: 140},
+ contestType: "Clever",
+ },
tackle: {
num: 33,
accuracy: 100,
@@ -19185,7 +19524,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Tackle",
pp: 35,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -19196,11 +19535,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Past",
name: "Tail Glow",
pp: 20,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
spa: 3,
},
@@ -19218,7 +19556,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Tail Slap",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -19235,7 +19573,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Tail Whip",
pp: 30,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
boosts: {
def: -1,
},
@@ -19253,7 +19591,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Tailwind",
pp: 15,
priority: 0,
- flags: {snatch: 1, wind: 1},
+ flags: {snatch: 1, metronome: 1, wind: 1},
sideCondition: 'tailwind',
condition: {
duration: 4,
@@ -19294,7 +19632,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Take Down",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
recoil: [1, 4],
secondary: null,
target: "normal",
@@ -19306,11 +19644,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Past",
name: "Take Heart",
pp: 15,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
onHit(pokemon) {
const success = !!this.boost({spa: 1, spd: 1});
return pokemon.cureStatus() || success;
@@ -19327,10 +19664,11 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Tar Shot",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
volatileStatus: 'tarshot',
condition: {
onStart(pokemon) {
+ if (pokemon.terastallized) return false;
this.add('-start', pokemon, 'Tar Shot');
},
onEffectivenessPriority: -2,
@@ -19356,7 +19694,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Taunt",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1},
volatileStatus: 'taunt',
condition: {
duration: 3,
@@ -19400,7 +19738,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Tearful Look",
pp: 20,
priority: 0,
- flags: {reflectable: 1, mirror: 1},
+ flags: {reflectable: 1, mirror: 1, metronome: 1},
boosts: {
atk: -1,
spa: -1,
@@ -19419,7 +19757,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Teatime",
pp: 10,
priority: 0,
- flags: {bypasssub: 1},
+ flags: {bypasssub: 1, metronome: 1},
onHitField(target, source, move) {
const targets: Pokemon[] = [];
for (const pokemon of this.getAllActive()) {
@@ -19486,7 +19824,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Teeter Dance",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1, dance: 1},
+ flags: {protect: 1, mirror: 1, dance: 1, metronome: 1},
volatileStatus: 'confusion',
secondary: null,
target: "allAdjacent",
@@ -19503,7 +19841,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Telekinesis",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, gravity: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, gravity: 1, allyanim: 1, metronome: 1},
volatileStatus: 'telekinesis',
onTry(source, target, move) {
// Additional Gravity check for Z-move variant
@@ -19556,7 +19894,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Teleport",
pp: 20,
priority: -6,
- flags: {},
+ flags: {metronome: 1},
onTry(source) {
return !!this.canSwitch(source.side);
},
@@ -19567,15 +19905,46 @@ export const Moves: {[moveid: string]: MoveData} = {
zMove: {effect: 'heal'},
contestType: "Cool",
},
+ temperflare: {
+ num: 915,
+ accuracy: 100,
+ basePower: 75,
+ basePowerCallback(pokemon, target, move) {
+ if (pokemon.moveLastTurnResult === false) {
+ this.debug('doubling Temper Flare BP due to previous move failure');
+ return move.basePower * 2;
+ }
+ return move.basePower;
+ },
+ category: "Physical",
+ name: "Temper Flare",
+ pp: 10,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
+ secondary: null,
+ target: "normal",
+ type: "Fire",
+ },
terablast: {
num: 851,
accuracy: 100,
basePower: 80,
+ basePowerCallback(pokemon, target, move) {
+ if (pokemon.terastallized === 'Stellar') {
+ return 100;
+ }
+ return move.basePower;
+ },
category: "Special",
name: "Tera Blast",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, mustpressure: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, mustpressure: 1},
+ onPrepareHit(target, source, move) {
+ if (source.terastallized) {
+ this.attrLastMove('[anim] Tera Blast ' + source.teraType);
+ }
+ },
onModifyType(move, pokemon, target) {
if (pokemon.terastallized) {
move.type = pokemon.teraType;
@@ -19585,6 +19954,35 @@ export const Moves: {[moveid: string]: MoveData} = {
if (pokemon.terastallized && pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) {
move.category = 'Physical';
}
+ if (pokemon.terastallized === 'Stellar') {
+ move.self = {boosts: {atk: -1, spa: -1}};
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Normal",
+ },
+ terastarstorm: {
+ num: 906,
+ accuracy: 100,
+ basePower: 120,
+ category: "Special",
+ name: "Tera Starstorm",
+ pp: 5,
+ priority: 0,
+ flags: {protect: 1, mirror: 1, noassist: 1, failcopycat: 1, failmimic: 1, nosketch: 1},
+ onModifyType(move, pokemon) {
+ if (pokemon.species.name === 'Terapagos-Stellar') {
+ move.type = 'Stellar';
+ if (pokemon.terastallized && pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) {
+ move.category = 'Physical';
+ }
+ }
+ },
+ onModifyMove(move, pokemon) {
+ if (pokemon.species.name === 'Terapagos-Stellar') {
+ move.target = 'allAdjacentFoes';
+ }
},
secondary: null,
target: "normal",
@@ -19598,7 +19996,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Terrain Pulse",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, pulse: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, pulse: 1},
onModifyType(move, pokemon) {
if (!pokemon.isGrounded()) return;
switch (this.field.terrain) {
@@ -19710,7 +20108,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Thrash",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, failinstruct: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1},
self: {
volatileStatus: 'lockedmove',
},
@@ -19732,7 +20130,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Throat Chop",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
condition: {
duration: 2,
onStart(target) {
@@ -19781,7 +20179,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Thunder",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onModifyMove(move, pokemon, target) {
switch (target?.effectiveWeather()) {
case 'raindance':
@@ -19810,7 +20208,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Thunderbolt",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
status: 'par',
@@ -19833,6 +20231,27 @@ export const Moves: {[moveid: string]: MoveData} = {
target: "normal",
type: "Electric",
},
+ thunderclap: {
+ num: 909,
+ accuracy: 100,
+ basePower: 70,
+ category: "Special",
+ name: "Thunderclap",
+ pp: 5,
+ priority: 1,
+ flags: {protect: 1, mirror: 1, metronome: 1},
+ onTry(source, target) {
+ const action = this.queue.willMove(target);
+ const move = action?.choice === 'move' ? action.move : null;
+ if (!move || (move.category === 'Status' && move.id !== 'mefirst') || target.volatiles['mustrecharge']) {
+ return false;
+ }
+ },
+ secondary: null,
+ target: "normal",
+ type: "Electric",
+ contestType: "Clever",
+ },
thunderfang: {
num: 422,
accuracy: 95,
@@ -19841,7 +20260,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Thunder Fang",
pp: 15,
priority: 0,
- flags: {bite: 1, contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1},
secondaries: [
{
chance: 10,
@@ -19881,7 +20300,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Thunder Punch",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1},
secondary: {
chance: 10,
status: 'par',
@@ -19898,7 +20317,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Thunder Shock",
pp: 30,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 10,
status: 'par',
@@ -19915,7 +20334,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Thunder Wave",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
status: 'par',
ignoreImmunity: false,
secondary: null,
@@ -19932,7 +20351,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Tickle",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
boosts: {
atk: -1,
def: -1,
@@ -19979,11 +20398,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Past",
name: "Topsy-Turvy",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
onHit(target) {
let success = false;
let i: BoostID;
@@ -20009,7 +20427,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Torch Song",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1},
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1},
secondary: {
chance: 100,
self: {
@@ -20030,7 +20448,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Torment",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1},
volatileStatus: 'torment',
condition: {
noCopy: true,
@@ -20063,7 +20481,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Toxic",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
// No Guard-like effect for Poison-type users implemented in Scripts#tryMoveHit
status: 'tox',
secondary: null,
@@ -20080,7 +20498,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Toxic Spikes",
pp: 20,
priority: 0,
- flags: {reflectable: 1, nonsky: 1, mustpressure: 1},
+ flags: {reflectable: 1, nonsky: 1, metronome: 1, mustpressure: 1},
sideCondition: 'toxicspikes',
condition: {
// this is a side condition
@@ -20118,11 +20536,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 0,
category: "Status",
- isNonstandard: "Past",
name: "Toxic Thread",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
status: 'psn',
boosts: {
spe: -1,
@@ -20162,7 +20579,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Transform",
pp: 10,
priority: 0,
- flags: {allyanim: 1, failencore: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1},
+ flags: {allyanim: 1, failencore: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1},
onHit(target, pokemon) {
if (!pokemon.transformInto(target)) {
return false;
@@ -20182,7 +20599,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Tri Attack",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 20,
onHit(target, source) {
@@ -20257,7 +20674,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Trick-or-Treat",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
onHit(target) {
if (target.hasType('Ghost')) return false;
if (!target.addType('Ghost')) return false;
@@ -20285,7 +20702,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Trick Room",
pp: 5,
priority: -7,
- flags: {mirror: 1},
+ flags: {mirror: 1, metronome: 1},
pseudoWeather: 'trickroom',
condition: {
duration: 5,
@@ -20324,11 +20741,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 100,
basePower: 90,
category: "Physical",
- isNonstandard: "Unobtainable",
name: "Triple Arrows",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
critRatio: 2,
secondaries: [
{
@@ -20355,7 +20771,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Triple Axel",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: 3,
multiaccuracy: true,
secondary: null,
@@ -20372,7 +20788,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Triple Dive",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: 3,
secondary: null,
target: "normal",
@@ -20386,11 +20802,10 @@ export const Moves: {[moveid: string]: MoveData} = {
return 10 * move.hit;
},
category: "Physical",
- isNonstandard: "Past",
name: "Triple Kick",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
multihit: 3,
multiaccuracy: true,
secondary: null,
@@ -20408,7 +20823,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Trop Kick",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 100,
boosts: {
@@ -20458,7 +20873,7 @@ export const Moves: {[moveid: string]: MoveData} = {
pp: 5,
noPPBoosts: true,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -20490,7 +20905,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Twineedle",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
multihit: 2,
secondary: {
chance: 20,
@@ -20525,7 +20940,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Twister",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1, wind: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, wind: 1},
secondary: {
chance: 20,
volatileStatus: 'flinch',
@@ -20542,13 +20957,36 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "U-turn",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
selfSwitch: true,
secondary: null,
target: "normal",
type: "Bug",
contestType: "Cute",
},
+ upperhand: {
+ num: 918,
+ accuracy: 100,
+ basePower: 65,
+ category: "Physical",
+ name: "Upper Hand",
+ pp: 15,
+ priority: 3,
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
+ onTry(source, target) {
+ const action = this.queue.willMove(target);
+ const move = action?.choice === 'move' ? action.move : null;
+ if (!move || move.priority <= 0.1 || move.category === 'Status') {
+ return false;
+ }
+ },
+ secondary: {
+ chance: 100,
+ volatileStatus: 'flinch',
+ },
+ target: "normal",
+ type: "Fighting",
+ },
uproar: {
num: 253,
accuracy: 100,
@@ -20557,7 +20995,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Uproar",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, nosleeptalk: 1, failinstruct: 1},
+ flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1},
self: {
volatileStatus: 'uproar',
},
@@ -20616,7 +21054,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Vacuum Wave",
pp: 30,
priority: 1,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Fighting",
@@ -20627,6 +21065,7 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 95,
basePower: 180,
category: "Physical",
+ isNonstandard: "Unobtainable",
name: "V-create",
pp: 5,
priority: 0,
@@ -20673,7 +21112,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Venom Drench",
pp: 20,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
onHit(target, source, move) {
if (target.status === 'psn' || target.status === 'tox') {
return !!this.boost({atk: -1, spa: -1, spe: -1}, target, source, move);
@@ -20694,7 +21133,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Venoshock",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
onBasePower(basePower, pokemon, target) {
if (target.status === 'psn' || target.status === 'tox') {
return this.chainModify(2);
@@ -20710,11 +21149,10 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: true,
basePower: 0,
category: "Status",
- isNonstandard: "Unobtainable",
name: "Victory Dance",
pp: 10,
priority: 0,
- flags: {snatch: 1, dance: 1},
+ flags: {snatch: 1, dance: 1, metronome: 1},
boosts: {
atk: 1,
def: 1,
@@ -20732,7 +21170,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Vine Whip",
pp: 25,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Grass",
@@ -20746,7 +21184,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Vise Grip",
pp: 30,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -20761,7 +21199,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Vital Throw",
pp: 10,
priority: -1,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Fighting",
@@ -20775,7 +21213,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Volt Switch",
pp: 20,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
selfSwitch: true,
secondary: null,
target: "normal",
@@ -20790,7 +21228,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Volt Tackle",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
recoil: [33, 100],
secondary: {
chance: 10,
@@ -20816,7 +21254,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Wake-Up Slap",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
onHit(target) {
if (target.status === 'slp') target.cureStatus();
},
@@ -20833,7 +21271,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Waterfall",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 20,
volatileStatus: 'flinch',
@@ -20850,7 +21288,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Water Gun",
pp: 25,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Water",
@@ -20865,13 +21303,13 @@ export const Moves: {[moveid: string]: MoveData} = {
this.add('-combine');
return 150;
}
- return 80;
+ return move.basePower;
},
category: "Special",
name: "Water Pledge",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, nonsky: 1, pledgecombo: 1},
+ flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1, pledgecombo: 1},
onPrepareHit(target, source, move) {
for (const action of this.queue) {
if (action.choice !== 'move') continue;
@@ -20936,7 +21374,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Water Pulse",
pp: 20,
priority: 0,
- flags: {protect: 1, pulse: 1, mirror: 1, distance: 1},
+ flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1},
secondary: {
chance: 20,
volatileStatus: 'confusion',
@@ -20960,7 +21398,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Water Shuriken",
pp: 20,
priority: 1,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
multihit: [2, 5],
secondary: null,
target: "normal",
@@ -20976,7 +21414,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Water Sport",
pp: 15,
priority: 0,
- flags: {nonsky: 1},
+ flags: {nonsky: 1, metronome: 1},
pseudoWeather: 'watersport',
condition: {
duration: 5,
@@ -21015,7 +21453,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Water Spout",
pp: 5,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "allAdjacentFoes",
type: "Water",
@@ -21029,7 +21467,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Wave Crash",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
recoil: [33, 100],
secondary: null,
target: "normal",
@@ -21043,7 +21481,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Weather Ball",
pp: 10,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
onModifyType(move, pokemon) {
switch (pokemon.effectiveWeather()) {
case 'sunnyday':
@@ -21098,7 +21536,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Whirlpool",
pp: 15,
priority: 0,
- flags: {protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1},
volatileStatus: 'partiallytrapped',
secondary: null,
target: "normal",
@@ -21113,7 +21551,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Whirlwind",
pp: 20,
priority: -6,
- flags: {reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, wind: 1, noassist: 1, failcopycat: 1},
+ flags: {reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1, noassist: 1, failcopycat: 1, wind: 1},
forceSwitch: true,
secondary: null,
target: "normal",
@@ -21129,7 +21567,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Wicked Blow",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, punch: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, punch: 1},
willCrit: true,
secondary: null,
target: "normal",
@@ -21145,7 +21583,8 @@ export const Moves: {[moveid: string]: MoveData} = {
pp: 10,
priority: 0,
flags: {
- protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1,
+ protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1,
+ failcopycat: 1, failmimic: 1, failinstruct: 1, nosketch: 1,
},
secondary: {
chance: 10,
@@ -21208,11 +21647,15 @@ export const Moves: {[moveid: string]: MoveData} = {
accuracy: 80,
basePower: 100,
category: "Special",
- isNonstandard: "Unobtainable",
name: "Wildbolt Storm",
pp: 10,
priority: 0,
- flags: {protect: 1, mirror: 1, wind: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, wind: 1},
+ onModifyMove(move, pokemon, target) {
+ if (target && ['raindance', 'primordialsea'].includes(target.effectiveWeather())) {
+ move.accuracy = true;
+ }
+ },
secondary: {
chance: 20,
status: 'par',
@@ -21228,7 +21671,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Wild Charge",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
recoil: [1, 4],
secondary: null,
target: "normal",
@@ -21243,7 +21686,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Will-O-Wisp",
pp: 15,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
status: 'brn',
secondary: null,
target: "normal",
@@ -21259,7 +21702,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Wing Attack",
pp: 35,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, distance: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1},
secondary: null,
target: "any",
type: "Flying",
@@ -21273,14 +21716,21 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Wish",
pp: 10,
priority: 0,
- flags: {snatch: 1, heal: 1},
+ flags: {snatch: 1, heal: 1, metronome: 1},
slotCondition: 'Wish',
condition: {
- duration: 2,
onStart(pokemon, source) {
this.effectState.hp = source.maxhp / 2;
+ this.effectState.startingTurn = this.getOverflowedTurnCount();
+ if (this.effectState.startingTurn === 255) {
+ this.hint(`In Gen 8+, Wish will never resolve when used on the ${this.turn}th turn.`);
+ }
},
onResidualOrder: 4,
+ onResidual(side: any) {
+ if (this.getOverflowedTurnCount() <= this.effectState.startingTurn) return;
+ side.removeSlotCondition(this.getAtSlot(this.effectState.sourceSlot), 'wish');
+ },
onEnd(target) {
if (target && !target.fainted) {
const damage = this.heal(this.effectState.hp, target, target);
@@ -21304,7 +21754,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Withdraw",
pp: 40,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
def: 1,
},
@@ -21322,7 +21772,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Wonder Room",
pp: 10,
priority: 0,
- flags: {mirror: 1},
+ flags: {mirror: 1, metronome: 1},
pseudoWeather: 'wonderroom',
condition: {
duration: 5,
@@ -21372,7 +21822,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Wood Hammer",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
recoil: [33, 100],
secondary: null,
target: "normal",
@@ -21387,7 +21837,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Work Up",
pp: 30,
priority: 0,
- flags: {snatch: 1},
+ flags: {snatch: 1, metronome: 1},
boosts: {
atk: 1,
spa: 1,
@@ -21406,7 +21856,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Worry Seed",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1},
onTryImmunity(target) {
// Truant and Insomnia have special treatment; they fail before
// checking accuracy and will double Stomping Tantrum's BP
@@ -21415,7 +21865,7 @@ export const Moves: {[moveid: string]: MoveData} = {
}
},
onTryHit(target) {
- if (target.getAbility().isPermanent) {
+ if (target.getAbility().flags['cantsuppress']) {
return false;
}
},
@@ -21444,7 +21894,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Wrap",
pp: 20,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
volatileStatus: 'partiallytrapped',
secondary: null,
target: "normal",
@@ -21467,7 +21917,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Wring Out",
pp: 5,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: null,
target: "normal",
type: "Normal",
@@ -21483,7 +21933,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "X-Scissor",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1, slicing: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1},
secondary: null,
target: "normal",
type: "Bug",
@@ -21497,7 +21947,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Yawn",
pp: 10,
priority: 0,
- flags: {protect: 1, reflectable: 1, mirror: 1},
+ flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1},
volatileStatus: 'yawn',
onTryHit(target) {
if (target.status || !target.runStatusImmunity('slp')) {
@@ -21530,7 +21980,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Zap Cannon",
pp: 5,
priority: 0,
- flags: {bullet: 1, protect: 1, mirror: 1},
+ flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1},
secondary: {
chance: 100,
status: 'par',
@@ -21547,7 +21997,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Zen Headbutt",
pp: 15,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 20,
volatileStatus: 'flinch',
@@ -21564,7 +22014,7 @@ export const Moves: {[moveid: string]: MoveData} = {
name: "Zing Zap",
pp: 10,
priority: 0,
- flags: {contact: 1, protect: 1, mirror: 1},
+ flags: {contact: 1, protect: 1, mirror: 1, metronome: 1},
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -21595,4 +22045,47 @@ export const Moves: {[moveid: string]: MoveData} = {
type: "Electric",
contestType: "Cool",
},
+
+ // CAP moves
+
+ paleowave: {
+ num: 0,
+ accuracy: 100,
+ basePower: 85,
+ category: "Special",
+ isNonstandard: "CAP",
+ name: "Paleo Wave",
+ pp: 15,
+ priority: 0,
+ flags: {protect: 1, mirror: 1},
+ secondary: {
+ chance: 20,
+ boosts: {
+ atk: -1,
+ },
+ },
+ target: "normal",
+ type: "Rock",
+ contestType: "Beautiful",
+ },
+ shadowstrike: {
+ num: 0,
+ accuracy: 95,
+ basePower: 80,
+ category: "Physical",
+ isNonstandard: "CAP",
+ name: "Shadow Strike",
+ pp: 10,
+ priority: 0,
+ flags: {contact: 1, protect: 1, mirror: 1},
+ secondary: {
+ chance: 50,
+ boosts: {
+ def: -1,
+ },
+ },
+ target: "normal",
+ type: "Ghost",
+ contestType: "Clever",
+ },
};
diff --git a/data/natures.ts b/data/natures.ts
index 0f44111dd866..d7fc4a80a705 100644
--- a/data/natures.ts
+++ b/data/natures.ts
@@ -1,4 +1,4 @@
-export const Natures: {[k: string]: NatureData} = {
+export const Natures: import('../sim/dex-data').NatureDataTable = {
adamant: {
name: "Adamant",
plus: 'atk',
diff --git a/data/pokedex.ts b/data/pokedex.ts
index 1340d5a3d6be..f80acd870965 100644
--- a/data/pokedex.ts
+++ b/data/pokedex.ts
@@ -1,4 +1,4 @@
-export const Pokedex: {[speciesid: string]: SpeciesData} = {
+export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
bulbasaur: {
num: 1,
name: "Bulbasaur",
@@ -68,7 +68,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
genderRatio: {M: 0.875, F: 0.125},
baseStats: {hp: 80, atk: 82, def: 83, spa: 100, spd: 100, spe: 80},
abilities: {0: "Overgrow", H: "Chlorophyll"},
- heightm: 2,
+ heightm: 24,
weightkg: 0,
color: "Green",
eggGroups: ["Monster", "Grass"],
@@ -233,7 +233,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
genderRatio: {M: 0.875, F: 0.125},
baseStats: {hp: 79, atk: 83, def: 100, spa: 85, spd: 105, spe: 78},
abilities: {0: "Torrent", H: "Rain Dish"},
- heightm: 1.6,
+ heightm: 25,
weightkg: 0,
color: "Blue",
eggGroups: ["Monster", "Water 1"],
@@ -937,6 +937,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
color: "Purple",
evos: ["Nidorino"],
eggGroups: ["Monster", "Field"],
+ mother: 'nidoranf',
},
nidorino: {
num: 33,
@@ -1961,7 +1962,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
baseStats: {hp: 52, atk: 95, def: 55, spa: 58, spd: 62, spe: 55},
abilities: {0: "Steadfast", H: "Scrappy"},
heightm: 0.8,
- weightkg: 15,
+ weightkg: 42,
color: "Brown",
evos: ["Sirfetch\u2019d"],
eggGroups: ["Flying", "Field"],
@@ -2804,7 +2805,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
baseStats: {hp: 75, atk: 110, def: 105, spa: 30, spd: 70, spe: 100},
abilities: {0: "Intimidate", 1: "Anger Point", H: "Cud Chew"},
heightm: 1.4,
- weightkg: 88.4,
+ weightkg: 115,
color: "Black",
eggGroups: ["Field"],
},
@@ -2818,7 +2819,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
baseStats: {hp: 75, atk: 110, def: 105, spa: 30, spd: 70, spe: 100},
abilities: {0: "Intimidate", 1: "Anger Point", H: "Cud Chew"},
heightm: 1.4,
- weightkg: 88.4,
+ weightkg: 85,
color: "Black",
eggGroups: ["Field"],
},
@@ -2832,7 +2833,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
baseStats: {hp: 75, atk: 110, def: 105, spa: 30, spd: 70, spe: 100},
abilities: {0: "Intimidate", 1: "Anger Point", H: "Cud Chew"},
heightm: 1.4,
- weightkg: 88.4,
+ weightkg: 110,
color: "Black",
eggGroups: ["Field"],
},
@@ -3947,7 +3948,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
baseStats: {hp: 55, atk: 45, def: 45, spa: 25, spd: 25, spe: 15},
abilities: {0: "Poison Point", 1: "Water Absorb", H: "Unaware"},
heightm: 0.4,
- weightkg: 8.5,
+ weightkg: 11,
color: "Brown",
evos: ["Clodsire"],
eggGroups: ["Water 1", "Field"],
@@ -5236,7 +5237,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
name: "Shiftry",
types: ["Grass", "Dark"],
baseStats: {hp: 90, atk: 100, def: 60, spa: 90, spd: 60, spe: 80},
- abilities: {0: "Chlorophyll", 1: "Early Bird", H: "Pickpocket"},
+ abilities: {0: "Chlorophyll", 1: "Wind Rider", H: "Pickpocket"},
heightm: 1.3,
weightkg: 59.6,
color: "Brown",
@@ -5823,6 +5824,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
weightkg: 17.7,
color: "Gray",
eggGroups: ["Bug", "Human-Like"],
+ mother: 'illumise',
},
illumise: {
num: 314,
@@ -7152,7 +7154,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
types: ["Water"],
genderRatio: {M: 0.875, F: 0.125},
baseStats: {hp: 53, atk: 51, def: 53, spa: 61, spd: 56, spe: 40},
- abilities: {0: "Torrent", H: "Defiant"},
+ abilities: {0: "Torrent", H: "Competitive"},
heightm: 0.4,
weightkg: 5.2,
color: "Blue",
@@ -7165,7 +7167,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
types: ["Water"],
genderRatio: {M: 0.875, F: 0.125},
baseStats: {hp: 64, atk: 66, def: 68, spa: 81, spd: 76, spe: 50},
- abilities: {0: "Torrent", H: "Defiant"},
+ abilities: {0: "Torrent", H: "Competitive"},
heightm: 0.8,
weightkg: 23,
color: "Blue",
@@ -7180,7 +7182,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
types: ["Water", "Steel"],
genderRatio: {M: 0.875, F: 0.125},
baseStats: {hp: 84, atk: 86, def: 88, spa: 111, spd: 101, spe: 60},
- abilities: {0: "Torrent", H: "Defiant"},
+ abilities: {0: "Torrent", H: "Competitive"},
heightm: 1.7,
weightkg: 84.5,
color: "Blue",
@@ -8588,7 +8590,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Pressure", H: "Telepathy"},
heightm: 7,
weightkg: 850,
- color: "White",
+ color: "Blue",
eggGroups: ["Undiscovered"],
requiredItem: "Adamant Crystal",
changesFrom: "Dialga",
@@ -11646,9 +11648,23 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
prevo: "Frogadier",
evoLevel: 36,
eggGroups: ["Water 1"],
- otherFormes: ["Greninja-Ash"],
- // non-activated Greninja-Ash is forme 1, but PS does not currently distinguish it
- formeOrder: ["Greninja", "Greninja", "Greninja-Ash"],
+ otherFormes: ["Greninja-Bond", "Greninja-Ash"],
+ formeOrder: ["Greninja", "Greninja-Bond", "Greninja-Ash"],
+ },
+ greninjabond: {
+ num: 658,
+ name: "Greninja-Bond",
+ baseSpecies: "Greninja",
+ forme: "Bond",
+ types: ["Water", "Dark"],
+ gender: "M",
+ baseStats: {hp: 72, atk: 95, def: 67, spa: 103, spd: 71, spe: 122},
+ abilities: {0: "Battle Bond"},
+ heightm: 1.5,
+ weightkg: 40,
+ color: "Blue",
+ eggGroups: ["Undiscovered"],
+ gen: 7,
},
greninjaash: {
num: 658,
@@ -11664,7 +11680,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
color: "Blue",
eggGroups: ["Undiscovered"],
requiredAbility: "Battle Bond",
- battleOnly: "Greninja",
+ battleOnly: "Greninja-Bond",
gen: 7,
},
bunnelby: {
@@ -11819,7 +11835,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
forme: "Pokeball",
types: ["Bug", "Flying"],
baseStats: {hp: 80, atk: 52, def: 50, spa: 90, spd: 50, spe: 89},
- abilities: {0: "Shield Dust", 1: "Compound Eyes"},
+ abilities: {0: "Shield Dust", 1: "Compound Eyes", H: "Friend Guard"},
heightm: 1.2,
weightkg: 17,
color: "Black",
@@ -12437,6 +12453,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
color: "Purple",
prevo: "Sliggoo",
evoLevel: 50,
+ evoCondition: "during rain",
eggGroups: ["Dragon"],
otherFormes: ["Goodra-Hisui"],
formeOrder: ["Goodra", "Goodra-Hisui"],
@@ -12454,6 +12471,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
color: "Purple",
prevo: "Sliggoo-Hisui",
evoLevel: 50,
+ evoCondition: "during rain",
eggGroups: ["Dragon"],
},
klefki: {
@@ -13309,7 +13327,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
color: "Brown",
prevo: "Rockruff",
evoLevel: 25,
- evoCondition: "from a special Rockruff",
+ evoCondition: "from a special Rockruff during the evening",
eggGroups: ["Field"],
},
wishiwashi: {
@@ -14360,7 +14378,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 1.2,
weightkg: 55.5,
color: "White",
- tags: ["Sub-Legendary"],
+ tags: ["Ultra Beast"],
eggGroups: ["Undiscovered"],
},
buzzwole: {
@@ -14373,7 +14391,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 2.4,
weightkg: 333.6,
color: "Red",
- tags: ["Sub-Legendary"],
+ tags: ["Ultra Beast"],
eggGroups: ["Undiscovered"],
},
pheromosa: {
@@ -14386,7 +14404,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 1.8,
weightkg: 25,
color: "White",
- tags: ["Sub-Legendary"],
+ tags: ["Ultra Beast"],
eggGroups: ["Undiscovered"],
},
xurkitree: {
@@ -14399,7 +14417,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 3.8,
weightkg: 100,
color: "Black",
- tags: ["Sub-Legendary"],
+ tags: ["Ultra Beast"],
eggGroups: ["Undiscovered"],
},
celesteela: {
@@ -14412,7 +14430,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 9.2,
weightkg: 999.9,
color: "Green",
- tags: ["Sub-Legendary"],
+ tags: ["Ultra Beast"],
eggGroups: ["Undiscovered"],
},
kartana: {
@@ -14425,7 +14443,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 0.3,
weightkg: 0.1,
color: "White",
- tags: ["Sub-Legendary"],
+ tags: ["Ultra Beast"],
eggGroups: ["Undiscovered"],
},
guzzlord: {
@@ -14438,7 +14456,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 5.5,
weightkg: 888,
color: "Black",
- tags: ["Sub-Legendary"],
+ tags: ["Ultra Beast"],
eggGroups: ["Undiscovered"],
},
necrozma: {
@@ -14554,7 +14572,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 0.6,
weightkg: 1.8,
color: "Purple",
- tags: ["Sub-Legendary"],
+ tags: ["Ultra Beast"],
evos: ["Naganadel"],
eggGroups: ["Undiscovered"],
},
@@ -14568,7 +14586,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 3.6,
weightkg: 150,
color: "Purple",
- tags: ["Sub-Legendary"],
+ tags: ["Ultra Beast"],
prevo: "Poipole",
evoType: "levelMove",
evoMove: "Dragon Pulse",
@@ -14584,7 +14602,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 5.5,
weightkg: 820,
color: "Gray",
- tags: ["Sub-Legendary"],
+ tags: ["Ultra Beast"],
eggGroups: ["Undiscovered"],
},
blacephalon: {
@@ -14597,7 +14615,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 1.8,
weightkg: 13,
color: "White",
- tags: ["Sub-Legendary"],
+ tags: ["Ultra Beast"],
eggGroups: ["Undiscovered"],
},
zeraora: {
@@ -14707,7 +14725,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
genderRatio: {M: 0.875, F: 0.125},
baseStats: {hp: 100, atk: 125, def: 90, spa: 60, spd: 70, spe: 85},
abilities: {0: "Overgrow", H: "Grassy Surge"},
- heightm: 3,
+ heightm: 28,
weightkg: 0,
color: "Green",
eggGroups: ["Field", "Grass"],
@@ -14765,7 +14783,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
genderRatio: {M: 0.875, F: 0.125},
baseStats: {hp: 80, atk: 116, def: 75, spa: 65, spd: 75, spe: 119},
abilities: {0: "Blaze", H: "Libero"},
- heightm: 3,
+ heightm: 27,
weightkg: 0,
color: "White",
eggGroups: ["Field", "Human-Like"],
@@ -14823,7 +14841,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
genderRatio: {M: 0.875, F: 0.125},
baseStats: {hp: 70, atk: 85, def: 65, spa: 125, spd: 65, spe: 120},
abilities: {0: "Torrent", H: "Sniper"},
- heightm: 3,
+ heightm: 40,
weightkg: 0,
color: "Blue",
eggGroups: ["Water 1", "Field"],
@@ -15165,7 +15183,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 0.2,
weightkg: 0.5,
color: "Green",
- evos: ["Flapple", "Appletun"],
+ evos: ["Flapple", "Appletun", "Dipplin"],
eggGroups: ["Grass", "Dragon"],
},
flapple: {
@@ -15782,7 +15800,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Sweet Veil", H: "Aroma Veil"},
heightm: 30,
weightkg: 0,
- color: "White",
+ color: "Yellow",
eggGroups: ["Fairy", "Amorphous"],
changesFrom: "Alcremie",
},
@@ -15888,6 +15906,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
eggGroups: ["Fairy"],
otherFormes: ["Indeedee-F"],
formeOrder: ["Indeedee", "Indeedee-F"],
+ mother: 'indeedeef',
},
indeedeef: {
num: 876,
@@ -16028,6 +16047,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
heightm: 1.8,
weightkg: 40,
color: "White",
+ evos: ["Archaludon"],
eggGroups: ["Mineral", "Dragon"],
canGigantamax: "G-Max Depletion",
},
@@ -16244,7 +16264,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
genderRatio: {M: 0.875, F: 0.125},
baseStats: {hp: 100, atk: 130, def: 100, spa: 63, spd: 60, spe: 97},
abilities: {0: "Unseen Fist"},
- heightm: 3,
+ heightm: 29,
weightkg: 0,
color: "Gray",
eggGroups: ["Undiscovered"],
@@ -16259,8 +16279,8 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
genderRatio: {M: 0.875, F: 0.125},
baseStats: {hp: 100, atk: 130, def: 100, spa: 63, spd: 60, spe: 97},
abilities: {0: "Unseen Fist"},
- heightm: 1.9,
- weightkg: 105,
+ heightm: 26,
+ weightkg: 0,
color: "Gray",
eggGroups: ["Undiscovered"],
battleOnly: "Urshifu-Rapid-Strike",
@@ -16400,7 +16420,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Intimidate", 1: "Frisk", H: "Sap Sipper"},
heightm: 1.8,
weightkg: 95.1,
- color: "White",
+ color: "Gray",
prevo: "Stantler",
evoType: "other",
evoCondition: "Use Agile style Psyshield Bash 20 times",
@@ -16416,7 +16436,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
weightkg: 89,
color: "Brown",
prevo: "Scyther",
- evoType: "other",
+ evoType: "useItem",
evoCondition: "Black Augurite",
eggGroups: ["Bug"],
},
@@ -16433,6 +16453,23 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
evoType: "other",
evoCondition: "Peat Block when there's a full moon",
eggGroups: ["Field"],
+ otherFormes: ["Ursaluna-Bloodmoon"],
+ formeOrder: ["Ursaluna", "Ursaluna-Bloodmoon"],
+ },
+ ursalunabloodmoon: {
+ num: 901,
+ name: "Ursaluna-Bloodmoon",
+ baseSpecies: "Ursaluna",
+ forme: "Bloodmoon",
+ types: ["Ground", "Normal"],
+ gender: "M",
+ baseStats: {hp: 113, atk: 70, def: 120, spa: 135, spd: 65, spe: 52},
+ abilities: {0: "Mind's Eye"},
+ heightm: 2.7,
+ weightkg: 333,
+ color: "Brown",
+ eggGroups: ["Field"],
+ gen: 9,
},
basculegion: {
num: 902,
@@ -16477,7 +16514,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Pressure", 1: "Unburden", H: "Poison Touch"},
heightm: 1.3,
weightkg: 43,
- color: "Purple",
+ color: "Blue",
prevo: "Sneasel-Hisui",
evoType: "levelHold",
evoItem: "Razor Claw",
@@ -16490,9 +16527,9 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
types: ["Dark", "Poison"],
baseStats: {hp: 85, atk: 115, def: 95, spa: 65, spd: 65, spe: 85},
abilities: {0: "Poison Point", 1: "Swift Swim", H: "Intimidate"},
- heightm: 0.5,
- weightkg: 3.9,
- color: "Gray",
+ heightm: 2.5,
+ weightkg: 60.5,
+ color: "Black",
prevo: "Qwilfish-Hisui",
evoType: "other",
evoCondition: "Use Strong style Barb Barrage 20 times",
@@ -16971,7 +17008,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
types: ["Rock"],
baseStats: {hp: 60, atk: 60, def: 100, spa: 35, spd: 65, spe: 35},
abilities: {0: "Purifying Salt", 1: "Sturdy", H: "Clear Body"},
- heightm: 0.5,
+ heightm: 0.6,
weightkg: 105,
color: "Brown",
prevo: "Nacli",
@@ -16985,7 +17022,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
types: ["Rock"],
baseStats: {hp: 100, atk: 100, def: 130, spa: 45, spd: 90, spe: 35},
abilities: {0: "Purifying Salt", 1: "Sturdy", H: "Clear Body"},
- heightm: 2.5,
+ heightm: 2.3,
weightkg: 240,
color: "Brown",
prevo: "Naclstack",
@@ -17026,7 +17063,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Flash Fire", H: "Weak Armor"},
heightm: 1.6,
weightkg: 62,
- color: "Blue",
+ color: "Purple",
prevo: "Charcadet",
evoType: "useItem",
evoItem: "Malicious Armor",
@@ -17199,7 +17236,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
num: 951,
name: "Capsakid",
types: ["Grass"],
- baseStats: {hp: 52, atk: 62, def: 40, spa: 62, spd: 40, spe: 50},
+ baseStats: {hp: 50, atk: 62, def: 40, spa: 62, spd: 40, spe: 50},
abilities: {0: "Chlorophyll", 1: "Insomnia", H: "Klutz"},
heightm: 0.3,
weightkg: 3,
@@ -17559,7 +17596,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Commander", H: "Storm Drain"},
heightm: 0.3,
weightkg: 8,
- color: "Pink",
+ color: "Red",
cosmeticFormes: ["Tatsugiri-Droopy", "Tatsugiri-Stretchy"],
formeOrder: ["Tatsugiri", "Tatsugiri-Droopy", "Tatsugiri-Stretchy"],
eggGroups: ["Water 2"],
@@ -17687,7 +17724,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Protosynthesis"},
heightm: 1.2,
weightkg: 21,
- color: "Gray",
+ color: "White",
tags: ["Paradox"],
eggGroups: ["Undiscovered"],
},
@@ -17713,7 +17750,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Protosynthesis"},
heightm: 3.2,
weightkg: 92,
- color: "Red",
+ color: "White",
tags: ["Paradox"],
eggGroups: ["Undiscovered"],
},
@@ -17791,7 +17828,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Quark Drive"},
heightm: 1.2,
weightkg: 36,
- color: "Yellow",
+ color: "White",
tags: ["Paradox"],
eggGroups: ["Undiscovered"],
},
@@ -17828,7 +17865,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Thermal Exchange", H: "Ice Body"},
heightm: 0.8,
weightkg: 30,
- color: "Gray",
+ color: "Blue",
prevo: "Frigibax",
evoLevel: 35,
evos: ["Baxcalibur"],
@@ -17842,7 +17879,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Thermal Exchange", H: "Ice Body"},
heightm: 2.1,
weightkg: 210,
- color: "Gray",
+ color: "Blue",
prevo: "Arctibax",
evoLevel: 54,
eggGroups: ["Dragon", "Mineral"],
@@ -17857,7 +17894,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Rattled"},
heightm: 0.3,
weightkg: 5,
- color: "Brown",
+ color: "Red",
evos: ["Gholdengo"],
otherFormes: ["Gimmighoul-Roaming"],
formeOrder: ["Gimmighoul", "Gimmighoul-Roaming"],
@@ -17874,7 +17911,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Run Away"},
heightm: 0.1,
weightkg: 0.1,
- color: "Blue",
+ color: "Gray",
evos: ["Gholdengo"],
eggGroups: ["Undiscovered"],
},
@@ -17954,7 +17991,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Protosynthesis"},
heightm: 2,
weightkg: 380,
- color: "Green",
+ color: "Blue",
tags: ["Paradox"],
eggGroups: ["Undiscovered"],
},
@@ -17993,7 +18030,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
abilities: {0: "Hadron Engine"},
heightm: 3.5,
weightkg: 240,
- color: "Blue",
+ color: "Purple",
tags: ["Restricted Legendary"],
eggGroups: ["Undiscovered"],
},
@@ -18023,6 +18060,395 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
tags: ["Paradox"],
eggGroups: ["Undiscovered"],
},
+ dipplin: {
+ num: 1011,
+ name: "Dipplin",
+ types: ["Grass", "Dragon"],
+ baseStats: {hp: 80, atk: 80, def: 110, spa: 95, spd: 80, spe: 40},
+ abilities: {0: "Supersweet Syrup", 1: "Gluttony", H: "Sticky Hold"},
+ heightm: 0.4,
+ weightkg: 4.4,
+ color: "Green",
+ prevo: "Applin",
+ evos: ["Hydrapple"],
+ evoType: "useItem",
+ evoItem: "Syrupy Apple",
+ eggGroups: ["Grass", "Dragon"],
+ },
+ poltchageist: {
+ num: 1012,
+ name: "Poltchageist",
+ baseForme: "Counterfeit",
+ types: ["Grass", "Ghost"],
+ gender: "N",
+ baseStats: {hp: 40, atk: 45, def: 45, spa: 74, spd: 54, spe: 50},
+ abilities: {0: "Hospitality", H: "Heatproof"},
+ heightm: 0.1,
+ weightkg: 1.1,
+ color: "Green",
+ evos: ["Sinistcha"],
+ eggGroups: ["Mineral", "Amorphous"],
+ otherFormes: ["Poltchageist-Artisan"],
+ formeOrder: ["Poltchageist", "Poltchageist-Artisan"],
+ },
+ poltchageistartisan: {
+ num: 1012,
+ name: "Poltchageist-Artisan",
+ baseSpecies: "Poltchageist",
+ forme: "Artisan",
+ types: ["Grass", "Ghost"],
+ gender: "N",
+ baseStats: {hp: 40, atk: 45, def: 45, spa: 74, spd: 54, spe: 50},
+ abilities: {0: "Hospitality", H: "Heatproof"},
+ heightm: 0.1,
+ weightkg: 1.1,
+ color: "Green",
+ evos: ["Sinistcha-Masterpiece"],
+ eggGroups: ["Undiscovered"],
+ },
+ sinistcha: {
+ num: 1013,
+ name: "Sinistcha",
+ baseForme: "Unremarkable",
+ types: ["Grass", "Ghost"],
+ gender: "N",
+ baseStats: {hp: 71, atk: 60, def: 106, spa: 121, spd: 80, spe: 70},
+ abilities: {0: "Hospitality", H: "Heatproof"},
+ heightm: 0.2,
+ weightkg: 2.2,
+ color: "Green",
+ prevo: "Poltchageist",
+ evoType: "useItem",
+ evoItem: "Unremarkable Teacup",
+ eggGroups: ["Mineral", "Amorphous"],
+ otherFormes: ["Sinistcha-Masterpiece"],
+ formeOrder: ["Sinistcha", "Sinistcha-Masterpiece"],
+ },
+ sinistchamasterpiece: {
+ num: 1013,
+ name: "Sinistcha-Masterpiece",
+ baseSpecies: "Sinistcha",
+ forme: "Masterpiece",
+ types: ["Grass", "Ghost"],
+ gender: "N",
+ baseStats: {hp: 71, atk: 60, def: 106, spa: 121, spd: 80, spe: 70},
+ abilities: {0: "Hospitality", H: "Heatproof"},
+ heightm: 0.2,
+ weightkg: 2.2,
+ color: "Green",
+ prevo: "Poltchageist-Artisan",
+ evoType: "useItem",
+ evoItem: "Masterpiece Teacup",
+ eggGroups: ["Undiscovered"],
+ },
+ okidogi: {
+ num: 1014,
+ name: "Okidogi",
+ types: ["Poison", "Fighting"],
+ gender: "M",
+ baseStats: {hp: 88, atk: 128, def: 115, spa: 58, spd: 86, spe: 80},
+ abilities: {0: "Toxic Chain", H: "Guard Dog"},
+ heightm: 1.8,
+ weightkg: 92,
+ color: "Black",
+ tags: ["Sub-Legendary"],
+ eggGroups: ["Undiscovered"],
+ },
+ munkidori: {
+ num: 1015,
+ name: "Munkidori",
+ types: ["Poison", "Psychic"],
+ gender: "M",
+ baseStats: {hp: 88, atk: 75, def: 66, spa: 130, spd: 90, spe: 106},
+ abilities: {0: "Toxic Chain", H: "Frisk"},
+ heightm: 1,
+ weightkg: 12.2,
+ color: "Black",
+ tags: ["Sub-Legendary"],
+ eggGroups: ["Undiscovered"],
+ },
+ fezandipiti: {
+ num: 1016,
+ name: "Fezandipiti",
+ types: ["Poison", "Fairy"],
+ gender: "M",
+ baseStats: {hp: 88, atk: 91, def: 82, spa: 70, spd: 125, spe: 99},
+ abilities: {0: "Toxic Chain", H: "Technician"},
+ heightm: 1.4,
+ weightkg: 30.1,
+ color: "Black",
+ tags: ["Sub-Legendary"],
+ eggGroups: ["Undiscovered"],
+ },
+ ogerpon: {
+ num: 1017,
+ name: "Ogerpon",
+ baseForme: "Teal",
+ types: ["Grass"],
+ gender: "F",
+ baseStats: {hp: 80, atk: 120, def: 84, spa: 60, spd: 96, spe: 110},
+ abilities: {0: "Defiant"},
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Green",
+ tags: ["Sub-Legendary"],
+ eggGroups: ["Undiscovered"],
+ otherFormes: ["Ogerpon-Wellspring", "Ogerpon-Hearthflame", "Ogerpon-Cornerstone", "Ogerpon-Teal-Tera", "Ogerpon-Wellspring-Tera", "Ogerpon-Hearthflame-Tera", "Ogerpon-Cornerstone-Tera"],
+ formeOrder: ["Ogerpon", "Ogerpon-Wellspring", "Ogerpon-Hearthflame", "Ogerpon-Cornerstone", "Ogerpon-Teal-Tera", "Ogerpon-Wellspring-Tera", "Ogerpon-Hearthflame-Tera", "Ogerpon-Cornerstone-Tera"],
+ forceTeraType: "Grass",
+ },
+ ogerponwellspring: {
+ num: 1017,
+ name: "Ogerpon-Wellspring",
+ baseSpecies: "Ogerpon",
+ forme: "Wellspring",
+ types: ["Grass", "Water"],
+ gender: "F",
+ baseStats: {hp: 80, atk: 120, def: 84, spa: 60, spd: 96, spe: 110},
+ abilities: {0: "Water Absorb"},
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Blue",
+ eggGroups: ["Undiscovered"],
+ requiredItem: "Wellspring Mask",
+ changesFrom: "Ogerpon",
+ forceTeraType: "Water",
+ },
+ ogerponhearthflame: {
+ num: 1017,
+ name: "Ogerpon-Hearthflame",
+ baseSpecies: "Ogerpon",
+ forme: "Hearthflame",
+ types: ["Grass", "Fire"],
+ gender: "F",
+ baseStats: {hp: 80, atk: 120, def: 84, spa: 60, spd: 96, spe: 110},
+ abilities: {0: "Mold Breaker"},
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Red",
+ eggGroups: ["Undiscovered"],
+ requiredItem: "Hearthflame Mask",
+ changesFrom: "Ogerpon",
+ forceTeraType: "Fire",
+ },
+ ogerponcornerstone: {
+ num: 1017,
+ name: "Ogerpon-Cornerstone",
+ baseSpecies: "Ogerpon",
+ forme: "Cornerstone",
+ types: ["Grass", "Rock"],
+ gender: "F",
+ baseStats: {hp: 80, atk: 120, def: 84, spa: 60, spd: 96, spe: 110},
+ abilities: {0: "Sturdy"},
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Gray",
+ eggGroups: ["Undiscovered"],
+ requiredItem: "Cornerstone Mask",
+ changesFrom: "Ogerpon",
+ forceTeraType: "Rock",
+ },
+ ogerpontealtera: {
+ num: 1017,
+ name: "Ogerpon-Teal-Tera",
+ baseSpecies: "Ogerpon",
+ forme: "Teal-Tera",
+ types: ["Grass"],
+ gender: "F",
+ baseStats: {hp: 80, atk: 120, def: 84, spa: 60, spd: 96, spe: 110},
+ abilities: {0: "Embody Aspect (Teal)"},
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Green",
+ eggGroups: ["Undiscovered"],
+ battleOnly: "Ogerpon",
+ forceTeraType: "Grass",
+ },
+ ogerponwellspringtera: {
+ num: 1017,
+ name: "Ogerpon-Wellspring-Tera",
+ baseSpecies: "Ogerpon",
+ forme: "Wellspring-Tera",
+ types: ["Grass", "Water"],
+ gender: "F",
+ baseStats: {hp: 80, atk: 120, def: 84, spa: 60, spd: 96, spe: 110},
+ abilities: {0: "Embody Aspect (Wellspring)"},
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Blue",
+ eggGroups: ["Undiscovered"],
+ requiredItem: "Wellspring Mask",
+ battleOnly: "Ogerpon-Wellspring",
+ forceTeraType: "Water",
+ },
+ ogerponhearthflametera: {
+ num: 1017,
+ name: "Ogerpon-Hearthflame-Tera",
+ baseSpecies: "Ogerpon",
+ forme: "Hearthflame-Tera",
+ types: ["Grass", "Fire"],
+ gender: "F",
+ baseStats: {hp: 80, atk: 120, def: 84, spa: 60, spd: 96, spe: 110},
+ abilities: {0: "Embody Aspect (Hearthflame)"},
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Red",
+ eggGroups: ["Undiscovered"],
+ requiredItem: "Hearthflame Mask",
+ battleOnly: "Ogerpon-Hearthflame",
+ forceTeraType: "Fire",
+ },
+ ogerponcornerstonetera: {
+ num: 1017,
+ name: "Ogerpon-Cornerstone-Tera",
+ baseSpecies: "Ogerpon",
+ forme: "Cornerstone-Tera",
+ types: ["Grass", "Rock"],
+ gender: "F",
+ baseStats: {hp: 80, atk: 120, def: 84, spa: 60, spd: 96, spe: 110},
+ abilities: {0: "Embody Aspect (Cornerstone)"},
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Gray",
+ eggGroups: ["Undiscovered"],
+ requiredItem: "Cornerstone Mask",
+ battleOnly: "Ogerpon-Cornerstone",
+ forceTeraType: "Rock",
+ },
+ archaludon: {
+ num: 1018,
+ name: "Archaludon",
+ types: ["Steel", "Dragon"],
+ baseStats: {hp: 90, atk: 105, def: 130, spa: 125, spd: 65, spe: 85},
+ abilities: {0: "Stamina", 1: "Sturdy", H: "Stalwart"},
+ heightm: 2,
+ weightkg: 60,
+ color: "White",
+ prevo: "Duraludon",
+ evoType: "useItem",
+ evoItem: "Metal Alloy",
+ eggGroups: ["Mineral", "Dragon"],
+ },
+ hydrapple: {
+ num: 1019,
+ name: "Hydrapple",
+ types: ["Grass", "Dragon"],
+ baseStats: {hp: 106, atk: 80, def: 110, spa: 120, spd: 80, spe: 44},
+ abilities: {0: "Supersweet Syrup", 1: "Regenerator", H: "Sticky Hold"},
+ heightm: 1.8,
+ weightkg: 93,
+ color: "Green",
+ prevo: "Dipplin",
+ evoType: "levelMove",
+ evoMove: "Dragon Cheer",
+ eggGroups: ["Grass", "Dragon"],
+ },
+ gougingfire: {
+ num: 1020,
+ name: "Gouging Fire",
+ types: ["Fire", "Dragon"],
+ gender: "N",
+ baseStats: {hp: 105, atk: 115, def: 121, spa: 65, spd: 93, spe: 91},
+ abilities: {0: "Protosynthesis"},
+ heightm: 3.5,
+ weightkg: 590,
+ color: "Brown",
+ eggGroups: ["Undiscovered"],
+ },
+ ragingbolt: {
+ num: 1021,
+ name: "Raging Bolt",
+ types: ["Electric", "Dragon"],
+ gender: "N",
+ baseStats: {hp: 125, atk: 73, def: 91, spa: 137, spd: 89, spe: 75},
+ abilities: {0: "Protosynthesis"},
+ heightm: 5.2,
+ weightkg: 480,
+ color: "Yellow",
+ eggGroups: ["Undiscovered"],
+ },
+ ironboulder: {
+ num: 1022,
+ name: "Iron Boulder",
+ types: ["Rock", "Psychic"],
+ gender: "N",
+ baseStats: {hp: 90, atk: 120, def: 80, spa: 68, spd: 108, spe: 124},
+ abilities: {0: "Quark Drive"},
+ heightm: 1.5,
+ weightkg: 162.5,
+ color: "Gray",
+ eggGroups: ["Undiscovered"],
+ },
+ ironcrown: {
+ num: 1023,
+ name: "Iron Crown",
+ types: ["Steel", "Psychic"],
+ gender: "N",
+ baseStats: {hp: 90, atk: 72, def: 100, spa: 122, spd: 108, spe: 98},
+ abilities: {0: "Quark Drive"},
+ heightm: 1.6,
+ weightkg: 156,
+ color: "Blue",
+ eggGroups: ["Undiscovered"],
+ },
+ terapagos: {
+ num: 1024,
+ name: "Terapagos",
+ types: ["Normal"],
+ baseStats: {hp: 90, atk: 65, def: 85, spa: 65, spd: 85, spe: 60},
+ abilities: {0: "Tera Shift"},
+ heightm: 0.2,
+ weightkg: 6.5,
+ color: "Blue",
+ tags: ["Restricted Legendary"],
+ eggGroups: ["Undiscovered"],
+ otherFormes: ["Terapagos-Terastal", "Terapagos-Stellar"],
+ formeOrder: ["Terapagos", "Terapagos-Terastal", "Terapagos-Stellar"],
+ forceTeraType: "Stellar",
+ },
+ terapagosterastal: {
+ num: 1024,
+ name: "Terapagos-Terastal",
+ baseSpecies: "Terapagos",
+ forme: "Terastal",
+ types: ["Normal"],
+ baseStats: {hp: 95, atk: 95, def: 110, spa: 105, spd: 110, spe: 85},
+ abilities: {0: "Tera Shell"},
+ heightm: 0.3,
+ weightkg: 16,
+ color: "Blue",
+ eggGroups: ["Undiscovered"],
+ battleOnly: "Terapagos",
+ forceTeraType: "Stellar",
+ },
+ terapagosstellar: {
+ num: 1024,
+ name: "Terapagos-Stellar",
+ baseSpecies: "Terapagos",
+ forme: "Stellar",
+ types: ["Normal"],
+ baseStats: {hp: 160, atk: 105, def: 110, spa: 130, spd: 110, spe: 85},
+ abilities: {0: "Teraform Zero"},
+ heightm: 1.7,
+ weightkg: 77,
+ color: "Blue",
+ eggGroups: ["Undiscovered"],
+ battleOnly: "Terapagos",
+ forceTeraType: "Stellar",
+ },
+ pecharunt: {
+ num: 1025,
+ name: "Pecharunt",
+ types: ["Poison", "Ghost"],
+ gender: "N",
+ baseStats: {hp: 88, atk: 88, def: 160, spa: 88, spd: 88, spe: 88},
+ abilities: {0: "Poison Puppeteer"},
+ heightm: 0.3,
+ weightkg: 0.3,
+ color: "Purple",
+ tags: ["Mythical"],
+ eggGroups: ["Undiscovered"],
+ },
missingno: {
num: 0,
name: "MissingNo.",
@@ -18066,7 +18492,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
name: "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"},
+ abilities: {0: "Air Lock", 1: "Triage", H: "Shed Skin"},
heightm: 1.8,
weightkg: 44,
color: "White",
@@ -18218,8 +18644,8 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
num: -14,
name: "Kitsunoh",
types: ["Ghost", "Steel"],
- baseStats: {hp: 80, atk: 103, def: 85, spa: 55, spd: 80, spe: 110},
- abilities: {0: "Frisk", 1: "Limber", H: "Iron Fist"},
+ baseStats: {hp: 80, atk: 117, def: 85, spa: 55, spd: 80, spe: 128},
+ abilities: {0: "Frisk", 1: "Limber", H: "Trace"},
heightm: 1.1,
weightkg: 51,
color: "Gray",
@@ -19016,6 +19442,90 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
eggGroups: ["Field"],
gen: 8,
},
+ ababo: {
+ num: -69,
+ name: "Ababo",
+ types: ["Fairy"],
+ genderRatio: {M: 0.75, F: 0.25},
+ baseStats: {hp: 42, atk: 35, def: 27, spa: 35, spd: 35, spe: 38},
+ abilities: {0: "Pixilate", 1: "Rattled", H: "Own Tempo"},
+ heightm: 0.5,
+ weightkg: 3.5,
+ color: "White",
+ evos: ["Scattervein"],
+ eggGroups: ["Undiscovered"],
+ canHatch: true,
+ gen: 9,
+ },
+ scattervein: {
+ num: -70,
+ name: "Scattervein",
+ types: ["Fairy"],
+ genderRatio: {M: 0.75, F: 0.25},
+ baseStats: {hp: 75, atk: 74, def: 87, spa: 62, spd: 89, spe: 63},
+ abilities: {0: "Pixilate", 1: "Intimidate", H: "Own Tempo"},
+ heightm: 1.5,
+ weightkg: 25,
+ color: "Pink",
+ prevo: "Ababo",
+ evoType: "levelFriendship",
+ evos: ["Hemogoblin"],
+ eggGroups: ["Monster", "Fairy"],
+ canHatch: true,
+ gen: 9,
+ },
+ hemogoblin: {
+ num: -71,
+ name: "Hemogoblin",
+ types: ["Fairy", "Fire"],
+ genderRatio: {M: 0.75, F: 0.25},
+ baseStats: {hp: 90, atk: 96, def: 87, spa: 96, spd: 89, spe: 55},
+ abilities: {0: "Pixilate", 1: "Intimidate", H: "Own Tempo"},
+ heightm: 1.4,
+ weightkg: 85,
+ color: "Pink",
+ prevo: "Scattervein",
+ evoType: "useItem",
+ evoItem: "Fire Stone",
+ eggGroups: ["Monster", "Fairy"],
+ gen: 9,
+ },
+ cresceidon: {
+ num: -72,
+ name: "Cresceidon",
+ types: ["Water", "Fairy"],
+ baseStats: {hp: 80, atk: 32, def: 111, spa: 88, spd: 99, spe: 124},
+ abilities: {0: "Multiscale", 1: "Rough Skin", H: "Water Veil"},
+ heightm: 10,
+ weightkg: 999.9,
+ color: "Blue",
+ eggGroups: ["Amorphous", "Water 3"],
+ gen: 9,
+ },
+ chuggalong: {
+ num: -75,
+ name: "Chuggalong",
+ types: ["Dragon", "Poison"],
+ baseStats: {hp: 45, atk: 43, def: 117, spa: 120, spd: 110, spe: 108},
+ abilities: {0: "Armor Tail", 1: "White Smoke", H: "Slow Start"},
+ heightm: 6.2,
+ weightkg: 201.6,
+ color: "Black",
+ eggGroups: ["Dragon", "Mineral"],
+ gen: 9,
+ },
+ shox: {
+ num: -77,
+ name: "Shox",
+ types: ["Electric", "Normal"],
+ baseStats: {hp: 136, atk: 73, def: 81, spa: 90, spd: 98, spe: 56},
+ abilities: {0: "Electromorphosis", 1: "Sticky Hold"},
+ heightm: 3,
+ weightkg: 99.9,
+ color: "Brown",
+ eggGroups: ["Field"],
+ gen: 9,
+ },
// NOTE: PokeStar "formes" are not actually formes and thus do not have a formeOrder
pokestarsmeargle: {
num: -5000,
diff --git a/data/pokemongo.ts b/data/pokemongo.ts
new file mode 100644
index 000000000000..3c45b5b83663
--- /dev/null
+++ b/data/pokemongo.ts
@@ -0,0 +1,983 @@
+/**
+ * A listing of every Pokemon that can be obtained from Pokemon GO and how the can be obtained.
+ * If a Pokemon is not listed here, it cannot be obtained from Pokemon GO.
+ *
+ * Key:
+ * - Origin:
+ * - wild: Can be found in the overworld, either as a regular spawn or through a similar source such as GO Snapshot
+ * - egg: Hatches from 2, 5, or 10 km eggs
+ * - giovanni: Shadow Pokemon rescued from Giovanni and purified
+ * - 12kmegg: Hatches from a 12 km egg, which is obtained from Team GO Rocket Leaders which unlock at level 8
+ * - raid: Caught from defeating a raid boss
+ * - research: Reward from field research, special research, or research breakthrough
+ * If the Pokemon is obtainable from the wild, other sources do not need to be included due to redundancy.
+ * For shinies that can't be obtained from the wild, all other sources should be included.
+ *
+ * - Shiny origin restrictions:
+ * - noshiny: This Pokemon's shiny form is unavailable in Pokemon GO
+ * - nowildshiny: This Pokemon can't be obtained as shiny from the wild
+ *
+ * - Trade restrictions:
+ * - notrade: This Pokemon cannot be traded at all
+ * - specialtrade: This Pokemon must be traded in a special trade
+ *
+ * Certain sources have been excluded from this list, which are:
+ * - GO Battle League: same level and IV floor as raid bosses, and all from GO Battle League have also been in raids
+ * - Shadow Pokemon: most can also be obtained from the wild, and those that can't are from defeating Giovanni, which
+ * is handled as as its own encounter
+ */
+export const PokemonGoData: import('../sim/dex-species').PokemonGoDataTable = {
+ bulbasaur: {encounters: ['wild']},
+ ivysaur: {encounters: ['wild']},
+ venusaur: {encounters: ['wild']},
+ charmander: {encounters: ['wild']},
+ charmeleon: {encounters: ['wild']},
+ charizard: {encounters: ['wild']},
+ squirtle: {encounters: ['wild']},
+ wartortle: {encounters: ['wild']},
+ blastoise: {encounters: ['wild']},
+ caterpie: {encounters: ['wild']},
+ metapod: {encounters: ['wild']},
+ butterfree: {encounters: ['wild']},
+ weedle: {encounters: ['wild']},
+ kakuna: {encounters: ['wild']},
+ beedrill: {encounters: ['wild']},
+ pidgey: {encounters: ['wild']},
+ pidgeotto: {encounters: ['wild']},
+ pidgeot: {encounters: ['wild']},
+ rattata: {encounters: ['wild']},
+ rattataalola: {encounters: ['wild']},
+ raticate: {encounters: ['wild']},
+ raticatealola: {encounters: ['wild']},
+ spearow: {encounters: ['wild']},
+ fearow: {encounters: ['wild']},
+ ekans: {encounters: ['wild']},
+ arbok: {encounters: ['wild']},
+ pikachu: {encounters: ['wild']},
+ raichu: {encounters: ['wild']},
+ raichualola: {encounters: ['wild']},
+ sandshrew: {encounters: ['wild']},
+ sandshrewalola: {encounters: ['wild']},
+ sandslash: {encounters: ['wild']},
+ sandslashalola: {encounters: ['wild']},
+ nidoranf: {encounters: ['wild']},
+ nidorina: {encounters: ['wild']},
+ nidoqueen: {encounters: ['wild']},
+ nidoranm: {encounters: ['wild']},
+ nidorino: {encounters: ['wild']},
+ nidoking: {encounters: ['wild']},
+ clefairy: {encounters: ['wild']},
+ clefable: {encounters: ['wild']},
+ vulpix: {encounters: ['wild']},
+ vulpixalola: {encounters: ['wild']},
+ ninetales: {encounters: ['wild']},
+ ninetalesalola: {encounters: ['wild']},
+ jigglypuff: {encounters: ['wild']},
+ wigglytuff: {encounters: ['wild']},
+ zubat: {encounters: ['wild']},
+ golbat: {encounters: ['wild']},
+ oddish: {encounters: ['wild']},
+ gloom: {encounters: ['wild']},
+ vileplume: {encounters: ['wild']},
+ paras: {encounters: ['wild']},
+ parasect: {encounters: ['wild']},
+ venonat: {encounters: ['wild']},
+ venomoth: {encounters: ['wild']},
+ diglett: {encounters: ['wild']},
+ diglettalola: {encounters: ['wild']},
+ dugtrio: {encounters: ['wild']},
+ dugtrioalola: {encounters: ['wild']},
+ meowth: {encounters: ['wild']},
+ meowthalola: {encounters: ['wild']},
+ meowthgalar: {encounters: ['wild']},
+ persian: {encounters: ['wild']},
+ persianalola: {encounters: ['wild']},
+ psyduck: {encounters: ['wild']},
+ golduck: {encounters: ['wild']},
+ mankey: {encounters: ['wild']},
+ primeape: {encounters: ['wild']},
+ growlithe: {encounters: ['wild']},
+ growlithehisui: {encounters: ['egg', 'raid', 'research', 'noshiny']}, // wild encounter available on 2023-08-26
+ arcanine: {encounters: ['wild']},
+ arcaninehisui: {encounters: ['egg', 'raid', 'research', 'noshiny']}, // wild encounter available on 2023-08-26
+ poliwag: {encounters: ['wild']},
+ poliwhirl: {encounters: ['wild']},
+ poliwrath: {encounters: ['wild']},
+ abra: {encounters: ['wild']},
+ kadabra: {encounters: ['wild']},
+ alakazam: {encounters: ['wild']},
+ machop: {encounters: ['wild']},
+ machoke: {encounters: ['wild']},
+ machamp: {encounters: ['wild']},
+ bellsprout: {encounters: ['wild']},
+ weepinbell: {encounters: ['wild']},
+ victreebel: {encounters: ['wild']},
+ tentacool: {encounters: ['wild']},
+ tentacruel: {encounters: ['wild']},
+ geodude: {encounters: ['wild']},
+ geodudealola: {encounters: ['wild']},
+ graveler: {encounters: ['wild']},
+ graveleralola: {encounters: ['wild']},
+ golem: {encounters: ['wild']},
+ golemalola: {encounters: ['wild']},
+ ponyta: {encounters: ['wild']},
+ ponytagalar: {encounters: ['wild']},
+ rapidash: {encounters: ['wild']},
+ rapidashgalar: {encounters: ['wild']},
+ slowpoke: {encounters: ['wild']},
+ slowpokegalar: {encounters: ['wild']},
+ slowbro: {encounters: ['wild']},
+ slowbrogalar: {encounters: ['wild']},
+ magnemite: {encounters: ['wild']},
+ magneton: {encounters: ['wild']},
+ farfetchd: {encounters: ['wild']},
+ farfetchdgalar: {encounters: ['wild']},
+ doduo: {encounters: ['wild']},
+ dodrio: {encounters: ['wild']},
+ seel: {encounters: ['wild']},
+ dewgong: {encounters: ['wild']},
+ grimer: {encounters: ['wild']},
+ grimeralola: {encounters: ['wild']},
+ muk: {encounters: ['wild']},
+ mukalola: {encounters: ['wild']},
+ shellder: {encounters: ['wild']},
+ cloyster: {encounters: ['wild']},
+ gastly: {encounters: ['wild']},
+ haunter: {encounters: ['wild']},
+ gengar: {encounters: ['wild']},
+ onix: {encounters: ['wild']},
+ drowzee: {encounters: ['wild']},
+ hypno: {encounters: ['wild']},
+ krabby: {encounters: ['wild']},
+ kingler: {encounters: ['wild']},
+ voltorb: {encounters: ['wild']},
+ voltorbhisui: {encounters: ['wild', 'noshiny']},
+ electrode: {encounters: ['wild']},
+ electrodehisui: {encounters: ['wild', 'noshiny']},
+ exeggcute: {encounters: ['wild']},
+ exeggutor: {encounters: ['wild']},
+ exeggutoralola: {encounters: ['wild']},
+ cubone: {encounters: ['wild']},
+ marowak: {encounters: ['wild']},
+ marowakalola: {encounters: ['wild']},
+ hitmonlee: {encounters: ['wild']},
+ hitmonchan: {encounters: ['wild']},
+ lickitung: {encounters: ['wild']},
+ koffing: {encounters: ['wild']},
+ weezing: {encounters: ['wild']},
+ weezinggalar: {encounters: ['wild']},
+ rhyhorn: {encounters: ['wild']},
+ rhydon: {encounters: ['wild']},
+ chansey: {encounters: ['wild']},
+ tangela: {encounters: ['wild']},
+ kangaskhan: {encounters: ['wild']},
+ horsea: {encounters: ['wild']},
+ seadra: {encounters: ['wild']},
+ goldeen: {encounters: ['wild']},
+ seaking: {encounters: ['wild']},
+ staryu: {encounters: ['wild']},
+ starmie: {encounters: ['wild']},
+ mrmime: {encounters: ['wild']},
+ mrmimegalar: {encounters: ['wild']},
+ scyther: {encounters: ['wild']},
+ jynx: {encounters: ['wild']},
+ electabuzz: {encounters: ['wild']},
+ magmar: {encounters: ['wild']},
+ pinsir: {encounters: ['wild']},
+ tauros: {encounters: ['wild']},
+ magikarp: {encounters: ['wild']},
+ gyarados: {encounters: ['wild']},
+ ditto: {encounters: ['wild']},
+ eevee: {encounters: ['wild']},
+ vaporeon: {encounters: ['wild']},
+ jolteon: {encounters: ['wild']},
+ flareon: {encounters: ['wild']},
+ porygon: {encounters: ['wild']},
+ omanyte: {encounters: ['wild']},
+ omastar: {encounters: ['wild']},
+ kabuto: {encounters: ['wild']},
+ kabutops: {encounters: ['wild']},
+ aerodactyl: {encounters: ['wild']},
+ snorlax: {encounters: ['wild']},
+ articuno: {encounters: ['wild']},
+ articunogalar: {encounters: ['wild']},
+ zapdos: {encounters: ['wild']},
+ zapdosgalar: {encounters: ['wild']},
+ moltres: {encounters: ['wild']},
+ moltresgalar: {encounters: ['wild']},
+ dratini: {encounters: ['wild']},
+ dragonair: {encounters: ['wild']},
+ dragonite: {encounters: ['wild']},
+ mewtwo: {
+ encounters: ['giovanni', 'raid', 'research', 'specialtrade'],
+ LGPERestrictiveMoves: {
+ amnesia: 44,
+ swift: 33,
+ psybeam: 22,
+ mist: 11,
+ teleport: 1,
+ confuseray: 1,
+ confusion: 1,
+ disable: 1,
+ },
+ },
+ mew: {
+ encounters: ['research', 'notrade'],
+ LGPERestrictiveMoves: {
+ barrier: 44,
+ psywave: 33,
+ amnesia: 22,
+ swift: 11,
+ pound: 1,
+ confusion: 1,
+ mimic: 1,
+ },
+ },
+ chikorita: {encounters: ['wild']},
+ bayleef: {encounters: ['wild']},
+ meganium: {encounters: ['wild']},
+ cyndaquil: {encounters: ['wild']},
+ quilava: {encounters: ['wild']},
+ typhlosion: {encounters: ['wild']},
+ totodile: {encounters: ['wild']},
+ croconaw: {encounters: ['wild']},
+ feraligatr: {encounters: ['wild']},
+ sentret: {encounters: ['wild']},
+ furret: {encounters: ['wild']},
+ hoothoot: {encounters: ['wild']},
+ noctowl: {encounters: ['wild']},
+ ledyba: {encounters: ['wild']},
+ ledian: {encounters: ['wild']},
+ spinarak: {encounters: ['wild']},
+ ariados: {encounters: ['wild']},
+ crobat: {encounters: ['wild']},
+ chinchou: {encounters: ['wild']},
+ lanturn: {encounters: ['wild']},
+ pichu: {encounters: ['egg']},
+ cleffa: {encounters: ['egg']},
+ igglybuff: {encounters: ['egg']},
+ togepi: {encounters: ['egg']},
+ togetic: {encounters: ['wild']},
+ natu: {encounters: ['wild']},
+ xatu: {encounters: ['wild']},
+ mareep: {encounters: ['wild']},
+ flaaffy: {encounters: ['wild']},
+ ampharos: {encounters: ['wild']},
+ bellossom: {encounters: ['wild']},
+ marill: {encounters: ['wild']},
+ azumarill: {encounters: ['wild']},
+ sudowoodo: {encounters: ['wild']},
+ politoed: {encounters: ['wild']},
+ hoppip: {encounters: ['wild']},
+ skiploom: {encounters: ['wild']},
+ jumpluff: {encounters: ['wild']},
+ aipom: {encounters: ['wild']},
+ sunkern: {encounters: ['wild']},
+ sunflora: {encounters: ['wild']},
+ yanma: {encounters: ['wild']},
+ wooper: {encounters: ['wild']},
+ quagsire: {encounters: ['wild']},
+ espeon: {encounters: ['wild']},
+ umbreon: {encounters: ['wild']},
+ murkrow: {encounters: ['wild']},
+ slowking: {encounters: ['wild']},
+ slowkinggalar: {encounters: ['wild']},
+ misdreavus: {encounters: ['wild']},
+ unown: {encounters: ['wild']},
+ unownb: {encounters: ['wild']},
+ unownc: {encounters: ['wild']},
+ unownd: {encounters: ['wild']},
+ unowne: {encounters: ['wild']},
+ unownf: {encounters: ['wild']},
+ unowng: {encounters: ['wild']},
+ unownh: {encounters: ['wild']},
+ unowni: {encounters: ['wild']},
+ unownj: {encounters: ['wild']},
+ unownk: {encounters: ['wild', 'noshiny']},
+ unownl: {encounters: ['wild']},
+ unownm: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ unownn: {encounters: ['wild']},
+ unowno: {encounters: ['wild']},
+ unownp: {encounters: ['wild']},
+ unownq: {encounters: ['wild', 'noshiny']},
+ unownr: {encounters: ['wild']},
+ unowns: {encounters: ['wild']},
+ unownt: {encounters: ['wild']},
+ unownu: {encounters: ['wild']},
+ unownv: {encounters: ['wild']},
+ unownw: {encounters: ['wild', 'noshiny']},
+ unownx: {encounters: ['wild']},
+ unowny: {encounters: ['wild']},
+ unownz: {encounters: ['wild', 'noshiny']},
+ unownexclamation: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ unownquestion: {encounters: ['wild', 'noshiny']},
+ wobbuffet: {encounters: ['wild']},
+ girafarig: {encounters: ['wild']},
+ pineco: {encounters: ['wild']},
+ forretress: {encounters: ['wild']},
+ dunsparce: {encounters: ['wild']},
+ gligar: {encounters: ['wild']},
+ steelix: {encounters: ['wild']},
+ snubbull: {encounters: ['wild']},
+ granbull: {encounters: ['wild']},
+ qwilfish: {encounters: ['wild']},
+ qwilfishhisui: {encounters: ['wild', 'noshiny']},
+ scizor: {encounters: ['wild']},
+ shuckle: {encounters: ['wild']},
+ heracross: {encounters: ['wild']},
+ sneasel: {encounters: ['wild']},
+ sneaselhisui: {encounters: ['wild', 'noshiny']},
+ teddiursa: {encounters: ['wild']},
+ ursaring: {encounters: ['wild']},
+ slugma: {encounters: ['wild']},
+ magcargo: {encounters: ['wild']},
+ swinub: {encounters: ['wild']},
+ piloswine: {encounters: ['wild']},
+ corsola: {encounters: ['wild']},
+ remoraid: {encounters: ['wild']},
+ octillery: {encounters: ['wild']},
+ delibird: {encounters: ['wild']},
+ mantine: {encounters: ['wild']},
+ skarmory: {encounters: ['wild']},
+ houndour: {encounters: ['wild']},
+ houndoom: {encounters: ['wild']},
+ kingdra: {encounters: ['wild']},
+ phanpy: {encounters: ['wild']},
+ donphan: {encounters: ['wild']},
+ porygon2: {encounters: ['wild']},
+ stantler: {encounters: ['wild']},
+ smeargle: {encounters: ['wild']},
+ tyrogue: {encounters: ['egg']},
+ hitmontop: {encounters: ['wild']},
+ smoochum: {encounters: ['egg', 'research']},
+ elekid: {encounters: ['egg', 'research']},
+ magby: {encounters: ['egg']},
+ miltank: {encounters: ['wild']},
+ blissey: {encounters: ['wild']},
+ raikou: {encounters: ['wild']},
+ entei: {encounters: ['wild']},
+ suicune: {encounters: ['wild']},
+ larvitar: {encounters: ['wild']},
+ pupitar: {encounters: ['wild']},
+ tyranitar: {encounters: ['wild']},
+ lugia: {encounters: ['giovanni', 'raid', 'research', 'specialtrade']},
+ hooh: {encounters: ['giovanni', 'raid', 'research', 'specialtrade']},
+ celebi: {encounters: ['research', 'notrade']},
+ treecko: {encounters: ['wild']},
+ grovyle: {encounters: ['wild']},
+ sceptile: {encounters: ['wild']},
+ torchic: {encounters: ['wild']},
+ combusken: {encounters: ['wild']},
+ blaziken: {encounters: ['wild']},
+ mudkip: {encounters: ['wild']},
+ marshtomp: {encounters: ['wild']},
+ swampert: {encounters: ['wild']},
+ poochyena: {encounters: ['wild']},
+ mightyena: {encounters: ['wild']},
+ zigzagoon: {encounters: ['wild']},
+ zigzagoongalar: {encounters: ['wild']},
+ linoone: {encounters: ['wild']},
+ linoonegalar: {encounters: ['wild']},
+ wurmple: {encounters: ['wild']},
+ silcoon: {encounters: ['wild']},
+ beautifly: {encounters: ['wild']},
+ cascoon: {encounters: ['wild']},
+ dustox: {encounters: ['wild']},
+ lotad: {encounters: ['wild']},
+ lombre: {encounters: ['wild']},
+ ludicolo: {encounters: ['wild']},
+ seedot: {encounters: ['wild']},
+ nuzleaf: {encounters: ['wild']},
+ shiftry: {encounters: ['wild']},
+ taillow: {encounters: ['wild']},
+ swellow: {encounters: ['wild']},
+ wingull: {encounters: ['wild']},
+ pelipper: {encounters: ['wild']},
+ ralts: {encounters: ['wild']},
+ kirlia: {encounters: ['wild']},
+ gardevoir: {encounters: ['wild']},
+ surskit: {encounters: ['wild']},
+ masquerain: {encounters: ['wild']},
+ shroomish: {encounters: ['wild']},
+ breloom: {encounters: ['wild']},
+ slakoth: {encounters: ['wild']},
+ vigoroth: {encounters: ['wild']},
+ slaking: {encounters: ['wild']},
+ nincada: {encounters: ['wild']},
+ ninjask: {encounters: ['wild']},
+ shedinja: {encounters: ['research']},
+ whismur: {encounters: ['wild']},
+ loudred: {encounters: ['wild']},
+ exploud: {encounters: ['wild']},
+ makuhita: {encounters: ['wild']},
+ hariyama: {encounters: ['wild']},
+ azurill: {encounters: ['egg']},
+ nosepass: {encounters: ['wild']},
+ skitty: {encounters: ['wild']},
+ delcatty: {encounters: ['wild']},
+ sableye: {encounters: ['wild']},
+ mawile: {encounters: ['wild']},
+ aron: {encounters: ['wild']},
+ lairon: {encounters: ['wild']},
+ aggron: {encounters: ['wild']},
+ meditite: {encounters: ['wild']},
+ medicham: {encounters: ['wild']},
+ electrike: {encounters: ['wild']},
+ manectric: {encounters: ['wild']},
+ plusle: {encounters: ['wild']},
+ minun: {encounters: ['wild']},
+ volbeat: {encounters: ['wild']},
+ illumise: {encounters: ['wild']},
+ roselia: {encounters: ['wild']},
+ gulpin: {encounters: ['wild']},
+ swalot: {encounters: ['wild']},
+ carvanha: {encounters: ['wild']},
+ sharpedo: {encounters: ['wild']},
+ wailmer: {encounters: ['wild']},
+ wailord: {encounters: ['wild']},
+ numel: {encounters: ['wild']},
+ camerupt: {encounters: ['wild']},
+ torkoal: {encounters: ['wild']},
+ spoink: {encounters: ['wild']},
+ grumpig: {encounters: ['wild']},
+ trapinch: {encounters: ['wild']},
+ vibrava: {encounters: ['wild']},
+ flygon: {encounters: ['wild']},
+ cacnea: {encounters: ['wild']},
+ cacturne: {encounters: ['wild']},
+ swablu: {encounters: ['wild']},
+ altaria: {encounters: ['wild']},
+ zangoose: {encounters: ['wild']},
+ seviper: {encounters: ['wild']},
+ lunatone: {encounters: ['wild']},
+ solrock: {encounters: ['wild']},
+ barboach: {encounters: ['wild']},
+ whiscash: {encounters: ['wild']},
+ corphish: {encounters: ['wild']},
+ crawdaunt: {encounters: ['wild']},
+ baltoy: {encounters: ['wild']},
+ claydol: {encounters: ['wild']},
+ lileep: {encounters: ['wild']},
+ cradily: {encounters: ['wild']},
+ anorith: {encounters: ['wild']},
+ armaldo: {encounters: ['wild']},
+ feebas: {encounters: ['wild']},
+ milotic: {encounters: ['wild']},
+ castform: {encounters: ['wild']},
+ kecleon: {encounters: ['wild']},
+ shuppet: {encounters: ['wild']},
+ banette: {encounters: ['wild']},
+ duskull: {encounters: ['wild']},
+ dusclops: {encounters: ['wild']},
+ tropius: {encounters: ['wild']},
+ chimecho: {encounters: ['wild']},
+ absol: {encounters: ['wild']},
+ wynaut: {encounters: ['egg']},
+ snorunt: {encounters: ['wild']},
+ glalie: {encounters: ['wild']},
+ spheal: {encounters: ['wild']},
+ sealeo: {encounters: ['wild']},
+ walrein: {encounters: ['wild']},
+ clamperl: {encounters: ['wild']},
+ gorebyss: {encounters: ['wild']},
+ huntail: {encounters: ['wild']},
+ relicanth: {encounters: ['wild']},
+ luvdisc: {encounters: ['wild']},
+ bagon: {encounters: ['wild']},
+ shelgon: {encounters: ['wild']},
+ salamence: {encounters: ['wild']},
+ beldum: {encounters: ['wild']},
+ metang: {encounters: ['wild']},
+ metagross: {encounters: ['wild']},
+ regirock: {encounters: ['giovanni', 'raid', 'research', 'specialtrade']},
+ regice: {encounters: ['giovanni', 'raid', 'research', 'specialtrade']},
+ registeel: {encounters: ['giovanni', 'raid', 'research', 'specialtrade']},
+ latias: {encounters: ['wild']},
+ latios: {encounters: ['wild']},
+ kyogre: {encounters: ['raid', 'research', 'specialtrade']},
+ groudon: {encounters: ['raid', 'research', 'specialtrade']},
+ rayquaza: {encounters: ['raid', 'research', 'specialtrade']},
+ jirachi: {encounters: ['research', 'notrade']},
+ deoxys: {encounters: ['raid', 'specialtrade']},
+ turtwig: {encounters: ['wild']},
+ grotle: {encounters: ['wild']},
+ torterra: {encounters: ['wild']},
+ chimchar: {encounters: ['wild']},
+ monferno: {encounters: ['wild']},
+ infernape: {encounters: ['wild']},
+ piplup: {encounters: ['wild']},
+ prinplup: {encounters: ['wild']},
+ empoleon: {encounters: ['wild']},
+ starly: {encounters: ['wild']},
+ staravia: {encounters: ['wild']},
+ staraptor: {encounters: ['wild']},
+ bidoof: {encounters: ['wild']},
+ bibarel: {encounters: ['wild']},
+ kricketot: {encounters: ['wild']},
+ kricketune: {encounters: ['wild']},
+ shinx: {encounters: ['wild']},
+ luxio: {encounters: ['wild']},
+ luxray: {encounters: ['wild']},
+ budew: {encounters: ['egg']},
+ roserade: {encounters: ['wild']},
+ cranidos: {encounters: ['wild']},
+ rampardos: {encounters: ['wild']},
+ shieldon: {encounters: ['wild']},
+ bastiodon: {encounters: ['wild']},
+ burmy: {encounters: ['wild']},
+ wormadam: {encounters: ['wild']},
+ wormadamsandy: {encounters: ['wild']},
+ wormadamtrash: {encounters: ['wild']},
+ mothim: {encounters: ['wild']},
+ combee: {encounters: ['wild']},
+ vespiquen: {encounters: ['wild']},
+ pachirisu: {encounters: ['wild', 'noshiny']},
+ buizel: {encounters: ['wild']},
+ floatzel: {encounters: ['wild']},
+ cherubi: {encounters: ['wild']},
+ shellos: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-26
+ shelloseast: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-26
+ gastrodon: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-26
+ gastrodoneast: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-26
+ ambipom: {encounters: ['wild']},
+ drifloon: {encounters: ['wild']},
+ drifblim: {encounters: ['wild']},
+ buneary: {encounters: ['wild']},
+ lopunny: {encounters: ['wild']},
+ mismagius: {encounters: ['wild']},
+ honchkrow: {encounters: ['wild']},
+ glameow: {encounters: ['wild']},
+ purugly: {encounters: ['wild']},
+ chingling: {encounters: ['egg', 'noshiny']},
+ stunky: {encounters: ['wild', 'noshiny']},
+ skuntank: {encounters: ['wild', 'noshiny']},
+ bronzor: {encounters: ['wild']},
+ bronzong: {encounters: ['wild']},
+ bonsly: {encounters: ['egg']},
+ mimejr: {encounters: ['egg']},
+ happiny: {encounters: ['egg']},
+ chatot: {encounters: ['wild', 'noshiny']},
+ spiritomb: {encounters: ['research']},
+ gible: {encounters: ['wild']},
+ gabite: {encounters: ['wild']},
+ garchomp: {encounters: ['wild']},
+ munchlax: {encounters: ['egg']},
+ riolu: {encounters: ['egg']},
+ lucario: {encounters: ['egg', 'research']}, // wild encounter available on 2023-08-18
+ hippopotas: {encounters: ['wild']},
+ hippowdon: {encounters: ['wild']},
+ skorupi: {encounters: ['wild']},
+ drapion: {encounters: ['wild']},
+ croagunk: {encounters: ['wild']},
+ toxicroak: {encounters: ['wild']},
+ carnivine: {encounters: ['wild', 'noshiny']},
+ finneon: {encounters: ['wild']},
+ lumineon: {encounters: ['wild']},
+ mantyke: {encounters: ['egg']},
+ snover: {encounters: ['wild']},
+ abomasnow: {encounters: ['wild']},
+ weavile: {encounters: ['wild']},
+ magnezone: {encounters: ['wild']},
+ lickilicky: {encounters: ['wild']},
+ rhyperior: {encounters: ['wild']},
+ tangrowth: {encounters: ['wild']},
+ electivire: {encounters: ['wild']},
+ magmortar: {encounters: ['wild']},
+ togekiss: {encounters: ['wild']},
+ yanmega: {encounters: ['wild']},
+ leafeon: {encounters: ['wild']},
+ glaceon: {encounters: ['wild']},
+ gliscor: {encounters: ['wild']},
+ mamoswine: {encounters: ['wild']},
+ porygonz: {encounters: ['wild']},
+ gallade: {encounters: ['wild']},
+ probopass: {encounters: ['wild']},
+ dusknoir: {encounters: ['wild']},
+ froslass: {encounters: ['wild']},
+ rotom: {encounters: ['wild', 'noshiny']},
+ uxie: {encounters: ['wild']},
+ mesprit: {encounters: ['wild']},
+ azelf: {encounters: ['wild']},
+ dialga: {encounters: ['raid', 'specialtrade']},
+ palkia: {encounters: ['raid', 'specialtrade']},
+ heatran: {encounters: ['raid', 'specialtrade']},
+ regigigas: {encounters: ['raid', 'research', 'specialtrade']},
+ giratina: {encounters: ['raid', 'specialtrade']},
+ cresselia: {encounters: ['raid', 'research', 'specialtrade']},
+ darkrai: {encounters: ['raid', 'notrade']},
+ shaymin: {encounters: ['research', 'noshiny', 'notrade']},
+ victini: {encounters: ['research', 'noshiny', 'notrade']},
+ snivy: {encounters: ['wild']},
+ servine: {encounters: ['wild']},
+ serperior: {encounters: ['wild']},
+ tepig: {encounters: ['wild']},
+ pignite: {encounters: ['wild']},
+ emboar: {encounters: ['wild']},
+ oshawott: {encounters: ['wild']},
+ dewott: {encounters: ['wild']},
+ samurott: {encounters: ['wild']},
+ patrat: {encounters: ['wild']},
+ watchog: {encounters: ['wild']},
+ lillipup: {encounters: ['wild']},
+ herdier: {encounters: ['wild']},
+ stoutland: {encounters: ['wild']},
+ purrloin: {encounters: ['wild']},
+ liepard: {encounters: ['wild']},
+ pansage: {encounters: ['wild']},
+ simisage: {encounters: ['wild']},
+ pansear: {encounters: ['wild']},
+ simisear: {encounters: ['wild']},
+ panpour: {encounters: ['wild']},
+ simipour: {encounters: ['wild']},
+ munna: {encounters: ['wild']},
+ musharna: {encounters: ['wild']},
+ pidove: {encounters: ['wild']},
+ tranquill: {encounters: ['wild']},
+ unfezant: {encounters: ['wild']},
+ blitzle: {encounters: ['wild']},
+ zebstrika: {encounters: ['wild']},
+ roggenrola: {encounters: ['wild']},
+ boldore: {encounters: ['wild']},
+ gigalith: {encounters: ['wild']},
+ woobat: {encounters: ['wild']},
+ swoobat: {encounters: ['wild']},
+ drilbur: {encounters: ['wild']},
+ exacdrill: {encounters: ['wild']},
+ audino: {encounters: ['wild']},
+ timburr: {encounters: ['egg', 'raid']}, // wild encounter available on 2023-08-26
+ gurdurr: {encounters: ['egg', 'raid']}, // wild encounter available on 2023-08-26
+ conkeldurr: {encounters: ['egg', 'raid']}, // wild encounter available on 2023-08-26
+ tympole: {encounters: ['wild']},
+ palpitoad: {encounters: ['wild']},
+ seismitoad: {encounters: ['wild']},
+ throh: {encounters: ['wild']},
+ sawk: {encounters: ['wild']},
+ sewaddle: {encounters: ['wild']},
+ swadloon: {encounters: ['wild']},
+ leavanny: {encounters: ['wild']},
+ venipede: {encounters: ['wild']},
+ whirlipede: {encounters: ['wild']},
+ scolipede: {encounters: ['wild']},
+ cottonee: {encounters: ['wild']},
+ whimsicott: {encounters: ['wild']},
+ petilil: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ lilligant: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ basculin: {encounters: ['wild', 'noshiny']},
+ basculinbluestriped: {encounters: ['wild', 'noshiny']},
+ sandile: {encounters: ['12kmegg', 'research', 'noshiny']},
+ krokorok: {encounters: ['12kmegg', 'research', 'noshiny']},
+ krookodile: {encounters: ['12kmegg', 'research', 'noshiny']},
+ darumaka: {encounters: ['wild']},
+ darumakagalar: {encounters: ['wild']},
+ darmanitan: {encounters: ['wild']},
+ darmanitangalar: {encounters: ['wild']},
+ maractus: {encounters: ['wild', 'noshiny']},
+ dwebble: {encounters: ['wild']},
+ crustle: {encounters: ['wild']},
+ scraggy: {encounters: ['wild', 'noshiny']},
+ scrafty: {encounters: ['wild', 'noshiny']},
+ sigilyph: {encounters: ['wild', 'noshiny']},
+ yamask: {encounters: ['wild']},
+ yamaskgalar: {encounters: ['egg', 'raid', 'research']},
+ cofagrigus: {encounters: ['wild']},
+ tirtouga: {encounters: ['wild']},
+ carracosta: {encounters: ['wild']},
+ archen: {encounters: ['wild']},
+ archeops: {encounters: ['wild']},
+ trubbish: {encounters: ['wild']},
+ garbodor: {encounters: ['wild']},
+ zorua: {encounters: ['wild', 'noshiny']},
+ zoroark: {encounters: ['wild', 'noshiny']},
+ minccino: {encounters: ['wild']},
+ cinccino: {encounters: ['wild']},
+ gothita: {encounters: ['wild', 'noshiny']},
+ gothorita: {encounters: ['wild', 'noshiny']},
+ gothitelle: {encounters: ['wild', 'noshiny']},
+ solosis: {encounters: ['wild', 'noshiny']},
+ duosion: {encounters: ['wild', 'noshiny']},
+ reuniclus: {encounters: ['wild', 'noshiny']},
+ ducklett: {encounters: ['wild', 'noshiny']},
+ swanna: {encounters: ['wild', 'noshiny']},
+ vanillite: {encounters: ['wild', 'noshiny']},
+ vanillish: {encounters: ['wild', 'noshiny']},
+ vanilluxe: {encounters: ['wild', 'noshiny']},
+ deerling: {encounters: ['wild', 'noshiny']},
+ deerlingsummer: {encounters: ['wild', 'noshiny']},
+ deerlingautumn: {encounters: ['wild', 'noshiny']},
+ deerlingwinter: {encounters: ['wild', 'noshiny']},
+ sawsbuck: {encounters: ['wild', 'noshiny']},
+ sawsbucksummer: {encounters: ['wild', 'noshiny']},
+ sawsbuckautumn: {encounters: ['wild', 'noshiny']},
+ sawsbuckwinter: {encounters: ['wild', 'noshiny']},
+ emolga: {encounters: ['wild', 'noshiny']},
+ karrablast: {encounters: ['wild']},
+ escavalier: {encounters: ['wild']},
+ foongus: {encounters: ['wild']},
+ amoonguss: {encounters: ['wild']},
+ frillish: {encounters: ['wild']},
+ jellicent: {encounters: ['wild']},
+ alomomola: {encounters: ['wild']},
+ joltik: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-26
+ galvantula: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-26
+ ferroseed: {encounters: ['wild']},
+ ferrothorn: {encounters: ['wild']},
+ klink: {encounters: ['wild']},
+ klang: {encounters: ['wild']},
+ klinklang: {encounters: ['wild']},
+ tynamo: {encounters: ['wild', 'noshiny']},
+ eelektrik: {encounters: ['wild', 'noshiny']},
+ eelektross: {encounters: ['wild', 'noshiny']},
+ elgyem: {encounters: ['wild']},
+ beheeyem: {encounters: ['wild']},
+ litwick: {encounters: ['wild']},
+ lampent: {encounters: ['wild']},
+ chandelure: {encounters: ['wild']},
+ axew: {encounters: ['wild']},
+ fraxure: {encounters: ['wild']},
+ haxorus: {encounters: ['wild']},
+ cubchoo: {encounters: ['wild']},
+ beartic: {encounters: ['wild']},
+ cryogonal: {encounters: ['wild', 'noshiny']},
+ shelmet: {encounters: ['wild']},
+ accelgor: {encounters: ['wild']},
+ stunfisk: {encounters: ['wild']},
+ stunfiskgalar: {encounters: ['wild']},
+ mienfoo: {encounters: ['wild', 'noshiny']},
+ mienshao: {encounters: ['wild', 'noshiny']},
+ druddigon: {encounters: ['raid', 'research']},
+ golett: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-18
+ golurk: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-18
+ pawniard: {encounters: ['12kmegg', 'research']}, // wild encounter available on 2023-08-18
+ bisharp: {encounters: ['12kmegg', 'research']}, // wild encounter available on 2023-08-18
+ bouffalant: {encounters: ['wild', 'noshiny']},
+ rufflet: {encounters: ['wild']},
+ braviary: {encounters: ['wild']},
+ braviaryhisui: {encounters: ['raid']},
+ vullaby: {encounters: ['wild']},
+ mandibuzz: {encounters: ['wild']},
+ heatmor: {encounters: ['wild']},
+ durant: {encounters: ['wild']},
+ deino: {encounters: ['wild']},
+ zweilous: {encounters: ['wild']},
+ hydreigon: {encounters: ['wild']},
+ larvesta: {encounters: ['egg', 'noshiny']},
+ volcarona: {encounters: ['egg', 'noshiny']},
+ cobalion: {encounters: ['raid', 'specialtrade']},
+ terrakion: {encounters: ['raid', 'specialtrade']},
+ virizion: {encounters: ['raid', 'specialtrade']},
+ tornadus: {encounters: ['raid', 'specialtrade']},
+ thundurus: {encounters: ['raid', 'specialtrade']},
+ reshiram: {encounters: ['raid', 'specialtrade']},
+ zekrom: {encounters: ['raid', 'specialtrade']},
+ landorus: {encounters: ['raid', 'specialtrade']},
+ kyurem: {encounters: ['raid', 'specialtrade']},
+ // Kyurem-Black/White are not directly obtained from Pokemon GO but should be able to have legal Pokemon GO origin
+ kyuremblack: {encounters: ['raid', 'specialtrade']},
+ kyuremwhite: {encounters: ['raid', 'specialtrade']},
+ keldeo: {encounters: ['research', 'noshiny', 'notrade']},
+ meloetta: {encounters: ['research', 'noshiny', 'notrade']},
+ genesect: {encounters: ['raid', 'research', 'notrade']},
+ chespin: {encounters: ['wild']},
+ quilladin: {encounters: ['wild']},
+ chesnaught: {encounters: ['wild']},
+ fennekin: {encounters: ['wild']},
+ braixen: {encounters: ['wild']},
+ delphox: {encounters: ['wild']},
+ froakie: {encounters: ['wild', 'noshiny']},
+ frogadier: {encounters: ['wild', 'noshiny']},
+ greninja: {encounters: ['wild', 'noshiny']},
+ bunnelby: {encounters: ['wild']},
+ diggersby: {encounters: ['wild']},
+ fletchling: {encounters: ['wild']},
+ fletchinder: {encounters: ['wild']},
+ talonflame: {encounters: ['wild']},
+ // Scatterbug is actually obtained in a special type of encounter,
+ // but the level and IV floors are the same as research encounters
+ scatterbug: {encounters: ['research', 'noshiny']},
+ spewpa: {encounters: ['research', 'noshiny']},
+ vivillon: {encounters: ['research', 'noshiny']},
+ vivillonarchipelago: {encounters: ['research', 'noshiny']},
+ vivilloncontinent: {encounters: ['research', 'noshiny']},
+ vivillonelegant: {encounters: ['research', 'noshiny']},
+ vivillongarden: {encounters: ['research', 'noshiny']},
+ vivillonhighplains: {encounters: ['research', 'noshiny']},
+ vivillonicysnow: {encounters: ['research', 'noshiny']},
+ vivillonjungle: {encounters: ['research', 'noshiny']},
+ vivillonmarine: {encounters: ['research', 'noshiny']},
+ vivillonmodern: {encounters: ['research', 'noshiny']},
+ vivillonmonsoon: {encounters: ['research', 'noshiny']},
+ vivillonocean: {encounters: ['research', 'noshiny']},
+ vivillonpolar: {encounters: ['research', 'noshiny']},
+ vivillonriver: {encounters: ['research', 'noshiny']},
+ vivillonsandstorm: {encounters: ['research', 'noshiny']},
+ vivillonsavanna: {encounters: ['research', 'noshiny']},
+ vivillonsun: {encounters: ['research', 'noshiny']},
+ vivillontundra: {encounters: ['research', 'noshiny']},
+ litleo: {encounters: ['wild']},
+ pyroar: {encounters: ['wild']},
+ flabebe: {encounters: ['wild', 'noshiny']},
+ flabebeblue: {encounters: ['wild', 'noshiny']},
+ flabebeorange: {encounters: ['wild', 'noshiny']},
+ flabebewhite: {encounters: ['wild', 'noshiny']},
+ flabebeyellow: {encounters: ['wild', 'noshiny']},
+ floette: {encounters: ['wild', 'noshiny']},
+ floetteblue: {encounters: ['wild', 'noshiny']},
+ floetteorange: {encounters: ['wild', 'noshiny']},
+ floettewhite: {encounters: ['wild', 'noshiny']},
+ floetteyellow: {encounters: ['wild', 'noshiny']},
+ florges: {encounters: ['wild', 'noshiny']},
+ florgesblue: {encounters: ['wild', 'noshiny']},
+ florgesorange: {encounters: ['wild', 'noshiny']},
+ florgeswhite: {encounters: ['wild', 'noshiny']},
+ florgesyellow: {encounters: ['wild', 'noshiny']},
+ pancham: {encounters: ['wild', '12kmegg', 'raid', 'research', 'nowildshiny']},
+ pangoro: {encounters: ['wild', '12kmegg', 'raid', 'research', 'nowildshiny']},
+ furfrou: {encounters: ['wild']},
+ furfroudandy: {encounters: ['wild']},
+ furfroudebutante: {encounters: ['wild']},
+ furfroudiamond: {encounters: ['wild']},
+ furfrouheart: {encounters: ['wild']},
+ furfroukabuki: {encounters: ['wild']},
+ furfroulareine: {encounters: ['wild']},
+ furfroumatron: {encounters: ['wild']},
+ furfroupharaoh: {encounters: ['wild']},
+ furfroustar: {encounters: ['wild']},
+ espurr: {encounters: ['wild']},
+ meowstic: {encounters: ['wild']},
+ meowsticf: {encounters: ['wild']},
+ spritzee: {encounters: ['wild']},
+ aromatisse: {encounters: ['wild']},
+ swirlix: {encounters: ['wild']},
+ slurpuff: {encounters: ['wild']},
+ inkay: {encounters: ['wild']},
+ malamar: {encounters: ['wild']},
+ binacle: {encounters: ['wild']},
+ barbaracle: {encounters: ['wild']},
+ skrelp: {encounters: ['wild', 'noshiny']},
+ dragalge: {encounters: ['wild', 'noshiny']},
+ clauncher: {encounters: ['wild']},
+ clawitzer: {encounters: ['wild']},
+ helioptile: {encounters: ['wild']},
+ heliolisk: {encounters: ['wild']},
+ tyrunt: {encounters: ['wild', 'noshiny']},
+ tyrantrum: {encounters: ['wild', 'noshiny']},
+ amaura: {encounters: ['wild', 'noshiny']},
+ aurorus: {encounters: ['wild', 'noshiny']},
+ sylveon: {encounters: ['wild']},
+ hawlucha: {encounters: ['wild', 'noshiny']},
+ dedenne: {encounters: ['wild']},
+ carbink: {encounters: ['research', 'noshiny']},
+ goomy: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-26
+ sliggoo: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-26
+ goodra: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-26
+ klefki: {encounters: ['wild', 'noshiny']},
+ phantump: {encounters: ['wild', 'noshiny']},
+ trevenant: {encounters: ['wild', 'noshiny']},
+ pumpkaboo: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ pumpkaboolarge: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ pumpkaboosmall: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ pumpkaboosuper: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ gourgeist: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ gourgeistlarge: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ gourgeistsmall: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ gourgeistsuper: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ bergmite: {encounters: ['wild']},
+ avalugg: {encounters: ['wild']},
+ avalugghisui: {encounters: ['raid']},
+ noibat: {encounters: ['wild']},
+ noivern: {encounters: ['wild']},
+ xerneas: {encounters: ['raid', 'specialtrade']},
+ yveltal: {encounters: ['raid', 'specialtrade']},
+ // zygarde: {encounters: ['research', 'noshiny']}, trading/transferring may be made available in the future
+ // diancie: {encounters: ['research', 'noshiny', 'notrade']}, transferring may be made available in the future
+ hoopa: {encounters: ['raid', 'research', 'noshiny', 'notrade']},
+ rowlet: {encounters: ['wild', 'noshiny']},
+ dartrix: {encounters: ['wild', 'noshiny']},
+ decidueye: {encounters: ['wild', 'noshiny']},
+ litten: {encounters: ['wild', 'noshiny']},
+ torracat: {encounters: ['wild', 'noshiny']},
+ incineroar: {encounters: ['wild', 'noshiny']},
+ popplio: {encounters: ['wild', 'noshiny']},
+ brionne: {encounters: ['wild', 'noshiny']},
+ primarina: {encounters: ['wild', 'noshiny']},
+ pikipek: {encounters: ['wild', 'noshiny']},
+ trumbeak: {encounters: ['wild', 'noshiny']},
+ toucannon: {encounters: ['wild', 'noshiny']},
+ yungoos: {encounters: ['wild']},
+ gumshoos: {encounters: ['wild']},
+ grubbin: {encounters: ['wild', 'noshiny']},
+ charjabug: {encounters: ['wild', 'noshiny']},
+ vikavolt: {encounters: ['wild', 'noshiny']},
+ crabrawler: {encounters: ['wild', 'noshiny']},
+ crabominable: {encounters: ['wild', 'noshiny']},
+ oricorio: {encounters: ['wild', 'noshiny']},
+ cutiefly: {encounters: ['wild', 'noshiny']},
+ ribombee: {encounters: ['wild', 'noshiny']},
+ rockruff: {encounters: ['wild']},
+ lycanroc: {encounters: ['wild']},
+ lycanrocmidnight: {encounters: ['wild']},
+ mareanie: {encounters: ['wild', 'noshiny']},
+ toxapex: {encounters: ['wild', 'noshiny']},
+ dewpider: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ araquanid: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-04
+ fomantis: {encounters: ['wild']},
+ lurantis: {encounters: ['wild']},
+ morelull: {encounters: ['wild', 'noshiny']},
+ shiinotic: {encounters: ['wild', 'noshiny']},
+ salandit: {encounters: ['12kmegg', 'noshiny']},
+ salazzle: {encounters: ['12kmegg', 'noshiny']},
+ stufful: {encounters: ['wild']},
+ bewear: {encounters: ['wild']},
+ bounsweet: {encounters: ['wild', 'noshiny']},
+ steenee: {encounters: ['wild', 'noshiny']},
+ tsareena: {encounters: ['wild', 'noshiny']},
+ comfey: {encounters: ['wild', 'noshiny']},
+ oranguru: {encounters: ['wild', 'noshiny']}, // shiny available on 2023-08-26
+ wimpod: {encounters: ['wild', 'noshiny']},
+ golisopod: {encounters: ['wild', 'noshiny']},
+ sandygast: {encounters: ['raid', 'research', 'noshiny']},
+ palossand: {encounters: ['raid', 'research', 'noshiny']},
+ komala: {encounters: ['wild', 'noshiny']},
+ turtonator: {encounters: ['raid', 'research']},
+ togedemaru: {encounters: ['wild', 'noshiny']},
+ bruxish: {encounters: ['wild', 'noshiny']},
+ jangmoo: {encounters: ['wild', 'noshiny']},
+ hakamoo: {encounters: ['wild', 'noshiny']},
+ kommoo: {encounters: ['wild', 'noshiny']},
+ tapukoko: {encounters: ['raid']},
+ tapulele: {encounters: ['raid']},
+ tapubulu: {encounters: ['raid']},
+ tapufini: {encounters: ['raid']},
+ cosmog: {encounters: ['research', 'noshiny', 'specialtrade']},
+ cosmoem: {encounters: ['research', 'noshiny', 'specialtrade']},
+ solgaleo: {encounters: ['research', 'noshiny', 'specialtrade']},
+ lunala: {encounters: ['research', 'noshiny', 'specialtrade']},
+ nihilego: {encounters: ['raid', 'research', 'specialtrade']},
+ buzzwole: {encounters: ['raid', 'research', 'noshiny', 'specialtrade']},
+ pheromosa: {encounters: ['raid', 'research', 'noshiny', 'specialtrade']},
+ xurkitree: {encounters: ['raid', 'research', 'noshiny', 'specialtrade']},
+ celesteela: {encounters: ['raid', 'research', 'noshiny', 'specialtrade']},
+ kartana: {encounters: ['raid', 'research', 'noshiny', 'specialtrade']},
+ guzzlord: {encounters: ['raid', 'research', 'noshiny', 'specialtrade']},
+ meltan: {encounters: ['wild']},
+ melmetal: {encounters: ['wild']},
+ skwovet: {encounters: ['wild', 'noshiny']},
+ greedent: {encounters: ['wild', 'noshiny']},
+ obstagoon: {encounters: ['wild']},
+ perrserker: {encounters: ['wild']},
+ sirfetchd: {encounters: ['wild']},
+ mrrime: {encounters: ['wild']},
+ runerigus: {encounters: ['egg', 'raid', 'research']},
+ falinks: {encounters: ['wild', 'noshiny']},
+ zacian: {encounters: ['raid', 'noshiny', 'specialtrade']},
+ zamazenta: {encounters: ['raid', 'noshiny', 'specialtrade']},
+ zarude: {encounters: ['research', 'noshiny', 'notrade']},
+ regieleki: {encounters: ['raid', 'noshiny', 'specialtrade']},
+ regidrago: {encounters: ['raid', 'noshiny', 'specialtrade']},
+ kleavor: {encounters: ['wild']},
+ ursaluna: {encounters: ['wild']},
+ sneasler: {encounters: ['wild', 'noshiny']},
+ overqwil: {encounters: ['wild', 'noshiny']},
+ gimmighoulroaming: {encounters: ['wild', 'noshiny']},
+ gholdengo: {encounters: ['wild', 'noshiny']},
+};
diff --git a/data/random-battles/gen1/data.json b/data/random-battles/gen1/data.json
new file mode 100644
index 000000000000..94e121b00020
--- /dev/null
+++ b/data/random-battles/gen1/data.json
@@ -0,0 +1,721 @@
+{
+ "bulbasaur": {
+ "level": 89,
+ "moves": ["bodyslam", "razorleaf", "sleeppowder", "swordsdance"]
+ },
+ "ivysaur": {
+ "level": 80,
+ "moves": ["bodyslam", "razorleaf", "sleeppowder", "swordsdance"]
+ },
+ "venusaur": {
+ "level": 74,
+ "moves": ["bodyslam", "razorleaf", "sleeppowder"],
+ "exclusiveMoves": ["hyperbeam", "swordsdance", "swordsdance"]
+ },
+ "charmander": {
+ "level": 90,
+ "moves": ["counter", "seismictoss", "seismictoss", "slash", "slash"],
+ "essentialMoves": ["bodyslam", "fireblast"],
+ "comboMoves": ["bodyslam", "fireblast", "submission", "swordsdance"]
+ },
+ "charmeleon": {
+ "level": 81,
+ "moves": ["counter", "seismictoss", "seismictoss", "slash", "slash"],
+ "essentialMoves": ["bodyslam", "fireblast"],
+ "comboMoves": ["bodyslam", "fireblast", "submission", "swordsdance"]
+ },
+ "charizard": {
+ "level": 74,
+ "moves": ["bodyslam", "earthquake", "fireblast", "slash"],
+ "comboMoves": ["earthquake", "fireblast", "hyperbeam", "swordsdance"]
+ },
+ "squirtle": {
+ "level": 90,
+ "moves": ["bodyslam", "counter"],
+ "essentialMoves": ["blizzard", "seismictoss"],
+ "exclusiveMoves": ["hydropump", "surf", "surf"]
+ },
+ "wartortle": {
+ "level": 82,
+ "moves": ["counter", "rest", "seismictoss"],
+ "essentialMoves": ["blizzard", "bodyslam"],
+ "exclusiveMoves": ["hydropump", "surf", "surf"]
+ },
+ "blastoise": {
+ "level": 75,
+ "moves": ["earthquake", "rest"],
+ "essentialMoves": ["blizzard", "bodyslam"],
+ "exclusiveMoves": ["hydropump", "surf", "surf"]
+ },
+ "butterfree": {
+ "level": 77,
+ "moves": ["psychic", "sleeppowder", "stunspore"],
+ "exclusiveMoves": ["doubleedge", "hyperbeam", "megadrain", "substitute"]
+ },
+ "beedrill": {
+ "level": 81,
+ "moves": ["hyperbeam", "swordsdance", "twineedle"],
+ "exclusiveMoves": ["agility", "agility", "megadrain"]
+ },
+ "pidgey": {
+ "level": 93,
+ "moves": ["agility", "agility", "quickattack", "quickattack", "skyattack"],
+ "essentialMoves": ["doubleedge"],
+ "exclusiveMoves": ["mirrormove", "sandattack", "substitute"],
+ "comboMoves": ["agility", "doubleedge", "quickattack", "skyattack"]
+ },
+ "pidgeotto": {
+ "level": 85,
+ "moves": ["agility", "agility", "quickattack", "quickattack", "skyattack"],
+ "essentialMoves": ["doubleedge"],
+ "exclusiveMoves": ["mirrormove", "sandattack", "substitute"],
+ "comboMoves": ["agility", "doubleedge", "quickattack", "skyattack"]
+ },
+ "pidgeot": {
+ "level": 76,
+ "moves": ["agility", "doubleedge", "hyperbeam"],
+ "exclusiveMoves": ["mirrormove", "reflect", "sandattack", "skyattack", "skyattack", "substitute", "quickattack", "quickattack", "quickattack"]
+ },
+ "rattata": {
+ "level": 89,
+ "moves": ["blizzard", "bodyslam", "superfang"],
+ "exclusiveMoves": ["doubleedge", "thunderbolt", "thunderbolt", "thunderbolt", "quickattack", "quickattack"]
+ },
+ "raticate": {
+ "level": 75,
+ "moves": ["blizzard", "bodyslam", "hyperbeam", "superfang"]
+ },
+ "spearow": {
+ "level": 89,
+ "moves": ["agility", "doubleedge", "drillpeck"],
+ "exclusiveMoves": ["leer", "mimic", "mirrormove", "substitute"]
+ },
+ "fearow": {
+ "level": 75,
+ "moves": ["agility", "doubleedge", "drillpeck", "hyperbeam"]
+ },
+ "ekans": {
+ "level": 90,
+ "moves": ["bodyslam", "earthquake", "glare", "rockslide"]
+ },
+ "arbok": {
+ "level": 78,
+ "moves": ["earthquake", "glare", "hyperbeam"],
+ "exclusiveMoves": ["bodyslam", "rockslide", "rockslide"]
+ },
+ "pikachu": {
+ "level": 87,
+ "moves": ["surf", "thunderbolt", "thunderwave"],
+ "exclusiveMoves": ["agility", "bodyslam", "seismictoss", "seismictoss", "thunder"]
+ },
+ "raichu": {
+ "level": 74,
+ "moves": ["surf", "thunderbolt", "thunderwave"],
+ "exclusiveMoves": ["agility", "bodyslam", "hyperbeam", "hyperbeam", "seismictoss", "thunder"]
+ },
+ "sandshrew": {
+ "level": 88,
+ "moves": ["bodyslam", "earthquake", "rockslide", "swordsdance"]
+ },
+ "sandslash": {
+ "level": 76,
+ "moves": ["bodyslam", "earthquake", "rockslide", "swordsdance"]
+ },
+ "nidoranf": {
+ "level": 90,
+ "moves": ["blizzard", "bodyslam", "thunderbolt"],
+ "exclusiveMoves": ["doubleedge", "doublekick"]
+ },
+ "nidorina": {
+ "level": 82,
+ "moves": ["blizzard", "bodyslam", "thunderbolt"],
+ "exclusiveMoves": ["bubblebeam", "doubleedge", "doublekick"]
+ },
+ "nidoqueen": {
+ "level": 74,
+ "moves": ["blizzard", "earthquake", "thunderbolt"],
+ "exclusiveMoves": ["bodyslam", "bodyslam", "substitute"]
+ },
+ "nidoranm": {
+ "level": 90,
+ "moves": ["blizzard", "bodyslam", "thunderbolt"],
+ "exclusiveMoves": ["doubleedge", "doublekick"]
+ },
+ "nidorino": {
+ "level": 82,
+ "moves": ["blizzard", "bodyslam", "thunderbolt"],
+ "exclusiveMoves": ["bubblebeam", "doubleedge", "doublekick"]
+ },
+ "nidoking": {
+ "level": 74,
+ "moves": ["rockslide", "thunderbolt", "thunderbolt"],
+ "essentialMoves": ["blizzard", "earthquake"],
+ "exclusiveMoves": ["bodyslam", "bodyslam", "substitute"]
+ },
+ "clefairy": {
+ "level": 88,
+ "moves": ["bodyslam", "bodyslam", "seismictoss", "thunderbolt"],
+ "essentialMoves": ["blizzard", "thunderwave"],
+ "exclusiveMoves": ["blizzard", "blizzard", "counter", "psychic", "sing", "sing"]
+ },
+ "clefable": {
+ "level": 74,
+ "moves": ["bodyslam", "bodyslam", "thunderbolt", "thunderwave", "thunderwave"],
+ "essentialMoves": ["blizzard"],
+ "exclusiveMoves": ["blizzard", "counter", "hyperbeam", "hyperbeam", "psychic", "sing", "sing"]
+ },
+ "vulpix": {
+ "level": 88,
+ "moves": ["bodyslam", "confuseray", "fireblast"],
+ "exclusiveMoves": ["flamethrower", "flamethrower", "quickattack", "reflect", "substitute", "substitute"]
+ },
+ "ninetales": {
+ "level": 74,
+ "moves": ["bodyslam", "confuseray", "fireblast"],
+ "exclusiveMoves": ["flamethrower", "hyperbeam", "reflect", "substitute", "substitute"]
+ },
+ "jigglypuff": {
+ "level": 89,
+ "moves": ["blizzard", "bodyslam", "seismictoss"],
+ "essentialMoves": ["thunderwave"],
+ "exclusiveMoves": ["counter", "sing", "thunderwave"]
+ },
+ "wigglytuff": {
+ "level": 76,
+ "moves": ["blizzard", "bodyslam", "thunderwave"],
+ "exclusiveMoves": ["counter", "hyperbeam", "sing"]
+ },
+ "zubat": {
+ "level": 100,
+ "moves": ["confuseray", "doubleedge", "megadrain"],
+ "exclusiveMoves": ["substitute", "substitute", "wingattack"]
+ },
+ "golbat": {
+ "level": 78,
+ "moves": ["confuseray", "doubleedge", "hyperbeam", "megadrain"]
+ },
+ "oddish": {
+ "level": 90,
+ "moves": ["doubleedge", "megadrain", "sleeppowder"],
+ "exclusiveMoves": ["stunspore", "stunspore", "swordsdance"]
+ },
+ "gloom": {
+ "level": 82,
+ "moves": ["doubleedge", "megadrain", "sleeppowder"],
+ "exclusiveMoves": ["stunspore", "stunspore", "swordsdance"]
+ },
+ "vileplume": {
+ "level": 76,
+ "moves": ["bodyslam", "megadrain", "sleeppowder"],
+ "exclusiveMoves": ["stunspore", "stunspore", "swordsdance"]
+ },
+ "paras": {
+ "level": 90,
+ "moves": ["bodyslam", "megadrain", "spore"],
+ "exclusiveMoves": ["stunspore", "stunspore", "swordsdance"]
+ },
+ "parasect": {
+ "level": 77,
+ "moves": ["bodyslam", "megadrain", "spore"],
+ "exclusiveMoves": ["hyperbeam", "slash", "stunspore", "stunspore", "stunspore", "swordsdance", "swordsdance"]
+ },
+ "venonat": {
+ "level": 88,
+ "moves": ["psychic", "sleeppowder", "stunspore"],
+ "exclusiveMoves": ["doubleedge", "megadrain"]
+ },
+ "venomoth": {
+ "level": 74,
+ "moves": ["psychic", "sleeppowder", "stunspore"],
+ "exclusiveMoves": ["doubleedge", "megadrain"]
+ },
+ "diglett": {
+ "level": 86,
+ "moves": ["earthquake", "rockslide", "slash"],
+ "exclusiveMoves": ["bodyslam", "substitute"]
+ },
+ "dugtrio": {
+ "level": 73,
+ "moves": ["earthquake", "rockslide", "slash"],
+ "exclusiveMoves": ["bodyslam", "substitute"]
+ },
+ "meowth": {
+ "level": 85,
+ "moves": ["bodyslam", "bubblebeam", "slash", "thunderbolt"]
+ },
+ "persian": {
+ "level": 73,
+ "moves": ["bodyslam", "bubblebeam", "slash"],
+ "exclusiveMoves": ["hyperbeam", "thunderbolt"]
+ },
+ "psyduck": {
+ "level": 89,
+ "moves": ["amnesia", "blizzard", "surf"],
+ "exclusiveMoves": ["bodyslam", "hydropump", "rest", "seismictoss", "seismictoss"]
+ },
+ "golduck": {
+ "level": 75,
+ "moves": ["amnesia", "blizzard", "surf"],
+ "exclusiveMoves": ["bodyslam", "hydropump", "rest", "rest", "seismictoss"]
+ },
+ "mankey": {
+ "level": 89,
+ "moves": ["bodyslam", "rockslide", "submission"],
+ "exclusiveMoves": ["counter", "lowkick", "megakick"]
+ },
+ "primeape": {
+ "level": 76,
+ "moves": ["rockslide", "rockslide", "rockslide", "thunderbolt"],
+ "essentialMoves": ["bodyslam", "submission"],
+ "exclusiveMoves": ["counter", "lowkick", "hyperbeam", "hyperbeam"]
+ },
+ "growlithe": {
+ "level": 89,
+ "moves": ["agility", "bodyslam", "fireblast"],
+ "exclusiveMoves": ["flamethrower", "reflect"]
+ },
+ "arcanine": {
+ "level": 75,
+ "moves": ["bodyslam", "fireblast", "hyperbeam"],
+ "exclusiveMoves": ["agility", "agility", "flamethrower", "flamethrower", "reflect", "rest"]
+ },
+ "poliwag": {
+ "level": 86,
+ "moves": ["amnesia", "blizzard", "hypnosis", "surf"]
+ },
+ "poliwhirl": {
+ "level": 79,
+ "moves": ["amnesia", "blizzard", "hypnosis", "surf"]
+ },
+ "poliwrath": {
+ "level": 74,
+ "moves": ["bodyslam", "earthquake", "hypnosis", "submission"],
+ "essentialMoves": ["blizzard", "surf"],
+ "comboMoves": ["amnesia", "blizzard", "hypnosis", "surf"]
+ },
+ "abra": {
+ "level": 84,
+ "moves": ["psychic", "seismictoss", "thunderwave"],
+ "exclusiveMoves": ["counter", "reflect", "substitute"]
+ },
+ "kadabra": {
+ "level": 74,
+ "moves": ["psychic", "recover", "thunderwave"],
+ "exclusiveMoves": ["counter", "reflect", "reflect", "seismictoss", "seismictoss"]
+ },
+ "alakazam": {
+ "level": 68,
+ "moves": ["psychic", "recover", "thunderwave"],
+ "exclusiveMoves": ["counter", "reflect", "reflect", "seismictoss", "seismictoss"]
+ },
+ "machop": {
+ "level": 89,
+ "moves": ["bodyslam", "earthquake", "submission"],
+ "exclusiveMoves": ["counter", "rockslide", "rockslide"]
+ },
+ "machoke": {
+ "level": 81,
+ "moves": ["bodyslam", "earthquake", "submission"],
+ "exclusiveMoves": ["counter", "rockslide", "rockslide"]
+ },
+ "machamp": {
+ "level": 76,
+ "moves": ["bodyslam", "earthquake", "submission"],
+ "exclusiveMoves": ["counter", "hyperbeam", "hyperbeam", "rockslide", "rockslide"]
+ },
+ "bellsprout": {
+ "level": 88,
+ "moves": ["doubleedge", "razorleaf", "sleeppowder"],
+ "exclusiveMoves": ["stunspore", "stunspore", "swordsdance"]
+ },
+ "weepinbell": {
+ "level": 80,
+ "moves": ["doubleedge", "razorleaf", "sleeppowder"],
+ "exclusiveMoves": ["stunspore", "stunspore", "swordsdance"]
+ },
+ "victreebel": {
+ "level": 74,
+ "moves": ["bodyslam", "razorleaf", "sleeppowder"],
+ "exclusiveMoves": ["hyperbeam", "stunspore", "stunspore", "stunspore", "swordsdance", "swordsdance"]
+ },
+ "tentacool": {
+ "level": 86,
+ "moves": ["blizzard", "megadrain", "surf"],
+ "exclusiveMoves": ["barrier", "hydropump", "hydropump"]
+ },
+ "tentacruel": {
+ "level": 73,
+ "moves": ["blizzard", "hyperbeam", "swordsdance"],
+ "exclusiveMoves": ["hydropump", "surf", "surf"]
+ },
+ "geodude": {
+ "level": 88,
+ "moves": ["bodyslam", "earthquake", "explosion", "rockslide"]
+ },
+ "graveler": {
+ "level": 80,
+ "moves": ["bodyslam", "earthquake", "explosion", "rockslide"]
+ },
+ "golem": {
+ "level": 71,
+ "moves": ["bodyslam", "earthquake", "explosion", "rockslide"]
+ },
+ "ponyta": {
+ "level": 84,
+ "moves": ["agility", "bodyslam", "fireblast"],
+ "exclusiveMoves": ["reflect", "reflect", "reflect", "stomp", "substitute", "substitute"]
+ },
+ "rapidash": {
+ "level": 75,
+ "moves": ["agility", "bodyslam", "fireblast", "hyperbeam"]
+ },
+ "slowpoke": {
+ "level": 84,
+ "moves": ["blizzard", "psychic", "surf"],
+ "essentialMoves": ["amnesia", "thunderwave"],
+ "comboMoves": ["amnesia", "rest", "surf", "thunderwave"]
+ },
+ "slowbro": {
+ "level": 68,
+ "moves": ["blizzard", "psychic", "surf"],
+ "essentialMoves": ["amnesia", "thunderwave"],
+ "comboMoves": ["amnesia", "rest", "surf", "thunderwave"]
+ },
+ "magnemite": {
+ "level": 88,
+ "moves": ["thunder", "thunderbolt", "thunderwave"],
+ "exclusiveMoves": ["doubleedge", "doubleedge", "mimic", "rest"]
+ },
+ "magneton": {
+ "level": 76,
+ "moves": ["thunder", "thunderbolt", "thunderwave"],
+ "exclusiveMoves": ["doubleedge", "hyperbeam", "hyperbeam", "mimic", "rest"]
+ },
+ "farfetchd": {
+ "level": 78,
+ "moves": ["agility", "bodyslam", "slash", "swordsdance"]
+ },
+ "doduo": {
+ "level": 87,
+ "moves": ["agility", "bodyslam", "doubleedge", "drillpeck"]
+ },
+ "dodrio": {
+ "level": 73,
+ "moves": ["agility", "bodyslam", "drillpeck", "hyperbeam"]
+ },
+ "seel": {
+ "level": 88,
+ "moves": ["blizzard", "bodyslam", "rest", "surf"]
+ },
+ "dewgong": {
+ "level": 74,
+ "moves": ["blizzard", "bodyslam", "surf"],
+ "exclusiveMoves": ["hyperbeam", "rest", "rest", "rest"]
+ },
+ "grimer": {
+ "level": 90,
+ "moves": ["fireblast", "fireblast", "megadrain", "sludge", "sludge", "sludge", "thunderbolt"],
+ "essentialMoves": ["bodyslam", "explosion"]
+ },
+ "muk": {
+ "level": 76,
+ "moves": ["fireblast", "fireblast", "hyperbeam", "megadrain", "megadrain", "sludge", "sludge", "sludge", "thunderbolt"],
+ "essentialMoves": ["bodyslam", "explosion"]
+ },
+ "shellder": {
+ "level": 90,
+ "moves": ["blizzard", "doubleedge", "explosion", "surf"]
+ },
+ "cloyster": {
+ "level": 70,
+ "moves": ["blizzard", "explosion", "surf"],
+ "exclusiveMoves": ["doubleedge", "hyperbeam", "hyperbeam"]
+ },
+ "gastly": {
+ "level": 83,
+ "moves": ["explosion", "explosion", "megadrain", "nightshade", "psychic", "psychic"],
+ "essentialMoves": ["thunderbolt", "hypnosis"]
+ },
+ "haunter": {
+ "level": 74,
+ "moves": ["explosion", "explosion", "megadrain", "nightshade", "psychic", "psychic"],
+ "essentialMoves": ["thunderbolt", "hypnosis"]
+ },
+ "gengar": {
+ "level": 68,
+ "moves": ["explosion", "explosion", "megadrain", "nightshade", "psychic", "psychic"],
+ "essentialMoves": ["thunderbolt", "hypnosis"]
+ },
+ "onix": {
+ "level": 80,
+ "moves": ["bodyslam", "earthquake", "explosion", "rockslide"]
+ },
+ "drowzee": {
+ "level": 84,
+ "moves": ["hypnosis", "psychic", "thunderwave"],
+ "exclusiveMoves": ["counter", "rest", "seismictoss", "seismictoss"]
+ },
+ "hypno": {
+ "level": 72,
+ "moves": ["hypnosis", "psychic", "thunderwave"],
+ "exclusiveMoves": ["counter", "rest", "rest", "seismictoss", "seismictoss"]
+ },
+ "krabby": {
+ "level": 89,
+ "moves": ["bodyslam", "crabhammer", "swordsdance"],
+ "exclusiveMoves": ["blizzard", "blizzard", "blizzard", "stomp"]
+ },
+ "kingler": {
+ "level": 76,
+ "moves": ["bodyslam", "crabhammer", "hyperbeam", "swordsdance"]
+ },
+ "voltorb": {
+ "level": 88,
+ "moves": ["explosion", "thunderbolt", "thunderwave"],
+ "exclusiveMoves": ["takedown", "thunder"]
+ },
+ "electrode": {
+ "level": 76,
+ "moves": ["explosion", "thunderbolt", "thunderwave"],
+ "exclusiveMoves": ["hyperbeam", "hyperbeam", "takedown", "thunder", "thunder"]
+ },
+ "exeggcute": {
+ "level": 84,
+ "moves": ["explosion", "psychic", "sleeppowder", "stunspore"]
+ },
+ "exeggutor": {
+ "level": 68,
+ "moves": ["explosion", "psychic", "sleeppowder"],
+ "exclusiveMoves": ["doubleedge", "hyperbeam", "megadrain", "stunspore", "stunspore", "stunspore"]
+ },
+ "cubone": {
+ "level": 89,
+ "moves": ["blizzard", "bodyslam", "earthquake", "seismictoss"]
+ },
+ "marowak": {
+ "level": 79,
+ "moves": ["blizzard", "bodyslam", "earthquake", "seismictoss"]
+ },
+ "hitmonlee": {
+ "level": 78,
+ "moves": ["bodyslam", "highjumpkick", "seismictoss"],
+ "exclusiveMoves": ["counter", "counter", "meditate", "megakick", "rollingkick"]
+ },
+ "hitmonchan": {
+ "level": 80,
+ "moves": ["bodyslam", "seismictoss", "submission"],
+ "exclusiveMoves": ["agility", "agility", "counter", "counter", "megakick"]
+ },
+ "lickitung": {
+ "level": 78,
+ "moves": ["bodyslam", "hyperbeam", "swordsdance"],
+ "exclusiveMoves": ["blizzard", "earthquake", "earthquake", "earthquake"]
+ },
+ "koffing": {
+ "level": 90,
+ "moves": ["explosion", "fireblast", "sludge", "thunderbolt"]
+ },
+ "weezing": {
+ "level": 76,
+ "moves": ["explosion", "fireblast", "sludge", "thunderbolt"]
+ },
+ "rhyhorn": {
+ "level": 84,
+ "moves": ["bodyslam", "earthquake", "rockslide", "substitute"]
+ },
+ "rhydon": {
+ "level": 68,
+ "moves": ["bodyslam", "earthquake", "rockslide", "substitute"]
+ },
+ "chansey": {
+ "level": 68,
+ "moves": ["icebeam", "softboiled", "thunderwave"],
+ "exclusiveMoves": ["counter", "reflect", "seismictoss", "sing", "thunderbolt", "thunderbolt", "thunderbolt"]
+ },
+ "tangela": {
+ "level": 74,
+ "moves": ["bodyslam", "megadrain", "sleeppowder"],
+ "exclusiveMoves": ["growth", "stunspore", "stunspore", "stunspore", "swordsdance", "swordsdance"]
+ },
+ "kangaskhan": {
+ "level": 73,
+ "moves": ["bodyslam", "earthquake", "hyperbeam"],
+ "exclusiveMoves": ["counter", "rockslide", "rockslide", "surf"]
+ },
+ "horsea": {
+ "level": 88,
+ "moves": ["agility", "blizzard", "surf"],
+ "exclusiveMoves": ["doubleedge", "hydropump", "smokescreen"]
+ },
+ "seadra": {
+ "level": 77,
+ "moves": ["agility", "blizzard", "surf"],
+ "exclusiveMoves": ["doubleedge", "hydropump", "hyperbeam", "smokescreen"]
+ },
+ "goldeen": {
+ "level": 88,
+ "moves": ["agility", "blizzard", "doubleedge", "surf"]
+ },
+ "seaking": {
+ "level": 78,
+ "moves": ["agility", "doubleedge", "hyperbeam"],
+ "essentialMoves": ["blizzard", "surf"]
+ },
+ "staryu": {
+ "level": 84,
+ "moves": ["blizzard", "thunderbolt", "thunderwave"],
+ "essentialMoves": ["recover"],
+ "exclusiveMoves": ["hydropump", "surf", "surf"]
+ },
+ "starmie": {
+ "level": 68,
+ "moves": ["blizzard", "psychic", "thunderbolt", "thunderwave", "thunderwave"],
+ "essentialMoves": ["recover"],
+ "exclusiveMoves": ["hydropump", "psychic", "surf", "surf"]
+ },
+ "mrmime": {
+ "level": 75,
+ "moves": ["psychic", "seismictoss", "thunderbolt", "thunderwave"]
+ },
+ "scyther": {
+ "level": 75,
+ "moves": ["agility", "hyperbeam", "slash", "swordsdance"]
+ },
+ "jynx": {
+ "level": 68,
+ "moves": ["blizzard", "lovelykiss", "psychic"],
+ "exclusiveMoves": ["bodyslam", "counter", "counter", "seismictoss", "substitute"]
+ },
+ "electabuzz": {
+ "level": 74,
+ "moves": ["psychic", "thunderbolt", "thunderwave"],
+ "exclusiveMoves": ["hyperbeam", "seismictoss", "seismictoss", "seismictoss"]
+ },
+ "magmar": {
+ "level": 76,
+ "moves": ["bodyslam", "confuseray", "fireblast"],
+ "exclusiveMoves": ["hyperbeam", "psychic", "seismictoss"]
+ },
+ "pinsir": {
+ "level": 75,
+ "moves": ["bodyslam", "bodyslam", "slash"],
+ "essentialMoves": ["hyperbeam", "swordsdance"],
+ "exclusiveMoves": ["seismictoss", "submission", "submission"]
+ },
+ "tauros": {
+ "level": 68,
+ "moves": ["bodyslam", "earthquake", "hyperbeam"],
+ "exclusiveMoves": ["blizzard", "blizzard", "blizzard", "thunderbolt"]
+ },
+ "gyarados": {
+ "level": 74,
+ "moves": ["blizzard", "bodyslam", "bodyslam", "hyperbeam", "thunderbolt"],
+ "exclusiveMoves": ["hydropump", "surf", "surf"]
+ },
+ "lapras": {
+ "level": 69,
+ "moves": ["bodyslam", "rest", "sing", "surf"],
+ "essentialMoves": ["blizzard", "thunderbolt"]
+ },
+ "ditto": {
+ "level": 100,
+ "moves": ["transform"]
+ },
+ "eevee": {
+ "level": 88,
+ "moves": ["doubleedge", "doubleedge", "quickattack", "quickattack", "reflect"],
+ "essentialMoves": ["bodyslam"],
+ "exclusiveMoves": ["sandattack", "tailwhip"]
+ },
+ "vaporeon": {
+ "level": 74,
+ "moves": ["blizzard", "rest", "surf"],
+ "exclusiveMoves": ["acidarmor", "bodyslam", "bodyslam", "bodyslam", "hydropump", "mimic"]
+ },
+ "jolteon": {
+ "level": 69,
+ "moves": ["bodyslam", "thunderbolt", "thunderwave"],
+ "exclusiveMoves": ["agility", "agility", "doublekick", "pinmissile", "pinmissile"]
+ },
+ "flareon": {
+ "level": 76,
+ "moves": ["bodyslam", "fireblast", "hyperbeam", "quickattack"]
+ },
+ "porygon": {
+ "level": 76,
+ "moves": ["blizzard", "recover", "thunderwave"],
+ "exclusiveMoves": ["doubleedge", "psychic", "thunderbolt", "triattack"]
+ },
+ "omanyte": {
+ "level": 87,
+ "moves": ["blizzard", "bodyslam", "rest"],
+ "exclusiveMoves": ["hydropump", "surf"]
+ },
+ "omastar": {
+ "level": 74,
+ "moves": ["bodyslam", "rest", "seismictoss"],
+ "essentialMoves": ["blizzard"],
+ "exclusiveMoves": ["hydropump", "surf"]
+ },
+ "kabuto": {
+ "level": 88,
+ "moves": ["blizzard", "bodyslam", "slash"],
+ "exclusiveMoves": ["hydropump", "surf", "surf"]
+ },
+ "kabutops": {
+ "level": 75,
+ "moves": ["hyperbeam", "surf", "swordsdance"],
+ "exclusiveMoves": ["bodyslam", "slash"]
+ },
+ "aerodactyl": {
+ "level": 75,
+ "moves": ["doubleedge", "fireblast", "hyperbeam"],
+ "exclusiveMoves": ["agility", "skyattack", "skyattack"]
+ },
+ "snorlax": {
+ "level": 69,
+ "moves": ["amnesia", "blizzard", "bodyslam"],
+ "exclusiveMoves": ["rest", "selfdestruct"],
+ "comboMoves": ["bodyslam", "earthquake", "hyperbeam", "selfdestruct"]
+ },
+ "articuno": {
+ "level": 70,
+ "moves": ["agility", "blizzard", "hyperbeam"],
+ "exclusiveMoves": ["icebeam", "mimic", "reflect"],
+ "comboMoves": ["blizzard", "icebeam", "reflect", "rest"]
+ },
+ "zapdos": {
+ "level": 68,
+ "moves": ["agility", "drillpeck", "thunderbolt", "thunderwave"]
+ },
+ "moltres": {
+ "level": 73,
+ "moves": ["agility", "fireblast", "hyperbeam"],
+ "exclusiveMoves": ["doubleedge", "doubleedge", "doubleedge", "reflect"]
+ },
+ "dratini": {
+ "level": 89,
+ "moves": ["bodyslam", "hyperbeam", "thunderbolt", "thunderbolt"],
+ "essentialMoves": ["blizzard", "thunderwave"]
+ },
+ "dragonair": {
+ "level": 80,
+ "moves": ["bodyslam", "hyperbeam", "thunderbolt", "thunderbolt"],
+ "essentialMoves": ["blizzard", "thunderwave"]
+ },
+ "dragonite": {
+ "level": 74,
+ "moves": ["bodyslam", "hyperbeam", "thunderbolt", "thunderwave", "thunderwave"],
+ "essentialMoves": ["blizzard"]
+ },
+ "mewtwo": {
+ "level": 60,
+ "moves": ["amnesia", "psychic", "recover"],
+ "exclusiveMoves": ["blizzard", "thunderbolt", "thunderwave", "thunderwave"]
+ },
+ "mew": {
+ "level": 64,
+ "moves": ["blizzard", "blizzard", "earthquake", "explosion", "explosion", "thunderbolt"],
+ "essentialMoves": ["psychic", "softboiled", "thunderwave"]
+ }
+}
diff --git a/data/mods/gen1/random-teams.ts b/data/random-battles/gen1/teams.ts
similarity index 72%
rename from data/mods/gen1/random-teams.ts
rename to data/random-battles/gen1/teams.ts
index c8281714918c..2ce6a27ef455 100644
--- a/data/mods/gen1/random-teams.ts
+++ b/data/random-battles/gen1/teams.ts
@@ -1,6 +1,5 @@
-import RandomGen2Teams from '../gen2/random-teams';
+import RandomGen2Teams from '../gen2/teams';
import {Utils} from '../../../lib';
-import {MoveCounter} from '../gen8/random-teams';
interface HackmonsCupEntry {
types: string[];
@@ -10,13 +9,13 @@ interface HackmonsCupEntry {
interface Gen1RandomBattleSpecies {
level?: number;
moves?: ID[];
- essentialMove?: ID;
+ essentialMoves?: ID[];
exclusiveMoves?: ID[];
comboMoves?: ID[];
}
export class RandomGen1Teams extends RandomGen2Teams {
- randomData: {[species: string]: Gen1RandomBattleSpecies} = require('./random-data.json');
+ randomData: {[species: IDEntry]: Gen1RandomBattleSpecies} = require('./data.json');
// Challenge Cup or CC teams are basically fully random teams.
randomCCTeam() {
@@ -28,7 +27,6 @@ export class RandomGen1Teams extends RandomGen2Teams {
for (const pokemon of randomN) {
const species = this.dex.species.get(pokemon);
- const learnset = this.dex.species.getLearnset(species.id);
// Level balance: calculate directly from stats rather than using some silly lookup table.
const mbstmin = 1307;
@@ -83,15 +81,7 @@ export 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.
- const pool: string[] = [];
- if (learnset) {
- for (const move in learnset) {
- if (this.dex.moves.get(move).gen !== 1) continue;
- if (learnset[move].some(learned => learned.startsWith('1'))) {
- pool.push(move);
- }
- }
- }
+ const pool = [...this.dex.species.getMovePool(species.id)];
team.push({
name: species.baseSpecies,
@@ -128,19 +118,17 @@ export class RandomGen1Teams extends RandomGen2Teams {
/** Pokémon that are not wholly incompatible with the team, but still pretty bad */
const rejectedButNotInvalidPool: string[] = [];
- const nuTiers = ['UU', 'UUBL', 'NFE', 'LC', 'NU'];
- const uuTiers = ['NFE', 'UU', 'UUBL', 'NU'];
// Now let's store what we are getting.
const typeCount: {[k: string]: number} = {};
const weaknessCount: {[k: string]: number} = {Electric: 0, Psychic: 0, Water: 0, Ice: 0, Ground: 0, Fire: 0};
- let uberCount = 0;
- let nuCount = 0;
+ let numMaxLevelPokemon = 0;
- const pokemonPool = this.getPokemonPool(type, pokemon, isMonotype);
+ const pokemonPool = Object.keys(this.getPokemonPool(type, pokemon, isMonotype, Object.keys(this.randomData))[0]);
while (pokemonPool.length && pokemon.length < this.maxTeamSize) {
const species = this.dex.species.get(this.sampleNoReplace(pokemonPool));
- if (!species.exists || !this.randomData[species.id]?.moves) continue;
+ if (!species.exists) continue;
+
// Only one Ditto is allowed per battle in Generation 1,
// as it can cause an endless battle if two Dittos are forced
// to face each other.
@@ -149,33 +137,12 @@ export class RandomGen1Teams extends RandomGen2Teams {
// Dynamically scale limits for different team sizes. The default and minimum value is 1.
const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
- const tier = species.tier;
- switch (tier) {
- case 'LC':
- case 'NFE':
- // Don't add pre-evo mon if already 4 or more non-OUs
- // Regardless, pre-evo mons are slightly less common.
- if (nuCount >= 4 * limitFactor || this.randomChance(1, 3)) continue;
- break;
- case 'Uber':
- // Only allow a single Uber.
- if (uberCount >= 1 * limitFactor) continue;
- break;
- default:
- // OUs are fine. Otherwise 50% chance to skip mon if already 4 or more non-OUs.
- if (uuTiers.includes(tier) && pokemonPool.length > 1 && (nuCount >= 4 * limitFactor && this.randomChance(1, 2))) {
- continue;
- }
- }
-
let skip = false;
if (!isMonotype && !this.forceMonotype) {
- // Limit 2 of any type as well. Diversity and minor weakness count.
- // The second of a same type has halved chance of being added.
+ // Limit two of any type
for (const typeName of species.types) {
- if (typeCount[typeName] >= 2 * limitFactor ||
- (typeCount[typeName] >= 1 * limitFactor && this.randomChance(1, 2) && pokemonPool.length > 1)) {
+ if (typeCount[typeName] >= 2 * limitFactor) {
skip = true;
break;
}
@@ -188,7 +155,7 @@ export class RandomGen1Teams extends RandomGen2Teams {
}
// We need a weakness count of spammable attacks to avoid being swept by those.
- // Spammable attacks are: Thunderbolt, Psychic, Surf, Blizzard, Earthquake.
+ // Spammable attacks are: Thunderbolt, Psychic, Surf, Blizzard, Earthquake, Fire Blast.
const pokemonWeaknesses = [];
for (const typeName in weaknessCount) {
const increaseCount = this.dex.getImmunity(typeName, species) && this.dex.getEffectiveness(typeName, species) > 0;
@@ -205,6 +172,12 @@ export class RandomGen1Teams extends RandomGen2Teams {
continue;
}
+ // Limit one level 100 Pokemon
+ if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) {
+ rejectedButNotInvalidPool.push(species.id);
+ continue;
+ }
+
// The set passes the limitations.
pokemon.push(this.randomSet(species));
@@ -223,12 +196,8 @@ export class RandomGen1Teams extends RandomGen2Teams {
weaknessCount[weakness]++;
}
- // Increment tier bias counters.
- if (tier === 'Uber') {
- uberCount++;
- } else if (nuTiers.includes(tier)) {
- nuCount++;
- }
+ // Increment level 100 counter
+ if (this.getLevel(species) === 100) numMaxLevelPokemon++;
// Ditto check
if (species.id === 'ditto') this.battleHasDitto = true;
@@ -247,29 +216,6 @@ export class RandomGen1Teams extends RandomGen2Teams {
return pokemon;
}
- shouldCullMove(move: Move, types: Set, moves: Set, counter: MoveCounter): {cull: boolean} {
- switch (move.id) {
- // bit redundant to have both, but neither particularly better than the other
- case 'hydropump':
- return {cull: moves.has('surf')};
- case 'surf':
- return {cull: moves.has('hydropump')};
-
- // other redundancies that aren't handled within the movesets themselves
- case 'selfdestruct':
- return {cull: moves.has('rest')};
- case 'rest':
- return {cull: moves.has('selfdestruct')};
- case 'sharpen': case 'swordsdance':
- return {cull: counter.get('Special') > counter.get('Physical') || !counter.get('Physical') || moves.has('growth')};
- case 'growth':
- return {cull: counter.get('Special') < counter.get('Physical') || !counter.get('Special') || moves.has('swordsdance')};
- case 'poisonpowder': case 'stunspore': case 'sleeppowder': case 'toxic':
- return {cull: counter.get('Status') > 1};
- }
- return {cull: false};
- }
-
/**
* Random set generation for Gen 1 Random Battles.
*/
@@ -280,14 +226,6 @@ export class RandomGen1Teams extends RandomGen2Teams {
const data = this.randomData[species.id];
const movePool = data.moves?.slice() || [];
const moves = new Set();
- const types = new Set(species.types);
-
- const counter = new MoveCounter();
-
- // Moves that boost Attack:
- const PhysicalSetup = ['swordsdance', 'sharpen'];
- // Moves which boost Special Attack:
- const SpecialSetup = ['amnesia', 'growth'];
// Either add all moves or add none
if (data.comboMoves && data.comboMoves.length <= this.maxMoveCount && this.randomChance(1, 2)) {
@@ -296,13 +234,17 @@ export 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
+ // This is added before the essential moves so that combos containing three moves can roll an exclusive move
if (moves.size < this.maxMoveCount && data.exclusiveMoves) {
moves.add(this.sample(data.exclusiveMoves));
}
- // Add the mandatory move. SD Mew and Amnesia Snorlax are exceptions.
- if (moves.size < this.maxMoveCount && data.essentialMove) {
- moves.add(data.essentialMove);
+ // Add the mandatory moves.
+ if (moves.size < this.maxMoveCount && data.essentialMoves) {
+ for (const moveid of data.essentialMoves) {
+ moves.add(moveid);
+ if (moves.size === this.maxMoveCount) break;
+ }
}
while (moves.size < this.maxMoveCount && movePool.length) {
@@ -311,45 +253,9 @@ export class RandomGen1Teams extends RandomGen2Teams {
const moveid = this.sampleNoReplace(movePool);
moves.add(moveid);
}
-
- // Only do move choosing if we have backup moves in the pool...
- if (movePool.length) {
- for (const setMoveid of moves) {
- const move = this.dex.moves.get(setMoveid);
- const moveid = move.id;
- if (!move.damage && !move.damageCallback) counter.add(move.category);
- if (PhysicalSetup.includes(moveid)) counter.add('physicalsetup');
- if (SpecialSetup.includes(moveid)) counter.add('specialsetup');
- }
-
- for (const moveid of moves) {
- if (moveid === data.essentialMove) continue;
- const move = this.dex.moves.get(moveid);
- if (
- (!data.essentialMove || moveid !== data.essentialMove) &&
- this.shouldCullMove(move, types, moves, counter).cull
- ) {
- moves.delete(moveid);
- break;
- }
- counter.add(move.category);
- }
- } // End of the check for more than 4 moves on moveset.
}
- const levelScale: {[k: string]: number} = {
- LC: 88,
- NFE: 80,
- PU: 77,
- NU: 77,
- NUBL: 76,
- UU: 74,
- UUBL: 71,
- OU: 68,
- Uber: 65,
- };
-
- const level = this.adjustLevel || data.level || levelScale[species.tier] || 80;
+ const level = this.getLevel(species);
const evs = {hp: 255, atk: 255, def: 255, spa: 255, spd: 255, spe: 255};
const ivs = {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30};
@@ -375,10 +281,14 @@ export class RandomGen1Teams extends RandomGen2Teams {
ivs.atk = 2;
}
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+
return {
name: species.name,
species: species.name,
- moves: Array.from(moves),
+ moves: shuffledMoves,
ability: 'No Ability',
evs,
ivs,
diff --git a/data/random-battles/gen2/sets.json b/data/random-battles/gen2/sets.json
new file mode 100644
index 000000000000..36b5074fca13
--- /dev/null
+++ b/data/random-battles/gen2/sets.json
@@ -0,0 +1,1685 @@
+{
+ "venusaur": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["growth", "hiddenpowerfire", "hiddenpowerice", "razorleaf", "sleeppowder", "synthesis"]
+ }
+ ]
+ },
+ "charizard": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "earthquake", "fireblast", "rockslide", "swordsdance"]
+ }
+ ]
+ },
+ "blastoise": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["icebeam", "rest", "sleeptalk", "surf", "zapcannon"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "rapidspin", "rest", "roar", "surf", "toxic"]
+ }
+ ]
+ },
+ "butterfree": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["nightmare", "psychic", "sleeppowder", "substitute"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["psychic", "reflect", "sleeppowder", "stunspore"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerbug", "psychic", "sleeppowder", "stunspore"]
+ }
+ ]
+ },
+ "beedrill": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "hiddenpowerground", "sludgebomb", "substitute", "swordsdance"]
+ }
+ ]
+ },
+ "pidgeot": {
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "doubleedge", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "hiddenpowerground", "hiddenpowerwater", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Thief user",
+ "movepool": ["hiddenpowerground", "hiddenpowerwater", "return", "thief", "toxic"]
+ }
+ ]
+ },
+ "raticate": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["doubleedge", "irontail", "rest", "return", "sleeptalk", "superfang"]
+ }
+ ]
+ },
+ "fearow": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "drillpeck", "hiddenpowerground", "rest", "sleeptalk"]
+ }
+ ]
+ },
+ "arbok": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["curse", "earthquake", "rest", "sleeptalk", "sludgebomb"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["curse", "earthquake", "glare", "haze", "sludgebomb"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["curse", "earthquake", "glare", "rockslide", "sludgebomb"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "pikachu": {
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["encore", "hiddenpowerfire", "hiddenpowerice", "surf", "thunderbolt"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerfire", "hiddenpowerice", "substitute", "surf", "thunderbolt"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["hiddenpowerice", "surf", "thunder", "thunderbolt"]
+ }
+ ]
+ },
+ "raichu": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["hiddenpowerice", "rest", "sleeptalk", "surf", "thunder"]
+ }
+ ]
+ },
+ "sandslash": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hiddenpowerbug", "rockslide", "substitute", "swordsdance"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["earthquake", "rest", "rockslide", "sleeptalk"]
+ }
+ ]
+ },
+ "nidoqueen": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "fireblast", "icebeam", "moonlight", "thunder"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "icebeam", "lovelykiss", "thunder"]
+ }
+ ]
+ },
+ "nidoking": {
+ "level": 67,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "fireblast", "icebeam", "morningsun", "thunder"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "icebeam", "lovelykiss", "thunder"]
+ }
+ ]
+ },
+ "clefable": {
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bellydrum", "bodyslam", "hiddenpowerground", "moonlight", "return", "thunderwave"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "encore", "fireblast", "flamethrower", "moonlight"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "moonlight", "return", "thunderwave"]
+ }
+ ]
+ },
+ "ninetales": {
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "rest", "sleeptalk", "sunnyday"]
+ }
+ ]
+ },
+ "wigglytuff": {
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["curse", "doubleedge", "rest", "sleeptalk", "thunder"]
+ }
+ ]
+ },
+ "vileplume": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["moonlight", "razorleaf", "sleeppowder", "sludgebomb", "stunspore"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerground", "moonlight", "sleeppowder", "sludgebomb", "swordsdance"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "moonlight", "sludgebomb", "stunspore"]
+ }
+ ]
+ },
+ "parasect": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bodyslam", "hiddenpowerground", "return", "spore", "swordsdance"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["hiddenpowerbug", "spore", "swordsdance", "synthesis"]
+ }
+ ]
+ },
+ "venomoth": {
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["gigadrain", "hiddenpowerfire", "psychic", "sleeppowder", "sludgebomb", "stunspore"],
+ "preferredTypes": ["Fire", "Psychic"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "curse", "sleeppowder", "sludgebomb"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "curse", "sludgebomb", "stunspore"]
+ }
+ ]
+ },
+ "dugtrio": {
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "rockslide", "sludgebomb", "substitute", "thief"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "persian": {
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "hypnosis", "irontail", "rest", "sleeptalk", "thief"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["doubleedge", "hypnosis", "rest", "sleeptalk", "thief", "thunder"],
+ "preferredTypes": ["Electric"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "doubleedge", "rest", "sleeptalk"]
+ }
+ ]
+ },
+ "golduck": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["crosschop", "hiddenpowerelectric", "hydropump", "hypnosis", "icebeam"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crosschop", "hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf"]
+ }
+ ]
+ },
+ "primeape": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crosschop", "hiddenpowerghost", "meditate", "rest", "rockslide", "substitute"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["crosschop", "doubleedge", "hiddenpowerghost", "meditate", "rockslide"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["meditate", "reversal", "rockslide", "substitute"]
+ }
+ ]
+ },
+ "arcanine": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "doubleedge", "fireblast", "flamethrower", "hiddenpowergrass", "rest", "sleeptalk"]
+ }
+ ]
+ },
+ "poliwhirl": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "earthquake", "lovelykiss", "return"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["bellydrum", "earthquake", "hiddenpowerrock", "lovelykiss"]
+ }
+ ]
+ },
+ "poliwrath": {
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "growth", "rest", "sleeptalk", "submission", "surf"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "earthquake", "lovelykiss", "return"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["bellydrum", "earthquake", "hiddenpowerrock", "lovelykiss"]
+ }
+ ]
+ },
+ "alakazam": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["encore", "firepunch", "hiddenpowerdark", "psychic", "recover", "thunderwave"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "machamp": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["crosschop", "curse", "rest", "rockslide", "sleeptalk"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crosschop", "curse", "earthquake", "hiddenpowerbug", "rockslide"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "victreebel": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerground", "sleeppowder", "sludgebomb", "swordsdance", "synthesis"]
+ }
+ ]
+ },
+ "tentacruel": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hydropump", "sludgebomb", "substitute", "swordsdance"]
+ }
+ ]
+ },
+ "golem": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["curse", "earthquake", "explosion", "rapidspin", "roar", "rockslide"]
+ }
+ ]
+ },
+ "rapidash": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["doubleedge", "fireblast", "hiddenpowergrass", "hypnosis", "sunnyday"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["doubleedge", "fireblast", "flamethrower", "rest", "sleeptalk", "sunnyday"]
+ }
+ ]
+ },
+ "slowbro": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["psychic", "rest", "sleeptalk", "surf"]
+ }
+ ]
+ },
+ "magneton": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["hiddenpowerice", "rest", "sleeptalk", "thunder"]
+ }
+ ]
+ },
+ "farfetchd": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["agility", "batonpass", "return", "swordsdance"]
+ }
+ ]
+ },
+ "dodrio": {
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "drillpeck", "hiddenpowerground", "rest", "sleeptalk"]
+ }
+ ]
+ },
+ "dewgong": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icebeam", "rest", "sleeptalk", "surf"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["encore", "icebeam", "protect", "toxic"]
+ }
+ ]
+ },
+ "muk": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["curse", "explosion", "hiddenpowerground", "sludgebomb"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "cloyster": {
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["explosion", "icebeam", "rapidspin", "spikes", "surf", "toxic"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["explosion", "rapidspin", "spikes", "surf", "toxic"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["explosion", "icebeam", "rapidspin", "spikes", "toxic"]
+ }
+ ]
+ },
+ "gengar": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["explosion", "firepunch", "hypnosis", "icepunch", "psychic", "thunderbolt"],
+ "preferredTypes": ["Electric", "Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["destinybond", "firepunch", "hypnosis", "icepunch", "psychic", "thunderbolt"],
+ "preferredTypes": ["Electric", "Ice"]
+ }
+ ]
+ },
+ "hypno": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["psychic", "rest", "seismictoss", "sleeptalk", "thunderwave"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "doubleedge", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "curse", "psychic", "rest", "return"]
+ }
+ ]
+ },
+ "kingler": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerground", "protect", "rest", "return", "substitute", "swordsdance"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["hiddenpowerground", "protect", "return", "substitute", "surf", "swordsdance"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "electrode": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["explosion", "hiddenpowerice", "thunderbolt", "thunderwave"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["explosion", "hiddenpowerice", "lightscreen", "reflect", "thunder", "thunderbolt"]
+ }
+ ]
+ },
+ "exeggutor": {
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["explosion", "hiddenpowerfire", "hiddenpowergrass", "psychic", "sleeppowder", "stunspore", "thief"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["explosion", "gigadrain", "hiddenpowerfire", "psychic"]
+ }
+ ]
+ },
+ "marowak": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hiddenpowerbug", "rockslide", "swordsdance"]
+ }
+ ]
+ },
+ "hitmonlee": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerghost", "hiddenpowerrock", "highjumpkick", "meditate", "rest", "substitute"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["doubleedge", "hiddenpowerghost", "hiddenpowerrock", "highjumpkick", "meditate"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["bodyslam", "hiddenpowerrock", "highjumpkick", "rest", "sleeptalk"]
+ }
+ ]
+ },
+ "hitmonchan": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "hiddenpowerghost", "hiddenpowerrock", "highjumpkick", "machpunch"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "highjumpkick", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["bodyslam", "hiddenpowerrock", "highjumpkick", "rest", "sleeptalk"]
+ }
+ ]
+ },
+ "lickitung": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bodyslam", "earthquake", "protect", "return", "swordsdance"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "doubleedge", "rest", "return", "sleeptalk", "swordsdance"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["doubleedge", "earthquake", "rest", "sleeptalk", "surf", "thunder"]
+ }
+ ]
+ },
+ "weezing": {
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["explosion", "fireblast", "sludgebomb", "thunder"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["explosion", "hiddenpowerwater", "sludgebomb", "thunder"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "haze", "hiddenpowerwater", "painsplit", "sludgebomb", "thunder"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "rhydon": {
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["curse", "earthquake", "rest", "roar", "rockslide", "sleeptalk"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "rest", "rockslide", "sleeptalk"]
+ }
+ ]
+ },
+ "tangela": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["gigadrain", "growth", "hiddenpowerfire", "hiddenpowerice", "sleeppowder", "synthesis"]
+ }
+ ]
+ },
+ "kangaskhan": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["doubleedge", "earthquake", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "curse", "doubleedge", "rest", "return", "sleeptalk"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bodyslam", "curse", "earthquake", "return", "roar"]
+ }
+ ]
+ },
+ "seaking": {
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["agility", "hydropump", "return", "substitute", "swordsdance"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "hiddenpowerground", "return", "substitute", "swordsdance"]
+ }
+ ]
+ },
+ "starmie": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["psychic", "rapidspin", "recover", "surf", "thunderbolt", "thunderwave"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "psychic", "recover", "surf", "thunder"]
+ }
+ ]
+ },
+ "mrmime": {
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["encore", "firepunch", "hypnosis", "psychic", "thief", "thunder"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["firepunch", "psychic", "rest", "sleeptalk", "thunder"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["barrier", "batonpass", "psychic", "thunder"]
+ }
+ ]
+ },
+ "scyther": {
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "doubleedge", "hiddenpowerground", "swordsdance"]
+ }
+ ]
+ },
+ "jynx": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["icebeam", "lovelykiss", "nightmare", "psychic"]
+ },
+ {
+ "role": "Thief user",
+ "movepool": ["icebeam", "lovelykiss", "psychic", "thief"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icebeam", "lovelykiss", "psychic", "substitute"]
+ }
+ ]
+ },
+ "electabuzz": {
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crosschop", "icepunch", "pursuit", "thief", "thunder", "thunderbolt"],
+ "preferredTypes": ["Fighting", "Ice"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icepunch", "rest", "sleeptalk", "thunder"]
+ }
+ ]
+ },
+ "magmar": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crosschop", "fireblast", "hiddenpowerground", "sunnyday", "thunderpunch"],
+ "preferredTypes": ["Electric"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crosschop", "fireblast", "hiddenpowerground", "thief", "thunderpunch"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "pinsir": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerground", "protect", "rest", "return", "substitute", "swordsdance"]
+ }
+ ]
+ },
+ "tauros": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["curse", "doubleedge", "earthquake", "rest", "return", "sleeptalk"]
+ }
+ ]
+ },
+ "gyarados": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["doubleedge", "hiddenpowerflying", "hydropump", "roar", "thunder"],
+ "preferredTypes": ["Electric"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["doubleedge", "hiddenpowerflying", "hydropump", "rest", "sleeptalk", "surf"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "hiddenpowerflying", "rest", "sleeptalk"]
+ }
+ ]
+ },
+ "lapras": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["icebeam", "rest", "sleeptalk", "surf"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["rest", "sleeptalk", "surf", "thunder"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icebeam", "rest", "sleeptalk", "thunder"]
+ }
+ ]
+ },
+ "ditto": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["transform"]
+ }
+ ]
+ },
+ "vaporeon": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["growth", "rest", "sleeptalk", "surf"]
+ }
+ ]
+ },
+ "jolteon": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "growth", "hiddenpowerice", "substitute", "thunderbolt"]
+ }
+ ]
+ },
+ "flareon": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "fireblast", "growth", "hiddenpowergrass"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["doubleedge", "fireblast", "flamethrower", "rest", "sleeptalk"]
+ }
+ ]
+ },
+ "omastar": {
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["hiddenpowerelectric", "icebeam", "rest", "sandstorm", "sleeptalk", "surf"]
+ }
+ ]
+ },
+ "kabutops": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["hiddenpowerground", "hydropump", "return", "swordsdance"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["ancientpower", "hiddenpowerground", "protect", "rest", "substitute", "swordsdance"]
+ }
+ ]
+ },
+ "aerodactyl": {
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "earthquake", "hiddenpowerrock", "rest"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["ancientpower", "curse", "earthquake", "hiddenpowerflying"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["curse", "earthquake", "hiddenpowerrock", "whirlwind"]
+ }
+ ]
+ },
+ "snorlax": {
+ "level": 63,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["curse", "doubleedge", "earthquake", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "curse", "doubleedge", "earthquake", "rest", "return"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "curse", "earthquake", "lovelykiss", "return", "selfdestruct"]
+ }
+ ]
+ },
+ "articuno": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "toxic"]
+ }
+ ]
+ },
+ "zapdos": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["hiddenpowerice", "rest", "sleeptalk", "thunder"]
+ }
+ ]
+ },
+ "moltres": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "rest", "sleeptalk", "sunnyday"]
+ }
+ ]
+ },
+ "dragonite": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["haze", "hiddenpowerflying", "rest", "surf", "thunder"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icebeam", "rest", "sleeptalk", "thunder"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dynamicpunch", "hiddenpowerflying", "icebeam", "thunder"]
+ }
+ ]
+ },
+ "mewtwo": {
+ "level": 59,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["flamethrower", "icebeam", "psychic", "recover", "thunder"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["barrier", "flamethrower", "psychic", "recover", "thunder"]
+ }
+ ]
+ },
+ "mew": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "explosion", "rockslide", "swordsdance"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "rockslide", "softboiled", "swordsdance"]
+ }
+ ]
+ },
+ "meganium": {
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "earthquake", "swordsdance", "synthesis"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hiddenpowerrock", "swordsdance", "synthesis"]
+ }
+ ]
+ },
+ "typhlosion": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["earthquake", "fireblast", "flamethrower", "rest", "sleeptalk", "thunderpunch"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "fireblast", "sunnyday", "thunderpunch"]
+ }
+ ]
+ },
+ "feraligatr": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf"]
+ }
+ ]
+ },
+ "furret": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "doubleedge", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["doubleedge", "irontail", "rest", "sleeptalk", "surf"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "irontail", "quickattack", "return"]
+ }
+ ]
+ },
+ "noctowl": {
+ "sets": [
+ {
+ "role": "Thief user",
+ "movepool": ["hypnosis", "return", "thief", "toxic", "whirlwind"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["curse", "nightshade", "rest", "return", "sleeptalk"]
+ }
+ ]
+ },
+ "ledian": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["agility", "barrier", "batonpass", "lightscreen"]
+ }
+ ]
+ },
+ "ariados": {
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["agility", "batonpass", "growth", "sludgebomb"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "batonpass", "curse", "sludgebomb"]
+ }
+ ]
+ },
+ "crobat": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["haze", "hiddenpowerground", "rest", "toxic", "wingattack"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["haze", "protect", "toxic", "wingattack"]
+ }
+ ]
+ },
+ "lanturn": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["rest", "sleeptalk", "surf", "thunder"]
+ }
+ ]
+ },
+ "togetic": {
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["curse", "doubleedge", "fireblast", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["encore", "fireblast", "solarbeam", "sunnyday", "zapcannon"],
+ "preferredTypes": ["Fire", "Grass"]
+ }
+ ]
+ },
+ "xatu": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drillpeck", "psychic", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Thief user",
+ "movepool": ["confuseray", "drillpeck", "hiddenpowerfire", "psychic", "thief"]
+ }
+ ]
+ },
+ "ampharos": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["firepunch", "hiddenpowerice", "rest", "sleeptalk", "thunder"]
+ }
+ ]
+ },
+ "bellossom": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerfire", "hiddenpowerice", "leechseed", "moonlight", "razorleaf", "sleeppowder", "stunspore"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["hiddenpowerground", "moonlight", "return", "stunspore", "swordsdance"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "azumarill": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["perishsong", "rest", "surf", "whirlpool"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "lightscreen", "rest", "sleeptalk", "surf", "toxic"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "doubleedge", "rest", "sleeptalk"]
+ }
+ ]
+ },
+ "sudowoodo": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "earthquake", "rockslide", "selfdestruct"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "rest", "rockslide", "sleeptalk"]
+ },
+ {
+ "role": "Thief user",
+ "movepool": ["earthquake", "rockslide", "selfdestruct", "thief"]
+ }
+ ]
+ },
+ "politoed": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["growth", "rest", "sleeptalk", "surf"]
+ }
+ ]
+ },
+ "jumpluff": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["encore", "hiddenpowerflying", "stunspore", "synthesis"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["encore", "hiddenpowerflying", "leechseed", "stunspore"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "hiddenpowerflying", "sleeppowder", "stunspore"]
+ }
+ ]
+ },
+ "aipom": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["agility", "batonpass", "curse", "return"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "rest", "return", "sleeptalk"]
+ }
+ ]
+ },
+ "sunflora": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["growth", "hiddenpowerfire", "hiddenpowerice", "razorleaf", "synthesis"]
+ }
+ ]
+ },
+ "yanma": {
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["gigadrain", "hiddenpowerflying", "return", "thief"]
+ },
+ {
+ "role": "Thief user",
+ "movepool": ["gigadrain", "hiddenpowerbug", "thief", "wingattack"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["endure", "hiddenpowerflying", "return", "reversal"]
+ }
+ ]
+ },
+ "quagsire": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["earthquake", "rest", "sleeptalk", "surf"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "icebeam", "rest", "sleeptalk", "sludgebomb"]
+ }
+ ]
+ },
+ "espeon": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "growth", "hiddenpowerfire", "psychic", "substitute"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "growth", "hiddenpowerfire", "morningsun", "psychic"]
+ }
+ ]
+ },
+ "umbreon": {
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "growth", "hiddenpowerdark", "moonlight"]
+ }
+ ]
+ },
+ "murkrow": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["drillpeck", "hiddenpowerdark", "pursuit", "toxic"]
+ },
+ {
+ "role": "Thief user",
+ "movepool": ["drillpeck", "haze", "hiddenpowerdark", "thief", "toxic"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "slowking": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["psychic", "rest", "sleeptalk", "surf"]
+ }
+ ]
+ },
+ "misdreavus": {
+ "level": 67,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["meanlook", "painsplit", "perishsong", "protect", "thunder"]
+ },
+ {
+ "role": "Thief user",
+ "movepool": ["hypnosis", "psychic", "thief", "thunder"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hypnosis", "painsplit", "psychic", "shadowball", "thief", "thunder"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "unown": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["hiddenpowerpsychic"]
+ }
+ ]
+ },
+ "wobbuffet": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["counter", "mimic", "mirrorcoat", "safeguard"]
+ }
+ ]
+ },
+ "girafarig": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "psychic", "rest", "return", "sleeptalk", "thunder"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "amnesia", "batonpass", "psychic"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["agility", "batonpass", "psychic", "thunder"]
+ }
+ ]
+ },
+ "forretress": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["explosion", "hiddenpowerbug", "hiddenpowersteel", "rapidspin", "reflect", "spikes", "toxic"]
+ }
+ ]
+ },
+ "dunsparce": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "glare", "hiddenpowerground", "return"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["curse", "rest", "return", "sleeptalk", "thunder"]
+ }
+ ]
+ },
+ "gligar": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "hiddenpowerflying", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Thief user",
+ "movepool": ["counter", "earthquake", "hiddenpowerflying", "thief", "toxic"]
+ }
+ ]
+ },
+ "steelix": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["curse", "earthquake", "irontail", "rest", "roar", "sleeptalk"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["curse", "earthquake", "irontail", "rest"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "earthquake", "explosion", "irontail", "roar"]
+ }
+ ]
+ },
+ "granbull": {
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "rest", "return", "sleeptalk"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "hiddenpowerground", "rest", "return", "sleeptalk"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "hiddenpowerground", "lovelykiss", "return"]
+ }
+ ]
+ },
+ "qwilfish": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["haze", "hydropump", "rest", "sleeptalk", "sludgebomb", "spikes"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "hiddenpowerground", "hydropump", "sludgebomb", "spikes"]
+ }
+ ]
+ },
+ "scizor": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["agility", "batonpass", "hiddenpowerbug", "hiddenpowersteel", "swordsdance"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "hiddenpowerground", "return", "swordsdance"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "hiddenpowerbug", "hiddenpowersteel", "rest", "sleeptalk", "swordsdance"]
+ }
+ ]
+ },
+ "shuckle": {
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["defensecurl", "rest", "rollout", "toxic"]
+ }
+ ]
+ },
+ "heracross": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["curse", "earthquake", "megahorn", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "earthquake", "hiddenpowerrock", "megahorn"]
+ }
+ ]
+ },
+ "sneasel": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["hiddenpowerground", "moonlight", "return", "toxic"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dynamicpunch", "icebeam", "moonlight", "return"]
+ },
+ {
+ "role": "Thief user",
+ "movepool": ["dynamicpunch", "moonlight", "return", "thief"]
+ }
+ ]
+ },
+ "ursaring": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["curse", "earthquake", "rest", "return", "sleeptalk"]
+ }
+ ]
+ },
+ "magcargo": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "fireblast", "flamethrower", "hiddenpowergrass", "rest", "rockslide", "sleeptalk"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "fireblast", "flamethrower", "rest", "rockslide"]
+ }
+ ]
+ },
+ "piloswine": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["earthquake", "icebeam", "rest", "sleeptalk"]
+ }
+ ]
+ },
+ "corsola": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["curse", "icebeam", "recover", "rockslide", "sandstorm", "surf", "toxic"]
+ }
+ ]
+ },
+ "octillery": {
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["flamethrower", "hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf"]
+ }
+ ]
+ },
+ "delibird": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Thief user",
+ "movepool": ["hiddenpowerflying", "icebeam", "rapidspin", "spikes", "thief", "toxic"]
+ }
+ ]
+ },
+ "mantine": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf"]
+ }
+ ]
+ },
+ "skarmory": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["curse", "drillpeck", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "drillpeck", "rest", "toxic", "whirlwind"]
+ }
+ ]
+ },
+ "houndoom": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "fireblast", "pursuit", "solarbeam", "sunnyday"],
+ "preferredTypes": ["Grass"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "fireblast", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["counter", "crunch", "fireblast", "pursuit"]
+ }
+ ]
+ },
+ "kingdra": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["dragonbreath", "icebeam", "rest", "sleeptalk", "surf"]
+ }
+ ]
+ },
+ "donphan": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["curse", "earthquake", "hiddenpowerrock", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "earthquake", "hiddenpowerrock", "roar"]
+ }
+ ]
+ },
+ "porygon2": {
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "doubleedge", "icebeam", "recover", "thunder", "thunderwave"]
+ }
+ ]
+ },
+ "stantler": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["curse", "earthquake", "rest", "return", "sleeptalk"]
+ }
+ ]
+ },
+ "smeargle": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["agility", "batonpass", "spikes", "spore", "swordsdance"]
+ }
+ ]
+ },
+ "hitmontop": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "hiddenpowerghost", "hiddenpowerrock", "highjumpkick", "machpunch"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "highjumpkick", "rest", "sleeptalk"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["hiddenpowerghost", "hiddenpowerrock", "highjumpkick", "rest", "sleeptalk"]
+ }
+ ]
+ },
+ "miltank": {
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink"]
+ }
+ ]
+ },
+ "blissey": {
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["counter", "flamethrower", "healbell", "icebeam", "lightscreen", "present", "softboiled", "thunderwave", "toxic"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["healbell", "present", "softboiled", "thunder"]
+ }
+ ]
+ },
+ "raikou": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["crunch", "hiddenpowerice", "rest", "sleeptalk", "thunder"]
+ }
+ ]
+ },
+ "entei": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["fireblast", "hiddenpowerground", "hiddenpowerrock", "solarbeam", "sunnyday"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "rest", "return", "sleeptalk"]
+ }
+ ]
+ },
+ "suicune": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "rest", "roar", "surf", "toxic"]
+ }
+ ]
+ },
+ "tyranitar": {
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "rockslide", "thunderbolt"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["curse", "earthquake", "rest", "rockslide", "sleeptalk"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "rest", "roar", "rockslide"]
+ }
+ ]
+ },
+ "lugia": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aeroblast", "curse", "earthquake", "recover"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "hiddenpowerflying", "recover", "whirlwind"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["psychic", "recover", "thunder", "whirlwind"]
+ }
+ ]
+ },
+ "hooh": {
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "earthquake", "hiddenpowerflying", "recover"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "recover", "sacredfire", "thunder"]
+ }
+ ]
+ },
+ "celebi": {
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "leechseed", "psychic", "recover", "toxic"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["healbell", "hiddenpowergrass", "psychic", "recover"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "curse", "recover", "return"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen2/teams.ts b/data/random-battles/gen2/teams.ts
new file mode 100644
index 000000000000..2ff19a98c159
--- /dev/null
+++ b/data/random-battles/gen2/teams.ts
@@ -0,0 +1,490 @@
+import RandomGen3Teams from '../gen3/teams';
+import {PRNG, PRNGSeed} from '../../../sim/prng';
+import type {MoveCounter} from '../gen8/teams';
+
+// Moves that restore HP:
+const RECOVERY_MOVES = [
+ 'milkdrink', 'moonlight', 'morningsun', 'painsplit', 'recover', 'softboiled', 'synthesis',
+];
+// Moves that boost Attack:
+const PHYSICAL_SETUP = [
+ 'bellydrum', 'curse', 'meditate', 'swordsdance',
+];
+// Conglomerate for ease of access
+const SETUP = [
+ 'agility', 'bellydrum', 'curse', 'growth', 'meditate', 'raindance', 'sunnyday', 'swordsdance',
+];
+// Moves that shouldn't be the only STAB moves:
+const NO_STAB = [
+ 'explosion', 'icywind', 'machpunch', 'pursuit', 'quickattack', 'rapidspin', 'selfdestruct', 'skyattack', 'thief',
+];
+
+// Moves that should be paired together when possible
+const MOVE_PAIRS = [
+ ['sleeptalk', 'rest'],
+ ['meanlook', 'perishsong'],
+];
+
+export class RandomGen2Teams extends RandomGen3Teams {
+ randomSets: {[species: IDEntry]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json');
+
+ constructor(format: string | Format, prng: PRNG | PRNGSeed | null) {
+ super(format, prng);
+ this.noStab = NO_STAB;
+ this.moveEnforcementCheckers = {
+ Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'),
+ Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'),
+ Flying: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Flying') && ['gligar', 'murkrow', 'xatu'].includes(species.id)
+ ),
+ Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'),
+ Ice: (movePool, moves, abilities, types, counter) => !counter.get('Ice'),
+ Normal: (movePool, moves, abilities, types, counter) => !counter.get('Normal'),
+ Poison: (movePool, moves, abilities, types, counter) => !counter.get('Poison'),
+ Psychic: (movePool, moves, abilities, types, counter, species) => !counter.get('Psychic') && species.id !== 'starmie',
+ Rock: (movePool, moves, abilities, types, counter, species) => !counter.get('Rock') && species.id !== 'magcargo',
+ Water: (movePool, moves, abilities, types, counter) => !counter.get('Water'),
+ };
+ }
+
+ cullMovePool(
+ types: string[],
+ moves: Set,
+ abilities = {},
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): void {
+ // Pokemon cannot have multiple Hidden Powers in any circumstance
+ let hasHiddenPower = false;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hasHiddenPower = true;
+ }
+ if (hasHiddenPower) {
+ let movePoolHasHiddenPower = true;
+ while (movePoolHasHiddenPower) {
+ movePoolHasHiddenPower = false;
+ for (const moveid of movePool) {
+ if (moveid.startsWith('hiddenpower')) {
+ this.fastPop(movePool, movePool.indexOf(moveid));
+ movePoolHasHiddenPower = true;
+ break;
+ }
+ }
+ }
+ }
+
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
+ if (moves.size === this.maxMoveCount - 2) {
+ const unpairedMoves = [...movePool];
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
+ }
+ }
+ if (unpairedMoves.length === 1) {
+ this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
+ }
+ }
+
+ // These moves are paired, and shouldn't appear if there is not room for them both.
+ if (moves.size === this.maxMoveCount - 1) {
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(movePool, movePool.indexOf(pair[0]));
+ this.fastPop(movePool, movePool.indexOf(pair[1]));
+ }
+ }
+ }
+
+ // Team-based move culls
+ if (teamDetails.spikes) {
+ if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.rapidSpin) {
+ if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.statusCure) {
+ if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+
+ // General incompatibilities
+ const incompatiblePairs = [
+ // These moves don't mesh well with other aspects of the set
+ [PHYSICAL_SETUP, PHYSICAL_SETUP],
+ [SETUP, 'haze'],
+ ['bodyslam', 'thunderwave'],
+ [['stunspore', 'thunderwave'], 'toxic'],
+
+ // These attacks are redundant with each other
+ ['surf', 'hydropump'],
+ [['bodyslam', 'return'], ['bodyslam', 'doubleedge']],
+ ['fireblast', 'flamethrower'],
+ ['thunder', 'thunderbolt'],
+ ];
+
+ for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
+
+ if (!role.includes('Bulky')) this.incompatibleMoves(moves, movePool, ['rest', 'sleeptalk'], 'roar');
+ }
+
+ // Generate random moveset for a given species, role, preferred type.
+ randomMoveset(
+ types: string[],
+ abilities: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ movePool: string[],
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): Set {
+ const preferredTypes = preferredType ? preferredType.split(',') : [];
+ const moves = new Set();
+ let counter = this.newQueryMoves(moves, species, preferredType, abilities);
+ this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead,
+ preferredType, role);
+
+ // If there are only four moves, add all moves and return early
+ if (movePool.length <= this.maxMoveCount) {
+ // Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased)
+ while (movePool.length) {
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ return moves;
+ }
+
+ const runEnforcementChecker = (checkerName: string) => {
+ if (!this.moveEnforcementCheckers[checkerName]) return false;
+ return this.moveEnforcementCheckers[checkerName](
+ movePool, moves, abilities, new Set(types), counter, species, teamDetails
+ );
+ };
+
+ // Add required move (e.g. Relic Song for Meloetta-P)
+ if (species.requiredMove) {
+ const move = this.dex.moves.get(species.requiredMove).id;
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Add other moves you really want to have, e.g. STAB, recovery, setup.
+
+ // Enforce Destiny Bond, Explosion, Present, Spikes and Spore
+ for (const moveid of ['destinybond', 'explosion', 'present', 'spikes', 'spore']) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Baton Pass on Smeargle
+ if (movePool.includes('batonpass') && species.id === 'smeargle') {
+ counter = this.addMove('batonpass', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Enforce moves of all Preferred Types
+ for (const type of preferredTypes) {
+ if (!counter.get(type)) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce STAB
+ for (const type of types) {
+ // Check if a STAB move of that type should be required
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ while (runEnforcementChecker(type)) {
+ if (!stabMoves.length) break;
+ const moveid = this.sampleNoReplace(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // If no STAB move was added, add a STAB move
+ if (!counter.get('stab')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce recovery
+ if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup'].includes(role)) {
+ const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));
+ if (recoveryMoves.length) {
+ const moveid = this.sample(recoveryMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ // Rest/Sleep Talk count as recovery in Gen 2
+ if (movePool.includes('rest')) {
+ counter = this.addMove('rest', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ if (movePool.includes('sleeptalk')) {
+ counter = this.addMove('sleeptalk', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce setup
+ if (role.includes('Setup')) {
+ // First, try to add a non-Speed setup move
+ const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && moveid !== 'agility');
+ if (nonSpeedSetupMoves.length) {
+ const moveid = this.sample(nonSpeedSetupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ } else {
+ if (movePool.includes('agility')) {
+ counter = this.addMove('agility', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce Thief
+ if (role === 'Thief user') {
+ if (movePool.includes('thief')) {
+ counter = this.addMove('thief', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce a move not on the noSTAB list
+ if (!counter.damagingMoves.size && !moves.has('present')) {
+ // Choose an attacking move
+ const attackingMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);
+ }
+ if (attackingMoves.length) {
+ const moveid = this.sample(attackingMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce coverage move
+ if (['Fast Attacker', 'Setup Sweeper', 'Bulky Attacker'].includes(role)) {
+ if (counter.damagingMoves.size === 1) {
+ // Find the type of the current attacking move
+ const currentAttackType = counter.damagingMoves.values().next().value.type;
+ // Choose an attacking move that is of different type to the current single attack
+ const coverageMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {
+ if (currentAttackType !== moveType) coverageMoves.push(moveid);
+ }
+ }
+ if (coverageMoves.length) {
+ const moveid = this.sample(coverageMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Choose remaining moves randomly from movepool and add them to moves list:
+ while (moves.size < this.maxMoveCount && movePool.length) {
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ for (const pair of MOVE_PAIRS) {
+ if (moveid === pair[0] && movePool.includes(pair[1])) {
+ counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ if (moveid === pair[1] && movePool.includes(pair[0])) {
+ counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+ return moves;
+ }
+
+ getItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ // First, the high-priority items
+ if (species.id === 'ditto') return 'Metal Powder';
+ if (species.id === 'marowak') return 'Thick Club';
+ if (species.id === 'pikachu') return 'Light Ball';
+
+ if (moves.has('thief')) return '';
+
+ if (moves.has('flail')) return 'Pink Bow';
+ if (moves.has('reversal')) return 'Black Belt';
+
+ if (moves.has('rest') && !moves.has('sleeptalk') && !role.includes('Bulky')) return 'Mint Berry';
+
+ if (moves.has('bellydrum') && !counter.get('recovery') && this.randomChance(1, 2)) return 'Miracle Berry';
+
+ // Default to Leftovers
+ return 'Leftovers';
+ }
+
+ randomSet(
+ species: string | Species,
+ teamDetails: RandomTeamsTypes.TeamDetails = {},
+ isLead = false
+ ): RandomTeamsTypes.RandomSet {
+ species = this.dex.species.get(species);
+ const forme = this.getForme(species);
+ const sets = this.randomSets[species.id]["sets"];
+
+ const set = this.sampleIfArray(sets);
+ const role = set.role;
+ const movePool: string[] = Array.from(set.movepool);
+ const preferredTypes = set.preferredTypes;
+ // In Gen 2, if a set has multiple preferred types, enforce all of them.
+ const preferredType = preferredTypes ? preferredTypes.join() : '';
+
+ const ability = '';
+ let item = undefined;
+
+ const evs = {hp: 255, atk: 255, def: 255, spa: 255, spd: 255, spe: 255};
+ const ivs = {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30};
+
+ const types = species.types;
+ const abilities: string[] = [];
+
+ // Get moves
+ const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool,
+ preferredType, role);
+ const counter = this.newQueryMoves(moves, species, preferredType, abilities);
+
+ // Get items
+ item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);
+
+ const level = this.getLevel(species);
+
+ // We use a special variable to track Hidden Power
+ // so that we can check for all Hidden Powers at once
+ let hasHiddenPower = false;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hasHiddenPower = true;
+ }
+
+ if (hasHiddenPower) {
+ let hpType;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hpType = move.substr(11);
+ }
+ if (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`);
+ const hpIVs: {[k: string]: Partial} = {
+ dragon: {def: 28},
+ ice: {def: 26},
+ psychic: {def: 24},
+ electric: {atk: 28},
+ grass: {atk: 28, def: 28},
+ water: {atk: 28, def: 26},
+ fire: {atk: 28, def: 24},
+ steel: {atk: 26},
+ ghost: {atk: 26, def: 28},
+ bug: {atk: 26, def: 26},
+ rock: {atk: 26, def: 24},
+ ground: {atk: 24},
+ poison: {atk: 24, def: 28},
+ flying: {atk: 24, def: 26},
+ fighting: {atk: 24, def: 24},
+ };
+ let iv: StatID;
+ for (iv in hpIVs[hpType]) {
+ ivs[iv] = hpIVs[hpType][iv]!;
+ }
+ if (ivs.atk === 28 || ivs.atk === 24) ivs.hp = 14;
+ if (ivs.def === 28 || ivs.def === 24) ivs.hp -= 8;
+ }
+
+ // Prepare optimal HP
+ while (evs.hp > 1) {
+ const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ if (moves.has('substitute') && item !== 'Leftovers') {
+ // Should be able to use four Substitutes
+ if (hp % 4 > 0) break;
+ } else if (moves.has('bellydrum') && item !== 'Leftovers') {
+ // Belly Drum users without Leftovers should reach exactly 50% HP
+ if (hp % 2 === 0) break;
+ } else {
+ break;
+ }
+ evs.hp -= 4;
+ }
+
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+
+ return {
+ name: species.baseSpecies,
+ species: forme,
+ level,
+ moves: shuffledMoves,
+ ability: 'No Ability',
+ evs,
+ ivs,
+ item,
+ role,
+ // No shiny chance because Gen 2 shinies have bad IVs
+ shiny: false,
+ gender: species.gender ? species.gender : 'M',
+ };
+ }
+}
+
+export default RandomGen2Teams;
diff --git a/data/random-battles/gen3/sets.json b/data/random-battles/gen3/sets.json
new file mode 100644
index 000000000000..21a4687dd5db
--- /dev/null
+++ b/data/random-battles/gen3/sets.json
@@ -0,0 +1,3132 @@
+{
+ "venusaur": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowergrass", "leechseed", "sleeppowder", "sludgebomb", "substitute"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hiddenpowerghost", "sleeppowder", "sludgebomb", "swordsdance", "synthesis"],
+ "abilities": ["Overgrow"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "charizard": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dragondance", "earthquake", "fireblast", "hiddenpowerflying", "rockslide"],
+ "abilities": ["Blaze"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "earthquake", "hiddenpowerflying", "rockslide", "substitute"],
+ "abilities": ["Blaze"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["dragonclaw", "fireblast", "hiddenpowergrass", "substitute"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "blastoise": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icebeam", "rapidspin", "refresh", "roar", "surf", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "refresh", "surf", "toxic"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "butterfree": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["hiddenpowerfire", "morningsun", "psychic", "sleeppowder", "stunspore", "toxic"],
+ "abilities": ["Compound Eyes"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "beedrill": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["brickbreak", "endure", "hiddenpowerbug", "sludgebomb", "swordsdance"],
+ "abilities": ["Swarm"],
+ "preferredTypes": ["Bug"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["brickbreak", "doubleedge", "hiddenpowerbug", "sludgebomb", "swordsdance"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "pidgeot": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "doubleedge", "hiddenpowerground", "quickattack", "return", "toxic"],
+ "abilities": ["Keen Eye"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["aerialace", "hiddenpowerground", "return", "substitute"],
+ "abilities": ["Keen Eye"]
+ }
+ ]
+ },
+ "raticate": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "hiddenpowerground", "quickattack", "return", "shadowball"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "facade", "hiddenpowerground", "return", "shadowball"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["return", "reversal", "shadowball", "substitute"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "fearow": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "drillpeck", "hiddenpowerground", "quickattack", "return"],
+ "abilities": ["Keen Eye"]
+ }
+ ]
+ },
+ "arbok": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "hiddenpowerghost", "rest", "rockslide", "sleeptalk", "sludgebomb"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "pikachu": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["encore", "hiddenpowerice", "substitute", "surf", "thunderbolt"],
+ "abilities": ["Static"],
+ "preferredTypes": ["Ice", "Water"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerice", "surf", "thunderbolt", "volttackle"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "raichu": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["encore", "hiddenpowerice", "surf", "thunderbolt", "thunderwave", "toxic"],
+ "abilities": ["Static"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["hiddenpowerice", "substitute", "surf", "thunderbolt"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "sandslash": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "hiddenpowerbug", "rapidspin", "rockslide", "swordsdance", "toxic"],
+ "abilities": ["Sand Veil"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "nidoqueen": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "fireblast", "icebeam", "shadowball", "sludgebomb", "substitute", "thunderbolt"],
+ "abilities": ["Poison Point"]
+ }
+ ]
+ },
+ "nidoking": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "fireblast", "icebeam", "megahorn", "shadowball", "sludgebomb", "substitute", "thunderbolt"],
+ "abilities": ["Poison Point"]
+ }
+ ]
+ },
+ "clefable": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "return", "shadowball", "softboiled", "thunderwave", "toxic"],
+ "abilities": ["Cute Charm"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "icebeam", "softboiled", "thunderbolt"],
+ "abilities": ["Cute Charm"]
+ }
+ ]
+ },
+ "ninetales": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "hypnosis", "substitute", "toxic", "willowisp"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "wigglytuff": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "fireblast", "protect", "wish"],
+ "abilities": ["Cute Charm"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["doubleedge", "protect", "thunderwave", "toxic", "wish"],
+ "abilities": ["Cute Charm"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Cute Charm"]
+ }
+ ]
+ },
+ "vileplume": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "hiddenpowerfire", "hiddenpowergrass", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "parasect": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aromatherapy", "gigadrain", "hiddenpowerbug", "return", "spore", "stunspore"],
+ "abilities": ["Effect Spore"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "venomoth": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["batonpass", "hiddenpowerfire", "psychic", "signalbeam", "sleeppowder", "sludgebomb", "substitute"],
+ "abilities": ["Shield Dust"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["hiddenpowerfire", "psychic", "signalbeam", "sleeppowder", "sludgebomb"],
+ "abilities": ["Shield Dust"]
+ }
+ ]
+ },
+ "dugtrio": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "hiddenpowerbug", "rockslide", "sludgebomb"],
+ "abilities": ["Arena Trap"]
+ }
+ ]
+ },
+ "persian": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["hiddenpowerground", "irontail", "return", "shadowball", "substitute"],
+ "abilities": ["Limber"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerground", "hypnosis", "irontail", "return", "shadowball"],
+ "abilities": ["Limber"]
+ }
+ ]
+ },
+ "golduck": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowergrass", "hydropump", "hypnosis", "icebeam", "substitute", "surf"],
+ "abilities": ["Cloud Nine"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "primeape": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulkup", "crosschop", "earthquake", "hiddenpowerghost", "rockslide"],
+ "abilities": ["Vital Spirit"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "crosschop", "hiddenpowerghost", "rockslide", "substitute"],
+ "abilities": ["Vital Spirit"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["bulkup", "hiddenpowerghost", "reversal", "substitute"],
+ "abilities": ["Vital Spirit"]
+ }
+ ]
+ },
+ "arcanine": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["flamethrower", "hiddenpowergrass", "rest", "sleeptalk", "toxic"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "extremespeed", "fireblast", "hiddenpowerrock", "irontail"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Steel"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["flamethrower", "hiddenpowergrass", "hiddenpowerrock", "protect", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "poliwrath": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["brickbreak", "bulkup", "earthquake", "hiddenpowerghost", "hydropump", "hypnosis", "substitute"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["brickbreak", "hiddenpowerghost", "hydropump", "hypnosis", "icebeam", "rest", "sleeptalk", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["focuspunch", "hydropump", "icebeam", "substitute", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "alakazam": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "encore", "firepunch", "icepunch", "psychic", "recover", "substitute", "thunderpunch"],
+ "abilities": ["Synchronize"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "machamp": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulkup", "crosschop", "earthquake", "hiddenpowerghost", "rockslide"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crosschop", "hiddenpowerghost", "rest", "rockslide", "sleeptalk"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "victreebel": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerfire", "sludgebomb", "solarbeam", "sunnyday"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerground", "magicalleaf", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Chlorophyll"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerground", "sleeppowder", "sludgebomb", "swordsdance", "synthesis"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "tentacruel": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hydropump", "icebeam", "rapidspin", "sludgebomb", "surf", "toxic"],
+ "abilities": ["Clear Body", "Liquid Ooze"]
+ }
+ ]
+ },
+ "golem": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "rockslide", "toxic"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["doubleedge", "earthquake", "explosion", "hiddenpowerbug", "rockslide", "toxic"],
+ "abilities": ["Rock Head"]
+ }
+ ]
+ },
+ "rapidash": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fireblast", "hiddenpowergrass", "hiddenpowerrock", "substitute", "toxic"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "slowbro": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "icebeam", "psychic", "rest", "sleeptalk", "surf", "thunderwave", "toxic"],
+ "abilities": ["Own Tempo"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "psychic", "rest", "surf"],
+ "abilities": ["Own Tempo"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "rest", "sleeptalk", "surf"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "magneton": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Magnet Pull"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerice", "rest", "sleeptalk", "thunderbolt"],
+ "abilities": ["Magnet Pull"]
+ }
+ ]
+ },
+ "farfetchd": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "batonpass", "return", "swordsdance"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "dodrio": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "drillpeck", "hiddenpowerground", "quickattack", "return"],
+ "abilities": ["Early Bird"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["drillpeck", "flail", "hiddenpowerground", "quickattack", "substitute"],
+ "abilities": ["Early Bird"]
+ }
+ ]
+ },
+ "dewgong": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["encore", "icebeam", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "muk": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["explosion", "fireblast", "hiddenpowerground", "rest", "sludgebomb", "toxic"],
+ "abilities": ["Sticky Hold"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "hiddenpowerground", "rest", "sludgebomb"],
+ "abilities": ["Sticky Hold"]
+ }
+ ]
+ },
+ "cloyster": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["explosion", "icebeam", "rapidspin", "spikes", "surf", "toxic"],
+ "abilities": ["Shell Armor"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["explosion", "rapidspin", "spikes", "surf", "toxic"],
+ "abilities": ["Shell Armor"]
+ }
+ ]
+ },
+ "gengar": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["destinybond", "explosion", "firepunch", "icepunch", "substitute", "thunderbolt", "willowisp"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Electric", "Ice"]
+ }
+ ]
+ },
+ "hypno": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "calmmind", "firepunch", "psychic"],
+ "abilities": ["Insomnia"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["firepunch", "protect", "psychic", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ }
+ ]
+ },
+ "kingler": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "hiddenpowerghost", "hiddenpowerground", "surf", "swordsdance"],
+ "abilities": ["Hyper Cutter"]
+ }
+ ]
+ },
+ "electrode": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["explosion", "hiddenpowerice", "substitute", "thunderbolt", "toxic"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "exeggutor": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["gigadrain", "hiddenpowerfire", "psychic", "sleeppowder", "stunspore", "synthesis"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["explosion", "gigadrain", "hiddenpowerfire", "leechseed", "psychic", "sleeppowder", "stunspore", "substitute"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerfire", "psychic", "solarbeam", "sunnyday"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "marowak": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "earthquake", "rockslide", "swordsdance"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["bonemerang", "doubleedge", "rockslide", "swordsdance"],
+ "abilities": ["Rock Head"]
+ }
+ ]
+ },
+ "hitmonlee": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["brickbreak", "bulkup", "earthquake", "hiddenpowerghost", "machpunch", "rockslide"],
+ "abilities": ["Limber"],
+ "preferredTypes": ["Ghost"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["earthquake", "hiddenpowerghost", "reversal", "rockslide", "substitute"],
+ "abilities": ["Limber"],
+ "preferredTypes": ["Ghost"]
+ }
+ ]
+ },
+ "hitmonchan": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulkup", "earthquake", "hiddenpowerghost", "machpunch", "rapidspin", "rockslide", "skyuppercut", "toxic"],
+ "abilities": ["Keen Eye"],
+ "preferredTypes": ["Ghost"]
+ }
+ ]
+ },
+ "lickitung": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "earthquake", "protect", "wish"],
+ "abilities": ["Own Tempo"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "knockoff", "protect", "seismictoss", "wish"],
+ "abilities": ["Own Tempo"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "weezing": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["explosion", "fireblast", "haze", "painsplit", "sludgebomb", "toxic", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rhydon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "megahorn", "rockslide", "substitute", "swordsdance"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "megahorn", "rockslide"],
+ "abilities": ["Rock Head"]
+ }
+ ]
+ },
+ "tangela": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["hiddenpowergrass", "leechseed", "morningsun", "sleeppowder", "stunspore", "toxic"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerfire", "morningsun", "sleeppowder", "solarbeam", "sunnyday"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "kangaskhan": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "earthquake", "rest", "return", "shadowball", "toxic"],
+ "abilities": ["Early Bird"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "earthquake", "protect", "return", "wish"],
+ "abilities": ["Early Bird"]
+ }
+ ]
+ },
+ "seaking": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerelectric", "hiddenpowergrass", "hydropump", "icebeam", "megahorn", "raindance"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "starmie": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hydropump", "icebeam", "psychic", "recover", "surf", "thunderbolt"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "mrmime": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "calmmind", "encore", "firepunch", "hypnosis", "psychic", "substitute", "thunderbolt"],
+ "abilities": ["Soundproof"]
+ }
+ ]
+ },
+ "scyther": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aerialace", "batonpass", "hiddenpowerground", "silverwind", "swordsdance"],
+ "abilities": ["Swarm"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "jynx": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "hiddenpowerfire", "icebeam", "lovelykiss", "psychic", "substitute"],
+ "abilities": ["Oblivious"]
+ }
+ ]
+ },
+ "electabuzz": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crosschop", "firepunch", "focuspunch", "hiddenpowergrass", "icepunch", "substitute", "thunderbolt"],
+ "abilities": ["Static"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["firepunch", "hiddenpowergrass", "icepunch", "substitute", "thunderbolt"],
+ "abilities": ["Static"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "magmar": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crosschop", "fireblast", "flamethrower", "focuspunch", "hiddenpowergrass", "hiddenpowerice", "substitute", "thunderpunch", "toxic"],
+ "abilities": ["Flame Body"],
+ "preferredTypes": ["Electric"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "hiddenpowerice", "substitute", "thunderpunch"],
+ "abilities": ["Flame Body"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "pinsir": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hiddenpowerbug", "rockslide", "swordsdance"],
+ "abilities": ["Hyper Cutter"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "hiddenpowerbug", "rockslide"],
+ "abilities": ["Hyper Cutter"]
+ }
+ ]
+ },
+ "tauros": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "hiddenpowerghost", "return"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "gyarados": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "dragondance", "earthquake", "hiddenpowerflying", "hydropump"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "dragondance", "earthquake", "hiddenpowerflying", "substitute"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "lapras": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["healbell", "icebeam", "rest", "sleeptalk", "surf", "thunderbolt", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["healbell", "icebeam", "rest", "sleeptalk", "thunderbolt", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "ditto": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["transform"],
+ "abilities": ["Limber"]
+ }
+ ]
+ },
+ "vaporeon": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "protect", "surf", "toxic", "wish"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "jolteon": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Volt Absorb"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["batonpass", "hiddenpowerice", "substitute", "thunderbolt"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "flareon": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["flamethrower", "hiddenpowergrass", "protect", "toxic", "wish"],
+ "abilities": ["Flash Fire"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "fireblast", "hiddenpowergrass", "hiddenpowerrock", "irontail", "shadowball", "toxic"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "omastar": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "spikes", "surf"],
+ "abilities": ["Shell Armor", "Swift Swim"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "kabutops": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["brickbreak", "hiddenpowerflying", "rockslide", "surf", "swordsdance"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ }
+ ]
+ },
+ "aerodactyl": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "earthquake", "hiddenpowerflying", "rockslide"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["earthquake", "hiddenpowerflying", "rockslide", "substitute"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "snorlax": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bodyslam", "earthquake", "return", "selfdestruct", "shadowball"],
+ "abilities": ["Immunity"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "curse", "rest", "sleeptalk"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "curse", "earthquake", "rest"],
+ "abilities": ["Immunity", "Thick Fat"]
+ }
+ ]
+ },
+ "articuno": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["healbell", "hiddenpowerfire", "icebeam", "protect", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerfire", "icebeam", "rest", "sleeptalk"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "zapdos": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["batonpass", "hiddenpowerice", "substitute", "thunderbolt", "thunderwave", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerice", "rest", "sleeptalk", "thunderbolt"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "moltres": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "morningsun", "substitute", "toxic", "willowisp"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "dragonite": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "dragondance", "earthquake", "healbell", "hiddenpowerflying", "rest", "substitute"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["brickbreak", "doubleedge", "earthquake", "fireblast", "hiddenpowerflying"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "mewtwo": {
+ "level": 66,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "flamethrower", "psychic", "recover"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "flamethrower", "icebeam", "psychic", "thunderbolt"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "mew": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["explosion", "flamethrower", "psychic", "softboiled", "thunderwave", "transform"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "flamethrower", "psychic", "softboiled", "thunderbolt"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["brickbreak", "earthquake", "explosion", "rockslide", "softboiled", "swordsdance"],
+ "abilities": ["Synchronize"],
+ "preferredTypes": ["Ground", "Rock"]
+ }
+ ]
+ },
+ "meganium": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["bodyslam", "earthquake", "hiddenpowergrass", "leechseed", "synthesis", "toxic"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "earthquake", "hiddenpowerrock", "swordsdance", "synthesis"],
+ "abilities": ["Overgrow"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "typhlosion": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["fireblast", "flamethrower", "hiddenpowerice", "substitute", "thunderpunch"],
+ "abilities": ["Blaze"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "fireblast", "flamethrower", "focuspunch", "hiddenpowerice", "substitute", "thunderpunch", "toxic"],
+ "abilities": ["Blaze"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "feraligatr": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "hiddenpowerflying", "hydropump", "rockslide", "swordsdance"],
+ "abilities": ["Torrent"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "furret": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["brickbreak", "doubleedge", "quickattack", "return", "shadowball"],
+ "abilities": ["Keen Eye"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["brickbreak", "doubleedge", "return", "shadowball", "trick"],
+ "abilities": ["Keen Eye"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["return", "reversal", "shadowball", "substitute"],
+ "abilities": ["Keen Eye"]
+ }
+ ]
+ },
+ "noctowl": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerfire", "hypnosis", "return", "toxic", "whirlwind"],
+ "abilities": ["Insomnia"]
+ }
+ ]
+ },
+ "ledian": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "batonpass", "silverwind", "swordsdance"],
+ "abilities": ["Swarm"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["batonpass", "silverwind", "substitute", "swordsdance"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "ariados": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "batonpass", "signalbeam", "sludgebomb"],
+ "abilities": ["Insomnia", "Swarm"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["batonpass", "signalbeam", "sludgebomb", "spiderweb", "toxic"],
+ "abilities": ["Insomnia", "Swarm"],
+ "preferredTypes": ["Bug"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["agility", "batonpass", "sludgebomb", "spiderweb"],
+ "abilities": ["Insomnia"]
+ }
+ ]
+ },
+ "crobat": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "haze", "hiddenpowerground", "shadowball", "sludgebomb", "toxic"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "lanturn": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icebeam", "rest", "sleeptalk", "surf", "thunderbolt", "toxic"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "togetic": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["charm", "encore", "flamethrower", "seismictoss", "softboiled", "thunderwave", "toxic"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "xatu": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "hiddenpowerfire", "psychic", "rest"],
+ "abilities": ["Early Bird"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["batonpass", "calmmind", "hiddenpowerfire", "protect", "psychic", "wish"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "psychic", "thunderwave", "toxic", "wish"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "ampharos": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["firepunch", "healbell", "hiddenpowerice", "thunderbolt", "toxic"],
+ "abilities": ["Static"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "bellossom": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerfire", "leechseed", "magicalleaf", "moonlight", "sleeppowder", "stunspore"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "azumarill": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["brickbreak", "doubleedge", "hiddenpowerghost", "hydropump", "rest", "return", "sleeptalk"],
+ "abilities": ["Huge Power"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "sudowoodo": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["brickbreak", "doubleedge", "earthquake", "explosion", "rockslide", "toxic"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "politoed": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowergrass", "hypnosis", "icebeam", "rest", "surf", "toxic"],
+ "abilities": ["Water Absorb"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "jumpluff": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["encore", "hiddenpowerflying", "sleeppowder", "synthesis", "toxic"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerflying", "leechseed", "protect", "substitute"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "aipom": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["brickbreak", "focuspunch", "return", "shadowball", "substitute", "thunderwave", "toxic"],
+ "abilities": ["Pickup", "Run Away"],
+ "preferredTypes": ["Ghost"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["batonpass", "brickbreak", "return", "shadowball", "substitute", "thunderwave", "toxic"],
+ "abilities": ["Pickup", "Run Away"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["batonpass", "brickbreak", "doubleedge", "return", "shadowball"],
+ "abilities": ["Pickup", "Run Away"]
+ }
+ ]
+ },
+ "sunflora": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerfire", "leechseed", "razorleaf", "synthesis", "toxic"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerfire", "solarbeam", "sunnyday", "synthesis"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "yanma": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["hiddenpowerflying", "hypnosis", "reversal", "shadowball", "substitute"],
+ "abilities": ["Compound Eyes", "Speed Boost"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "doubleedge", "hiddenpowerground", "hypnosis", "signalbeam", "toxic"],
+ "abilities": ["Compound Eyes", "Speed Boost"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "quagsire": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "icebeam", "protect", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "icebeam", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "espeon": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "calmmind", "hiddenpowerfire", "morningsun", "psychic", "substitute"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "umbreon": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerfire", "hiddenpowerground", "protect", "toxic", "wish"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["batonpass", "protect", "toxic", "wish"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "murkrow": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "drillpeck", "hiddenpowerfighting", "hiddenpowerground", "shadowball"],
+ "abilities": ["Insomnia"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drillpeck", "hiddenpowerground", "pursuit", "shadowball", "thunderwave", "toxic"],
+ "abilities": ["Insomnia"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "slowking": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "icebeam", "psychic", "rest", "sleeptalk", "surf", "thunderwave", "toxic"],
+ "abilities": ["Own Tempo"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "psychic", "rest", "surf"],
+ "abilities": ["Own Tempo"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "rest", "sleeptalk", "surf"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "misdreavus": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "thunderwave", "toxic"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["meanlook", "perishsong", "protect", "shadowball"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "hiddenpowerice", "substitute", "thunderbolt"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "unown": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerpsychic"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerbug", "hiddenpowerfighting"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "wobbuffet": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["counter", "destinybond", "encore", "mirrorcoat"],
+ "abilities": ["Shadow Tag"]
+ }
+ ]
+ },
+ "girafarig": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "calmmind", "hiddenpowerfire", "psychic", "rest", "substitute", "thunderbolt"],
+ "abilities": ["Early Bird"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "protect", "psychic", "return", "shadowball", "thunderbolt", "thunderwave", "toxic", "wish"],
+ "abilities": ["Early Bird"]
+ }
+ ]
+ },
+ "forretress": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "explosion", "hiddenpowerbug", "hiddenpowersteel", "rapidspin", "spikes", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "dunsparce": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "curse", "earthquake", "rest", "shadowball"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "headbutt", "shadowball", "thunderwave"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "gligar": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hiddenpowerflying", "quickattack", "rockslide", "substitute", "swordsdance"],
+ "abilities": ["Hyper Cutter"]
+ }
+ ]
+ },
+ "steelix": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["doubleedge", "earthquake", "explosion", "hiddenpowerrock", "irontail", "rest", "roar", "toxic"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["doubleedge", "earthquake", "hiddenpowerrock", "protect", "toxic"],
+ "abilities": ["Rock Head"]
+ }
+ ]
+ },
+ "granbull": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "earthquake", "rest", "return", "sleeptalk"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bulkup", "doubleedge", "earthquake", "overheat", "shadowball"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "healbell", "return", "shadowball", "thunderwave"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "qwilfish": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hydropump", "selfdestruct", "shadowball", "sludgebomb", "swordsdance"],
+ "abilities": ["Poison Point", "Swift Swim"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["destinybond", "hydropump", "selfdestruct", "sludgebomb", "spikes"],
+ "abilities": ["Poison Point", "Swift Swim"]
+ }
+ ]
+ },
+ "scizor": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "hiddenpowerground", "morningsun", "silverwind", "steelwing", "swordsdance"],
+ "abilities": ["Swarm"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["agility", "batonpass", "hiddenpowerground", "silverwind", "steelwing"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "shuckle": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["encore", "rest", "toxic", "wrap"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "heracross": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["brickbreak", "earthquake", "hiddenpowerghost", "megahorn", "rockslide"],
+ "abilities": ["Guts"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["brickbreak", "megahorn", "rockslide", "swordsdance"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["endure", "megahorn", "reversal", "rockslide", "substitute"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "sneasel": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["brickbreak", "hiddenpowerflying", "shadowball", "substitute", "swordsdance"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Fighting", "Ghost"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["brickbreak", "doubleedge", "hiddenpowerflying", "shadowball", "swordsdance"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Fighting", "Ghost"]
+ }
+ ]
+ },
+ "ursaring": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "focuspunch", "hiddenpowerghost", "return"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "facade", "hiddenpowerghost", "return"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hiddenpowerghost", "return", "swordsdance"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "magcargo": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "rest", "sleeptalk", "toxic"],
+ "abilities": ["Flame Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["fireblast", "flamethrower", "hiddenpowergrass", "protect", "toxic"],
+ "abilities": ["Flame Body"]
+ }
+ ]
+ },
+ "piloswine": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "icebeam", "protect", "toxic"],
+ "abilities": ["Oblivious"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "icebeam", "rest", "rockslide", "sleeptalk"],
+ "abilities": ["Oblivious"]
+ }
+ ]
+ },
+ "corsola": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "icebeam", "recover", "surf", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "octillery": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "hiddenpowerelectric", "hiddenpowergrass", "icebeam", "surf", "thunderwave"],
+ "abilities": ["Suction Cups"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "delibird": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aerialace", "doubleedge", "focuspunch", "hiddenpowerground", "icebeam", "quickattack"],
+ "abilities": ["Hustle"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "mantine": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["hiddenpowergrass", "icebeam", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["haze", "icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "skarmory": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["drillpeck", "protect", "spikes", "toxic"],
+ "abilities": ["Keen Eye"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["drillpeck", "spikes", "toxic", "whirlwind"],
+ "abilities": ["Keen Eye"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "spikes", "toxic", "whirlwind"],
+ "abilities": ["Keen Eye"]
+ }
+ ]
+ },
+ "houndoom": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["crunch", "fireblast", "hiddenpowergrass", "substitute"],
+ "abilities": ["Flash Fire"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crunch", "fireblast", "hiddenpowergrass", "pursuit", "willowisp"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "kingdra": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerelectric", "hiddenpowergrass", "hydropump", "icebeam", "raindance", "substitute", "surf"],
+ "abilities": ["Swift Swim"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "donphan": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "rapidspin", "rest", "rockslide", "sleeptalk", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "porygon2": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "recover", "return", "thunderbolt", "thunderwave", "toxic"],
+ "abilities": ["Trace"]
+ }
+ ]
+ },
+ "stantler": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "hypnosis", "return", "shadowball", "thunderbolt", "thunderwave"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "smeargle": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["encore", "explosion", "spikes", "spore"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "hitmontop": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["brickbreak", "bulkup", "earthquake", "hiddenpowerghost", "machpunch", "rapidspin", "rockslide", "toxic"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ghost"]
+ }
+ ]
+ },
+ "miltank": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "blissey": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "seismictoss", "softboiled", "thunderwave", "toxic"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "raikou": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "crunch", "hiddenpowerice", "substitute", "thunderbolt"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerice", "rest", "sleeptalk", "thunderbolt"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "entei": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["flamethrower", "rest", "sleeptalk", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["flamethrower", "protect", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "flamethrower", "hiddenpowergrass", "substitute"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "suicune": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "rest", "sleeptalk", "surf"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "icebeam", "rest", "substitute", "surf"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "tyranitar": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "fireblast", "hiddenpowerflying", "rockslide"],
+ "abilities": ["Sand Stream"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "rockslide", "thunderwave"],
+ "abilities": ["Sand Stream"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "fireblast", "hiddenpowerflying", "rest", "rockslide", "sleeptalk"],
+ "abilities": ["Sand Stream"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "lugia": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "psychic", "recover", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "icebeam", "recover", "thunderbolt"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "hooh": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "recover", "sacredfire", "substitute", "thunderbolt", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "recover", "sacredfire", "thunderbolt"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "celebi": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "calmmind", "hiddenpowerfire", "hiddenpowergrass", "psychic", "recover"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["healbell", "hiddenpowerfire", "hiddenpowergrass", "leechseed", "psychic", "recover", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "sceptile": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerfire", "hiddenpowerice", "leafblade", "leechseed", "substitute"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["hiddenpowerice", "leafblade", "substitute", "thunderpunch"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "hiddenpowerice", "leafblade", "thunderpunch", "toxic"],
+ "abilities": ["Overgrow"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "blaziken": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "fireblast", "hiddenpowerice", "rockslide", "skyuppercut", "thunderpunch"],
+ "abilities": ["Blaze"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["endure", "fireblast", "reversal", "swordsdance"],
+ "abilities": ["Blaze"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "fireblast", "rockslide", "skyuppercut", "swordsdance"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "swampert": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "hydropump", "protect", "surf", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "hydropump", "rest", "sleeptalk", "surf"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "hydropump", "icebeam", "refresh", "surf", "toxic"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "mightyena": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "doubleedge", "healbell", "hiddenpowerfighting", "shadowball", "toxic"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "linoone": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "extremespeed", "hiddenpowerfighting", "shadowball"],
+ "abilities": ["Pickup"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bellydrum", "hiddenpowerground", "return", "shadowball", "substitute"],
+ "abilities": ["Pickup"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "beautifly": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerfire", "morningsun", "psychic", "toxic"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "dustox": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerground", "moonlight", "sludgebomb", "toxic", "whirlwind"],
+ "abilities": ["Shield Dust"]
+ }
+ ]
+ },
+ "ludicolo": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "shiftry": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["brickbreak", "explosion", "shadowball", "swordsdance"],
+ "abilities": ["Chlorophyll", "Early Bird"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerdark", "leechseed", "substitute", "toxic"],
+ "abilities": ["Chlorophyll", "Early Bird"]
+ }
+ ]
+ },
+ "swellow": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aerialace", "doubleedge", "hiddenpowerground", "quickattack", "return"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "doubleedge", "facade", "hiddenpowerground", "return"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "pelipper": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Keen Eye"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Keen Eye"]
+ }
+ ]
+ },
+ "gardevoir": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "firepunch", "hypnosis", "icepunch", "psychic", "substitute", "thunderbolt"],
+ "abilities": ["Trace"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "masquerain": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hydropump", "icebeam", "stunspore", "substitute", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "breloom": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerghost", "hiddenpowerrock", "machpunch", "skyuppercut", "spore", "substitute", "swordsdance"],
+ "abilities": ["Effect Spore"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["focuspunch", "hiddenpowerghost", "hiddenpowerrock", "spore", "substitute"],
+ "abilities": ["Effect Spore"]
+ }
+ ]
+ },
+ "vigoroth": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "bulkup", "earthquake", "return", "shadowball", "slackoff"],
+ "abilities": ["Vital Spirit"]
+ }
+ ]
+ },
+ "slaking": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "earthquake", "hyperbeam", "return", "shadowball"],
+ "abilities": ["Truant"]
+ }
+ ]
+ },
+ "ninjask": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "hiddenpowerflying", "substitute", "swordsdance"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "hiddenpowerflying", "protect", "swordsdance"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "shedinja": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["agility", "batonpass", "hiddenpowerfighting", "shadowball", "silverwind", "toxic"],
+ "abilities": ["Wonder Guard"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "exploud": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "overheat", "return", "shadowball"],
+ "abilities": ["Soundproof"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "flamethrower", "icebeam", "return", "shadowball", "substitute"],
+ "abilities": ["Soundproof"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "hariyama": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulkup", "crosschop", "earthquake", "hiddenpowerghost", "knockoff", "rockslide"],
+ "abilities": ["Guts", "Thick Fat"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crosschop", "hiddenpowerghost", "rest", "rockslide", "sleeptalk"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "nosepass": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "rockslide", "thunderwave", "toxic"],
+ "abilities": ["Magnet Pull"]
+ }
+ ]
+ },
+ "delcatty": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["doubleedge", "protect", "thunderwave", "toxic", "wish"],
+ "abilities": ["Cute Charm"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["bodyslam", "healbell", "protect", "wish"],
+ "abilities": ["Cute Charm"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "calmmind", "icebeam", "thunderbolt"],
+ "abilities": ["Cute Charm"]
+ }
+ ]
+ },
+ "sableye": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "recover", "seismictoss", "toxic"],
+ "abilities": ["Keen Eye"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["recover", "seismictoss", "shadowball", "toxic"],
+ "abilities": ["Keen Eye"]
+ }
+ ]
+ },
+ "mawile": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "brickbreak", "hiddenpowersteel", "rockslide", "substitute", "swordsdance"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["focuspunch", "hiddenpowersteel", "rockslide", "substitute", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "aggron": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "irontail", "rockslide", "thunderwave", "toxic"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["doubleedge", "earthquake", "focuspunch", "irontail", "rockslide", "substitute"],
+ "abilities": ["Rock Head"]
+ }
+ ]
+ },
+ "medicham": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["brickbreak", "bulkup", "recover", "rockslide", "shadowball", "substitute"],
+ "abilities": ["Pure Power"],
+ "preferredTypes": ["Ghost"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["bulkup", "reversal", "shadowball", "substitute"],
+ "abilities": ["Pure Power"]
+ }
+ ]
+ },
+ "manectric": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["crunch", "hiddenpowerice", "substitute", "thunderbolt"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "plusle": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["batonpass", "encore", "hiddenpowerice", "substitute", "thunderbolt", "toxic"],
+ "abilities": ["Plus"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Plus"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic", "wish"],
+ "abilities": ["Plus"]
+ }
+ ]
+ },
+ "minun": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["batonpass", "encore", "hiddenpowerice", "substitute", "thunderbolt", "toxic"],
+ "abilities": ["Minus"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Minus"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic", "wish"],
+ "abilities": ["Minus"]
+ }
+ ]
+ },
+ "volbeat": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "icepunch", "tailglow", "thunderbolt"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "illumise": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "moonlight", "seismictoss", "thunderwave", "toxic"],
+ "abilities": ["Oblivious"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["batonpass", "encore", "seismictoss", "substitute", "thunderwave", "toxic"],
+ "abilities": ["Oblivious"]
+ }
+ ]
+ },
+ "roselia": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerfire", "magicalleaf", "spikes", "synthesis"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "hiddenpowergrass", "spikes", "synthesis", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "swalot": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["encore", "explosion", "hiddenpowerground", "icebeam", "painsplit", "shadowball", "sludgebomb", "toxic", "yawn"],
+ "abilities": ["Liquid Ooze"]
+ }
+ ]
+ },
+ "sharpedo": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "hiddenpowerflying", "hydropump"],
+ "abilities": ["Rough Skin"]
+ },
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["crunch", "hiddenpowerelectric", "hiddenpowergrass", "hydropump", "icebeam", "substitute"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "wailord": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Water Veil"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowergrass", "icebeam", "selfdestruct", "surf", "toxic"],
+ "abilities": ["Water Veil"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "camerupt": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "explosion", "fireblast", "rest", "rockslide", "sleeptalk", "toxic"],
+ "abilities": ["Magma Armor"]
+ }
+ ]
+ },
+ "torkoal": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["explosion", "fireblast", "flamethrower", "hiddenpowergrass", "rest", "toxic"],
+ "abilities": ["White Smoke"]
+ }
+ ]
+ },
+ "grumpig": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "firepunch", "psychic", "substitute", "thunderpunch"],
+ "abilities": ["Thick Fat"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "spinda": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["encore", "protect", "seismictoss", "shadowball", "substitute", "toxic"],
+ "abilities": ["Own Tempo"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "flygon": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "hiddenpowerbug", "quickattack", "rockslide"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["dragonclaw", "earthquake", "fireblast", "protect", "toxic"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dragonclaw", "earthquake", "fireblast", "rockslide", "substitute", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "cacturne": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["focuspunch", "hiddenpowerdark", "leechseed", "substitute"],
+ "abilities": ["Sand Veil"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["hiddenpowerdark", "needlearm", "spikes", "thunderpunch"],
+ "abilities": ["Sand Veil"]
+ }
+ ]
+ },
+ "altaria": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragonclaw", "earthquake", "flamethrower", "haze", "healbell", "rest", "toxic"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "fireblast", "healbell", "hiddenpowerflying", "rest"],
+ "abilities": ["Natural Cure"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "zangoose": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["brickbreak", "quickattack", "return", "shadowball", "swordsdance"],
+ "abilities": ["Immunity"],
+ "preferredTypes": ["Ghost"]
+ }
+ ]
+ },
+ "seviper": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crunch", "earthquake", "flamethrower", "hiddenpowergrass", "sludgebomb"],
+ "abilities": ["Shed Skin"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "lunatone": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "calmmind", "hiddenpowerfire", "hypnosis", "icebeam", "psychic"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["explosion", "hiddenpowerfire", "hypnosis", "icebeam", "psychic", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "solrock": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "rockslide", "toxic"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "explosion", "overheat", "rockslide", "shadowball"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "whiscash": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "icebeam", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Oblivious"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "icebeam", "protect", "toxic"],
+ "abilities": ["Oblivious"]
+ }
+ ]
+ },
+ "crawdaunt": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["brickbreak", "crunch", "doubleedge", "hiddenpowerelectric", "hiddenpowergrass", "icebeam", "surf"],
+ "abilities": ["Hyper Cutter"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["brickbreak", "doubleedge", "hiddenpowerflying", "surf", "swordsdance"],
+ "abilities": ["Hyper Cutter"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "claydol": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "explosion", "icebeam", "psychic", "rapidspin", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "cradily": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "hiddenpowergrass", "recover", "rockslide", "toxic"],
+ "abilities": ["Suction Cups"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "armaldo": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "hiddenpowerbug", "rapidspin", "rockslide", "swordsdance"],
+ "abilities": ["Battle Armor"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "milotic": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "recover", "refresh", "surf", "toxic"],
+ "abilities": ["Marvel Scale"]
+ }
+ ]
+ },
+ "castform": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "icebeam", "return", "thunderbolt", "thunderwave"],
+ "abilities": ["Forecast"]
+ }
+ ]
+ },
+ "kecleon": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["brickbreak", "return", "shadowball", "thunderwave", "trick"],
+ "abilities": ["Color Change"]
+ }
+ ]
+ },
+ "banette": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Berry Sweeper",
+ "movepool": ["destinybond", "endure", "hiddenpowerfighting", "shadowball"],
+ "abilities": ["Insomnia"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "hiddenpowerfighting", "knockoff", "shadowball", "willowisp"],
+ "abilities": ["Insomnia"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "dusclops": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "seismictoss", "sleeptalk", "willowisp"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["rest", "seismictoss", "shadowball", "sleeptalk"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Generalist",
+ "movepool": ["focuspunch", "icebeam", "painsplit", "shadowball", "substitute", "willowisp"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "tropius": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hiddenpowerflying", "swordsdance", "synthesis"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "hiddenpowerflying", "leechseed", "synthesis", "toxic"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "chimecho": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "healbell", "hiddenpowerfire", "psychic", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "absol": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "doubleedge", "hiddenpowerfighting", "quickattack", "shadowball", "swordsdance"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fighting", "Ghost"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "hiddenpowerfighting", "quickattack", "shadowball"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "glalie": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Generalist",
+ "movepool": ["earthquake", "explosion", "icebeam", "spikes", "toxic"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "walrein": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["encore", "icebeam", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "huntail": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "hiddenpowerelectric", "hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"],
+ "abilities": ["Swift Swim"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "gorebyss": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerelectric", "hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "relicanth": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["doubleedge", "earthquake", "hiddenpowerflying", "rest", "rockslide", "sleeptalk", "toxic"],
+ "abilities": ["Rock Head", "Swift Swim"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "luvdisc": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "substitute", "surf", "toxic"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "salamence": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "fireblast", "hiddenpowerflying", "rockslide"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["brickbreak", "doubleedge", "earthquake", "fireblast", "hiddenpowerflying", "rockslide"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "metagross": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "explosion", "meteormash", "rockslide"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "earthquake", "explosion", "meteormash", "psychic", "rockslide"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "regirock": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["curse", "earthquake", "explosion", "rest", "rockslide", "superpower"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "rest", "rockslide", "sleeptalk", "thunderwave", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "regice": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["explosion", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "registeel": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "latias": {
+ "level": 67,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "dragonclaw", "hiddenpowerfire", "psychic", "recover"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "dragonclaw", "recover", "refresh"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "latios": {
+ "level": 67,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "dragonclaw", "hiddenpowerfire", "psychic", "recover"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "dragonclaw", "recover", "refresh"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "kyogre": {
+ "level": 67,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["calmmind", "icebeam", "rest", "sleeptalk", "surf", "thunder"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "groudon": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "hiddenpowerbug", "overheat", "rockslide", "substitute", "swordsdance", "thunderwave"],
+ "abilities": ["Drought"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "rayquaza": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "hiddenpowerflying", "overheat", "rockslide"],
+ "abilities": ["Air Lock"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "extremespeed", "hiddenpowerflying", "overheat", "rockslide"],
+ "abilities": ["Air Lock"],
+ "preferredTypes": ["Ground", "Normal"]
+ }
+ ]
+ },
+ "jirachi": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "firepunch", "protect", "psychic", "toxic", "wish"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "firepunch", "icepunch", "psychic", "substitute", "thunderbolt"],
+ "abilities": ["Serene Grace"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "deoxys": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["extremespeed", "firepunch", "icebeam", "psychoboost", "shadowball", "superpower"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fighting", "Ghost"]
+ }
+ ]
+ },
+ "deoxysattack": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["extremespeed", "firepunch", "icebeam", "psychoboost", "shadowball", "superpower"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fighting", "Ghost"]
+ }
+ ]
+ },
+ "deoxysdefense": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["recover", "seismictoss", "spikes", "toxic"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysspeed": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "firepunch", "icebeam", "psychic", "recover", "substitute"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fire"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["psychoboost", "recover", "spikes", "superpower", "toxic"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen3/teams.ts b/data/random-battles/gen3/teams.ts
new file mode 100644
index 000000000000..b67d2e3f65ca
--- /dev/null
+++ b/data/random-battles/gen3/teams.ts
@@ -0,0 +1,773 @@
+import RandomGen4Teams from '../gen4/teams';
+import {PRNG, PRNGSeed} from '../../../sim/prng';
+import type {MoveCounter} from '../gen8/teams';
+
+// Moves that restore HP:
+const RECOVERY_MOVES = [
+ 'milkdrink', 'moonlight', 'morningsun', 'recover', 'slackoff', 'softboiled', 'synthesis',
+];
+// Conglomerate for ease of access
+const SETUP = [
+ 'acidarmor', 'agility', 'bellydrum', 'bulkup', 'calmmind', 'curse', 'dragondance', 'growth', 'howl', 'irondefense',
+ 'meditate', 'raindance', 'sunnyday', 'swordsdance', 'tailglow',
+];
+// Moves that shouldn't be the only STAB moves:
+const NO_STAB = [
+ 'eruption', 'explosion', 'fakeout', 'focuspunch', 'futuresight', 'icywind', 'knockoff', 'machpunch', 'pursuit',
+ 'quickattack', 'rapidspin', 'selfdestruct', 'skyattack', 'waterspout',
+];
+
+// Moves that should be paired together when possible
+const MOVE_PAIRS = [
+ ['sleeptalk', 'rest'],
+ ['protect', 'wish'],
+ ['leechseed', 'substitute'],
+ ['focuspunch', 'substitute'],
+ ['batonpass', 'spiderweb'],
+];
+
+export class RandomGen3Teams extends RandomGen4Teams {
+ battleHasDitto: boolean;
+ battleHasWobbuffet: boolean;
+
+ randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json');
+
+ constructor(format: string | Format, prng: PRNG | PRNGSeed | null) {
+ super(format, prng);
+ this.noStab = NO_STAB;
+ this.battleHasDitto = false;
+ this.battleHasWobbuffet = false;
+ this.moveEnforcementCheckers = {
+ Bug: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Bug') && ['armaldo', 'heracross', 'parasect'].includes(species.id)
+ ),
+ Dark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'),
+ Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'),
+ Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'),
+ Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'),
+ Flying: (movePool, moves, abilities, types, counter, species) => (!counter.get('Flying') && species.id !== 'crobat'),
+ Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'),
+ Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'),
+ Ice: (movePool, moves, abilities, types, counter) => !counter.get('Ice'),
+ Normal: (movePool, moves, abilities, types, counter, species) => !counter.get('Normal'),
+ Poison: (movePool, moves, abilities, types, counter) => !counter.get('Poison') && !counter.get('Bug'),
+ Psychic: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Psychic') && species.baseStats.spa >= 100
+ ),
+ Rock: (movePool, moves, abilities, types, counter, species) => !counter.get('Rock'),
+ Steel: (movePool, moves, abilities, types, counter, species) => (!counter.get('Steel') && species.id !== 'forretress'),
+ Water: (movePool, moves, abilities, types, counter, species) => !counter.get('Water'),
+ };
+ }
+
+ cullMovePool(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): void {
+ // Pokemon cannot have multiple Hidden Powers in any circumstance
+ let hasHiddenPower = false;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hasHiddenPower = true;
+ }
+ if (hasHiddenPower) {
+ let movePoolHasHiddenPower = true;
+ while (movePoolHasHiddenPower) {
+ movePoolHasHiddenPower = false;
+ for (const moveid of movePool) {
+ if (moveid.startsWith('hiddenpower')) {
+ this.fastPop(movePool, movePool.indexOf(moveid));
+ movePoolHasHiddenPower = true;
+ break;
+ }
+ }
+ }
+ }
+
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
+ if (moves.size === this.maxMoveCount - 2) {
+ const unpairedMoves = [...movePool];
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
+ }
+ }
+ if (unpairedMoves.length === 1) {
+ this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
+ }
+ }
+
+ // These moves are paired, and shouldn't appear if there is not room for them both.
+ if (moves.size === this.maxMoveCount - 1) {
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(movePool, movePool.indexOf(pair[0]));
+ this.fastPop(movePool, movePool.indexOf(pair[1]));
+ }
+ }
+ }
+
+ // Team-based move culls
+ if (teamDetails.rapidSpin) {
+ if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.spikes && teamDetails.spikes >= 2) {
+ if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.statusCure) {
+ if (movePool.includes('aromatherapy')) this.fastPop(movePool, movePool.indexOf('aromatherapy'));
+ if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+
+ // Develop additional move lists
+ const badWithSetup = ['knockoff', 'rapidspin', 'toxic'];
+ const statusMoves = this.cachedStatusMoves;
+
+ // General incompatibilities
+ const incompatiblePairs = [
+ // These moves don't mesh well with other aspects of the set
+ [statusMoves, 'trick'],
+ [SETUP, badWithSetup],
+ ['rest', ['protect', 'substitute']],
+ [['selfdestruct', 'explosion'], ['destinybond', 'painsplit', 'rest']],
+
+ // These attacks are redundant with each other
+ ['surf', 'hydropump'],
+ [['bodyslam', 'return'], ['bodyslam', 'doubleedge']],
+ ['fireblast', 'flamethrower'],
+
+ // Assorted hardcodes go here:
+ // Granbull
+ ['bulkup', 'overheat'],
+ // Heracross
+ ['endure', 'substitute'],
+ ];
+
+ for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
+
+ const statusInflictingMoves = ['stunspore', 'thunderwave', 'toxic', 'willowisp', 'yawn'];
+ if (role !== 'Staller') {
+ this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves);
+ }
+ }
+
+ // Generate random moveset for a given species, role, preferred type.
+ randomMoveset(
+ types: string[],
+ abilities: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ movePool: string[],
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): Set {
+ const preferredTypes = preferredType ? preferredType.split(',') : [];
+ const moves = new Set();
+ let counter = this.newQueryMoves(moves, species, preferredType, abilities);
+ this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead,
+ preferredType, role);
+
+ // If there are only four moves, add all moves and return early
+ if (movePool.length <= this.maxMoveCount) {
+ // Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased)
+ while (movePool.length) {
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ return moves;
+ }
+
+ const runEnforcementChecker = (checkerName: string) => {
+ if (!this.moveEnforcementCheckers[checkerName]) return false;
+ return this.moveEnforcementCheckers[checkerName](
+ movePool, moves, abilities, new Set(types), counter, species, teamDetails
+ );
+ };
+
+ // Add required move (e.g. Relic Song for Meloetta-P)
+ if (species.requiredMove) {
+ const move = this.dex.moves.get(species.requiredMove).id;
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Add other moves you really want to have, e.g. STAB, recovery, setup.
+
+ // Enforce Seismic Toss and Spore
+ for (const moveid of ['seismictoss', 'spikes', 'spore']) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Substitute on non-Setup sets with Baton Pass
+ if (!role.includes('Setup')) {
+ if (movePool.includes('batonpass') && movePool.includes('substitute')) {
+ counter = this.addMove('substitute', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce moves of all Preferred Types
+ for (const type of preferredTypes) {
+ if (!counter.get(type)) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce STAB
+ for (const type of types) {
+ // Check if a STAB move of that type should be required
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ while (runEnforcementChecker(type)) {
+ if (!stabMoves.length) break;
+ const moveid = this.sampleNoReplace(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // If no STAB move was added, add a STAB move
+ if (!counter.get('stab')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce recovery
+ if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup', 'Staller'].includes(role)) {
+ const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));
+ if (recoveryMoves.length) {
+ const moveid = this.sample(recoveryMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Staller moves
+ if (role === 'Staller') {
+ const enforcedMoves = ['protect', 'toxic', 'wish'];
+ for (const move of enforcedMoves) {
+ if (movePool.includes(move)) {
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce setup
+ if (role.includes('Setup') || role === 'Berry Sweeper') {
+ const setupMoves = movePool.filter(moveid => SETUP.includes(moveid));
+ if (setupMoves.length) {
+ const moveid = this.sample(setupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Berry Sweeper moves
+ if (role === 'Berry Sweeper') {
+ // Enforce Flail/Reversal
+ for (const move of ['flail', 'reversal']) {
+ if (movePool.includes(move)) {
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ // Enforce one of Endure and Substitute, but not both
+ const hpControlMoves = [];
+ for (const moveid of movePool) {
+ if (['endure', 'substitute'].includes(moveid)) hpControlMoves.push(moveid);
+ }
+ if (hpControlMoves.length) {
+ const moveid = this.sample(hpControlMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce a move not on the noSTAB list
+ if (!counter.damagingMoves.size) {
+ // Choose an attacking move
+ const attackingMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);
+ }
+ if (attackingMoves.length) {
+ const moveid = this.sample(attackingMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce coverage move
+ if (['Fast Attacker', 'Setup Sweeper', 'Bulky Attacker', 'Wallbreaker', 'Berry Sweeper'].includes(role)) {
+ if (counter.damagingMoves.size === 1) {
+ // Find the type of the current attacking move
+ const currentAttackType = counter.damagingMoves.values().next().value.type;
+ // Choose an attacking move that is of different type to the current single attack
+ const coverageMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {
+ if (currentAttackType !== moveType) coverageMoves.push(moveid);
+ }
+ }
+ if (coverageMoves.length) {
+ const moveid = this.sample(coverageMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Choose remaining moves randomly from movepool and add them to moves list:
+ while (moves.size < this.maxMoveCount && movePool.length) {
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ for (const pair of MOVE_PAIRS) {
+ if (moveid === pair[0] && movePool.includes(pair[1])) {
+ counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ if (moveid === pair[1] && movePool.includes(pair[0])) {
+ counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+ return moves;
+ }
+
+ shouldCullAbility(
+ ability: string,
+ types: Set,
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role
+ ) {
+ switch (ability) {
+ case 'Chlorophyll':
+ return !teamDetails.sun;
+ case 'Rock Head':
+ return !counter.get('recoil');
+ case 'Swift Swim':
+ return !teamDetails.rain;
+ }
+
+ return false;
+ }
+
+
+ getAbility(
+ types: Set,
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ if (abilities.length <= 1) return abilities[0];
+
+ // Hard-code abilities here
+ if (species.id === 'yanma') return counter.get('inaccurate') ? 'Compound Eyes' : 'Speed Boost';
+
+ const abilityAllowed: string[] = [];
+ // Obtain a list of abilities that are allowed (not culled)
+ for (const ability of abilities) {
+ if (!this.shouldCullAbility(
+ ability, types, moves, abilities, counter, movePool, teamDetails, species, preferredType, role
+ )) {
+ abilityAllowed.push(ability);
+ }
+ }
+
+ // Pick a random allowed ability
+ if (abilityAllowed.length >= 1) return this.sample(abilityAllowed);
+
+ // If all abilities are rejected, prioritize weather abilities over non-weather abilities
+ if (!abilityAllowed.length) {
+ const weatherAbilities = abilities.filter(a => ['Chlorophyll', 'Swift Swim'].includes(a));
+ if (weatherAbilities.length) return this.sample(weatherAbilities);
+ }
+
+ // Pick a random ability
+ return this.sample(abilities);
+ }
+
+ getItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ // First, the high-priority items
+ if (species.id === 'farfetchd') return 'Stick';
+ if (species.id === 'latias' || species.id === 'latios') return 'Soul Dew';
+ if (species.id === 'linoone' && role === 'Setup Sweeper') return 'Silk Scarf';
+ if (species.id === 'marowak') return 'Thick Club';
+ if (species.id === 'pikachu') return 'Light Ball';
+ if (species.id === 'shedinja') return 'Lum Berry';
+ if (species.id === 'shuckle') return 'Leftovers';
+ if (species.id === 'unown') return counter.get('Physical') ? 'Choice Band' : 'Twisted Spoon';
+
+ if (moves.has('trick')) return 'Choice Band';
+ if (
+ moves.has('rest') && !moves.has('sleeptalk') &&
+ // Altaria wants Chesto Berry on Dragon Dance + Rest
+ (moves.has('dragondance') || !['Early Bird', 'Natural Cure', 'Shed Skin'].includes(ability))
+ ) return 'Chesto Berry';
+
+ // Medium priority items
+ if (counter.get('Physical') >= 4) return 'Choice Band';
+ if (counter.get('Physical') >= 3 && (moves.has('batonpass') || (role === 'Wallbreaker' && counter.get('Special')))) {
+ return 'Choice Band';
+ }
+
+ if (
+ moves.has('dragondance') && ability !== 'Natural Cure' &&
+ !moves.has('healbell') && !moves.has('substitute')
+ ) return 'Lum Berry';
+ if (moves.has('bellydrum')) return moves.has('substitute') ? 'Salac Berry' : 'Lum Berry';
+
+ if (moves.has('raindance') && counter.get('Special') >= 3) return 'Petaya Berry';
+
+ if (role === 'Berry Sweeper') {
+ if (moves.has('endure')) return 'Salac Berry';
+ if (moves.has('flail') || moves.has('reversal')) return (species.baseStats.spe >= 90) ? 'Liechi Berry' : 'Salac Berry';
+ if (moves.has('substitute') && counter.get('Physical') >= 3) return 'Liechi Berry';
+ if (moves.has('substitute') && counter.get('Special') >= 3) return 'Petaya Berry';
+ }
+
+ const salacReqs = species.baseStats.spe >= 60 && species.baseStats.spe <= 100 && !counter.get('priority');
+
+ if (moves.has('bulkup') && moves.has('substitute') && counter.get('Status') === 2 && salacReqs) return 'Salac Berry';
+
+ if (moves.has('swordsdance') && moves.has('substitute') && counter.get('Status') === 2) {
+ if (salacReqs) return 'Salac Berry';
+ if (species.baseStats.spe > 100 && counter.get('Physical') >= 2) return 'Liechi Berry';
+ }
+
+ if (moves.has('swordsdance') && counter.get('Status') === 1) {
+ if (salacReqs) return 'Salac Berry';
+ if (species.baseStats.spe > 100) {
+ return (counter.get('Physical') >= 3 && this.randomChance(1, 2)) ? 'Liechi Berry' : 'Lum Berry';
+ }
+ }
+
+ if (species.id === 'deoxys' || species.id === 'deoxysattack') return 'White Herb';
+
+ // Default to Leftovers
+ return 'Leftovers';
+ }
+
+ randomSet(
+ species: string | Species,
+ teamDetails: RandomTeamsTypes.TeamDetails = {},
+ isLead = false
+ ): RandomTeamsTypes.RandomSet {
+ species = this.dex.species.get(species);
+ const forme = this.getForme(species);
+ const sets = this.randomSets[species.id]["sets"];
+
+ const set = this.sampleIfArray(sets);
+ const role = set.role;
+ const movePool: string[] = Array.from(set.movepool);
+ const preferredTypes = set.preferredTypes;
+ // In Gen 3, if a set has multiple preferred types, enforce all of them.
+ const preferredType = preferredTypes ? preferredTypes.join() : '';
+
+ let ability = '';
+ let item = undefined;
+
+ const evs = {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85};
+ const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};
+
+ const types = species.types;
+ const abilities = set.abilities!;
+
+ // Get moves
+ const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool,
+ preferredType, role);
+ const counter = this.newQueryMoves(moves, species, preferredType, abilities);
+
+ // Get ability
+ ability = this.getAbility(new Set(types), moves, abilities, counter, movePool, teamDetails, species,
+ preferredType, role);
+
+ // Get items
+ item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);
+
+ const level = this.getLevel(species);
+
+ // We use a special variable to track Hidden Power
+ // so that we can check for all Hidden Powers at once
+ let hasHiddenPower = false;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hasHiddenPower = true;
+ }
+
+ if (hasHiddenPower) {
+ let hpType;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hpType = move.substr(11);
+ }
+ if (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`);
+ const HPivs = this.dex.types.get(hpType).HPivs;
+ let iv: StatID;
+ for (iv in HPivs) {
+ ivs[iv] = HPivs[iv]!;
+ }
+ }
+
+ // Prepare optimal HP
+ while (evs.hp > 1) {
+ const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ if (moves.has('substitute') && ['flail', 'reversal'].some(m => moves.has(m))) {
+ // Flail/Reversal users should be able to use four Substitutes
+ if (hp % 4 > 0) break;
+ } else if (moves.has('substitute') && (item === 'Salac Berry' || item === 'Petaya Berry' || item === 'Liechi Berry')) {
+ // Other pinch berry holders should have berries activate after three Substitutes
+ if (hp % 4 === 0) break;
+ } else if (moves.has('bellydrum')) {
+ // Belly Drum users should be able to use Belly Drum twice
+ if (hp % 2 > 0) break;
+ } else {
+ break;
+ }
+ evs.hp -= 4;
+ }
+
+ // Minimize confusion damage
+ if (!counter.get('Physical') && !moves.has('transform')) {
+ evs.atk = 0;
+ ivs.atk = hasHiddenPower ? (ivs.atk || 31) - 28 : 0;
+ }
+
+ // Prepare optimal HP
+ let hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ if (moves.has('substitute') && ['endeavor', 'flail', 'reversal'].some(m => moves.has(m))) {
+ // Endeavor/Flail/Reversal users should be able to use four Substitutes
+ if (hp % 4 === 0) evs.hp -= 4;
+ } else if (moves.has('substitute') && (item === 'Salac Berry' || item === 'Petaya Berry' || item === 'Liechi Berry')) {
+ // Other pinch berry holders should have berries activate after three Substitutes
+ while (hp % 4 > 0) {
+ evs.hp -= 4;
+ hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ }
+ }
+
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+
+ return {
+ name: species.baseSpecies,
+ species: forme,
+ gender: species.gender,
+ shiny: this.randomChance(1, 1024),
+ level,
+ moves: shuffledMoves,
+ ability,
+ evs,
+ ivs,
+ item,
+ role,
+ };
+ }
+
+ randomTeam() {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const seed = this.prng.seed;
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+ const pokemon: RandomTeamsTypes.RandomSet[] = [];
+
+ // For Monotype
+ const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
+ const typePool = this.dex.types.names();
+ const type = this.forceMonotype || this.sample(typePool);
+
+ const baseFormes: {[k: string]: number} = {};
+ const typeCount: {[k: string]: number} = {};
+ const typeWeaknesses: {[k: string]: number} = {};
+ const typeDoubleWeaknesses: {[k: string]: number} = {};
+ const teamDetails: RandomTeamsTypes.TeamDetails = {};
+ let numMaxLevelPokemon = 0;
+
+ const pokemonList = Object.keys(this.randomSets);
+ const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);
+ while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
+ const baseSpecies = this.sampleNoReplace(baseSpeciesPool);
+ const species = this.dex.species.get(this.sample(pokemonPool[baseSpecies]));
+ if (!species.exists) continue;
+
+ // Limit to one of each species (Species Clause)
+ if (baseFormes[species.baseSpecies]) continue;
+
+ // Prevent Shedinja from generating after Tyranitar
+ if (species.name === 'Shedinja' && teamDetails.sand) continue;
+
+ // Limit to one Wobbuffet per battle (not just per team)
+ if (species.name === 'Wobbuffet' && this.battleHasWobbuffet) continue;
+ // Limit to one Ditto per battle in Gen 2
+ if (this.dex.gen < 3 && species.name === 'Ditto' && this.battleHasDitto) continue;
+
+ const types = species.types;
+
+ if (!isMonotype && !this.forceMonotype) {
+ // Dynamically scale limits for different team sizes. The default and minimum value is 1.
+ const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
+
+ // Limit two of any type
+ let skip = false;
+ for (const typeName of types) {
+ if (typeCount[typeName] >= 2 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (skip) continue;
+
+ // Limit three weak to any type, and one double weak to any type
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;
+ if (typeWeaknesses[typeName] >= 3 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0;
+ if (typeDoubleWeaknesses[typeName] >= 1 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ if (skip) continue;
+
+ // Limit one level 100 Pokemon
+ if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) {
+ continue;
+ }
+ }
+
+ // Okay, the set passes, add it to our team
+ const set = this.randomSet(species, teamDetails);
+ pokemon.push(set);
+
+ // Don't bother tracking details for the last Pokemon
+ if (pokemon.length === this.maxTeamSize) break;
+
+ // Now that our Pokemon has passed all checks, we can increment our counters
+ baseFormes[species.baseSpecies] = 1;
+
+ // Increment type counters
+ for (const typeName of types) {
+ if (typeName in typeCount) {
+ typeCount[typeName]++;
+ } else {
+ typeCount[typeName] = 1;
+ }
+ }
+
+ // Increment weakness counter
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ typeWeaknesses[typeName]++;
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ typeDoubleWeaknesses[typeName]++;
+ }
+ }
+
+ // Increment level 100 counter
+ if (set.level === 100) numMaxLevelPokemon++;
+
+ // Update team details
+ if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1;
+ if (set.ability === 'Drought' || set.moves.includes('sunnyday')) teamDetails.sun = 1;
+ if (set.ability === 'Sand Stream') teamDetails.sand = 1;
+ if (set.moves.includes('aromatherapy') || set.moves.includes('healbell')) teamDetails.statusCure = 1;
+ if (set.moves.includes('spikes')) teamDetails.spikes = 1;
+ if (set.moves.includes('rapidspin')) teamDetails.rapidSpin = 1;
+
+ // In Gen 3, Shadow Tag users can prevent each other from switching out, possibly causing and endless battle or at least causing a long stall war
+ // To prevent this, we prevent more than one Wobbuffet in a single battle.
+ if (species.id === 'wobbuffet') this.battleHasWobbuffet = true;
+ if (species.id === 'ditto') this.battleHasDitto = true;
+ }
+
+ if (pokemon.length < this.maxTeamSize && !isMonotype && !this.forceMonotype && pokemon.length < 12) {
+ throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
+ }
+
+ return pokemon;
+ }
+}
+
+export default RandomGen3Teams;
diff --git a/data/random-battles/gen4/sets.json b/data/random-battles/gen4/sets.json
new file mode 100644
index 000000000000..77a9f8faa612
--- /dev/null
+++ b/data/random-battles/gen4/sets.json
@@ -0,0 +1,3943 @@
+{
+ "venusaur": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["leechseed", "powerwhip", "sleeppowder", "sludgebomb", "substitute"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "leafstorm", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "charizard": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "dragonpulse", "fireblast", "hiddenpowergrass", "roost"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "blastoise": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["icebeam", "rapidspin", "rest", "roar", "surf", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "butterfree": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bugbuzz", "sleeppowder", "stunspore", "uturn"],
+ "abilities": ["Compound Eyes"]
+ }
+ ]
+ },
+ "beedrill": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["brickbreak", "poisonjab", "toxicspikes", "uturn"],
+ "abilities": ["Swarm"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["brickbreak", "poisonjab", "swordsdance", "uturn", "xscissor"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "pidgeot": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "heatwave", "return", "roost"],
+ "abilities": ["Tangled Feet"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "doubleedge", "pursuit", "quickattack", "return", "roost", "uturn"],
+ "abilities": ["Tangled Feet"]
+ }
+ ]
+ },
+ "raticate": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "facade", "protect", "suckerpunch", "swordsdance", "uturn"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "fearow": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "drillpeck", "quickattack", "return", "uturn"],
+ "abilities": ["Keen Eye"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "drillpeck", "pursuit", "return", "uturn"],
+ "abilities": ["Keen Eye"]
+ }
+ ]
+ },
+ "arbok": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crunch", "earthquake", "glare", "gunkshot", "poisonjab", "seedbomb", "switcheroo"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "pikachu": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "grassknot", "hiddenpowerice", "surf", "thunderbolt", "volttackle"],
+ "abilities": ["Static"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "raichu": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["encore", "focusblast", "grassknot", "hiddenpowerice", "nastyplot", "surf", "thunderbolt"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "sandslash": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["earthquake", "nightslash", "rapidspin", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Sand Veil"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "nightslash", "stoneedge", "substitute", "swordsdance", "xscissor"],
+ "abilities": ["Sand Veil"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "nidoqueen": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "fireblast", "icebeam", "roar", "stealthrock", "toxicspikes"],
+ "abilities": ["Poison Point"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "nidoking": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "fireblast", "icebeam", "megahorn", "stealthrock", "suckerpunch", "thunderbolt"],
+ "abilities": ["Poison Point"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "clefable": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "doubleedge", "fireblast", "icebeam", "softboiled", "stealthrock", "thunderwave"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "icebeam", "softboiled", "thunderbolt"],
+ "abilities": ["Magic Guard"]
+ }
+ ]
+ },
+ "ninetales": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["energyball", "fireblast", "hiddenpowerrock", "hypnosis", "nastyplot"],
+ "abilities": ["Flash Fire"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "wigglytuff": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["doubleedge", "protect", "thunderwave", "toxic", "wish"],
+ "abilities": ["Cute Charm"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "fireblast", "healbell", "protect", "stealthrock", "wish"],
+ "abilities": ["Cute Charm"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Cute Charm"]
+ }
+ ]
+ },
+ "vileplume": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "energyball", "hiddenpowerground", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerfire", "sludgebomb", "solarbeam", "sunnyday"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "parasect": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "seedbomb", "spore", "stunspore", "synthesis", "xscissor"],
+ "abilities": ["Dry Skin"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["pursuit", "seedbomb", "spore", "swordsdance", "xscissor"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "venomoth": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["bugbuzz", "roost", "sleeppowder", "toxicspikes", "uturn"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "dugtrio": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["earthquake", "nightslash", "stealthrock", "stoneedge", "suckerpunch"],
+ "abilities": ["Arena Trap"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "persian": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bite", "doubleedge", "fakeout", "hypnosis", "return", "seedbomb", "taunt", "uturn"],
+ "abilities": ["Technician"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "golduck": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "encore", "focusblast", "hiddenpowergrass", "hydropump", "icebeam", "psychic", "surf"],
+ "abilities": ["Cloud Nine"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "primeape": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "encore", "stoneedge", "uturn"],
+ "abilities": ["Vital Spirit"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "arcanine": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["extremespeed", "flareblitz", "hiddenpowergrass", "morningsun", "roar", "thunderfang", "toxic", "willowisp"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crunch", "extremespeed", "flareblitz", "ironhead", "morningsun", "thunderfang"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "poliwrath": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["brickbreak", "bulkup", "icepunch", "waterfall"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["encore", "focuspunch", "icepunch", "substitute", "waterfall"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulkup", "rest", "sleeptalk", "toxic", "waterfall"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "alakazam": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "encore", "focusblast", "psychic", "shadowball", "substitute", "trick"],
+ "abilities": ["Synchronize"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "machamp": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulletpunch", "dynamicpunch", "earthquake", "payback", "stoneedge", "toxic"],
+ "abilities": ["No Guard"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "victreebel": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerground", "leafblade", "leafstorm", "sleeppowder", "sludgebomb", "suckerpunch"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["sludgebomb", "solarbeam", "sunnyday", "weatherball"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "tentacruel": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["haze", "hydropump", "icebeam", "rapidspin", "sludgebomb", "surf", "toxicspikes"],
+ "abilities": ["Clear Body", "Liquid Ooze"]
+ }
+ ]
+ },
+ "golem": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"],
+ "abilities": ["Rock Head"]
+ }
+ ]
+ },
+ "rapidash": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["flareblitz", "hypnosis", "megahorn", "morningsun", "willowisp"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "slowbro": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "icebeam", "psychic", "slackoff", "surf", "thunderwave", "toxic"],
+ "abilities": ["Own Tempo"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "psychic", "slackoff", "surf"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "farfetchd": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "heatwave", "leafblade", "nightslash", "quickattack", "uturn"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Grass"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "leafblade", "nightslash", "return", "swordsdance"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "dodrio": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "pursuit", "quickattack", "return", "roost"],
+ "abilities": ["Early Bird"]
+ }
+ ]
+ },
+ "dewgong": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["raindance", "rest", "surf", "toxic"],
+ "abilities": ["Hydration"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "icebeam", "raindance", "rest", "surf", "toxic"],
+ "abilities": ["Hydration", "Thick Fat"]
+ }
+ ]
+ },
+ "muk": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["brickbreak", "curse", "explosion", "gunkshot", "icepunch", "payback", "poisonjab", "rest", "shadowsneak"],
+ "abilities": ["Sticky Hold"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "cloyster": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["explosion", "iceshard", "rapidspin", "rockblast", "spikes", "surf", "toxicspikes"],
+ "abilities": ["Shell Armor", "Skill Link"]
+ }
+ ]
+ },
+ "gengar": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["explosion", "focusblast", "painsplit", "shadowball", "sludgebomb", "substitute", "trick", "willowisp"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "hypno": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "psychic", "thunderwave", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "focusblast", "nastyplot", "psychic"],
+ "abilities": ["Insomnia"]
+ }
+ ]
+ },
+ "kingler": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crabhammer", "return", "superpower", "swordsdance", "xscissor"],
+ "abilities": ["Hyper Cutter"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["agility", "crabhammer", "return", "swordsdance"],
+ "abilities": ["Hyper Cutter"]
+ }
+ ]
+ },
+ "electrode": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["explosion", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt"],
+ "abilities": ["Static"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "exeggutor": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["explosion", "hiddenpowerfire", "leafstorm", "psychic", "sleeppowder", "synthesis"],
+ "abilities": ["Chlorophyll"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "marowak": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "firepunch", "stealthrock", "stoneedge", "swordsdance"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "hitmonlee": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "machpunch", "rapidspin", "stoneedge", "suckerpunch"],
+ "abilities": ["Limber"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "closecombat", "earthquake", "machpunch", "stoneedge", "suckerpunch"],
+ "abilities": ["Limber"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "hitmonchan": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["closecombat", "drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge"],
+ "abilities": ["Iron Fist"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "closecombat", "drainpunch", "icepunch", "machpunch", "stoneedge"],
+ "abilities": ["Iron Fist"]
+ }
+ ]
+ },
+ "weezing": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "haze", "painsplit", "sludgebomb", "willowisp"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "rest", "sleeptalk", "sludgebomb"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "kangaskhan": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["doubleedge", "earthquake", "fakeout", "hammerarm", "return", "suckerpunch"],
+ "abilities": ["Scrappy"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "earthquake", "protect", "return", "wish"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "seaking": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["icebeam", "megahorn", "raindance", "return", "waterfall"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "starmie": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hydropump", "icebeam", "psychic", "recover", "thunderbolt"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "psychic", "rapidspin", "recover", "surf", "thunderwave"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "mrmime": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "encore", "focusblast", "nastyplot", "psychic", "shadowball", "substitute"],
+ "abilities": ["Filter"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "scyther": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aerialace", "brickbreak", "bugbite", "roost", "swordsdance"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aerialace", "brickbreak", "pursuit", "uturn"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "jynx": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "trick"],
+ "abilities": ["Forewarn"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psychic", "substitute"],
+ "abilities": ["Forewarn"]
+ }
+ ]
+ },
+ "pinsir": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "stealthrock", "stoneedge", "swordsdance", "xscissor"],
+ "abilities": ["Mold Breaker"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "tauros": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "earthquake", "payback", "pursuit", "return", "stoneedge"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "gyarados": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["dragondance", "rest", "sleeptalk", "waterfall"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "lapras": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "hydropump", "icebeam", "thunderbolt", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["hydropump", "icebeam", "protect", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "ditto": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["transform"],
+ "abilities": ["Limber"]
+ }
+ ]
+ },
+ "vaporeon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "icebeam", "protect", "surf", "wish"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "surf", "toxic", "wish"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "jolteon": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["batonpass", "hiddenpowerice", "substitute", "thunderbolt", "toxic"],
+ "abilities": ["Volt Absorb"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "shadowball", "signalbeam", "thunderbolt"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "flareon": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "hiddenpowergrass", "lavaplume", "protect", "superpower", "wish"],
+ "abilities": ["Flash Fire"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["fireblast", "lavaplume", "protect", "toxic", "wish"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "omastar": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "raindance"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthpower", "icebeam", "spikes", "stealthrock", "surf", "toxicspikes"],
+ "abilities": ["Shell Armor", "Swift Swim"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "kabutops": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["aquajet", "rapidspin", "stealthrock", "stoneedge", "superpower", "waterfall"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "stealthrock", "stoneedge", "superpower", "swordsdance", "waterfall"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ }
+ ]
+ },
+ "aerodactyl": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["aerialace", "aquatail", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "snorlax": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "crunch", "earthquake", "pursuit", "return", "selfdestruct"],
+ "abilities": ["Thick Fat"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "curse", "rest", "sleeptalk"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "curse", "earthquake", "rest"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "articuno": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["healbell", "icebeam", "roost", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "zapdos": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["heatwave", "hiddenpowerice", "roost", "substitute", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["heatwave", "hiddenpowerice", "roost", "thunderbolt", "uturn"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "moltres": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "fireblast", "hiddenpowergrass", "roost", "substitute", "toxic", "uturn"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "dragonite": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "extremespeed", "outrage", "superpower"],
+ "abilities": ["Inner Focus"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "firepunch", "outrage", "roost"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "mewtwo": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "calmmind", "fireblast", "psychic", "recover", "shadowball"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "mew": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["psychic", "softboiled", "stealthrock", "taunt", "uturn", "willowisp"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "batonpass", "earthpower", "fireblast", "nastyplot", "psychic", "softboiled"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "earthquake", "explosion", "suckerpunch", "superpower", "swordsdance", "zenheadbutt"],
+ "abilities": ["Synchronize"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "meganium": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "earthquake", "energyball", "leechseed", "synthesis", "toxic"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "typhlosion": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "feraligatr": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "icepunch", "waterfall"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "return", "swordsdance", "waterfall"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "earthquake", "icepunch", "superpower", "waterfall"],
+ "abilities": ["Torrent"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "furret": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquatail", "doubleedge", "firepunch", "shadowclaw", "trick", "uturn"],
+ "abilities": ["Keen Eye"]
+ }
+ ]
+ },
+ "noctowl": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["airslash", "nightshade", "roost", "toxic", "whirlwind"],
+ "abilities": ["Insomnia"]
+ }
+ ]
+ },
+ "ledian": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["encore", "focusblast", "hiddenpowerflying", "knockoff", "roost", "toxic"],
+ "abilities": ["Early Bird"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["agility", "batonpass", "encore", "swordsdance"],
+ "abilities": ["Early Bird"]
+ }
+ ]
+ },
+ "ariados": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bugbite", "poisonjab", "suckerpunch", "toxicspikes"],
+ "abilities": ["Insomnia", "Swarm"]
+ }
+ ]
+ },
+ "crobat": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bravebird", "heatwave", "roost", "superfang", "taunt", "toxic", "uturn"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "lanturn": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["discharge", "healbell", "hydropump", "icebeam", "surf", "thunderbolt", "thunderwave", "toxic"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "xatu": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "grassknot", "heatwave", "hiddenpowerfighting", "psychic", "roost", "trick", "uturn"],
+ "abilities": ["Synchronize"],
+ "preferredTypes": ["Fire"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["heatwave", "hiddenpowerfighting", "psychic", "roost", "thunderwave", "toxic"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "ampharos": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["discharge", "focusblast", "healbell", "hiddenpowerice", "signalbeam", "thunderbolt", "toxic"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "bellossom": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["energyball", "hiddenpowerfire", "hiddenpowerrock", "leafstorm", "leechseed", "sleeppowder", "stunspore", "synthesis"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "azumarill": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "doubleedge", "icepunch", "superpower", "waterfall"],
+ "abilities": ["Huge Power"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["aquajet", "bellydrum", "return", "waterfall"],
+ "abilities": ["Huge Power"]
+ }
+ ]
+ },
+ "sudowoodo": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic", "woodhammer"],
+ "abilities": ["Rock Head"]
+ }
+ ]
+ },
+ "politoed": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["encore", "focusblast", "hiddenpowergrass", "hydropump", "icebeam", "rest", "surf", "toxic"],
+ "abilities": ["Water Absorb"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["encore", "icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "jumpluff": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "energyball", "sleeppowder", "stunspore", "toxic", "uturn"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["hiddenpowerflying", "leechseed", "protect", "substitute", "toxic"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "sunflora": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "quagsire": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "encore", "icebeam", "recover", "toxic", "waterfall"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "espeon": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "hiddenpowerfighting", "morningsun", "psychic", "signalbeam", "trick"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "calmmind", "hiddenpowerfighting", "morningsun", "psychic", "substitute"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "umbreon": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["curse", "healbell", "moonlight", "payback", "toxic"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["payback", "protect", "toxic", "wish"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "slowking": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "icebeam", "psychic", "slackoff", "surf", "thunderwave", "toxic"],
+ "abilities": ["Own Tempo"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["fireblast", "icebeam", "psychic", "slackoff", "surf", "trick", "trickroom"],
+ "abilities": ["Own Tempo"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "unown": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerfighting", "hiddenpowerpsychic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "wobbuffet": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["counter", "destinybond", "encore", "mirrorcoat"],
+ "abilities": ["Shadow Tag"]
+ }
+ ]
+ },
+ "girafarig": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "calmmind", "hiddenpowerfighting", "psychic", "substitute", "thunderbolt"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "forretress": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["explosion", "payback", "rapidspin", "spikes", "stealthrock", "toxicspikes"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "dunsparce": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "headbutt", "roost", "thunderwave"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bite", "bodyslam", "earthquake", "roost", "stealthrock"],
+ "abilities": ["Serene Grace"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "steelix": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "explosion", "ironhead", "roar", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "ironhead", "protect", "toxic"],
+ "abilities": ["Rock Head"]
+ }
+ ]
+ },
+ "granbull": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "crunch", "healbell", "return", "thunderwave"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "qwilfish": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "explosion", "spikes", "thunderwave", "toxicspikes", "waterfall"],
+ "abilities": ["Poison Point", "Swift Swim"]
+ }
+ ]
+ },
+ "scizor": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbite", "bulletpunch", "roost", "superpower", "swordsdance"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletpunch", "pursuit", "superpower", "uturn"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "shuckle": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "knockoff", "protect", "stealthrock", "toxic"],
+ "abilities": ["Gluttony"]
+ }
+ ]
+ },
+ "heracross": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "facade", "megahorn", "nightslash"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "megahorn", "nightslash", "stoneedge", "swordsdance"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "ursaring": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "crunch", "facade", "protect"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "crunch", "facade", "swordsdance"],
+ "abilities": ["Quick Feet"]
+ }
+ ]
+ },
+ "magcargo": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerrock", "lavaplume", "recover", "stealthrock", "toxic"],
+ "abilities": ["Flame Body"]
+ }
+ ]
+ },
+ "corsola": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["explosion", "powergem", "recover", "stealthrock", "surf", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "octillery": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["energyball", "fireblast", "icebeam", "surf", "thunderwave"],
+ "abilities": ["Sniper"]
+ }
+ ]
+ },
+ "delibird": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "iceshard", "rapidspin", "seismictoss", "toxic"],
+ "abilities": ["Vital Spirit"]
+ }
+ ]
+ },
+ "mantine": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerflying", "protect", "surf", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "skarmory": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"],
+ "abilities": ["Keen Eye"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["bravebird", "roost", "spikes", "stealthrock", "toxic"],
+ "abilities": ["Keen Eye"]
+ }
+ ]
+ },
+ "houndoom": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "fireblast", "hiddenpowergrass", "nastyplot", "suckerpunch"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "kingdra": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["dragondance", "outrage", "rest", "substitute", "waterfall"],
+ "abilities": ["Sniper", "Swift Swim"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragondance", "outrage", "rest", "sleeptalk"],
+ "abilities": ["Sniper", "Swift Swim"]
+ }
+ ]
+ },
+ "donphan": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["earthquake", "iceshard", "rapidspin", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "gunkshot", "iceshard", "stealthrock", "stoneedge"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "porygon2": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"],
+ "abilities": ["Download", "Trace"]
+ }
+ ]
+ },
+ "stantler": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "hypnosis", "megahorn", "return", "suckerpunch", "thunderbolt"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "smeargle": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["explosion", "spikes", "spore", "stealthrock", "whirlwind"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "hitmontop": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "miltank": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "blissey": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "raikou": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aurasphere", "hiddenpowerice", "shadowball", "thunderbolt"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "entei": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["extremespeed", "flareblitz", "ironhead", "stoneedge"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["extremespeed", "flareblitz", "hiddenpowergrass", "stoneedge"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "suicune": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "rest", "sleeptalk", "surf"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hydropump", "icebeam", "rest", "substitute", "surf"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "tyranitar": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge", "superpower"],
+ "abilities": ["Sand Stream"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "lugia": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aeroblast", "earthquake", "roost", "substitute", "toxic", "whirlwind"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["aeroblast", "calmmind", "earthpower", "roost"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "hooh": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "earthquake", "roost", "sacredfire", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "celebi": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthpower", "energyball", "leafstorm", "nastyplot", "psychic", "uturn"],
+ "abilities": ["Natural Cure"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "energyball", "nastyplot", "psychic", "recover"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "sceptile": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "focusblast", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["energyball", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "blaziken": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["agility", "fireblast", "stoneedge", "superpower", "thunderpunch", "vacuumwave"],
+ "abilities": ["Blaze"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["flareblitz", "stoneedge", "superpower", "swordsdance", "thunderpunch"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "swampert": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "icebeam", "roar", "stealthrock", "toxic", "waterfall"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "toxic", "waterfall"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "icepunch", "stoneedge", "waterfall"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "mightyena": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["crunch", "doubleedge", "firefang", "suckerpunch", "superfang", "taunt", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "linoone": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"],
+ "abilities": ["Gluttony"]
+ }
+ ]
+ },
+ "beautifly": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bugbuzz", "hiddenpowerground", "psychic", "uturn"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "dustox": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["bugbuzz", "hiddenpowerground", "roost", "toxic", "uturn", "whirlwind"],
+ "abilities": ["Shield Dust"]
+ }
+ ]
+ },
+ "ludicolo": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["energyball", "hydropump", "icebeam", "raindance"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["energyball", "hydropump", "icebeam", "surf"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "shiftry": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "explosion", "hiddenpowerfire", "leafstorm", "lowkick", "suckerpunch"],
+ "abilities": ["Chlorophyll", "Early Bird"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["lowkick", "seedbomb", "suckerpunch", "swordsdance"],
+ "abilities": ["Chlorophyll", "Early Bird"]
+ }
+ ]
+ },
+ "swellow": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "facade", "protect", "uturn"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "facade", "quickattack", "uturn"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "pelipper": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "hiddenpowergrass", "hydropump", "icebeam", "roost", "surf", "toxic", "uturn"],
+ "abilities": ["Keen Eye"]
+ }
+ ]
+ },
+ "gardevoir": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "healingwish", "psychic", "shadowball", "thunderbolt", "trick"],
+ "abilities": ["Trace"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "focusblast", "psychic", "shadowball", "substitute", "willowisp"],
+ "abilities": ["Trace"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "masquerain": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "airslash", "batonpass", "bugbuzz", "hydropump", "roost"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["airslash", "bugbuzz", "hydropump", "roost", "stunspore", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "breloom": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["facade", "machpunch", "seedbomb", "spore", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Poison Heal"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focuspunch", "spore", "stoneedge", "substitute"],
+ "abilities": ["Poison Heal"]
+ }
+ ]
+ },
+ "vigoroth": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "earthquake", "encore", "nightslash", "return", "slackoff", "suckerpunch"],
+ "abilities": ["Vital Spirit"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "bulkup", "earthquake", "nightslash", "return", "slackoff"],
+ "abilities": ["Vital Spirit"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bodyslam", "bulkup", "earthquake", "nightslash", "return", "suckerpunch"],
+ "abilities": ["Vital Spirit"]
+ }
+ ]
+ },
+ "slaking": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "earthquake", "gigaimpact", "nightslash", "return"],
+ "abilities": ["Truant"]
+ }
+ ]
+ },
+ "ninjask": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "substitute", "swordsdance", "xscissor"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "protect", "swordsdance", "xscissor"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "shedinja": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"],
+ "abilities": ["Wonder Guard"]
+ }
+ ]
+ },
+ "exploud": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "return", "surf"],
+ "abilities": ["Soundproof"]
+ }
+ ]
+ },
+ "hariyama": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bulletpunch", "closecombat", "facade", "fakeout", "payback", "stoneedge"],
+ "abilities": ["Guts"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "bulletpunch", "closecombat", "payback", "stoneedge"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "delcatty": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["doubleedge", "protect", "thunderwave", "toxic", "wish"],
+ "abilities": ["Cute Charm"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["doubleedge", "fakeout", "healbell", "suckerpunch", "thunderwave", "toxic"],
+ "abilities": ["Cute Charm"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "calmmind", "icebeam", "thunderbolt"],
+ "abilities": ["Cute Charm"]
+ }
+ ]
+ },
+ "sableye": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["payback", "recover", "seismictoss", "toxic", "willowisp"],
+ "abilities": ["Keen Eye"]
+ }
+ ]
+ },
+ "mawile": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "ironhead", "substitute", "suckerpunch", "swordsdance"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focuspunch", "ironhead", "substitute", "suckerpunch"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "aggron": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquatail", "earthquake", "headsmash", "icepunch", "rockpolish", "stealthrock"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "medicham": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletpunch", "highjumpkick", "icepunch", "trick", "zenheadbutt"],
+ "abilities": ["Pure Power"]
+ }
+ ]
+ },
+ "manectric": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["flamethrower", "hiddenpowerice", "overheat", "switcheroo", "thunderbolt"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "plusle": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "encore", "hiddenpowerice", "nastyplot", "thunderbolt"],
+ "abilities": ["Plus"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"],
+ "abilities": ["Plus"]
+ }
+ ]
+ },
+ "minun": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "encore", "hiddenpowerice", "nastyplot", "thunderbolt"],
+ "abilities": ["Minus"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"],
+ "abilities": ["Minus"]
+ }
+ ]
+ },
+ "volbeat": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "bugbuzz", "substitute", "tailglow"],
+ "abilities": ["Swarm"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["batonpass", "bugbuzz", "encore", "tailglow"],
+ "abilities": ["Swarm"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "bugbuzz", "roost", "tailglow"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "illumise": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bugbuzz", "encore", "roost", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "swalot": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "encore", "explosion", "icebeam", "painsplit", "sludgebomb", "toxic", "yawn"],
+ "abilities": ["Liquid Ooze"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "sludgebomb", "toxic"],
+ "abilities": ["Liquid Ooze"]
+ }
+ ]
+ },
+ "sharpedo": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquajet", "crunch", "earthquake", "hydropump", "icebeam"],
+ "abilities": ["Rough Skin"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "crunch", "earthquake", "icebeam", "waterfall"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "wailord": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "selfdestruct", "waterspout"],
+ "abilities": ["Water Veil"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "camerupt": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "explosion", "lavaplume", "stealthrock", "toxic"],
+ "abilities": ["Solid Rock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "explosion", "fireblast", "rockpolish", "stoneedge"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "torkoal": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "explosion", "lavaplume", "rapidspin", "stealthrock", "yawn"],
+ "abilities": ["White Smoke"]
+ }
+ ]
+ },
+ "grumpig": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["focusblast", "healbell", "psychic", "thunderwave", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "focusblast", "psychic", "shadowball", "trick"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "spinda": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["encore", "protect", "seismictoss", "shadowball", "substitute", "toxic"],
+ "abilities": ["Own Tempo"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Own Tempo"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["doubleedge", "fakeout", "lowkick", "shadowball", "suckerpunch"],
+ "abilities": ["Own Tempo"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "flygon": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "outrage", "roost", "stoneedge", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "earthquake", "fireblast", "roost", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "cacturne": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "encore", "lowkick", "seedbomb", "spikes", "suckerpunch"],
+ "abilities": ["Sand Veil"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["lowkick", "seedbomb", "suckerpunch", "swordsdance"],
+ "abilities": ["Sand Veil"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focuspunch", "seedbomb", "substitute", "suckerpunch"],
+ "abilities": ["Sand Veil"]
+ }
+ ]
+ },
+ "altaria": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["dragondance", "earthquake", "outrage", "roost"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "earthquake", "fireblast", "haze", "healbell", "roost", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "zangoose": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "nightslash", "quickattack", "return", "swordsdance"],
+ "abilities": ["Immunity"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "seviper": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquatail", "darkpulse", "earthquake", "flamethrower", "sludgebomb", "suckerpunch", "switcheroo"],
+ "abilities": ["Shed Skin"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "lunatone": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["batonpass", "calmmind", "earthpower", "psychic", "signalbeam", "substitute"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthpower", "explosion", "psychic", "stealthrock", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "solrock": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "explosion", "rockpolish", "stealthrock", "stoneedge", "zenheadbutt"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "whiscash": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"],
+ "abilities": ["Anticipation"]
+ }
+ ]
+ },
+ "crawdaunt": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crunch", "dragondance", "superpower", "waterfall", "xscissor"],
+ "abilities": ["Hyper Cutter"]
+ }
+ ]
+ },
+ "claydol": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "explosion", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "cradily": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["curse", "earthquake", "recover", "seedbomb", "stealthrock", "stoneedge", "swordsdance", "toxic"],
+ "abilities": ["Suction Cups"]
+ }
+ ]
+ },
+ "armaldo": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["earthquake", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"],
+ "abilities": ["Battle Armor"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquatail", "earthquake", "rockpolish", "stealthrock", "stoneedge", "swordsdance", "xscissor"],
+ "abilities": ["Battle Armor"]
+ }
+ ]
+ },
+ "milotic": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["haze", "icebeam", "recover", "surf", "toxic"],
+ "abilities": ["Marvel Scale"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Marvel Scale"]
+ }
+ ]
+ },
+ "castform": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "icebeam", "return", "thunderbolt", "thunderwave"],
+ "abilities": ["Forecast"]
+ }
+ ]
+ },
+ "kecleon": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["recover", "return", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Color Change"]
+ }
+ ]
+ },
+ "banette": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerfighting", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "tropius": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["airslash", "earthquake", "leechseed", "roost", "toxic"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aerialace", "dragondance", "earthquake", "leafblade"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "chimecho": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "hiddenpowerfighting", "psychic", "recover", "thunderwave", "toxic"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "recover", "signalbeam"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "absol": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["nightslash", "psychocut", "pursuit", "suckerpunch", "superpower"],
+ "abilities": ["Super Luck"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["nightslash", "suckerpunch", "superpower", "swordsdance"],
+ "abilities": ["Super Luck"]
+ }
+ ]
+ },
+ "glalie": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "explosion", "icebeam", "spikes", "taunt"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "walrein": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "icebeam", "roar", "superfang", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icebeam", "protect", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "huntail": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"],
+ "abilities": ["Swift Swim"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "hiddenpowergrass", "hydropump", "icebeam", "suckerpunch", "surf"],
+ "abilities": ["Swift Swim"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "gorebyss": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "raindance", "surf"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "relicanth": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "headsmash", "rockpolish", "waterfall"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "luvdisc": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "substitute", "surf", "toxic"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "salamence": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "fireblast", "outrage", "roost"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "metagross": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "earthquake", "explosion", "icepunch", "meteormash", "thunderpunch", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulletpunch", "earthquake", "explosion", "icepunch", "meteormash", "stealthrock", "thunderpunch", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "regirock": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "rest", "stealthrock", "stoneedge", "thunderwave", "toxic"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["curse", "earthquake", "rest", "sleeptalk", "stoneedge"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "rockslide", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "regice": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focusblast", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Electric"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["explosion", "focusblast", "icebeam", "rockpolish", "thunderbolt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Electric"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "registeel": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "ironhead", "rest", "sleeptalk"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "latias": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psychic", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "latios": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psychic", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "kyogre": {
+ "level": 67,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "surf", "thunder", "waterspout"],
+ "abilities": ["Drizzle"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["calmmind", "icebeam", "rest", "sleeptalk", "surf", "thunder"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "groudon": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "lavaplume", "roar", "stealthrock", "stoneedge", "thunderwave"],
+ "abilities": ["Drought"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "firepunch", "rockpolish", "stoneedge", "swordsdance"],
+ "abilities": ["Drought"]
+ }
+ ]
+ },
+ "rayquaza": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dracometeor", "earthquake", "extremespeed", "fireblast", "outrage"],
+ "abilities": ["Air Lock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "extremespeed", "outrage", "overheat"],
+ "abilities": ["Air Lock"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragonclaw", "earthquake", "extremespeed", "swordsdance"],
+ "abilities": ["Air Lock"]
+ }
+ ]
+ },
+ "jirachi": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hiddenpowerfire", "psychic", "substitute", "thunderbolt", "wish"],
+ "abilities": ["Serene Grace"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "deoxys": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["extremespeed", "psychoboost", "shadowball", "superpower"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["icebeam", "psychoboost", "shadowball", "superpower"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysattack": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["extremespeed", "psychoboost", "shadowball", "superpower"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["icebeam", "psychoboost", "shadowball", "superpower"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysdefense": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysspeed": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["psychoboost", "spikes", "stealthrock", "superpower", "taunt"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "torterra": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "infernape": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"],
+ "abilities": ["Blaze"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "empoleon": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "stealthrock", "surf", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "roar", "stealthrock", "surf", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "grassknot", "hydropump", "icebeam"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "staraptor": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "closecombat", "doubleedge", "pursuit", "quickattack", "return", "uturn"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "closecombat", "return", "roost", "uturn"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "bibarel": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "quickattack", "return", "waterfall"],
+ "abilities": ["Simple"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "quickattack", "return", "waterfall"],
+ "abilities": ["Simple"]
+ }
+ ]
+ },
+ "kricketune": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["brickbreak", "nightslash", "return", "swordsdance", "xscissor"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "luxray": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "icefang", "roar", "superpower", "thunderbolt", "toxic"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "superpower", "thunderbolt", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "roserade": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["energyball", "hiddenpowerground", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "rampardos": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "firepunch", "rockpolish", "stoneedge", "zenheadbutt"],
+ "abilities": ["Mold Breaker"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "headsmash", "stoneedge", "superpower"],
+ "abilities": ["Mold Breaker"]
+ }
+ ]
+ },
+ "bastiodon": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["metalburst", "roar", "rockslide", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["metalburst", "protect", "roar", "rockslide", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "wormadam": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "psychic", "signalbeam"],
+ "abilities": ["Anticipation"]
+ }
+ ]
+ },
+ "wormadamsandy": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "rest", "sleeptalk", "toxic"],
+ "abilities": ["Anticipation"]
+ }
+ ]
+ },
+ "wormadamtrash": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["flashcannon", "protect", "stealthrock", "suckerpunch", "toxic"],
+ "abilities": ["Anticipation"]
+ }
+ ]
+ },
+ "mothim": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "bugbuzz", "hiddenpowerfighting", "hiddenpowerground", "shadowball", "uturn"],
+ "abilities": ["Swarm"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "vespiquen": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerflying", "roost", "toxic", "uturn"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "pachirisu": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["discharge", "superfang", "thunderbolt", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Pickup", "Run Away"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Pickup", "Run Away"]
+ }
+ ]
+ },
+ "floatzel": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "crunch", "icepunch", "return", "waterfall"],
+ "abilities": ["Swift Swim"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "icepunch", "return", "substitute", "waterfall"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "cherrim": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "energyball", "hiddenpowerground", "leechseed", "synthesis", "toxic"],
+ "abilities": ["Flower Gift"]
+ }
+ ]
+ },
+ "gastrodon": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "icebeam", "recover", "surf", "toxic"],
+ "abilities": ["Sticky Hold"]
+ }
+ ]
+ },
+ "ambipom": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "lowkick", "payback", "pursuit", "return", "uturn"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "drifblim": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "calmmind", "hiddenpowerfighting", "rest", "shadowball", "substitute", "thunderbolt"],
+ "abilities": ["Unburden"]
+ }
+ ]
+ },
+ "lopunny": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["batonpass", "encore", "return", "substitute", "thunderwave", "toxic"],
+ "abilities": ["Cute Charm"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["healingwish", "icepunch", "return", "skyuppercut", "switcheroo"],
+ "abilities": ["Cute Charm"]
+ }
+ ]
+ },
+ "mismagius": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["destinybond", "hiddenpowerfighting", "painsplit", "shadowball", "substitute", "taunt", "willowisp"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "thunderbolt", "trick"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "honchkrow": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"],
+ "abilities": ["Insomnia"]
+ }
+ ]
+ },
+ "purugly": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "irontail", "return", "shadowclaw", "uturn"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "skuntank": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "explosion", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"],
+ "abilities": ["Aftermath"]
+ }
+ ]
+ },
+ "bronzong": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "explosion", "ironhead", "payback", "stealthrock", "toxic"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "psychic", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "chatot": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["chatter", "encore", "heatwave", "hiddenpowergrass", "hypervoice", "nastyplot"],
+ "abilities": ["Tangled Feet"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["chatter", "heatwave", "hiddenpowergrass", "hypervoice", "uturn"],
+ "abilities": ["Tangled Feet"]
+ }
+ ]
+ },
+ "spiritomb": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["darkpulse", "painsplit", "pursuit", "shadowsneak", "suckerpunch", "willowisp"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "garchomp": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["earthquake", "fireblast", "outrage", "stealthrock", "stoneedge"],
+ "abilities": ["Sand Veil"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"],
+ "abilities": ["Sand Veil"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["dragonclaw", "earthquake", "substitute", "swordsdance"],
+ "abilities": ["Sand Veil"]
+ }
+ ]
+ },
+ "lucario": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "crunch", "extremespeed", "stoneedge", "swordsdance"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "hippowdon": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "roar", "slackoff", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "drapion": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquatail", "crunch", "earthquake", "poisonjab", "pursuit", "swordsdance"],
+ "abilities": ["Battle Armor"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["crunch", "earthquake", "poisonjab", "taunt", "toxicspikes", "whirlwind"],
+ "abilities": ["Battle Armor"]
+ }
+ ]
+ },
+ "toxicroak": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crosschop", "earthquake", "icepunch", "poisonjab", "substitute", "suckerpunch", "swordsdance"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "carnivine": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "powerwhip", "sleeppowder", "synthesis"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["powerwhip", "return", "sleeppowder", "swordsdance", "synthesis"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "lumineon": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerelectric", "hiddenpowergrass", "icebeam", "raindance", "surf", "uturn"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "abomasnow": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blizzard", "earthquake", "iceshard", "woodhammer"],
+ "abilities": ["Snow Warning"]
+ }
+ ]
+ },
+ "weavile": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icepunch", "iceshard", "lowkick", "nightslash", "pursuit", "swordsdance"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "magnezone": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["explosion", "flashcannon", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerice", "thunderbolt"],
+ "abilities": ["Magnet Pull"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Magnet Pull"]
+ }
+ ]
+ },
+ "lickilicky": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "healbell", "protect", "toxic", "wish"],
+ "abilities": ["Own Tempo"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "earthquake", "explosion", "powerwhip", "return", "swordsdance"],
+ "abilities": ["Own Tempo"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "rhyperior": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stealthrock", "stoneedge"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "tangrowth": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "hiddenpowerfire", "leafstorm", "morningsun", "powerwhip", "rockslide", "sleeppowder"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "powerwhip", "rockslide", "swordsdance"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "electivire": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crosschop", "earthquake", "flamethrower", "hiddenpowergrass", "icepunch", "thunderbolt"],
+ "abilities": ["Motor Drive"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "magmortar": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowerice", "taunt", "thunderbolt"],
+ "abilities": ["Flame Body"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "togekiss": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["airslash", "aurasphere", "batonpass", "nastyplot", "roost", "thunderwave"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "healbell", "roost", "thunderwave"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "aurasphere", "fireblast", "trick"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "yanmega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "bugbuzz", "hiddenpowerfire", "hiddenpowerground", "protect"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["airslash", "bugbuzz", "hiddenpowerfire", "hiddenpowerground", "uturn"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "leafeon": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "leafblade", "synthesis", "toxic"],
+ "abilities": ["Leaf Guard"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["batonpass", "doubleedge", "leafblade", "substitute", "swordsdance", "synthesis", "xscissor"],
+ "abilities": ["Leaf Guard"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "glaceon": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"],
+ "abilities": ["Snow Cloak"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "toxic", "wish"],
+ "abilities": ["Snow Cloak"]
+ }
+ ]
+ },
+ "gliscor": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic", "uturn"],
+ "abilities": ["Hyper Cutter"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "roost", "stoneedge", "swordsdance"],
+ "abilities": ["Hyper Cutter"]
+ }
+ ]
+ },
+ "mamoswine": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "iceshard", "stealthrock", "stoneedge", "superpower"],
+ "abilities": ["Snow Cloak"]
+ }
+ ]
+ },
+ "porygonz": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "hiddenpowerfighting", "icebeam", "nastyplot", "thunderbolt", "triattack", "trick"],
+ "abilities": ["Adaptability", "Download"]
+ }
+ ]
+ },
+ "gallade": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "nightslash", "shadowsneak", "swordsdance", "trick", "zenheadbutt"],
+ "abilities": ["Steadfast"]
+ }
+ ]
+ },
+ "probopass": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "explosion", "powergem", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Magnet Pull"]
+ }
+ ]
+ },
+ "dusknoir": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "icepunch", "painsplit", "shadowsneak", "toxic", "trick", "willowisp"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "shadowsneak", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focuspunch", "painsplit", "shadowsneak", "substitute"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "froslass": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave"],
+ "abilities": ["Snow Cloak"]
+ }
+ ]
+ },
+ "rotom": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerfighting", "hiddenpowerice", "shadowball", "thunderbolt", "trick"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomheat": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["overheat", "painsplit", "shadowball", "thunderbolt", "trick", "willowisp"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Fire"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomwash": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hydropump", "painsplit", "shadowball", "thunderbolt", "trick", "willowisp"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomfrost": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blizzard", "painsplit", "shadowball", "thunderbolt", "trick", "willowisp"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomfan": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["painsplit", "shadowball", "thunderbolt", "willowisp"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotommow": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["leafstorm", "painsplit", "shadowball", "thunderbolt", "trick", "willowisp"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Grass"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "shadowball", "sleeptalk", "thunderbolt"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "uxie": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "psychic", "stealthrock", "thunderwave", "uturn", "yawn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "mesprit": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "healingwish", "hiddenpowerfighting", "icebeam", "psychic", "thunderbolt", "trick", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["hiddenpowerfighting", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "azelf": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fireblast", "nastyplot", "psychic", "signalbeam", "thunderbolt", "trick", "uturn"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Fire"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["explosion", "fireblast", "psychic", "stealthrock", "taunt", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "dialga": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aurasphere", "dracometeor", "fireblast", "roar", "stealthrock", "thunderbolt", "toxic"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fire"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulkup", "outrage", "rest", "sleeptalk"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bulkup", "dragonclaw", "earthquake", "fireblast", "rest"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "palkia": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "heatran": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthpower", "eruption", "explosion", "fireblast"],
+ "abilities": ["Flash Fire"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dragonpulse", "earthpower", "explosion", "fireblast", "hiddenpowergrass", "lavaplume", "roar", "stealthrock", "toxic"],
+ "abilities": ["Flash Fire"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthpower", "fireblast", "lavaplume", "protect", "substitute", "toxic"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "regigigas": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "return", "substitute", "thunderwave"],
+ "abilities": ["Slow Start"]
+ }
+ ]
+ },
+ "giratinaorigin": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "giratina": {
+ "level": 68,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "cresselia": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hiddenpowerfighting", "moonlight", "psychic", "signalbeam"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["hiddenpowerfighting", "moonlight", "psychic", "thunderwave", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "phione": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["raindance", "rest", "surf", "toxic"],
+ "abilities": ["Hydration"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "icebeam", "surf", "toxic", "uturn"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "manaphy": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["energyball", "icebeam", "surf", "tailglow"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "darkrai": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["darkpulse", "darkvoid", "focusblast", "nastyplot"],
+ "abilities": ["Bad Dreams"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["darkpulse", "darkvoid", "nastyplot", "substitute"],
+ "abilities": ["Bad Dreams"]
+ }
+ ]
+ },
+ "shaymin": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["airslash", "earthpower", "leechseed", "seedflare", "substitute", "synthesis"],
+ "abilities": ["Natural Cure"],
+ "preferredTypes": ["Flying"]
+ }
+ ]
+ },
+ "shayminsky": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "arceus": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceusbug": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "judgment"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusdark": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "focusblast", "judgment", "recover", "refresh"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusdragon": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "outrage", "recover", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover", "refresh"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceuselectric": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfighting": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "darkpulse", "icebeam", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfire": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "judgment", "recover", "thunderbolt"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusflying": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover", "refresh"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusghost": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "focusblast", "judgment", "recover", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusgrass": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "judgment"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusground": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusice": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceuspoison": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "fireblast", "recover", "sludgebomb"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "fireblast", "icebeam", "recover", "sludgebomb", "stealthrock", "willowisp"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceuspsychic": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "darkpulse", "focusblast", "judgment", "recover"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "arceusrock": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceussteel": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceuswater": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen4/teams.ts b/data/random-battles/gen4/teams.ts
new file mode 100644
index 000000000000..1ce2723fe08e
--- /dev/null
+++ b/data/random-battles/gen4/teams.ts
@@ -0,0 +1,783 @@
+import RandomGen5Teams from '../gen5/teams';
+import {PRNG} from '../../../sim';
+import type {MoveCounter} from '../gen8/teams';
+
+// Moves that restore HP:
+const RECOVERY_MOVES = [
+ 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'slackoff', 'softboiled', 'synthesis',
+];
+// Moves that boost Attack:
+const PHYSICAL_SETUP = [
+ 'bellydrum', 'bulkup', 'curse', 'dragondance', 'howl', 'meditate', 'screech', 'swordsdance',
+];
+// Conglomerate for ease of access
+const SETUP = [
+ 'acidarmor', 'agility', 'bellydrum', 'bulkup', 'calmmind', 'curse', 'dragondance', 'growth', 'howl', 'irondefense',
+ 'meditate', 'nastyplot', 'raindance', 'rockpolish', 'sunnyday', 'swordsdance', 'tailglow',
+];
+// Moves that shouldn't be the only STAB moves:
+const NO_STAB = [
+ 'aquajet', 'bulletpunch', 'chatter', 'eruption', 'explosion', 'fakeout', 'focuspunch', 'futuresight', 'iceshard',
+ 'icywind', 'knockoff', 'machpunch', 'pluck', 'pursuit', 'quickattack', 'rapidspin', 'reversal', 'selfdestruct',
+ 'shadowsneak', 'skyattack', 'suckerpunch', 'uturn', 'vacuumwave', 'waterspout',
+];
+// Hazard-setting moves
+const HAZARDS = [
+ 'spikes', 'stealthrock', 'toxicspikes',
+];
+
+// Moves that should be paired together when possible
+const MOVE_PAIRS = [
+ ['lightscreen', 'reflect'],
+ ['sleeptalk', 'rest'],
+ ['protect', 'wish'],
+ ['leechseed', 'substitute'],
+ ['focuspunch', 'substitute'],
+ ['raindance', 'rest'],
+];
+
+/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */
+const PRIORITY_POKEMON = [
+ 'cacturne', 'dusknoir', 'honchkrow', 'mamoswine', 'scizor', 'shedinja', 'shiftry',
+];
+
+export class RandomGen4Teams extends RandomGen5Teams {
+ randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json');
+
+ constructor(format: string | Format, prng: PRNG | PRNGSeed | null) {
+ super(format, prng);
+ this.noStab = NO_STAB;
+ this.priorityPokemon = PRIORITY_POKEMON;
+
+ this.moveEnforcementCheckers = {
+ Bug: (movePool, moves, abilities, types, counter) => (
+ !counter.get('Bug') && movePool.includes('megahorn')
+ ),
+ Dark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'),
+ Dragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon'),
+ Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'),
+ Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'),
+ Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'),
+ Flying: (movePool, moves, abilities, types, counter, species) => !counter.get('Flying') && species.id !== 'aerodactyl',
+ Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'),
+ Grass: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Grass') &&
+ (species.baseStats.atk >= 100 || movePool.includes('leafstorm') || movePool.includes('solarbeam'))
+ ),
+ Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'),
+ Ice: (movePool, moves, abilities, types, counter) => !counter.get('Ice'),
+ Poison: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Poison') && (types.has('Grass') || species.id === 'gengar')
+ ),
+ Psychic: (movePool, moves, abilities, types, counter) => (
+ !counter.get('Psychic') && (types.has('Fighting') || movePool.includes('calmmind'))
+ ),
+ Rock: (movePool, moves, abilities, types, counter, species) => (!counter.get('Rock') && species.baseStats.atk >= 80),
+ Steel: (movePool, moves, abilities, types, counter, species) => (!counter.get('Steel') && species.id === 'metagross'),
+ Water: (movePool, moves, abilities, types, counter) => !counter.get('Water'),
+ };
+ this.cachedStatusMoves = this.dex.moves.all()
+ .filter(move => move.category === 'Status')
+ .map(move => move.id);
+ }
+
+ cullMovePool(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): void {
+ // Pokemon cannot have multiple Hidden Powers in any circumstance
+ let hasHiddenPower = false;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hasHiddenPower = true;
+ }
+ if (hasHiddenPower) {
+ let movePoolHasHiddenPower = true;
+ while (movePoolHasHiddenPower) {
+ movePoolHasHiddenPower = false;
+ for (const moveid of movePool) {
+ if (moveid.startsWith('hiddenpower')) {
+ this.fastPop(movePool, movePool.indexOf(moveid));
+ movePoolHasHiddenPower = true;
+ break;
+ }
+ }
+ }
+ }
+
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
+ if (moves.size === this.maxMoveCount - 2) {
+ const unpairedMoves = [...movePool];
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
+ }
+ }
+ if (unpairedMoves.length === 1) {
+ this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
+ }
+ }
+
+ // These moves are paired, and shouldn't appear if there is not room for them both.
+ if (moves.size === this.maxMoveCount - 1) {
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(movePool, movePool.indexOf(pair[0]));
+ this.fastPop(movePool, movePool.indexOf(pair[1]));
+ }
+ }
+ }
+
+ // Team-based move culls
+ if (teamDetails.screens && movePool.length >= this.maxMoveCount + 2) {
+ if (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect'));
+ if (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.stealthRock) {
+ if (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.rapidSpin) {
+ if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.toxicSpikes) {
+ if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.spikes && teamDetails.spikes >= 2) {
+ if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.statusCure) {
+ if (movePool.includes('aromatherapy')) this.fastPop(movePool, movePool.indexOf('aromatherapy'));
+ if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+
+ // Develop additional move lists
+ const badWithSetup = ['pursuit', 'toxic'];
+ const statusMoves = this.cachedStatusMoves;
+
+ // General incompatibilities
+ const incompatiblePairs = [
+ // These moves don't mesh well with other aspects of the set
+ [statusMoves, ['healingwish', 'switcheroo', 'trick']],
+ [SETUP, 'uturn'],
+ [SETUP, HAZARDS],
+ [SETUP, badWithSetup],
+ [PHYSICAL_SETUP, PHYSICAL_SETUP],
+ [['fakeout', 'uturn'], ['switcheroo', 'trick']],
+ ['substitute', 'uturn'],
+ ['rest', 'substitute'],
+ ['explosion', ['destinybond', 'painsplit', 'rest', 'trick']],
+
+ // These attacks are redundant with each other
+ ['surf', 'hydropump'],
+ [['bodyslam', 'return'], ['bodyslam', 'doubleedge']],
+ [['energyball', 'leafstorm'], ['leafblade', 'leafstorm', 'powerwhip']],
+ ['lavaplume', 'fireblast'],
+ ['closecombat', 'drainpunch'],
+ ['discharge', 'thunderbolt'],
+ ['gunkshot', 'poisonjab'],
+ ['payback', 'pursuit'],
+ ['protect', 'swordsdance'],
+
+ // Assorted hardcodes go here:
+ // Manectric
+ ['flamethrower', 'overheat'],
+ // Walrein
+ ['encore', 'roar'],
+ // Smeargle
+ ['explosion', 'whirlwind'],
+ // Seviper
+ ['switcheroo', 'suckerpunch'],
+ // Jirachi
+ ['bodyslam', 'healingwish'],
+ // Blaziken
+ ['agility', 'vacuumwave'],
+ // Shuckle
+ ['knockoff', 'protect'],
+ ];
+
+ for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
+
+ const statusInflictingMoves = ['stunspore', 'thunderwave', 'toxic', 'willowisp', 'yawn'];
+ if (role !== 'Staller') {
+ this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves);
+ }
+
+ // Cull filler moves for otherwise fixed set Stealth Rock users
+ if (!teamDetails.stealthRock) {
+ if (species.id === 'registeel' && role === 'Staller') {
+ if (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (species.id === 'wormadamtrash' && role === 'Staller') {
+ if (movePool.includes('suckerpunch')) this.fastPop(movePool, movePool.indexOf('suckerpunch'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ }
+ }
+
+ // Generate random moveset for a given species, role, preferred type.
+ randomMoveset(
+ types: string[],
+ abilities: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ movePool: string[],
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): Set {
+ const moves = new Set();
+ let counter = this.newQueryMoves(moves, species, preferredType, abilities);
+ this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead,
+ preferredType, role);
+
+ // If there are only four moves, add all moves and return early
+ if (movePool.length <= this.maxMoveCount) {
+ // Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased)
+ while (movePool.length) {
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ return moves;
+ }
+
+ const runEnforcementChecker = (checkerName: string) => {
+ if (!this.moveEnforcementCheckers[checkerName]) return false;
+ return this.moveEnforcementCheckers[checkerName](
+ movePool, moves, abilities, new Set(types), counter, species, teamDetails
+ );
+ };
+
+ // Add required move (e.g. Relic Song for Meloetta-P)
+ if (species.requiredMove) {
+ const move = this.dex.moves.get(species.requiredMove).id;
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Add other moves you really want to have, e.g. STAB, recovery, setup.
+
+ // Enforce Facade if Guts is a possible ability
+ if (movePool.includes('facade') && abilities.includes('Guts')) {
+ counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Enforce Seismic Toss, Spore, and Volt Tackle
+ for (const moveid of ['seismictoss', 'spore', 'volttackle']) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Substitute on non-Setup sets with Baton Pass
+ if (!role.includes('Setup')) {
+ if (movePool.includes('batonpass') && movePool.includes('substitute')) {
+ counter = this.addMove('substitute', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce hazard removal on Bulky Support and Spinner if the team doesn't already have it
+ if (['Bulky Support', 'Spinner'].includes(role) && !teamDetails.rapidSpin) {
+ if (movePool.includes('rapidspin')) {
+ counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce STAB priority
+ if (['Bulky Attacker', 'Bulky Setup'].includes(role) || this.priorityPokemon.includes(species.id)) {
+ const priorityMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (types.includes(moveType) && move.priority > 0 && (move.basePower || move.basePowerCallback)) {
+ priorityMoves.push(moveid);
+ }
+ }
+ if (priorityMoves.length) {
+ const moveid = this.sample(priorityMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce STAB
+ for (const type of types) {
+ // Check if a STAB move of that type should be required
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ while (runEnforcementChecker(type)) {
+ if (!stabMoves.length) break;
+ const moveid = this.sampleNoReplace(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Preferred Type
+ if (!counter.get('preferred')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && preferredType === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // If no STAB move was added, add a STAB move
+ if (!counter.get('stab')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ } else {
+ // If they have no regular STAB move, enforce U-turn on Bug types.
+ if (movePool.includes('uturn') && types.includes('Bug')) {
+ counter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce recovery
+ if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup', 'Spinner', 'Staller'].includes(role)) {
+ const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));
+ if (recoveryMoves.length) {
+ const moveid = this.sample(recoveryMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Staller moves
+ if (role === 'Staller') {
+ const enforcedMoves = ['protect', 'toxic', 'wish'];
+ for (const move of enforcedMoves) {
+ if (movePool.includes(move)) {
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce setup
+ if (role.includes('Setup')) {
+ const setupMoves = movePool.filter(moveid => SETUP.includes(moveid));
+ if (setupMoves.length) {
+ const moveid = this.sample(setupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce a move not on the noSTAB list
+ if (!counter.damagingMoves.size && !(moves.has('uturn') && types.includes('Bug'))) {
+ // Choose an attacking move
+ const attackingMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);
+ }
+ if (attackingMoves.length) {
+ const moveid = this.sample(attackingMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce coverage move
+ if (['Fast Attacker', 'Setup Sweeper', 'Bulky Attacker', 'Wallbreaker'].includes(role)) {
+ if (counter.damagingMoves.size === 1) {
+ // Find the type of the current attacking move
+ const currentAttackType = counter.damagingMoves.values().next().value.type;
+ // Choose an attacking move that is of different type to the current single attack
+ const coverageMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {
+ if (currentAttackType !== moveType) coverageMoves.push(moveid);
+ }
+ }
+ if (coverageMoves.length) {
+ const moveid = this.sample(coverageMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Choose remaining moves randomly from movepool and add them to moves list:
+ while (moves.size < this.maxMoveCount && movePool.length) {
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ for (const pair of MOVE_PAIRS) {
+ if (moveid === pair[0] && movePool.includes(pair[1])) {
+ counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ if (moveid === pair[1] && movePool.includes(pair[0])) {
+ counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+ return moves;
+ }
+
+ shouldCullAbility(
+ ability: string,
+ types: Set,
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role
+ ): boolean {
+ switch (ability) {
+ case 'Chlorophyll':
+ return !teamDetails.sun;
+ case 'Swift Swim':
+ return !teamDetails.rain;
+ case 'Rock Head':
+ return !counter.get('recoil');
+ case 'Skill Link':
+ return !counter.get('skilllink');
+ }
+
+ return false;
+ }
+
+
+ getAbility(
+ types: Set,
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ if (abilities.length <= 1) return abilities[0];
+
+ // Hard-code abilities here
+ if (species.id === 'dewgong') return moves.has('raindance') ? 'Hydration' : 'Thick Fat';
+ if (species.id === 'cloyster' && counter.get('skilllink')) return 'Skill Link';
+
+ const abilityAllowed: string[] = [];
+ // Obtain a list of abilities that are allowed (not culled)
+ for (const ability of abilities) {
+ if (!this.shouldCullAbility(
+ ability, types, moves, abilities, counter, movePool, teamDetails, species, preferredType, role
+ )) {
+ abilityAllowed.push(ability);
+ }
+ }
+
+ // Pick a random allowed ability
+ if (abilityAllowed.length >= 1) return this.sample(abilityAllowed);
+
+ // If all abilities are rejected, prioritize weather abilities over non-weather abilities
+ if (!abilityAllowed.length) {
+ const weatherAbilities = abilities.filter(a => ['Chlorophyll', 'Swift Swim'].includes(a));
+ if (weatherAbilities.length) return this.sample(weatherAbilities);
+ }
+
+ // Pick a random ability
+ return this.sample(abilities);
+ }
+
+ getPriorityItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string | undefined {
+ if (species.requiredItems) return this.sample(species.requiredItems);
+ if (species.id === 'latias' || species.id === 'latios') return 'Soul Dew';
+ if (species.id === 'marowak') return 'Thick Club';
+ if (species.id === 'pikachu') return 'Light Ball';
+ if (species.id === 'shedinja' || species.id === 'smeargle') return 'Focus Sash';
+ if (species.id === 'unown') return 'Choice Specs';
+ if (species.id === 'wobbuffet') return 'Custap Berry';
+ if (species.id === 'ditto' || (species.id === 'rampardos' && role === 'Fast Attacker')) return 'Choice Scarf';
+ if (ability === 'Poison Heal' || moves.has('facade')) return 'Toxic Orb';
+ if (ability === 'Speed Boost' && species.id === 'yanmega') return 'Life Orb';
+ if (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) {
+ if (
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && role !== 'Wallbreaker' && !counter.get('priority')
+ ) {
+ return 'Choice Scarf';
+ } else {
+ return (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs';
+ }
+ }
+ if (moves.has('bellydrum')) return 'Sitrus Berry';
+ if (moves.has('waterspout')) return 'Choice Scarf';
+ if (ability === 'Magic Guard') return 'Life Orb';
+ if (moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';
+ if (moves.has('rest') && !moves.has('sleeptalk') && !['Natural Cure', 'Shed Skin'].includes(ability)) {
+ return (moves.has('raindance') && ability === 'Hydration') ? 'Damp Rock' : 'Chesto Berry';
+ }
+ if (ability === 'Unburden') return 'Sitrus Berry';
+ if (role === 'Staller') return 'Leftovers';
+ }
+
+ getItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ const defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd;
+
+ const scarfReqs = (
+ role !== 'Wallbreaker' &&
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
+ !counter.get('priority') && !moves.has('pursuit')
+ );
+
+ if (
+ moves.has('pursuit') && moves.has('suckerpunch') && counter.get('Dark') &&
+ (!this.priorityPokemon.includes(species.id) || counter.get('Dark') >= 2)
+ ) return 'Black Glasses';
+ if (counter.get('Special') === 4) {
+ return (
+ scarfReqs && species.baseStats.spa >= 90 && this.randomChance(1, 2)
+ ) ? 'Choice Scarf' : 'Choice Specs';
+ }
+ if (
+ counter.get('Special') === 3 && role === 'Fast Attacker' && (moves.has('explosion') || moves.has('selfdestruct'))
+ ) return 'Choice Scarf';
+ if (counter.get('Special') === 3 && moves.has('uturn')) return 'Choice Specs';
+ if (counter.get('Physical') === 4 && species.id !== 'jirachi' &&
+ ['fakeout', 'rapidspin'].every(m => !moves.has(m))
+ ) {
+ return (
+ scarfReqs && (species.baseStats.atk >= 100 || ability === 'Pure Power' || ability === 'Huge Power') &&
+ this.randomChance(1, 2)
+ ) ? 'Choice Scarf' : 'Choice Band';
+ }
+
+ if (types.includes('Normal') && moves.has('fakeout') && !!counter.get('Normal')) return 'Silk Scarf';
+ if (species.id === 'palkia') return 'Lustrous Orb';
+ if (species.id === 'farfetchd') return 'Stick';
+ if (moves.has('outrage') && counter.get('setup') && !moves.has('sleeptalk')) return 'Lum Berry';
+ if (['batonpass', 'protect', 'substitute'].some(m => moves.has(m))) return 'Leftovers';
+ if (
+ role === 'Fast Support' && isLead && defensiveStatTotal < 255 && !counter.get('recovery') &&
+ (counter.get('hazards') || counter.get('setup')) && (!counter.get('recoil') || ability === 'Rock Head')
+ ) return 'Focus Sash';
+
+ // Default Items
+ if (role === 'Fast Support') {
+ return (
+ counter.get('Physical') + counter.get('Special') >= 3 &&
+ ['rapidspin', 'uturn'].every(m => !moves.has(m)) &&
+ this.dex.getEffectiveness('Rock', species) < 2
+ ) ? 'Life Orb' : 'Leftovers';
+ }
+ // noStab moves that should reject Expert Belt
+ const noExpertBeltMoves = this.noStab.filter(
+ moveid => ['Dragon', 'Normal', 'Poison'].includes(this.dex.moves.get(moveid).type)
+ );
+ const expertBeltReqs = (
+ !counter.get('Dragon') && !counter.get('Normal') && !counter.get('Poison') &&
+ noExpertBeltMoves.every(m => !moves.has(m))
+ );
+ if (!counter.get('Status') && expertBeltReqs && (moves.has('uturn') || role === 'Fast Attacker')) return 'Expert Belt';
+ if (
+ ['Fast Attacker', 'Setup Sweeper', 'Wallbreaker'].some(m => role === m) &&
+ this.dex.getEffectiveness('Rock', species) < 2 && !moves.has('rapidspin')
+ ) return 'Life Orb';
+ return 'Leftovers';
+ }
+
+ randomSet(
+ species: string | Species,
+ teamDetails: RandomTeamsTypes.TeamDetails = {},
+ isLead = false
+ ): RandomTeamsTypes.RandomSet {
+ species = this.dex.species.get(species);
+ const forme = this.getForme(species);
+ const sets = this.randomSets[species.id]["sets"];
+ const possibleSets = [];
+ // Check if the Pokemon has a Spinner set
+ let canSpinner = false;
+ for (const set of sets) {
+ if (!teamDetails.rapidSpin && set.role === 'Spinner') canSpinner = true;
+ }
+ for (const set of sets) {
+ // Prevent Spinner if the team already has removal
+ if (teamDetails.rapidSpin && set.role === 'Spinner') continue;
+ // Enforce Spinner if the team does not have removal
+ if (canSpinner && set.role !== 'Spinner') continue;
+ possibleSets.push(set);
+ }
+ const set = this.sampleIfArray(possibleSets);
+ const role = set.role;
+ const movePool: string[] = Array.from(set.movepool);
+ const preferredTypes = set.preferredTypes;
+ const preferredType = this.sampleIfArray(preferredTypes) || '';
+
+ let ability = '';
+ let item = undefined;
+
+ const evs = {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85};
+ const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};
+
+ const types = species.types;
+ const abilities = set.abilities!;
+
+ // Get moves
+ const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool,
+ preferredType, role);
+ const counter = this.newQueryMoves(moves, species, preferredType, abilities);
+
+ // Get ability
+ ability = this.getAbility(new Set(types), moves, abilities, counter, movePool, teamDetails, species,
+ preferredType, role);
+
+ // Get items
+ item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);
+ if (item === undefined) {
+ item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);
+ }
+
+ // For Trick / Switcheroo
+ if (item === 'Leftovers' && types.includes('Poison')) {
+ item = 'Black Sludge';
+ }
+
+ const level = this.getLevel(species);
+
+ // We use a special variable to track Hidden Power
+ // so that we can check for all Hidden Powers at once
+ let hasHiddenPower = false;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hasHiddenPower = true;
+ }
+
+ if (hasHiddenPower) {
+ let hpType;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hpType = move.substr(11);
+ }
+ if (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`);
+ const HPivs = this.dex.types.get(hpType).HPivs;
+ let iv: StatID;
+ for (iv in HPivs) {
+ ivs[iv] = HPivs[iv]!;
+ }
+ }
+
+ // Prepare optimal HP
+ const srImmunity = ability === 'Magic Guard';
+ const srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);
+ while (evs.hp > 1) {
+ const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ if (moves.has('substitute') && item === 'Sitrus Berry') {
+ // Two Substitutes should activate Sitrus Berry
+ if (hp % 4 === 0) break;
+ } else if (moves.has('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) break;
+ if (srWeakness === 1 && ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break;
+ if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;
+ // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry
+ if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;
+ }
+ evs.hp -= 4;
+ }
+
+ // Minimize confusion damage
+ if (!counter.get('Physical') && !moves.has('transform')) {
+ evs.atk = 0;
+ ivs.atk = hasHiddenPower ? (ivs.atk || 31) - 28 : 0;
+ }
+
+ if (['gyroball', 'metalburst', 'trickroom'].some(m => moves.has(m))) {
+ evs.spe = 0;
+ ivs.spe = hasHiddenPower ? (ivs.spe || 31) - 28 : 0;
+ }
+
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+
+ return {
+ name: species.baseSpecies,
+ species: forme,
+ gender: species.gender,
+ shiny: this.randomChance(1, 1024),
+ level,
+ moves: shuffledMoves,
+ ability,
+ evs,
+ ivs,
+ item,
+ role,
+ };
+ }
+}
+
+export default RandomGen4Teams;
diff --git a/data/random-battles/gen5/sets.json b/data/random-battles/gen5/sets.json
new file mode 100644
index 000000000000..2c7b59fb49a7
--- /dev/null
+++ b/data/random-battles/gen5/sets.json
@@ -0,0 +1,5050 @@
+{
+ "venusaur": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"],
+ "abilities": ["Chlorophyll", "Overgrow"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "leafstorm", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Chlorophyll", "Overgrow"]
+ }
+ ]
+ },
+ "charizard": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "dragonpulse", "fireblast", "focusblast", "hiddenpowergrass", "roost"],
+ "abilities": ["Blaze", "Solar Power"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "earthquake", "fireblast", "roost", "willowisp"],
+ "abilities": ["Blaze", "Solar Power"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "dragondance", "earthquake", "flareblitz", "swordsdance"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "blastoise": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["icebeam", "rapidspin", "roar", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["haze", "icebeam", "protect", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "butterfree": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "substitute"],
+ "abilities": ["Tinted Lens"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbuzz", "quiverdance", "roost", "sleeppowder"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "beedrill": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["drillrun", "poisonjab", "toxicspikes", "uturn"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "pidgeot": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "heatwave", "return", "roost", "uturn", "workup"],
+ "abilities": ["Big Pecks"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "quickattack", "return", "uturn"],
+ "abilities": ["Big Pecks"]
+ }
+ ]
+ },
+ "raticate": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "facade", "flamewheel", "protect", "suckerpunch", "swordsdance", "uturn"],
+ "abilities": ["Guts"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "fearow": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "uturn"],
+ "abilities": ["Sniper"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "roost"],
+ "abilities": ["Sniper"]
+ }
+ ]
+ },
+ "arbok": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["coil", "earthquake", "glare", "gunkshot", "suckerpunch"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["coil", "earthquake", "gunkshot", "suckerpunch"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["coil", "earthquake", "gunkshot", "rest"],
+ "abilities": ["Shed Skin"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "pikachu": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["extremespeed", "grassknot", "hiddenpowerice", "voltswitch", "volttackle"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "raichu": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["encore", "focusblast", "grassknot", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "sandslash": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["earthquake", "rapidspin", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Sand Rush"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "stoneedge", "swordsdance", "xscissor"],
+ "abilities": ["Sand Rush"]
+ }
+ ]
+ },
+ "nidoqueen": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "stealthrock", "toxicspikes"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "nidoking": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "substitute", "superpower"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "clefable": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "doubleedge", "fireblast", "softboiled", "stealthrock", "thunderwave"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "icebeam", "softboiled", "thunderbolt"],
+ "abilities": ["Magic Guard", "Unaware"]
+ }
+ ]
+ },
+ "ninetales": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["fireblast", "hypnosis", "nastyplot", "solarbeam", "willowisp"],
+ "abilities": ["Drought"],
+ "preferredTypes": ["Grass"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["fireblast", "hiddenpowerrock", "nastyplot", "solarbeam", "substitute"],
+ "abilities": ["Drought"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "wigglytuff": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["doubleedge", "protect", "thunderwave", "toxic", "wish"],
+ "abilities": ["Frisk"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "fireblast", "healbell", "protect", "stealthrock", "wish"],
+ "abilities": ["Frisk"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "vileplume": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "gigadrain", "hiddenpowerground", "leechseed", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Effect Spore"]
+ }
+ ]
+ },
+ "parasect": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "leechseed", "seedbomb", "spore", "stunspore", "synthesis", "xscissor"],
+ "abilities": ["Dry Skin"],
+ "preferredTypes": ["Bug"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aromatherapy", "leechseed", "seedbomb", "spore", "stunspore", "xscissor"],
+ "abilities": ["Dry Skin"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["leechseed", "protect", "spore", "xscissor"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "venomoth": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbuzz", "quiverdance", "roost", "sleeppowder"],
+ "abilities": ["Tinted Lens"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "substitute"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "dugtrio": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["earthquake", "memento", "stealthrock", "stoneedge", "suckerpunch"],
+ "abilities": ["Arena Trap"]
+ }
+ ]
+ },
+ "persian": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bite", "doubleedge", "fakeout", "hypnosis", "return", "seedbomb", "taunt", "uturn"],
+ "abilities": ["Technician"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "golduck": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "scald"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "primeape": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "honeclaws", "stoneedge", "uturn"],
+ "abilities": ["Defiant", "Vital Spirit"]
+ }
+ ]
+ },
+ "arcanine": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "roar", "toxic", "wildcharge", "willowisp"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "wildcharge"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "poliwrath": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["brickbreak", "hydropump", "icebeam", "raindance"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["circlethrow", "rest", "scald", "sleeptalk"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "alakazam": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["counter", "focusblast", "psychic", "psyshock", "shadowball"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "encore", "focusblast", "psychic", "psyshock", "shadowball", "substitute"],
+ "abilities": ["Magic Guard"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "machamp": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulletpunch", "dynamicpunch", "earthquake", "payback", "stoneedge", "toxic"],
+ "abilities": ["No Guard"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "victreebel": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerground", "powerwhip", "sleeppowder", "sludgebomb", "suckerpunch"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["powerwhip", "sludgebomb", "sunnyday", "weatherball"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "tentacruel": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["haze", "icebeam", "rapidspin", "scald", "sludgebomb", "toxicspikes"],
+ "abilities": ["Clear Body", "Liquid Ooze"]
+ }
+ ]
+ },
+ "golem": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "rapidash": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drillrun", "flareblitz", "morningsun", "wildcharge", "willowisp"],
+ "abilities": ["Flame Body", "Flash Fire"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drillrun", "flareblitz", "megahorn", "morningsun", "wildcharge"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "slowbro": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["calmmind", "psyshock", "scald", "slackoff"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["fireblast", "icebeam", "psyshock", "surf", "trick", "trickroom"],
+ "abilities": ["Regenerator"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "farfetchd": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bravebird", "leafblade", "quickattack", "return", "swordsdance"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "dodrio": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "pursuit", "quickattack", "return", "roost"],
+ "abilities": ["Early Bird"]
+ }
+ ]
+ },
+ "dewgong": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["encore", "icebeam", "rest", "sleeptalk", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "muk": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["brickbreak", "curse", "icepunch", "poisonjab", "rest", "shadowsneak"],
+ "abilities": ["Poison Touch"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "cloyster": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hydropump", "iciclespear", "rockblast", "shellsmash"],
+ "abilities": ["Skill Link"]
+ }
+ ]
+ },
+ "gengar": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "painsplit", "shadowball", "sludgewave", "substitute", "trick", "willowisp"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "hypno": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["focusblast", "foulplay", "protect", "psychic", "thunderwave", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ }
+ ]
+ },
+ "kingler": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bodyslam", "crabhammer", "rockslide", "superpower", "swordsdance", "xscissor"],
+ "abilities": ["Hyper Cutter", "Sheer Force"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["agility", "crabhammer", "return", "swordsdance"],
+ "abilities": ["Hyper Cutter"]
+ }
+ ]
+ },
+ "electrode": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["foulplay", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt", "voltswitch"],
+ "abilities": ["Aftermath", "Static"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["hiddenpowerice", "thunderbolt", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Aftermath", "Static"]
+ }
+ ]
+ },
+ "exeggutor": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "hiddenpowerfire", "leechseed", "psychic", "sleeppowder", "substitute"],
+ "abilities": ["Harvest"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "marowak": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "firepunch", "stealthrock", "stoneedge", "swordsdance"],
+ "abilities": ["Battle Armor", "Rock Head"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "hitmonlee": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "fakeout", "rapidspin", "stoneedge", "suckerpunch"],
+ "abilities": ["Unburden"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "highjumpkick", "machpunch", "stoneedge", "suckerpunch"],
+ "abilities": ["Reckless"]
+ }
+ ]
+ },
+ "hitmonchan": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge"],
+ "abilities": ["Iron Fist"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "stoneedge"],
+ "abilities": ["Iron Fist"]
+ }
+ ]
+ },
+ "weezing": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "haze", "painsplit", "sludgebomb", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rhydon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "swordsdance", "toxic"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "chansey": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "kangaskhan": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["doubleedge", "drainpunch", "earthquake", "fakeout", "return", "suckerpunch"],
+ "abilities": ["Scrappy"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "drainpunch", "protect", "return", "wish"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "seaking": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["drillrun", "icebeam", "megahorn", "return", "waterfall"],
+ "abilities": ["Lightning Rod"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drillrun", "icebeam", "megahorn", "raindance", "return", "waterfall"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "starmie": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hydropump", "icebeam", "psyshock", "recover", "thunderbolt"],
+ "abilities": ["Analytic"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "psyshock", "rapidspin", "recover", "scald", "thunderwave"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "mrmime": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["encore", "focusblast", "nastyplot", "psychic", "shadowball", "substitute"],
+ "abilities": ["Filter"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "scyther": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aerialace", "brickbreak", "bugbite", "roost", "swordsdance"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "jynx": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"],
+ "abilities": ["Dry Skin"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "pinsir": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "stealthrock", "stoneedge", "swordsdance", "xscissor"],
+ "abilities": ["Moxie"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "tauros": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bodyslam", "earthquake", "fireblast", "rockslide", "zenheadbutt"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "earthquake", "stoneedge", "zenheadbutt"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "gyarados": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"],
+ "abilities": ["Intimidate", "Moxie"]
+ }
+ ]
+ },
+ "lapras": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "hydropump", "icebeam", "thunderbolt", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["hydropump", "icebeam", "protect", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "ditto": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["transform"],
+ "abilities": ["Imposter"]
+ }
+ ]
+ },
+ "vaporeon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "icebeam", "protect", "scald", "wish"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "scald", "toxic", "wish"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "jolteon": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "signalbeam", "thunderbolt", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "flareon": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["facade", "flamecharge", "rest", "sleeptalk"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["facade", "flamecharge", "protect", "superpower"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["facade", "firefang", "flamecharge", "superpower"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "omastar": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash", "surf"],
+ "abilities": ["Shell Armor", "Swift Swim"]
+ }
+ ]
+ },
+ "kabutops": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["aquajet", "rapidspin", "stealthrock", "stoneedge", "superpower", "waterfall"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "stealthrock", "stoneedge", "superpower", "swordsdance", "waterfall"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ }
+ ]
+ },
+ "aerodactyl": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"],
+ "abilities": ["Unnerve"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["aerialace", "aquatail", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"],
+ "abilities": ["Unnerve"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "snorlax": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "crunch", "earthquake", "rest", "sleeptalk"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "curse", "rest", "sleeptalk"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "curse", "earthquake", "rest"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "articuno": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "roost", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["hurricane", "icebeam", "roost", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "zapdos": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["heatwave", "hiddenpowerice", "roost", "substitute", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "moltres": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "hiddenpowergrass", "hurricane", "roost", "substitute", "toxic", "uturn", "willowisp"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "dragonair": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "outrage", "rest", "waterfall"],
+ "abilities": ["Shed Skin"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["dragondance", "outrage", "rest", "sleeptalk"],
+ "abilities": ["Marvel Scale", "Shed Skin"]
+ }
+ ]
+ },
+ "dragonite": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "extremespeed", "outrage", "superpower"],
+ "abilities": ["Multiscale"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "firepunch", "outrage", "roost"],
+ "abilities": ["Multiscale"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "mewtwo": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"],
+ "abilities": ["Unnerve"]
+ }
+ ]
+ },
+ "mew": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["psychic", "softboiled", "stealthrock", "taunt", "uturn", "willowisp"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "psyshock", "softboiled"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "meganium": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "dragontail", "earthquake", "gigadrain", "leechseed", "synthesis", "toxic"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "typhlosion": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "feraligatr": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "icepunch", "waterfall"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "return", "swordsdance", "waterfall"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "earthquake", "icepunch", "superpower", "waterfall"],
+ "abilities": ["Torrent"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "furret": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquatail", "doubleedge", "firepunch", "shadowclaw", "trick", "uturn"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "noctowl": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["airslash", "heatwave", "hypervoice", "roost", "toxic", "whirlwind"],
+ "abilities": ["Tinted Lens"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "ledian": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["acrobatics", "encore", "focusblast", "knockoff", "roost", "toxic"],
+ "abilities": ["Early Bird"]
+ }
+ ]
+ },
+ "ariados": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["poisonjab", "suckerpunch", "toxicspikes", "xscissor"],
+ "abilities": ["Insomnia", "Swarm"]
+ }
+ ]
+ },
+ "crobat": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bravebird", "heatwave", "hypnosis", "roost", "superfang", "taunt", "toxic", "uturn"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "lanturn": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["healbell", "icebeam", "scald", "thunderbolt", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "xatu": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "heatwave", "psychic", "roost"],
+ "abilities": ["Magic Bounce"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["heatwave", "psychic", "roost", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Magic Bounce"]
+ }
+ ]
+ },
+ "ampharos": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["agility", "focusblast", "hiddenpowerice", "thunderbolt", "voltswitch"],
+ "abilities": ["Static"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focusblast", "healbell", "hiddenpowerice", "thunderbolt", "toxic", "voltswitch"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "bellossom": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "leafstorm", "leechseed", "sleeppowder", "stunspore", "synthesis"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "azumarill": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "doubleedge", "icepunch", "superpower", "waterfall"],
+ "abilities": ["Huge Power"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["aquajet", "bellydrum", "return", "waterfall"],
+ "abilities": ["Huge Power"]
+ }
+ ]
+ },
+ "sudowoodo": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "stealthrock", "stoneedge", "suckerpunch", "toxic", "woodhammer"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "politoed": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["encore", "focusblast", "hiddenpowergrass", "hypnosis", "icebeam", "rest", "scald"],
+ "abilities": ["Drizzle"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["encore", "icebeam", "protect", "scald", "toxic"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "jumpluff": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["acrobatics", "encore", "sleeppowder", "uturn"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["acrobatics", "leechseed", "sleeppowder", "substitute"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "sunflora": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"],
+ "abilities": ["Chlorophyll", "Early Bird"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthpower", "hiddenpowerfire", "solarbeam", "sunnyday"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "quagsire": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "icebeam", "recover", "scald", "toxic"],
+ "abilities": ["Unaware"]
+ }
+ ]
+ },
+ "espeon": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "hiddenpowerfighting", "morningsun", "psychic", "psyshock", "signalbeam", "trick"],
+ "abilities": ["Magic Bounce"]
+ }
+ ]
+ },
+ "umbreon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["foulplay", "protect", "toxic", "wish"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["foulplay", "healbell", "moonlight", "toxic"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "murkrow": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bravebird", "foulplay", "haze", "roost", "taunt", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "slowking": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["fireblast", "icebeam", "psyshock", "surf", "trick", "trickroom"],
+ "abilities": ["Regenerator"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "unown": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerpsychic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "wobbuffet": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["counter", "destinybond", "encore", "mirrorcoat"],
+ "abilities": ["Shadow Tag"]
+ }
+ ]
+ },
+ "girafarig": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "hiddenpowerfighting", "hypervoice", "psychic", "psyshock", "substitute", "thunderbolt"],
+ "abilities": ["Sap Sipper"]
+ }
+ ]
+ },
+ "forretress": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "rapidspin", "spikes", "stealthrock", "toxic", "voltswitch"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "dunsparce": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "glare", "headbutt", "roost"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "coil", "earthquake", "roost"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "gligar": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "roost", "stealthrock", "taunt", "toxic", "uturn"],
+ "abilities": ["Immunity"]
+ }
+ ]
+ },
+ "steelix": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "ironhead", "roar", "rockslide", "stealthrock", "toxic"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Steel"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "heavyslam", "protect", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "granbull": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "crunch", "healbell", "return", "thunderwave"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "qwilfish": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "scizor": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbite", "bulletpunch", "roost", "superpower", "swordsdance"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletpunch", "pursuit", "superpower", "uturn"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "shuckle": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "knockoff", "protect", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "heracross": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "facade", "megahorn", "nightslash"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "megahorn", "nightslash", "stoneedge"],
+ "abilities": ["Moxie"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "ursaring": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "crunch", "facade", "protect"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "crunch", "facade", "swordsdance"],
+ "abilities": ["Quick Feet"]
+ }
+ ]
+ },
+ "magcargo": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerrock", "lavaplume", "recover", "stealthrock", "toxic"],
+ "abilities": ["Flame Body"]
+ }
+ ]
+ },
+ "corsola": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["powergem", "recover", "scald", "stealthrock", "toxic"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "octillery": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["energyball", "fireblast", "hydropump", "icebeam", "thunderwave"],
+ "abilities": ["Sniper"]
+ }
+ ]
+ },
+ "delibird": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "iceshard", "rapidspin", "seismictoss", "toxic"],
+ "abilities": ["Insomnia", "Vital Spirit"]
+ }
+ ]
+ },
+ "mantine": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["airslash", "rest", "scald", "sleeptalk", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "hydropump", "icebeam", "raindance"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "skarmory": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["bravebird", "roost", "spikes", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "houndoom": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "fireblast", "hiddenpowergrass", "nastyplot", "suckerpunch"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "kingdra": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["dragondance", "outrage", "rest", "substitute", "waterfall"],
+ "abilities": ["Sniper", "Swift Swim"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "donphan": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["earthquake", "iceshard", "rapidspin", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "gunkshot", "iceshard", "stealthrock", "stoneedge"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "porygon2": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"],
+ "abilities": ["Download", "Trace"]
+ }
+ ]
+ },
+ "stantler": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "hypnosis", "jumpkick", "megahorn", "suckerpunch", "thunderwave"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "smeargle": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["memento", "spikes", "spore", "stealthrock", "whirlwind"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "hitmontop": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "miltank": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"],
+ "abilities": ["Sap Sipper", "Thick Fat"]
+ }
+ ]
+ },
+ "blissey": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "raikou": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aurasphere", "hiddenpowerice", "thunderbolt", "voltswitch"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "entei": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bulldoze", "extremespeed", "flareblitz", "stoneedge"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["extremespeed", "flareblitz", "hiddenpowergrass", "stoneedge"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "suicune": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "rest", "scald", "sleeptalk"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hydropump", "icebeam", "rest", "scald", "substitute"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["calmmind", "protect", "scald", "substitute"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "tyranitar": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge", "superpower"],
+ "abilities": ["Sand Stream"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "lugia": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aeroblast", "earthquake", "roost", "substitute", "toxic", "whirlwind"],
+ "abilities": ["Multiscale"]
+ }
+ ]
+ },
+ "hooh": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "earthquake", "roost", "sacredfire", "substitute", "toxic"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "celebi": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthpower", "gigadrain", "leafstorm", "nastyplot", "psychic", "uturn"],
+ "abilities": ["Natural Cure"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["leafstorm", "nastyplot", "psychic", "recover"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "sceptile": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "earthquake", "leafblade", "swordsdance"],
+ "abilities": ["Unburden"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "blaziken": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["flareblitz", "highjumpkick", "protect", "stoneedge", "swordsdance"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["fireblast", "highjumpkick", "protect", "stoneedge"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "swampert": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "icebeam", "roar", "scald", "stealthrock", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "mightyena": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crunch", "doubleedge", "firefang", "suckerpunch", "taunt"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "linoone": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"],
+ "abilities": ["Quick Feet"]
+ }
+ ]
+ },
+ "beautifly": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbuzz", "hiddenpowerground", "psychic", "quiverdance"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "dustox": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbuzz", "hiddenpowerground", "quiverdance", "roost", "sludgebomb"],
+ "abilities": ["Shield Dust"]
+ }
+ ]
+ },
+ "ludicolo": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["gigadrain", "hydropump", "icebeam", "raindance"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["gigadrain", "hydropump", "icebeam", "scald"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "shiftry": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "hiddenpowerfire", "leafstorm", "naturepower", "suckerpunch"],
+ "abilities": ["Chlorophyll", "Early Bird"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["naturepower", "seedbomb", "suckerpunch", "swordsdance"],
+ "abilities": ["Chlorophyll", "Early Bird"]
+ }
+ ]
+ },
+ "swellow": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "facade", "protect", "uturn"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "facade", "quickattack", "uturn"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "pelipper": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hurricane", "roost", "scald", "toxic", "uturn"],
+ "abilities": ["Rain Dish"]
+ }
+ ]
+ },
+ "gardevoir": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "healingwish", "psychic", "shadowball", "thunderbolt", "trick"],
+ "abilities": ["Trace"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "shadowball", "substitute", "willowisp"],
+ "abilities": ["Trace"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "masquerain": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "bugbuzz", "hydropump", "quiverdance", "roost"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "breloom": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletseed", "machpunch", "spore", "stoneedge", "swordsdance"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focuspunch", "spore", "stoneedge", "substitute"],
+ "abilities": ["Poison Heal"]
+ }
+ ]
+ },
+ "vigoroth": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "bulkup", "earthquake", "nightslash", "return", "slackoff"],
+ "abilities": ["Vital Spirit"]
+ }
+ ]
+ },
+ "slaking": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "gigaimpact", "nightslash", "retaliate"],
+ "abilities": ["Truant"]
+ }
+ ]
+ },
+ "ninjask": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "nightslash", "swordsdance", "uturn", "xscissor"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aerialace", "substitute", "swordsdance", "xscissor"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "shedinja": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"],
+ "abilities": ["Wonder Guard"]
+ }
+ ]
+ },
+ "exploud": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["fireblast", "focusblast", "hypervoice", "icebeam", "surf"],
+ "abilities": ["Scrappy"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["doubleedge", "earthquake", "facade", "lowkick"],
+ "abilities": ["Scrappy"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "fireblast", "focusblast", "return", "surf", "workup"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "hariyama": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bulletpunch", "closecombat", "facade", "fakeout", "stoneedge"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "bulletpunch", "closecombat", "earthquake", "stoneedge"],
+ "abilities": ["Thick Fat"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "delcatty": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["doubleedge", "fakeout", "healbell", "suckerpunch", "thunderwave", "toxic"],
+ "abilities": ["Wonder Skin"]
+ }
+ ]
+ },
+ "sableye": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["foulplay", "recover", "taunt", "willowisp"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["recover", "seismictoss", "taunt", "toxic", "willowisp"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "mawile": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["firefang", "ironhead", "suckerpunch", "swordsdance", "thunderpunch"],
+ "abilities": ["Intimidate", "Sheer Force"],
+ "preferredTypes": ["Fire"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "ironhead", "stealthrock", "suckerpunch", "thunderpunch"],
+ "abilities": ["Intimidate", "Sheer Force"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "aggron": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "rockpolish", "stealthrock", "thunderwave"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "medicham": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletpunch", "highjumpkick", "icepunch", "trick", "zenheadbutt"],
+ "abilities": ["Pure Power"]
+ }
+ ]
+ },
+ "manectric": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["flamethrower", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "plusle": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
+ "abilities": ["Plus"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"],
+ "abilities": ["Plus"]
+ }
+ ]
+ },
+ "minun": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
+ "abilities": ["Minus"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"],
+ "abilities": ["Minus"]
+ }
+ ]
+ },
+ "volbeat": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "roost", "thunderwave", "uturn"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "illumise": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bugbuzz", "encore", "roost", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "swalot": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "encore", "icebeam", "painsplit", "sludgebomb", "toxic", "yawn"],
+ "abilities": ["Liquid Ooze"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "sludgebomb", "toxic"],
+ "abilities": ["Liquid Ooze"]
+ }
+ ]
+ },
+ "sharpedo": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["crunch", "earthquake", "hydropump", "icebeam", "protect"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "wailord": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "waterspout"],
+ "abilities": ["Water Veil"]
+ }
+ ]
+ },
+ "camerupt": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "lavaplume", "roar", "stealthrock", "toxic"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "torkoal": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "lavaplume", "rapidspin", "stealthrock", "yawn"],
+ "abilities": ["White Smoke"]
+ }
+ ]
+ },
+ "grumpig": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["focusblast", "healbell", "psychic", "thunderwave", "toxic", "whirlwind"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "shadowball", "trick"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "spinda": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["feintattack", "rapidspin", "return", "suckerpunch", "superpower"],
+ "abilities": ["Contrary"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "flygon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "outrage", "stoneedge", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "earthquake", "fireblast", "roost", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "cacturne": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "focusblast", "gigadrain", "spikes", "suckerpunch"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drainpunch", "seedbomb", "suckerpunch", "swordsdance"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "altaria": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["dragondance", "earthquake", "outrage", "roost"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "earthquake", "fireblast", "haze", "healbell", "roost", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "zangoose": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "facade", "nightslash", "quickattack", "swordsdance"],
+ "abilities": ["Toxic Boost"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "seviper": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "flamethrower", "gigadrain", "sludgebomb", "suckerpunch", "switcheroo"],
+ "abilities": ["Shed Skin"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "lunatone": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "icebeam", "moonlight", "psychic", "rockpolish"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthpower", "hiddenpowerrock", "moonlight", "psychic", "stealthrock", "toxic"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "moonlight", "psychic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "solrock": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "morningsun", "stealthrock", "stoneedge", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "whiscash": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"],
+ "abilities": ["Anticipation", "Hydration"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "scald", "toxic"],
+ "abilities": ["Anticipation", "Hydration"]
+ }
+ ]
+ },
+ "crawdaunt": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "dragondance", "superpower", "waterfall"],
+ "abilities": ["Adaptability"]
+ }
+ ]
+ },
+ "claydol": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "cradily": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "earthquake", "recover", "seedbomb", "stoneedge", "swordsdance"],
+ "abilities": ["Storm Drain"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "gigadrain", "recover", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Storm Drain"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "armaldo": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["earthquake", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquatail", "earthquake", "stealthrock", "stoneedge", "swordsdance", "xscissor"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ }
+ ]
+ },
+ "milotic": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["dragontail", "haze", "icebeam", "recover", "scald", "toxic"],
+ "abilities": ["Marvel Scale"]
+ }
+ ]
+ },
+ "castform": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "icebeam", "return", "scald", "thunderbolt", "thunderwave"],
+ "abilities": ["Forecast"]
+ }
+ ]
+ },
+ "kecleon": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["foulplay", "recover", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Color Change"]
+ }
+ ]
+ },
+ "banette": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerfighting", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"],
+ "abilities": ["Cursed Body", "Frisk", "Insomnia"]
+ }
+ ]
+ },
+ "dusclops": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "seismictoss", "sleeptalk", "willowisp"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "tropius": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["airslash", "leechseed", "protect", "substitute"],
+ "abilities": ["Harvest"]
+ }
+ ]
+ },
+ "chimecho": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "hiddenpowerfighting", "psychic", "recover", "thunderwave", "toxic"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "psyshock", "recover", "signalbeam"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "absol": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["nightslash", "pursuit", "suckerpunch", "superpower", "zenheadbutt"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["nightslash", "suckerpunch", "superpower", "swordsdance"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "glalie": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "icebeam", "spikes", "superfang", "taunt"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "walrein": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "icebeam", "roar", "superfang", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "huntail": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["icebeam", "return", "shellsmash", "suckerpunch", "waterfall"],
+ "abilities": ["Swift Swim", "Water Veil"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "gorebyss": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "relicanth": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall", "yawn"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "headsmash", "rockpolish", "waterfall"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "luvdisc": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "scald", "substitute", "toxic"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "salamence": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "fireblast", "outrage", "roost"],
+ "abilities": ["Intimidate", "Moxie"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "metagross": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "earthquake", "meteormash", "thunderpunch", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulletpunch", "earthquake", "explosion", "icepunch", "meteormash", "stealthrock", "thunderpunch", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "regirock": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "drainpunch", "rest", "stoneedge"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["drainpunch", "earthquake", "stealthrock", "stoneedge", "thunderwave", "toxic"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["drainpunch", "earthquake", "protect", "rockslide", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "regice": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focusblast", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Electric"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "icebeam", "rockpolish", "thunderbolt"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "registeel": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "ironhead", "rest", "sleeptalk"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "latias": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "latios": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "kyogre": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "surf", "thunder", "waterspout"],
+ "abilities": ["Drizzle"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "icebeam", "rest", "sleeptalk", "surf", "thunder"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "groudon": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "earthquake", "lavaplume", "stealthrock", "stoneedge", "thunderwave"],
+ "abilities": ["Drought"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "firepunch", "rockpolish", "stoneedge", "swordsdance"],
+ "abilities": ["Drought"]
+ }
+ ]
+ },
+ "rayquaza": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dracometeor", "earthquake", "extremespeed", "outrage", "vcreate"],
+ "abilities": ["Air Lock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "extremespeed", "outrage", "vcreate"],
+ "abilities": ["Air Lock"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "extremespeed", "outrage", "swordsdance", "vcreate"],
+ "abilities": ["Air Lock"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "jirachi": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "deoxys": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "extremespeed", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["darkpulse", "icebeam", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysattack": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "extremespeed", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["darkpulse", "icebeam", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysdefense": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysspeed": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["psychoboost", "spikes", "stealthrock", "superpower", "taunt"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "torterra": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "infernape": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"],
+ "abilities": ["Blaze", "Iron Fist"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"],
+ "abilities": ["Blaze", "Iron Fist"]
+ }
+ ]
+ },
+ "empoleon": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "scald", "stealthrock", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "roar", "scald", "stealthrock", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "grassknot", "hydropump", "icebeam"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "staraptor": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "closecombat", "doubleedge", "quickattack", "uturn"],
+ "abilities": ["Reckless"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "bibarel": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["quickattack", "return", "waterfall", "workup"],
+ "abilities": ["Simple"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "quickattack", "return", "waterfall"],
+ "abilities": ["Simple"]
+ }
+ ]
+ },
+ "kricketune": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aerialace", "brickbreak", "bugbite", "nightslash", "swordsdance"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "luxray": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "facade", "superpower", "wildcharge"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "icefang", "superpower", "voltswitch", "wildcharge"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "roserade": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["gigadrain", "hiddenpowerground", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "rampardos": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "firepunch", "rockpolish", "rockslide", "zenheadbutt"],
+ "abilities": ["Sheer Force"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "firepunch", "headsmash", "rockslide"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "bastiodon": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["metalburst", "roar", "rockblast", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["metalburst", "protect", "roar", "rockblast", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "wormadam": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "signalbeam", "synthesis", "toxic"],
+ "abilities": ["Anticipation", "Overcoat"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "psychic", "signalbeam"],
+ "abilities": ["Anticipation", "Overcoat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "hiddenpowerground", "protect", "toxic"],
+ "abilities": ["Anticipation", "Overcoat"]
+ }
+ ]
+ },
+ "wormadamsandy": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "stealthrock", "suckerpunch", "toxic"],
+ "abilities": ["Anticipation"]
+ }
+ ]
+ },
+ "wormadamtrash": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["flashcannon", "protect", "stealthrock", "suckerpunch", "toxic"],
+ "abilities": ["Anticipation"]
+ }
+ ]
+ },
+ "mothim": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "quiverdance", "substitute"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "vespiquen": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["acrobatics", "roost", "toxic", "uturn"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "pachirisu": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["superfang", "thunderbolt", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Volt Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "floatzel": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "crunch", "icepunch", "lowkick", "switcheroo", "waterfall"],
+ "abilities": ["Water Veil"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "crunch", "icepunch", "lowkick", "substitute", "waterfall"],
+ "abilities": ["Water Veil"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "cherrim": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["gigadrain", "healingwish", "hiddenpowerfire", "hiddenpowerrock", "morningsun", "naturepower"],
+ "abilities": ["Flower Gift"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "gigadrain", "leechseed", "morningsun", "naturepower", "toxic"],
+ "abilities": ["Flower Gift"]
+ }
+ ]
+ },
+ "gastrodon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"],
+ "abilities": ["Storm Drain"]
+ }
+ ]
+ },
+ "ambipom": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "lowkick", "payback", "pursuit", "return", "uturn"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "drifblim": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["acrobatics", "destinybond", "disable", "shadowball", "substitute", "willowisp"],
+ "abilities": ["Unburden"]
+ }
+ ]
+ },
+ "lopunny": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["healingwish", "icepunch", "jumpkick", "return", "switcheroo"],
+ "abilities": ["Limber"]
+ }
+ ]
+ },
+ "mismagius": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["destinybond", "hiddenpowerfighting", "painsplit", "shadowball", "substitute", "taunt", "willowisp"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "thunderbolt", "trick"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "honchkrow": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"],
+ "abilities": ["Moxie"]
+ }
+ ]
+ },
+ "purugly": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["fakeout", "hypnosis", "return", "shadowclaw", "uturn"],
+ "abilities": ["Defiant", "Thick Fat"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["honeclaws", "hypnosis", "irontail", "return"],
+ "abilities": ["Defiant", "Thick Fat"]
+ }
+ ]
+ },
+ "skuntank": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"],
+ "abilities": ["Aftermath"]
+ }
+ ]
+ },
+ "bronzong": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "hypnosis", "psychic", "stealthrock", "toxic"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "psychic", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "chatot": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["chatter", "heatwave", "hiddenpowerground", "hypervoice", "nastyplot", "uturn"],
+ "abilities": ["Tangled Feet"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["chatter", "heatwave", "hiddenpowerground", "hypervoice", "nastyplot", "substitute"],
+ "abilities": ["Tangled Feet"]
+ }
+ ]
+ },
+ "spiritomb": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["foulplay", "painsplit", "pursuit", "suckerpunch", "willowisp"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "garchomp": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["earthquake", "fireblast", "outrage", "stealthrock", "stoneedge"],
+ "abilities": ["Rough Skin"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "lucario": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "crunch", "extremespeed", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "hippowdon": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "drapion": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquatail", "crunch", "earthquake", "poisonjab", "pursuit", "swordsdance"],
+ "abilities": ["Battle Armor"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["crunch", "earthquake", "poisonjab", "taunt", "toxicspikes", "whirlwind"],
+ "abilities": ["Battle Armor"]
+ }
+ ]
+ },
+ "toxicroak": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drainpunch", "earthquake", "icepunch", "poisonjab", "substitute", "suckerpunch", "swordsdance"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "carnivine": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "powerwhip", "sleeppowder", "synthesis"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "lumineon": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "scald", "toxic", "uturn"],
+ "abilities": ["Storm Drain"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "scald", "toxic", "uturn"],
+ "abilities": ["Storm Drain"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowergrass", "icebeam", "scald", "toxic"],
+ "abilities": ["Storm Drain"]
+ }
+ ]
+ },
+ "abomasnow": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blizzard", "earthquake", "iceshard", "woodhammer"],
+ "abilities": ["Snow Warning"]
+ }
+ ]
+ },
+ "weavile": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icepunch", "iceshard", "lowkick", "nightslash", "pursuit", "swordsdance"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "magnezone": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["flashcannon", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerice", "thunderbolt", "voltswitch"],
+ "abilities": ["Magnet Pull"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["hiddenpowerice", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Analytic"]
+ }
+ ]
+ },
+ "lickilicky": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "healbell", "protect", "toxic", "wish"],
+ "abilities": ["Cloud Nine"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "earthquake", "explosion", "powerwhip", "return", "swordsdance"],
+ "abilities": ["Cloud Nine"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "rhyperior": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stoneedge", "swordsdance"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "tangrowth": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "hiddenpowerfire", "leafstorm", "leechseed", "morningsun", "powerwhip", "rockslide", "sleeppowder"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "hiddenpowerfire", "leafstorm", "powerwhip", "rockslide", "sleeppowder"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "electivire": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"],
+ "abilities": ["Motor Drive"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "magmortar": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowerice", "taunt", "thunderbolt"],
+ "abilities": ["Flame Body", "Vital Spirit"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "togekiss": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["airslash", "aurasphere", "nastyplot", "roost", "thunderwave"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "healbell", "roost", "thunderwave"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "aurasphere", "fireblast", "trick"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "yanmega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "protect"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["airslash", "bugbuzz", "gigadrain", "uturn"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "leafeon": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "leafblade", "swordsdance", "synthesis", "xscissor"],
+ "abilities": ["Chlorophyll"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "glaceon": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"],
+ "abilities": ["Ice Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "toxic", "wish"],
+ "abilities": ["Ice Body"]
+ }
+ ]
+ },
+ "gliscor": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "protect", "substitute", "toxic"],
+ "abilities": ["Poison Heal"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "facade", "roost", "stealthrock", "stoneedge", "taunt", "toxic", "uturn"],
+ "abilities": ["Poison Heal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "facade", "roost", "swordsdance"],
+ "abilities": ["Poison Heal"]
+ }
+ ]
+ },
+ "mamoswine": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "iceshard", "iciclecrash", "stealthrock"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "iceshard", "iciclecrash", "stoneedge", "superpower"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "porygonz": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "hiddenpowerfighting", "icebeam", "nastyplot", "thunderbolt", "triattack", "trick"],
+ "abilities": ["Adaptability", "Download"]
+ }
+ ]
+ },
+ "gallade": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "nightslash", "shadowsneak", "swordsdance", "trick", "zenheadbutt"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "probopass": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "powergem", "stealthrock", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Magnet Pull"]
+ }
+ ]
+ },
+ "dusknoir": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "icepunch", "painsplit", "shadowsneak", "toxic", "trick", "willowisp"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "shadowsneak", "toxic"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "froslass": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave"],
+ "abilities": ["Cursed Body"]
+ }
+ ]
+ },
+ "rotom": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomheat": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerice", "overheat", "painsplit", "thunderbolt", "thunderwave", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomwash": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hydropump", "painsplit", "thunderbolt", "thunderwave", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomfrost": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blizzard", "painsplit", "substitute", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomfan": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "painsplit", "substitute", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotommow": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerice", "leafstorm", "painsplit", "thunderbolt", "thunderwave", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "uxie": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "psychic", "stealthrock", "thunderwave", "uturn", "yawn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "mesprit": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "healingwish", "hiddenpowerfighting", "icebeam", "psychic", "psyshock", "signalbeam", "thunderbolt", "trick", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["hiddenpowerfighting", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "azelf": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fireblast", "nastyplot", "psychic", "psyshock", "signalbeam", "thunderbolt", "trick", "uturn"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Fire"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["explosion", "fireblast", "psychic", "stealthrock", "taunt", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "dialga": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aurasphere", "dracometeor", "dragontail", "fireblast", "stealthrock", "thunderbolt", "toxic"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "palkia": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "heatran": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthpower", "eruption", "fireblast", "hiddenpowerice"],
+ "abilities": ["Flash Fire"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "fireblast", "hiddenpowerice", "lavaplume", "roar", "stealthrock", "toxic"],
+ "abilities": ["Flash Fire"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthpower", "magmastorm", "protect", "toxic"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "regigigas": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "return", "substitute", "thunderwave"],
+ "abilities": ["Slow Start"]
+ }
+ ]
+ },
+ "giratina": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["dragonpulse", "dragontail", "rest", "sleeptalk", "willowisp"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "giratinaorigin": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "cresselia": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hiddenpowerfighting", "moonlight", "psyshock", "signalbeam"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["hiddenpowerfighting", "moonlight", "psychic", "thunderwave", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "phione": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["raindance", "rest", "scald", "toxic"],
+ "abilities": ["Hydration"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "icebeam", "scald", "toxic", "uturn"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "manaphy": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["energyball", "icebeam", "surf", "tailglow"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "darkrai": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["darkpulse", "darkvoid", "focusblast", "nastyplot"],
+ "abilities": ["Bad Dreams"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["darkpulse", "darkvoid", "nastyplot", "substitute"],
+ "abilities": ["Bad Dreams"]
+ }
+ ]
+ },
+ "shaymin": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["airslash", "earthpower", "leechseed", "seedflare", "substitute", "synthesis"],
+ "abilities": ["Natural Cure"],
+ "preferredTypes": ["Flying"]
+ }
+ ]
+ },
+ "shayminsky": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "arceus": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceusbug": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "judgment"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusdark": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "focusblast", "judgment", "recover", "refresh"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusdragon": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "outrage", "recover", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover", "refresh"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceuselectric": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfighting": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "darkpulse", "icebeam", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfire": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "judgment", "recover", "thunderbolt"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusflying": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover", "refresh"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusghost": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "focusblast", "judgment", "recover", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusgrass": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "judgment"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusground": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusice": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceuspoison": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "fireblast", "recover", "sludgebomb"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "fireblast", "icebeam", "recover", "sludgebomb", "stealthrock", "willowisp"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceuspsychic": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "darkpulse", "focusblast", "judgment", "recover"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "arceusrock": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceussteel": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceuswater": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "victini": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["boltstrike", "uturn", "vcreate", "zenheadbutt"],
+ "abilities": ["Victory Star"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["boltstrike", "energyball", "focusblast", "psychic", "trick", "uturn", "vcreate"],
+ "abilities": ["Victory Star"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "serperior": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aromatherapy", "dragonpulse", "gigadrain", "glare", "hiddenpowerfire", "leechseed", "substitute"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "dragonpulse", "gigadrain", "hiddenpowerfire", "substitute"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquatail", "leafblade", "return", "swordsdance"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "emboar": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "flareblitz", "headsmash", "superpower", "wildcharge"],
+ "abilities": ["Blaze"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "fireblast", "grassknot", "superpower", "wildcharge"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "samurott": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "megahorn", "superpower"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquajet", "megahorn", "superpower", "swordsdance", "waterfall"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "watchog": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "hypnosis", "return", "superfang"],
+ "abilities": ["Analytic"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "hypnosis", "lowkick", "return", "substitute", "swordsdance"],
+ "abilities": ["Analytic"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "stoutland": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "return", "superpower", "thunderwave", "wildcharge"],
+ "abilities": ["Scrappy"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "liepard": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["darkpulse", "encore", "hiddenpowerfighting", "nastyplot", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "simisage": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "leafstorm", "rockslide", "superpower"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "gigadrain", "hiddenpowerrock", "nastyplot", "substitute"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "simisear": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["fireblast", "focusblast", "grassknot", "hiddenpowerrock", "nastyplot", "substitute"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "simipour": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hydropump", "icebeam", "nastyplot", "substitute"],
+ "abilities": ["Torrent"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "musharna": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "hiddenpowerfighting", "moonlight", "psychic", "signalbeam", "thunderwave", "toxic"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hiddenpowerfighting", "moonlight", "psyshock", "signalbeam"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "unfezant": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["hypnosis", "pluck", "return", "roost", "toxic", "uturn"],
+ "abilities": ["Super Luck"]
+ }
+ ]
+ },
+ "zebstrika": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "overheat", "voltswitch", "wildcharge"],
+ "abilities": ["Sap Sipper"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "gigalith": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower", "toxic"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "swoobat": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "heatwave", "roost", "storedpower"],
+ "abilities": ["Simple"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "calmmind", "heatwave", "roost", "storedpower"],
+ "abilities": ["Simple"]
+ }
+ ]
+ },
+ "excadrill": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Spinner",
+ "movepool": ["earthquake", "ironhead", "rapidspin", "swordsdance"],
+ "abilities": ["Mold Breaker", "Sand Rush"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "ironhead", "rockslide", "swordsdance"],
+ "abilities": ["Mold Breaker", "Sand Rush"]
+ }
+ ]
+ },
+ "audino": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["doubleedge", "healbell", "protect", "toxic", "wish"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "conkeldurr": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "thunderpunch"],
+ "abilities": ["Iron Fist"]
+ }
+ ]
+ },
+ "seismitoad": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hydropump", "raindance", "sludgewave"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "scald", "sludgebomb", "stealthrock", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "scald", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "throh": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulkup", "circlethrow", "payback", "rest", "sleeptalk"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "sawk": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulkup", "closecombat", "earthquake", "icepunch", "stoneedge"],
+ "abilities": ["Mold Breaker", "Sturdy"]
+ }
+ ]
+ },
+ "leavanny": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["leafblade", "return", "swordsdance", "xscissor"],
+ "abilities": ["Chlorophyll", "Swarm"]
+ }
+ ]
+ },
+ "scolipede": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "megahorn", "rockslide", "spikes", "swordsdance", "toxicspikes"],
+ "abilities": ["Swarm"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "whimsicott": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["encore", "gigadrain", "stunspore", "taunt", "toxic", "uturn"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["hurricane", "leechseed", "protect", "substitute"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "lilligant": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "quiverdance", "sleeppowder"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerfire", "hiddenpowerrock", "petaldance", "quiverdance", "sleeppowder"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "basculin": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "crunch", "superpower", "waterfall", "zenheadbutt"],
+ "abilities": ["Adaptability"]
+ }
+ ]
+ },
+ "krookodile": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crunch", "earthquake", "pursuit", "stealthrock", "stoneedge", "superpower"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "darmanitan": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "maractus": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["gigadrain", "hiddenpowerfire", "spikes", "synthesis", "toxic"],
+ "abilities": ["Storm Drain", "Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "protect"],
+ "abilities": ["Storm Drain", "Water Absorb"]
+ }
+ ]
+ },
+ "crustle": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "shellsmash", "stoneedge", "xscissor"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "scrafty": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "dragondance", "highjumpkick", "stoneedge", "zenheadbutt"],
+ "abilities": ["Intimidate", "Moxie"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bulkup", "crunch", "drainpunch", "rest"],
+ "abilities": ["Shed Skin"]
+ }
+ ]
+ },
+ "sigilyph": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "calmmind", "heatwave", "psyshock", "roost"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["airslash", "energyball", "heatwave", "icebeam", "psychic", "psyshock"],
+ "abilities": ["Tinted Lens"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["cosmicpower", "psychoshift", "roost", "storedpower"],
+ "abilities": ["Magic Guard"]
+ }
+ ]
+ },
+ "cofagrigus": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["haze", "hiddenpowerfighting", "painsplit", "shadowball", "willowisp"],
+ "abilities": ["Mummy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "trickroom"],
+ "abilities": ["Mummy"]
+ }
+ ]
+ },
+ "carracosta": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aquajet", "earthquake", "icebeam", "shellsmash", "stoneedge", "waterfall"],
+ "abilities": ["Solid Rock", "Sturdy", "Swift Swim"]
+ }
+ ]
+ },
+ "archeops": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["acrobatics", "earthquake", "roost", "stealthrock", "stoneedge", "uturn"],
+ "abilities": ["Defeatist"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "garbodor": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drainpunch", "gunkshot", "haze", "painsplit", "spikes", "toxicspikes"],
+ "abilities": ["Aftermath"]
+ }
+ ]
+ },
+ "zoroark": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "flamethrower", "focusblast", "nastyplot", "trick", "uturn"],
+ "abilities": ["Illusion"]
+ }
+ ]
+ },
+ "cinccino": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletseed", "rockblast", "tailslap", "uturn"],
+ "abilities": ["Skill Link"]
+ }
+ ]
+ },
+ "gothitelle": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "signalbeam", "thunderbolt", "trick"],
+ "abilities": ["Shadow Tag"]
+ }
+ ]
+ },
+ "reuniclus": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover", "signalbeam"],
+ "abilities": ["Magic Guard"]
+ }
+ ]
+ },
+ "swanna": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "icebeam", "roost", "scald", "toxic"],
+ "abilities": ["Hydration"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hurricane", "raindance", "rest", "surf"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "vanilluxe": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["autotomize", "explosion", "flashcannon", "hiddenpowerground", "icebeam"],
+ "abilities": ["Weak Armor"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "sawsbuck": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "hornleech", "naturepower", "return", "substitute", "swordsdance"],
+ "abilities": ["Sap Sipper"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "emolga": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["acrobatics", "encore", "roost", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Motor Drive"]
+ }
+ ]
+ },
+ "escavalier": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["ironhead", "megahorn", "pursuit", "return", "swordsdance"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "amoonguss": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["clearsmog", "foulplay", "gigadrain", "hiddenpowerground", "sludgebomb", "spore", "stunspore", "toxic"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "sludgebomb", "spore", "synthesis"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "jellicent": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "recover", "scald", "shadowball", "toxic", "willowisp"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "alomomola": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "scald", "toxic", "wish"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "galvantula": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bugbuzz", "gigadrain", "hiddenpowerice", "thunder", "voltswitch"],
+ "abilities": ["Compound Eyes"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "ferrothorn": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["gyroball", "leechseed", "powerwhip", "spikes", "stealthrock"],
+ "abilities": ["Iron Barbs"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["powerwhip", "spikes", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Iron Barbs"]
+ }
+ ]
+ },
+ "klinklang": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "eelektross": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["flamethrower", "gigadrain", "hiddenpowerice", "superpower", "thunderbolt", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["aquatail", "coil", "drainpunch", "firepunch", "wildcharge"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "beheeyem": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerfighting", "psychic", "recover", "signalbeam", "thunderbolt", "trick", "trickroom"],
+ "abilities": ["Analytic"]
+ }
+ ]
+ },
+ "chandelure": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["energyball", "fireblast", "hiddenpowerfighting", "shadowball", "trick"],
+ "abilities": ["Flash Fire"],
+ "preferredTypes": ["Grass"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "fireblast", "shadowball", "substitute"],
+ "abilities": ["Flame Body", "Flash Fire"]
+ }
+ ]
+ },
+ "haxorus": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "outrage", "superpower"],
+ "abilities": ["Mold Breaker"]
+ }
+ ]
+ },
+ "beartic": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquajet", "iciclecrash", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Swift Swim"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "cryogonal": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["haze", "hiddenpowerground", "icebeam", "rapidspin", "recover", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "accelgor": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["bugbuzz", "encore", "focusblast", "hiddenpowerground", "hiddenpowerrock", "spikes", "uturn"],
+ "abilities": ["Hydration", "Sticky Hold"]
+ }
+ ]
+ },
+ "stunfisk": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["discharge", "earthpower", "rest", "scald", "sleeptalk", "stealthrock", "toxic"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "mienshao": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "highjumpkick", "stoneedge", "substitute", "swordsdance"],
+ "abilities": ["Reckless"],
+ "preferredTypes": ["Flying"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "highjumpkick", "stoneedge", "uturn"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drainpunch", "highjumpkick", "stoneedge", "uturn"],
+ "abilities": ["Reckless"]
+ }
+ ]
+ },
+ "druddigon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "earthquake", "glare", "outrage", "stealthrock", "suckerpunch", "superpower"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "golurk": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dynamicpunch", "earthquake", "icepunch", "rockpolish", "stealthrock", "stoneedge"],
+ "abilities": ["No Guard"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "bisharp": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["ironhead", "nightslash", "pursuit", "suckerpunch"],
+ "abilities": ["Defiant"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["ironhead", "lowkick", "nightslash", "suckerpunch", "swordsdance"],
+ "abilities": ["Defiant"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "bouffalant": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "headcharge", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Reckless", "Sap Sipper"]
+ }
+ ]
+ },
+ "braviary": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "bulkup", "roost", "superpower"],
+ "abilities": ["Defiant"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "return", "superpower", "uturn"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "mandibuzz": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "foulplay", "roost", "taunt", "toxic", "whirlwind"],
+ "abilities": ["Overcoat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["foulplay", "roost", "taunt", "toxic", "whirlwind"],
+ "abilities": ["Overcoat"]
+ }
+ ]
+ },
+ "heatmor": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["fireblast", "gigadrain", "suckerpunch", "superpower"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "durant": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["honeclaws", "ironhead", "rockslide", "superpower", "xscissor"],
+ "abilities": ["Hustle"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "hydreigon": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "dracometeor", "fireblast", "focusblast", "roost", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "volcarona": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerrock", "quiverdance", "roost"],
+ "abilities": ["Flame Body"]
+ }
+ ]
+ },
+ "cobalion": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "ironhead", "stealthrock", "stoneedge", "taunt", "thunderwave", "toxic"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["closecombat", "ironhead", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "terrakion": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "quickattack", "stealthrock", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "virizion": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "tornadus": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["acrobatics", "bulkup", "superpower", "taunt"],
+ "abilities": ["Defiant"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "heatwave", "hurricane", "uturn"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "tornadustherian": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "heatwave", "hurricane", "superpower", "uturn"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "thundurus": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["hiddenpowerflying", "hiddenpowerice", "superpower", "taunt", "thunderbolt", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "thundurustherian": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "reshiram": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blueflare", "dracometeor", "flamecharge", "roost", "toxic"],
+ "abilities": ["Turboblaze"]
+ }
+ ]
+ },
+ "zekrom": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["boltstrike", "dracometeor", "outrage", "roost", "voltswitch"],
+ "abilities": ["Teravolt"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["boltstrike", "honeclaws", "outrage", "roost", "substitute"],
+ "abilities": ["Teravolt"]
+ }
+ ]
+ },
+ "landorus": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "focusblast", "psychic", "rockpolish", "rockslide", "sludgewave", "stealthrock"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "focusblast", "psychic", "rockpolish", "sludgewave"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "landorustherian": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "stealthrock", "stoneedge", "toxic", "uturn"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "rockpolish", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "kyurem": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthpower", "icebeam", "roost", "substitute"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "earthpower", "focusblast", "icebeam", "outrage", "roost", "substitute"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "kyuremblack": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "fusionbolt", "icebeam", "outrage", "roost", "substitute"],
+ "abilities": ["Teravolt"]
+ }
+ ]
+ },
+ "kyuremwhite": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dracometeor", "earthpower", "fusionflare", "icebeam", "roost"],
+ "abilities": ["Turboblaze"]
+ }
+ ]
+ },
+ "keldeo": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hiddenpowerice", "hydropump", "scald", "secretsword"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "scald", "secretsword", "substitute"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "hydropump", "scald", "secretsword"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "meloetta": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "uturn"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "relicsong", "return", "shadowclaw"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "genesect": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["blazekick", "ironhead", "shiftgear", "thunderbolt", "xscissor"],
+ "abilities": ["Download"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["blazekick", "extremespeed", "ironhead", "uturn"],
+ "abilities": ["Download"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bugbuzz", "flamethrower", "flashcannon", "icebeam", "thunderbolt", "uturn"],
+ "abilities": ["Download"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen5/teams.ts b/data/random-battles/gen5/teams.ts
new file mode 100644
index 000000000000..0454eef66335
--- /dev/null
+++ b/data/random-battles/gen5/teams.ts
@@ -0,0 +1,986 @@
+import RandomGen6Teams from '../gen6/teams';
+import {PRNG} from '../../../sim';
+import {MoveCounter} from '../gen8/teams';
+import {toID} from '../../../sim/dex';
+
+// Moves that restore HP:
+const RECOVERY_MOVES = [
+ 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'slackoff', 'softboiled', 'synthesis',
+];
+// Moves that boost Attack:
+const PHYSICAL_SETUP = [
+ 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'screech', 'swordsdance',
+];
+// Some moves that only boost Speed:
+const SPEED_SETUP = [
+ 'agility', 'autotomize', 'flamecharge', 'rockpolish',
+];
+// Conglomerate for ease of access
+const SETUP = [
+ 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'coil', 'curse', 'dragondance', 'flamecharge',
+ 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'quiverdance', 'raindance', 'rockpolish',
+ 'shellsmash', 'shiftgear', 'sunnyday', 'swordsdance', 'tailglow', 'workup',
+];
+// Moves that shouldn't be the only STAB moves:
+const NO_STAB = [
+ 'aquajet', 'bulletpunch', 'chatter', 'clearsmog', 'dragontail', 'eruption', 'explosion', 'fakeout', 'flamecharge',
+ 'futuresight', 'iceshard', 'icywind', 'incinerate', 'knockoff', 'machpunch', 'pluck', 'pursuit', 'quickattack',
+ 'rapidspin', 'reversal', 'selfdestruct', 'shadowsneak', 'skyattack', 'skydrop', 'snarl', 'suckerpunch',
+ 'uturn', 'vacuumwave', 'voltswitch', 'waterspout',
+];
+// Hazard-setting moves
+const HAZARDS = [
+ 'spikes', 'stealthrock', 'toxicspikes',
+];
+// Moves that switch the user out
+const PIVOT_MOVES = [
+ 'uturn', 'voltswitch',
+];
+
+// Moves that should be paired together when possible
+const MOVE_PAIRS = [
+ ['lightscreen', 'reflect'],
+ ['sleeptalk', 'rest'],
+ ['protect', 'wish'],
+ ['leechseed', 'substitute'],
+];
+
+/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */
+const PRIORITY_POKEMON = [
+ 'bisharp', 'breloom', 'cacturne', 'dusknoir', 'honchkrow', 'scizor', 'shedinja', 'shiftry',
+];
+
+export class RandomGen5Teams extends RandomGen6Teams {
+ randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json');
+
+ constructor(format: string | Format, prng: PRNG | PRNGSeed | null) {
+ super(format, prng);
+ this.noStab = NO_STAB;
+ this.priorityPokemon = PRIORITY_POKEMON;
+
+ this.moveEnforcementCheckers = {
+ Bug: (movePool, moves, abilities, types, counter) => (
+ !counter.get('Bug') && (movePool.includes('megahorn') || abilities.includes('Tinted Lens'))
+ ),
+ Dark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'),
+ Dragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon'),
+ Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'),
+ Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'),
+ Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'),
+ Flying: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Flying') && !['aerodactyl', 'mantine', 'murkrow'].includes(species.id) &&
+ !movePool.includes('hiddenpowerflying')
+ ),
+ Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'),
+ Grass: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Grass') && (species.baseStats.atk >= 100 || movePool.includes('leafstorm'))
+ ),
+ Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'),
+ Ice: (movePool, moves, abilities, types, counter) => !counter.get('Ice'),
+ Poison: (movePool, moves, abilities, types, counter) => (
+ !counter.get('Poison') && (types.has('Grass') || types.has('Ground'))
+ ),
+ Psychic: (movePool, moves, abilities, types, counter) => (
+ !counter.get('Psychic') && (types.has('Fighting') || movePool.includes('calmmind'))
+ ),
+ Rock: (movePool, moves, abilities, types, counter, species) => (!counter.get('Rock') && species.baseStats.atk >= 80),
+ Steel: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Steel') && ['aggron', 'metagross'].includes(species.id)
+ ),
+ Water: (movePool, moves, abilities, types, counter) => !counter.get('Water'),
+ };
+ // Nature Power is Earthquake this gen
+ this.cachedStatusMoves = this.dex.moves.all()
+ .filter(move => move.category === 'Status' && move.id !== 'naturepower')
+ .map(move => move.id);
+ }
+
+ cullMovePool(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): void {
+ // Pokemon cannot have multiple Hidden Powers in any circumstance
+ let hasHiddenPower = false;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hasHiddenPower = true;
+ }
+ if (hasHiddenPower) {
+ let movePoolHasHiddenPower = true;
+ while (movePoolHasHiddenPower) {
+ movePoolHasHiddenPower = false;
+ for (const moveid of movePool) {
+ if (moveid.startsWith('hiddenpower')) {
+ this.fastPop(movePool, movePool.indexOf(moveid));
+ movePoolHasHiddenPower = true;
+ break;
+ }
+ }
+ }
+ }
+
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
+ if (moves.size === this.maxMoveCount - 2) {
+ const unpairedMoves = [...movePool];
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
+ }
+ }
+ if (unpairedMoves.length === 1) {
+ this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
+ }
+ }
+
+ // These moves are paired, and shouldn't appear if there is not room for them both.
+ if (moves.size === this.maxMoveCount - 1) {
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(movePool, movePool.indexOf(pair[0]));
+ this.fastPop(movePool, movePool.indexOf(pair[1]));
+ }
+ }
+ }
+
+ // Team-based move culls
+ if (teamDetails.screens && movePool.length >= this.maxMoveCount + 2) {
+ if (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect'));
+ if (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.stealthRock) {
+ if (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.rapidSpin) {
+ if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.toxicSpikes) {
+ if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.spikes && teamDetails.spikes >= 2) {
+ if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.statusCure) {
+ if (movePool.includes('aromatherapy')) this.fastPop(movePool, movePool.indexOf('aromatherapy'));
+ if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+
+ // Develop additional move lists
+ const badWithSetup = ['healbell', 'pursuit', 'toxic'];
+ const statusMoves = this.cachedStatusMoves;
+
+ // General incompatibilities
+ const incompatiblePairs = [
+ // These moves don't mesh well with other aspects of the set
+ [statusMoves, ['healingwish', 'switcheroo', 'trick']],
+ [SETUP, PIVOT_MOVES],
+ [SETUP, HAZARDS],
+ [SETUP, badWithSetup],
+ [PHYSICAL_SETUP, PHYSICAL_SETUP],
+ [['fakeout', 'uturn'], ['switcheroo', 'trick']],
+ ['substitute', PIVOT_MOVES],
+ ['rest', 'substitute'],
+
+ // These attacks are redundant with each other
+ ['psychic', 'psyshock'],
+ [['scald', 'surf'], 'hydropump'],
+ [['bodyslam', 'return'], ['bodyslam', 'doubleedge']],
+ [['gigadrain', 'leafstorm'], ['leafstorm', 'petaldance', 'powerwhip']],
+ [['drainpunch', 'focusblast'], ['closecombat', 'highjumpkick', 'superpower']],
+ ['payback', 'pursuit'],
+
+ // Assorted hardcodes go here:
+ // Zebstrika
+ ['wildcharge', 'thunderbolt'],
+ // Manectric
+ ['flamethrower', 'overheat'],
+ // Meganium
+ ['leechseed', 'dragontail'],
+ // Volcarona and Heatran
+ [['fierydance', 'lavaplume'], 'fireblast'],
+ // Walrein
+ ['encore', 'roar'],
+ // Lunatone
+ ['moonlight', 'rockpolish'],
+ // Smeargle
+ ['memento', 'whirlwind'],
+ // Seviper
+ ['switcheroo', 'suckerpunch'],
+ // Jirachi
+ ['bodyslam', 'healingwish'],
+ // Shuckle
+ ['knockoff', 'protect'],
+ ];
+
+ for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
+
+ if (species.id === 'dugtrio') this.incompatibleMoves(moves, movePool, statusMoves, 'memento');
+
+ const statusInflictingMoves = ['stunspore', 'thunderwave', 'toxic', 'willowisp', 'yawn'];
+ if (!abilities.includes('Prankster') && role !== 'Staller') {
+ this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves);
+ }
+
+ if (abilities.includes('Guts')) this.incompatibleMoves(moves, movePool, 'protect', 'swordsdance');
+
+ // Cull filler moves for otherwise fixed set Stealth Rock users
+ if (!teamDetails.stealthRock) {
+ if (species.id === 'registeel' && role === 'Staller') {
+ if (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (species.baseSpecies === 'Wormadam' && role === 'Staller') {
+ if (movePool.includes('suckerpunch')) this.fastPop(movePool, movePool.indexOf('suckerpunch'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ }
+ }
+
+ // Generate random moveset for a given species, role, preferred type.
+ randomMoveset(
+ types: string[],
+ abilities: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ movePool: string[],
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): Set {
+ const moves = new Set();
+ let counter = this.newQueryMoves(moves, species, preferredType, abilities);
+ this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead,
+ preferredType, role);
+
+ // If there are only four moves, add all moves and return early
+ if (movePool.length <= this.maxMoveCount) {
+ // Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased)
+ while (movePool.length) {
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ return moves;
+ }
+
+ const runEnforcementChecker = (checkerName: string) => {
+ if (!this.moveEnforcementCheckers[checkerName]) return false;
+ return this.moveEnforcementCheckers[checkerName](
+ movePool, moves, abilities, new Set(types), counter, species, teamDetails
+ );
+ };
+
+ // Add required move (e.g. Relic Song for Meloetta-P)
+ if (species.requiredMove) {
+ const move = this.dex.moves.get(species.requiredMove).id;
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Add other moves you really want to have, e.g. STAB, recovery, setup.
+
+ // Enforce Facade if Guts is a possible ability
+ if (movePool.includes('facade') && abilities.includes('Guts')) {
+ counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Enforce Seismic Toss and Spore
+ for (const moveid of ['seismictoss', 'spore']) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Thunder Wave on Prankster users
+ if (movePool.includes('thunderwave') && abilities.includes('Prankster')) {
+ counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Enforce hazard removal on Bulky Support and Spinner if the team doesn't already have it
+ if (['Bulky Support', 'Spinner'].includes(role) && !teamDetails.rapidSpin) {
+ if (movePool.includes('rapidspin')) {
+ counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce STAB priority
+ if (['Bulky Attacker', 'Bulky Setup'].includes(role) || this.priorityPokemon.includes(species.id)) {
+ const priorityMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (types.includes(moveType) && move.priority > 0 && (move.basePower || move.basePowerCallback)) {
+ priorityMoves.push(moveid);
+ }
+ }
+ if (priorityMoves.length) {
+ const moveid = this.sample(priorityMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce STAB
+ for (const type of types) {
+ // Check if a STAB move of that type should be required
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ while (runEnforcementChecker(type)) {
+ if (!stabMoves.length) break;
+ const moveid = this.sampleNoReplace(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Preferred Type
+ if (!counter.get('preferred')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && preferredType === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // If no STAB move was added, add a STAB move
+ if (!counter.get('stab')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ } else {
+ // If they have no regular STAB move, enforce U-turn on Bug types.
+ if (movePool.includes('uturn') && types.includes('Bug')) {
+ counter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce recovery
+ if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup', 'Spinner', 'Staller'].includes(role)) {
+ const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));
+ if (recoveryMoves.length) {
+ const moveid = this.sample(recoveryMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Staller moves
+ if (role === 'Staller') {
+ const enforcedMoves = ['protect', 'toxic'];
+ for (const move of enforcedMoves) {
+ if (movePool.includes(move)) {
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce setup
+ if (role.includes('Setup')) {
+ // First, try to add a non-Speed setup move
+ const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && !SPEED_SETUP.includes(moveid));
+ if (nonSpeedSetupMoves.length) {
+ const moveid = this.sample(nonSpeedSetupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ } else {
+ // No non-Speed setup moves, so add any (Speed) setup move
+ const setupMoves = movePool.filter(moveid => SETUP.includes(moveid));
+ if (setupMoves.length) {
+ const moveid = this.sample(setupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce a move not on the noSTAB list
+ if (!counter.damagingMoves.size && !(moves.has('uturn') && types.includes('Bug'))) {
+ // Choose an attacking move
+ const attackingMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);
+ }
+ if (attackingMoves.length) {
+ const moveid = this.sample(attackingMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce coverage move
+ if (['Fast Attacker', 'Setup Sweeper', 'Bulky Attacker', 'Wallbreaker'].includes(role)) {
+ if (counter.damagingMoves.size === 1) {
+ // Find the type of the current attacking move
+ const currentAttackType = counter.damagingMoves.values().next().value.type;
+ // Choose an attacking move that is of different type to the current single attack
+ const coverageMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {
+ if (currentAttackType !== moveType) coverageMoves.push(moveid);
+ }
+ }
+ if (coverageMoves.length) {
+ const moveid = this.sample(coverageMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Choose remaining moves randomly from movepool and add them to moves list:
+ while (moves.size < this.maxMoveCount && movePool.length) {
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ for (const pair of MOVE_PAIRS) {
+ if (moveid === pair[0] && movePool.includes(pair[1])) {
+ counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ if (moveid === pair[1] && movePool.includes(pair[0])) {
+ counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+ return moves;
+ }
+
+ shouldCullAbility(
+ ability: string,
+ types: Set,
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role
+ ): boolean {
+ switch (ability) {
+ case 'Chlorophyll': case 'Solar Power':
+ return !teamDetails.sun;
+ case 'Hydration': case 'Swift Swim':
+ return !teamDetails.rain;
+ case 'Iron Fist': case 'Sheer Force':
+ return !counter.get(toID(ability));
+ case 'Overgrow':
+ return !counter.get('Grass');
+ case 'Rock Head':
+ return !counter.get('recoil');
+ case 'Sand Force': case 'Sand Rush':
+ return !teamDetails.sand;
+ }
+
+ return false;
+ }
+
+
+ getAbility(
+ types: Set,
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ if (abilities.length <= 1) return abilities[0];
+
+ // Hard-code abilities here
+ if (species.id === 'marowak' && counter.get('recoil')) return 'Rock Head';
+ if (species.id === 'kingler' && counter.get('sheerforce')) return 'Sheer Force';
+ if (species.id === 'golduck' && teamDetails.rain) return 'Swift Swim';
+
+ const abilityAllowed: string[] = [];
+ // Obtain a list of abilities that are allowed (not culled)
+ for (const ability of abilities) {
+ if (!this.shouldCullAbility(
+ ability, types, moves, abilities, counter, movePool, teamDetails, species, preferredType, role
+ )) {
+ abilityAllowed.push(ability);
+ }
+ }
+
+ // Pick a random allowed ability
+ if (abilityAllowed.length >= 1) return this.sample(abilityAllowed);
+
+ // If all abilities are rejected, prioritize weather abilities over non-weather abilities
+ if (!abilityAllowed.length) {
+ const weatherAbilities = abilities.filter(
+ a => ['Chlorophyll', 'Hydration', 'Sand Force', 'Sand Rush', 'Solar Power', 'Swift Swim'].includes(a)
+ );
+ if (weatherAbilities.length) return this.sample(weatherAbilities);
+ }
+
+ // Pick a random ability
+ return this.sample(abilities);
+ }
+
+ getPriorityItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string | undefined {
+ if (species.requiredItems) return this.sample(species.requiredItems);
+ if (species.id === 'farfetchd') return 'Stick';
+ if (species.id === 'latias' || species.id === 'latios') return 'Soul Dew';
+ if (species.id === 'marowak') return 'Thick Club';
+ if (species.id === 'pikachu') return 'Light Ball';
+ if (species.id === 'shedinja' || species.id === 'smeargle') return 'Focus Sash';
+ if (species.id === 'unown') return 'Choice Specs';
+ if (species.id === 'wobbuffet') return 'Custap Berry';
+ if (ability === 'Harvest') return 'Sitrus Berry';
+ if (species.id === 'ditto') return 'Choice Scarf';
+ if (species.id === 'exploud' && role === 'Bulky Attacker') return 'Choice Band';
+ if (ability === 'Poison Heal' || moves.has('facade')) return 'Toxic Orb';
+ if (ability === 'Speed Boost' && species.id !== 'ninjask') return 'Life Orb';
+ if (species.nfe) return 'Eviolite';
+ if (['healingwish', 'memento', 'switcheroo', 'trick'].some(m => moves.has(m))) {
+ if (
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && role !== 'Wallbreaker' && !counter.get('priority')
+ ) {
+ return 'Choice Scarf';
+ } else {
+ return (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs';
+ }
+ }
+ if (moves.has('bellydrum')) return 'Sitrus Berry';
+ if (moves.has('waterspout')) return 'Choice Scarf';
+ if (moves.has('shellsmash')) return 'White Herb';
+ if (moves.has('psychoshift')) return 'Flame Orb';
+ if (ability === 'Magic Guard') return moves.has('counter') ? 'Focus Sash' : 'Life Orb';
+ if (species.id === 'rampardos' && role === 'Fast Attacker') return 'Choice Scarf';
+ if (ability === 'Sheer Force' && counter.get('sheerforce')) return 'Life Orb';
+ if (moves.has('acrobatics')) return 'Flying Gem';
+ if (species.id === 'hitmonlee' && ability === 'Unburden') return moves.has('fakeout') ? 'Normal Gem' : 'Fighting Gem';
+ if (moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';
+ if (moves.has('rest') && !moves.has('sleeptalk') && !['Natural Cure', 'Shed Skin'].includes(ability)) {
+ return (moves.has('raindance') && ability === 'Hydration') ? 'Damp Rock' : 'Chesto Berry';
+ }
+ if (role === 'Staller') return 'Leftovers';
+ }
+
+ getItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ const defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd;
+
+ const scarfReqs = (
+ role !== 'Wallbreaker' &&
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
+ !counter.get('priority') && !moves.has('pursuit')
+ );
+
+ if (
+ moves.has('pursuit') && moves.has('suckerpunch') && counter.get('Dark') &&
+ (!this.priorityPokemon.includes(species.id) || counter.get('Dark') >= 2)
+ ) return 'Black Glasses';
+ if (counter.get('Special') === 4) {
+ return (
+ scarfReqs && species.baseStats.spa >= 90 && this.randomChance(1, 2)
+ ) ? 'Choice Scarf' : 'Choice Specs';
+ }
+ if (counter.get('Special') === 3 && moves.has('uturn')) return 'Choice Specs';
+ if (counter.get('Physical') === 4 && species.id !== 'jirachi' && species.id !== 'spinda' &&
+ ['dragontail', 'fakeout', 'rapidspin'].every(m => !moves.has(m))
+ ) {
+ return (
+ scarfReqs && (species.baseStats.atk >= 100 || ability === 'Pure Power' || ability === 'Huge Power') &&
+ this.randomChance(1, 2)
+ ) ? 'Choice Scarf' : 'Choice Band';
+ }
+
+ if (ability === 'Sturdy' && moves.has('explosion')) return 'Custap Berry';
+ if (types.includes('Normal') && moves.has('fakeout') && !!counter.get('Normal')) return 'Silk Scarf';
+ if (species.id === 'palkia') return 'Lustrous Orb';
+ if (moves.has('outrage') && counter.get('setup')) return 'Lum Berry';
+ if (
+ (ability === 'Rough Skin') || (species.id !== 'hooh' && role !== 'Wallbreaker' &&
+ ability === 'Regenerator' && species.baseStats.hp + species.baseStats.def >= 180 && this.randomChance(1, 2))
+ ) return 'Rocky Helmet';
+ if (['protect', 'substitute'].some(m => moves.has(m))) return 'Leftovers';
+ if (
+ this.dex.getEffectiveness('Ground', species) >= 2 &&
+ ability !== 'Levitate'
+ ) {
+ return 'Air Balloon';
+ }
+ if (
+ role === 'Fast Support' && isLead && defensiveStatTotal < 255 && !counter.get('recovery') &&
+ (counter.get('hazards') || counter.get('setup')) && (!counter.get('recoil') || ability === 'Rock Head')
+ ) return 'Focus Sash';
+
+ // Default Items
+ if (role === 'Fast Support') {
+ return (
+ counter.get('Physical') + counter.get('Special') >= 3 &&
+ ['rapidspin', 'uturn', 'voltswitch'].every(m => !moves.has(m)) &&
+ this.dex.getEffectiveness('Rock', species) < 2
+ ) ? 'Life Orb' : 'Leftovers';
+ }
+ // noStab moves that should reject Expert Belt
+ const noExpertBeltMoves = (
+ this.noStab.filter(moveid => ['Dragon', 'Normal', 'Poison'].includes(this.dex.moves.get(moveid).type))
+ );
+ const expertBeltReqs = (
+ !counter.get('Dragon') && !counter.get('Normal') && !counter.get('Poison') &&
+ noExpertBeltMoves.every(m => !moves.has(m))
+ );
+ if (
+ !counter.get('Status') && expertBeltReqs &&
+ (moves.has('uturn') || moves.has('voltswitch') || role === 'Fast Attacker')
+ ) return 'Expert Belt';
+ if (
+ ['Fast Attacker', 'Setup Sweeper', 'Wallbreaker'].some(m => role === m) &&
+ this.dex.getEffectiveness('Rock', species) < 2 && ability !== 'Sturdy'
+ ) return 'Life Orb';
+ return 'Leftovers';
+ }
+
+ randomSet(
+ species: string | Species,
+ teamDetails: RandomTeamsTypes.TeamDetails = {},
+ isLead = false
+ ): RandomTeamsTypes.RandomSet {
+ species = this.dex.species.get(species);
+ const forme = this.getForme(species);
+ const sets = this.randomSets[species.id]["sets"];
+ const possibleSets = [];
+ // Check if the Pokemon has a Spinner set
+ let canSpinner = false;
+ for (const set of sets) {
+ if (!teamDetails.rapidSpin && set.role === 'Spinner') canSpinner = true;
+ }
+ for (const set of sets) {
+ // Prevent Spinner if the team already has removal
+ if (teamDetails.rapidSpin && set.role === 'Spinner') continue;
+ // Enforce Spinner if the team does not have removal
+ if (canSpinner && set.role !== 'Spinner') continue;
+ possibleSets.push(set);
+ }
+ const set = this.sampleIfArray(possibleSets);
+ const role = set.role;
+ const movePool: string[] = Array.from(set.movepool);
+ const preferredTypes = set.preferredTypes;
+ const preferredType = this.sampleIfArray(preferredTypes) || '';
+
+ let ability = '';
+ let item = undefined;
+
+ const evs = {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85};
+ const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};
+
+ const types = species.types;
+ const abilities = set.abilities!;
+
+ // Get moves
+ const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool,
+ preferredType, role);
+ const counter = this.newQueryMoves(moves, species, preferredType, abilities);
+
+ // Get ability
+ ability = this.getAbility(new Set(types), moves, abilities, counter, movePool, teamDetails, species,
+ preferredType, role);
+
+ // Get items
+ item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);
+ if (item === undefined) {
+ item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);
+ }
+
+ // For Trick / Switcheroo
+ if (item === 'Leftovers' && types.includes('Poison')) {
+ item = 'Black Sludge';
+ }
+
+ const level = this.getLevel(species);
+
+ // We use a special variable to track Hidden Power
+ // so that we can check for all Hidden Powers at once
+ let hasHiddenPower = false;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hasHiddenPower = true;
+ }
+
+ if (hasHiddenPower) {
+ let hpType;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hpType = move.substr(11);
+ }
+ if (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`);
+ const HPivs = this.dex.types.get(hpType).HPivs;
+ let iv: StatID;
+ for (iv in HPivs) {
+ ivs[iv] = HPivs[iv]!;
+ }
+ }
+
+ // Prepare optimal HP
+ const srImmunity = ability === 'Magic Guard';
+ const srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);
+ while (evs.hp > 1) {
+ const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ if (moves.has('substitute') && !['Black Sludge', 'Leftovers'].includes(item)) {
+ if (item === 'Sitrus Berry') {
+ // Two Substitutes should activate Sitrus Berry
+ if (hp % 4 === 0) break;
+ } else {
+ // Should be able to use Substitute four times from full HP without fainting
+ if (hp % 4 > 0) break;
+ }
+ } else if (moves.has('bellydrum') && item === 'Sitrus Berry') {
+ // Belly Drum should activate Sitrus Berry
+ if (hp % 2 === 0) break;
+ } else if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) {
+ // Crash damage move users want an odd HP to survive two misses
+ if (hp % 2 > 0) break;
+ } else {
+ // Maximize number of Stealth Rock switch-ins
+ if (srWeakness <= 0 || ability === 'Regenerator') break;
+ if (srWeakness === 1 && ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break;
+ if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;
+ // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry
+ if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;
+ }
+ evs.hp -= 4;
+ }
+
+ // Minimize confusion damage, including if Foul Play is its only physical attack
+ if (
+ (!counter.get('Physical') || (counter.get('Physical') <= 1 && (moves.has('foulplay') || moves.has('rapidspin')))) &&
+ !moves.has('transform')
+ ) {
+ evs.atk = 0;
+ ivs.atk = hasHiddenPower ? (ivs.atk || 31) - 28 : 0;
+ }
+
+ if (['gyroball', 'metalburst', 'trickroom'].some(m => moves.has(m))) {
+ evs.spe = 0;
+ ivs.spe = hasHiddenPower ? (ivs.spe || 31) - 28 : 0;
+ }
+
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+
+ return {
+ name: species.baseSpecies,
+ species: forme,
+ gender: species.gender,
+ shiny: this.randomChance(1, 1024),
+ level,
+ moves: shuffledMoves,
+ ability,
+ evs,
+ ivs,
+ item,
+ role,
+ };
+ }
+
+ randomTeam() {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const seed = this.prng.seed;
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+ const pokemon: RandomTeamsTypes.RandomSet[] = [];
+
+ // For Monotype
+ const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
+ const typePool = this.dex.types.names();
+ const type = this.forceMonotype || this.sample(typePool);
+
+ const baseFormes: {[k: string]: number} = {};
+ const typeCount: {[k: string]: number} = {};
+ const typeWeaknesses: {[k: string]: number} = {};
+ const typeDoubleWeaknesses: {[k: string]: number} = {};
+ const teamDetails: RandomTeamsTypes.TeamDetails = {};
+ let numMaxLevelPokemon = 0;
+
+ const pokemonList = Object.keys(this.randomSets);
+ const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);
+ while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
+ const baseSpecies = this.sampleNoReplace(baseSpeciesPool);
+ const species = this.dex.species.get(this.sample(pokemonPool[baseSpecies]));
+ if (!species.exists) continue;
+
+ // Limit to one of each species (Species Clause)
+ if (baseFormes[species.baseSpecies]) continue;
+
+ // Illusion shouldn't be in the last slot
+ if (species.name === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue;
+
+ // Prevent Shedinja from generating after Sandstorm/Hail setters
+ if (species.name === 'Shedinja' && (teamDetails.sand || teamDetails.hail)) continue;
+
+ // Dynamically scale limits for different team sizes. The default and minimum value is 1.
+ const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
+
+ const types = species.types;
+
+ if (!isMonotype && !this.forceMonotype) {
+ let skip = false;
+
+ // Limit two of any type
+ for (const typeName of types) {
+ if (typeCount[typeName] >= 2 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (skip) continue;
+
+ // Limit three weak to any type, and one double weak to any type
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;
+ if (typeWeaknesses[typeName] >= 3 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0;
+ if (typeDoubleWeaknesses[typeName] >= 1 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ if (skip) continue;
+
+ // Count Dry Skin as a Fire weakness
+ if (this.dex.getEffectiveness('Fire', species) === 0 && Object.values(species.abilities).includes('Dry Skin')) {
+ if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0;
+ if (typeWeaknesses['Fire'] >= 3 * limitFactor) continue;
+ }
+
+ // Limit one level 100 Pokemon
+ if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) {
+ continue;
+ }
+ }
+
+ const set = this.randomSet(species, teamDetails, pokemon.length === 0);
+
+ // Okay, the set passes, add it to our team
+ pokemon.push(set);
+
+ // Don't bother tracking details for the last Pokemon
+ if (pokemon.length === this.maxTeamSize) break;
+
+ // Now that our Pokemon has passed all checks, we can increment our counters
+ baseFormes[species.baseSpecies] = 1;
+
+ // Increment type counters
+ for (const typeName of types) {
+ if (typeName in typeCount) {
+ typeCount[typeName]++;
+ } else {
+ typeCount[typeName] = 1;
+ }
+ }
+
+ // Increment weakness counter
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ typeWeaknesses[typeName]++;
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ typeDoubleWeaknesses[typeName]++;
+ }
+ }
+ // Count Dry Skin as a Fire weakness
+ if (set.ability === 'Dry Skin' && this.dex.getEffectiveness('Fire', species) === 0) typeWeaknesses['Fire']++;
+
+ // Increment level 100 counter
+ if (set.level === 100) numMaxLevelPokemon++;
+
+ // Team details
+ if (set.ability === 'Snow Warning' || set.moves.includes('hail')) teamDetails.hail = 1;
+ if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1;
+ if (set.ability === 'Sand Stream') teamDetails.sand = 1;
+ if (set.ability === 'Drought' || set.moves.includes('sunnyday')) teamDetails.sun = 1;
+ if (set.moves.includes('aromatherapy') || set.moves.includes('healbell')) teamDetails.statusCure = 1;
+ if (set.moves.includes('spikes')) teamDetails.spikes = (teamDetails.spikes || 0) + 1;
+ if (set.moves.includes('stealthrock')) teamDetails.stealthRock = 1;
+ if (set.moves.includes('toxicspikes')) teamDetails.toxicSpikes = 1;
+ if (set.moves.includes('rapidspin')) teamDetails.rapidSpin = 1;
+ if (set.moves.includes('reflect') && set.moves.includes('lightscreen')) teamDetails.screens = 1;
+ }
+ if (pokemon.length < this.maxTeamSize && pokemon.length < 12) {
+ throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
+ }
+
+ return pokemon;
+ }
+}
+
+export default RandomGen5Teams;
diff --git a/data/mods/gen6/factory-sets.json b/data/random-battles/gen6/factory-sets.json
similarity index 99%
rename from data/mods/gen6/factory-sets.json
rename to data/random-battles/gen6/factory-sets.json
index ad8e741a1f5e..12918022ce0f 100644
--- a/data/mods/gen6/factory-sets.json
+++ b/data/random-battles/gen6/factory-sets.json
@@ -9487,7 +9487,7 @@
"item": "Leftovers",
"ability": "Sturdy",
"evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Modest",
+ "nature": "Calm",
"moves": [["Stealth Rock"], ["Flash Cannon"], ["Volt Switch"], ["Earth Power", "Toxic", "Thunder Wave"]]
}
]
@@ -10316,4 +10316,4 @@
]
}
}
-}
\ No newline at end of file
+}
diff --git a/data/random-battles/gen6/sets.json b/data/random-battles/gen6/sets.json
new file mode 100644
index 000000000000..b44fb4ce6d48
--- /dev/null
+++ b/data/random-battles/gen6/sets.json
@@ -0,0 +1,6079 @@
+{
+ "venusaur": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"],
+ "abilities": ["Chlorophyll", "Overgrow"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "energyball", "knockoff", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Chlorophyll", "Overgrow"]
+ }
+ ]
+ },
+ "venusaurmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "gigadrain", "knockoff", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "charizard": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "earthquake", "fireblast", "roost", "willowisp"],
+ "abilities": ["Blaze", "Solar Power"]
+ }
+ ]
+ },
+ "charizardmegax": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragonclaw", "dragondance", "earthquake", "flareblitz", "roost"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "charizardmegay": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "fireblast", "roost", "solarbeam"],
+ "abilities": ["Blaze"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dragonpulse", "fireblast", "roost", "solarbeam"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "blastoise": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "rapidspin", "roar", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["haze", "icebeam", "protect", "rapidspin", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "blastoisemega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aurasphere", "darkpulse", "icebeam", "rapidspin", "scald"],
+ "abilities": ["Rain Dish"]
+ }
+ ]
+ },
+ "butterfree": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbuzz", "psychic", "quiverdance", "sleeppowder"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "beedrill": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "knockoff", "poisonjab", "toxicspikes", "uturn"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "beedrillmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["drillrun", "knockoff", "poisonjab", "protect", "uturn"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "pidgeot": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "heatwave", "return", "roost", "uturn"],
+ "abilities": ["Big Pecks"]
+ }
+ ]
+ },
+ "pidgeotmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "heatwave", "hurricane", "roost", "uturn", "workup"],
+ "abilities": ["Big Pecks"]
+ }
+ ]
+ },
+ "raticate": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "facade", "flamewheel", "protect", "suckerpunch", "swordsdance", "uturn"],
+ "abilities": ["Guts"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "fearow": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "uturn"],
+ "abilities": ["Sniper"]
+ }
+ ]
+ },
+ "arbok": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aquatail", "coil", "earthquake", "gunkshot", "suckerpunch"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["coil", "earthquake", "gunkshot", "rest"],
+ "abilities": ["Shed Skin"]
+ }
+ ]
+ },
+ "pikachu": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["extremespeed", "grassknot", "hiddenpowerice", "knockoff", "surf", "voltswitch", "volttackle"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "raichu": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["encore", "hiddenpowerice", "knockoff", "nastyplot", "nuzzle", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "sandslash": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance", "toxic"],
+ "abilities": ["Sand Rush"]
+ }
+ ]
+ },
+ "nidoqueen": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "stealthrock", "toxicspikes"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "nidoking": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "substitute", "superpower"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "clefable": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "knockoff", "moonblast", "softboiled", "stealthrock", "thunderwave"],
+ "abilities": ["Magic Guard", "Unaware"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "fireblast", "moonblast", "softboiled"],
+ "abilities": ["Magic Guard", "Unaware"]
+ }
+ ]
+ },
+ "ninetales": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["fireblast", "hiddenpowerrock", "nastyplot", "solarbeam"],
+ "abilities": ["Drought"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["fireblast", "nastyplot", "solarbeam", "substitute", "willowisp"],
+ "abilities": ["Drought"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "wigglytuff": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dazzlinggleam", "fireblast", "healbell", "knockoff", "protect", "stealthrock", "thunderwave", "wish"],
+ "abilities": ["Competitive"]
+ }
+ ]
+ },
+ "vileplume": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "gigadrain", "hiddenpowerground", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Effect Spore"]
+ }
+ ]
+ },
+ "parasect": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aromatherapy", "knockoff", "seedbomb", "spore", "stunspore", "xscissor"],
+ "abilities": ["Dry Skin"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "venomoth": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "sludgebomb"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "dugtrio": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["earthquake", "memento", "stealthrock", "stoneedge", "suckerpunch"],
+ "abilities": ["Arena Trap"]
+ }
+ ]
+ },
+ "persian": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "knockoff", "return", "seedbomb", "uturn"],
+ "abilities": ["Limber"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "fakeout", "knockoff", "return", "uturn"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerfighting", "hypervoice", "nastyplot", "shadowball"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "golduck": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "scald"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "primeape": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "gunkshot", "honeclaws", "stoneedge", "uturn"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "arcanine": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "roar", "toxic", "wildcharge", "willowisp"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "wildcharge"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "poliwrath": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "icepunch", "raindance", "waterfall"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["circlethrow", "rest", "scald", "sleeptalk"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "alakazam": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["counter", "focusblast", "psychic", "psyshock", "shadowball"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "encore", "focusblast", "psychic", "psyshock", "shadowball", "substitute"],
+ "abilities": ["Magic Guard"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "alakazammega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "encore", "focusblast", "psychic", "psyshock", "shadowball", "substitute"],
+ "abilities": ["Magic Guard"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "machamp": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "bulletpunch", "dynamicpunch", "knockoff", "stoneedge"],
+ "abilities": ["No Guard"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["bulletpunch", "dynamicpunch", "knockoff", "stoneedge"],
+ "abilities": ["No Guard"]
+ }
+ ]
+ },
+ "victreebel": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerground", "knockoff", "powerwhip", "sleeppowder", "sludgebomb", "suckerpunch"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["powerwhip", "sludgebomb", "sunnyday", "weatherball"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "tentacruel": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["haze", "knockoff", "rapidspin", "scald", "sludgebomb", "toxicspikes"],
+ "abilities": ["Clear Body", "Liquid Ooze"]
+ }
+ ]
+ },
+ "golem": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "explosion", "rockpolish", "stoneedge", "suckerpunch"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "rapidash": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drillrun", "flareblitz", "morningsun", "wildcharge", "willowisp"],
+ "abilities": ["Flame Body", "Flash Fire"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drillrun", "flareblitz", "megahorn", "morningsun", "wildcharge"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "slowbro": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["fireblast", "futuresight", "icebeam", "psyshock", "scald"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "slowbromega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "fireblast", "psyshock", "scald", "slackoff"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "farfetchd": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bravebird", "knockoff", "leafblade", "return", "swordsdance"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "dodrio": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "doubleedge", "knockoff", "quickattack", "return"],
+ "abilities": ["Early Bird"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "knockoff", "return", "roost"],
+ "abilities": ["Early Bird"]
+ }
+ ]
+ },
+ "dewgong": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "icebeam", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "muk": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["brickbreak", "curse", "gunkshot", "haze", "icepunch", "poisonjab", "shadowsneak"],
+ "abilities": ["Poison Touch"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "cloyster": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hydropump", "iciclespear", "rockblast", "shellsmash"],
+ "abilities": ["Skill Link"]
+ }
+ ]
+ },
+ "gengar": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "painsplit", "shadowball", "sludgewave", "substitute", "trick", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "gengarmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["disable", "perishsong", "protect", "shadowball", "substitute"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["destinybond", "disable", "focusblast", "shadowball", "sludgewave", "taunt"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "hypno": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["focusblast", "foulplay", "protect", "psychic", "thunderwave", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ }
+ ]
+ },
+ "kingler": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "crabhammer", "knockoff", "rockslide", "superpower", "swordsdance", "xscissor"],
+ "abilities": ["Hyper Cutter", "Sheer Force"]
+ }
+ ]
+ },
+ "electrode": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["foulplay", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt", "voltswitch"],
+ "abilities": ["Aftermath", "Static"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["hiddenpowerice", "thunderbolt", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Aftermath", "Static"]
+ }
+ ]
+ },
+ "exeggutor": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "hiddenpowerfire", "leechseed", "psychic", "sleeppowder", "substitute"],
+ "abilities": ["Harvest"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "marowak": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance"],
+ "abilities": ["Battle Armor", "Rock Head"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "hitmonlee": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["highjumpkick", "knockoff", "machpunch", "poisonjab", "rapidspin", "stoneedge"],
+ "abilities": ["Reckless"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "closecombat", "knockoff", "poisonjab", "stoneedge"],
+ "abilities": ["Unburden"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "hitmonchan": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge"],
+ "abilities": ["Iron Fist"]
+ }
+ ]
+ },
+ "weezing": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rhydon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "swordsdance", "toxic"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "chansey": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "kangaskhan": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["doubleedge", "drainpunch", "earthquake", "fakeout", "return", "suckerpunch"],
+ "abilities": ["Scrappy"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["drainpunch", "earthquake", "fakeout", "return", "suckerpunch"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "kangaskhanmega": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["bodyslam", "crunch", "fakeout", "seismictoss", "suckerpunch"],
+ "abilities": ["Scrappy"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bodyslam", "crunch", "earthquake", "poweruppunch", "return", "suckerpunch"],
+ "abilities": ["Scrappy"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "seaking": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "waterfall"],
+ "abilities": ["Lightning Rod"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "raindance", "waterfall"],
+ "abilities": ["Swift Swim"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "starmie": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hydropump", "icebeam", "psyshock", "recover", "thunderbolt"],
+ "abilities": ["Analytic"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["psyshock", "rapidspin", "recover", "scald", "thunderwave", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "mrmime": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "nastyplot", "psychic", "psyshock", "shadowball"],
+ "abilities": ["Filter"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "scyther": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "brickbreak", "knockoff", "pursuit", "uturn"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aerialace", "brickbreak", "bugbite", "knockoff", "roost", "swordsdance"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "jynx": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"],
+ "abilities": ["Dry Skin"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "pinsir": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance", "xscissor"],
+ "abilities": ["Moxie"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "pinsirmega": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["closecombat", "earthquake", "quickattack", "return", "swordsdance"],
+ "abilities": ["Hyper Cutter"]
+ }
+ ]
+ },
+ "tauros": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bodyslam", "earthquake", "fireblast", "rockslide", "zenheadbutt"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "earthquake", "stoneedge", "zenheadbutt"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "gyarados": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"],
+ "abilities": ["Intimidate", "Moxie"]
+ }
+ ]
+ },
+ "gyaradosmega": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "dragondance", "earthquake", "substitute", "waterfall"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "lapras": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["freezedry", "healbell", "hydropump", "icebeam", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["freezedry", "hydropump", "protect", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "ditto": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["transform"],
+ "abilities": ["Imposter"]
+ }
+ ]
+ },
+ "vaporeon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "icebeam", "protect", "scald", "wish"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "scald", "toxic", "wish"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "jolteon": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "shadowball", "thunderbolt", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerice", "signalbeam", "thunderbolt", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "flareon": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["facade", "flamecharge", "flareblitz", "quickattack", "superpower"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "omastar": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"],
+ "abilities": ["Shell Armor", "Swift Swim"]
+ }
+ ]
+ },
+ "kabutops": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["aquajet", "knockoff", "rapidspin", "stoneedge", "swordsdance", "waterfall"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ }
+ ]
+ },
+ "aerodactyl": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"],
+ "abilities": ["Unnerve"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["aerialace", "aquatail", "defog", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"],
+ "abilities": ["Unnerve"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "aerodactylmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "aquatail", "earthquake", "honeclaws", "roost", "stoneedge"],
+ "abilities": ["Unnerve"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "snorlax": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "crunch", "curse", "earthquake", "rest", "sleeptalk"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "articuno": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["freezedry", "roost", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["freezedry", "hurricane", "roost", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "zapdos": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "discharge", "heatwave", "hiddenpowerice", "roost", "toxic", "uturn"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "moltres": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "fireblast", "hurricane", "roost", "toxic", "uturn", "willowisp"],
+ "abilities": ["Flame Body"]
+ }
+ ]
+ },
+ "dragonite": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "ironhead", "outrage", "roost"],
+ "abilities": ["Multiscale"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "mewtwo": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"],
+ "abilities": ["Unnerve"]
+ }
+ ]
+ },
+ "mewtwomegax": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "drainpunch", "stoneedge", "taunt", "zenheadbutt"],
+ "abilities": ["Unnerve"]
+ }
+ ]
+ },
+ "mewtwomegay": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"],
+ "abilities": ["Unnerve"]
+ }
+ ]
+ },
+ "mew": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["defog", "knockoff", "psychic", "roost", "stealthrock", "taunt", "uturn", "willowisp"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "psyshock", "roost"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["drainpunch", "knockoff", "swordsdance", "zenheadbutt"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "meganium": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "dragontail", "earthquake", "energyball", "leechseed", "synthesis", "toxic"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "typhlosion": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "feraligatr": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "dragondance", "earthquake", "icepunch", "waterfall"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "furret": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquatail", "doubleedge", "firepunch", "knockoff", "trick", "uturn"],
+ "abilities": ["Frisk"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "noctowl": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["airslash", "defog", "hypervoice", "roost", "toxic"],
+ "abilities": ["Tinted Lens"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "ledian": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["encore", "focusblast", "knockoff", "roost", "toxic"],
+ "abilities": ["Early Bird"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "ariados": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["megahorn", "poisonjab", "stickyweb", "suckerpunch", "toxicspikes"],
+ "abilities": ["Insomnia", "Swarm"]
+ }
+ ]
+ },
+ "crobat": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "roost", "superfang", "taunt", "toxic", "uturn"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "lanturn": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["healbell", "icebeam", "scald", "thunderbolt", "toxic", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "xatu": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "heatwave", "psychic", "roost"],
+ "abilities": ["Magic Bounce"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["heatwave", "psychic", "roost", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Magic Bounce"]
+ }
+ ]
+ },
+ "ampharos": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focusblast", "healbell", "hiddenpowerice", "thunderbolt", "toxic", "voltswitch"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "ampharosmega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["agility", "dragonpulse", "focusblast", "thunderbolt", "voltswitch"],
+ "abilities": ["Static"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["discharge", "dragonpulse", "focusblast", "healbell", "rest", "sleeptalk", "voltswitch"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "bellossom": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "moonblast", "sleeppowder", "synthesis", "toxic"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "azumarill": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "bellydrum", "knockoff", "playrough", "superpower", "waterfall"],
+ "abilities": ["Huge Power"]
+ }
+ ]
+ },
+ "sudowoodo": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "stealthrock", "stoneedge", "suckerpunch", "toxic", "woodhammer"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "politoed": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["encore", "icebeam", "protect", "scald", "toxic"],
+ "abilities": ["Drizzle"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "icebeam", "rest", "scald", "toxic"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "jumpluff": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["acrobatics", "leechseed", "protect", "substitute"],
+ "abilities": ["Infiltrator"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["acrobatics", "encore", "sleeppowder", "toxic", "uturn"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "sunflora": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthpower", "hiddenpowerfire", "solarbeam", "sunnyday"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "quagsire": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "icebeam", "recover", "scald", "toxic"],
+ "abilities": ["Unaware"]
+ }
+ ]
+ },
+ "espeon": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "dazzlinggleam", "morningsun", "psychic", "psyshock", "shadowball", "trick"],
+ "abilities": ["Magic Bounce"],
+ "preferredTypes": ["Fairy"]
+ }
+ ]
+ },
+ "umbreon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["foulplay", "protect", "toxic", "wish"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["foulplay", "healbell", "moonlight", "toxic"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "murkrow": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["bravebird", "defog", "foulplay", "haze", "roost", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "slowking": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "icebeam", "nastyplot", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["dragontail", "fireblast", "futuresight", "icebeam", "psyshock", "scald"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "unown": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerpsychic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "wobbuffet": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["counter", "destinybond", "encore", "mirrorcoat"],
+ "abilities": ["Shadow Tag"]
+ }
+ ]
+ },
+ "girafarig": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dazzlinggleam", "hypervoice", "nastyplot", "psychic", "psyshock", "substitute", "thunderbolt"],
+ "abilities": ["Sap Sipper"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "forretress": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["gyroball", "rapidspin", "spikes", "stealthrock", "toxic", "voltswitch"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "dunsparce": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "glare", "headbutt", "roost"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "coil", "earthquake", "roost"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "gligar": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "toxic", "uturn"],
+ "abilities": ["Immunity"]
+ }
+ ]
+ },
+ "steelix": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "ironhead", "roar", "rockslide", "stealthrock", "toxic"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Steel"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "heavyslam", "protect", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "steelixmega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "earthquake", "heavyslam", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "granbull": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "healbell", "playrough", "thunderwave", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "qwilfish": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "scizor": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletpunch", "knockoff", "pursuit", "superpower", "uturn"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "scizormega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"],
+ "abilities": ["Light Metal"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"],
+ "abilities": ["Light Metal"]
+ }
+ ]
+ },
+ "shuckle": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "knockoff", "stealthrock", "stickyweb", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "heracross": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "facade", "knockoff", "megahorn"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "knockoff", "megahorn", "stoneedge"],
+ "abilities": ["Moxie"]
+ }
+ ]
+ },
+ "heracrossmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "earthquake", "knockoff", "pinmissile", "rockblast", "substitute", "swordsdance"],
+ "abilities": ["Moxie"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "ursaring": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "crunch", "facade", "protect"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "crunch", "facade", "swordsdance"],
+ "abilities": ["Quick Feet"]
+ }
+ ]
+ },
+ "magcargo": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["ancientpower", "lavaplume", "recover", "stealthrock", "toxic"],
+ "abilities": ["Flame Body"]
+ }
+ ]
+ },
+ "corsola": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["powergem", "recover", "scald", "stealthrock", "toxic"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "octillery": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "scald"],
+ "abilities": ["Sniper"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["energyball", "fireblast", "gunkshot", "icebeam", "scald", "thunderwave"],
+ "abilities": ["Sniper"]
+ }
+ ]
+ },
+ "delibird": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "freezedry", "rapidspin", "spikes"],
+ "abilities": ["Insomnia", "Vital Spirit"]
+ }
+ ]
+ },
+ "mantine": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["airslash", "defog", "haze", "rest", "scald", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["rest", "scald", "sleeptalk", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "skarmory": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["bravebird", "roost", "spikes", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "houndoom": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "suckerpunch"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "houndoommega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "taunt"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "kingdra": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragondance", "ironhead", "outrage", "waterfall"],
+ "abilities": ["Sniper", "Swift Swim"]
+ }
+ ]
+ },
+ "donphan": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "porygon2": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"],
+ "abilities": ["Download", "Trace"]
+ }
+ ]
+ },
+ "stantler": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "suckerpunch", "thunderwave"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "smeargle": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["nuzzle", "spikes", "spore", "stealthrock", "stickyweb", "whirlwind"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "hitmontop": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "miltank": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"],
+ "abilities": ["Sap Sipper", "Thick Fat"]
+ }
+ ]
+ },
+ "blissey": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "raikou": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aurasphere", "hiddenpowerice", "thunderbolt", "voltswitch"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "entei": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bulldoze", "extremespeed", "flareblitz", "sacredfire"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["extremespeed", "flareblitz", "sacredfire", "stoneedge"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "suicune": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "rest", "scald", "sleeptalk"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "icebeam", "rest", "scald", "substitute"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["calmmind", "protect", "scald", "substitute"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "tyranitar": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge"],
+ "abilities": ["Sand Stream"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "tyranitarmega": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "lugia": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aeroblast", "earthquake", "roost", "substitute", "toxic", "whirlwind"],
+ "abilities": ["Multiscale"]
+ }
+ ]
+ },
+ "hooh": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "earthquake", "roost", "sacredfire", "substitute", "toxic"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "celebi": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthpower", "gigadrain", "leafstorm", "nastyplot", "psychic", "uturn"],
+ "abilities": ["Natural Cure"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["leafstorm", "nastyplot", "psychic", "recover"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "sceptile": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "sceptilemega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragonpulse", "earthquake", "focusblast", "gigadrain", "leafstorm", "substitute"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "leafblade", "outrage", "swordsdance"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "blaziken": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["flareblitz", "highjumpkick", "knockoff", "protect", "stoneedge", "swordsdance"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "blazikenmega": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["flareblitz", "highjumpkick", "knockoff", "protect", "stoneedge", "swordsdance"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "swampert": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "icebeam", "roar", "scald", "stealthrock", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "swampertmega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "icepunch", "raindance", "superpower", "waterfall"],
+ "abilities": ["Damp"]
+ }
+ ]
+ },
+ "mightyena": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "irontail", "playrough", "suckerpunch", "toxic"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fairy"]
+ }
+ ]
+ },
+ "linoone": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"],
+ "abilities": ["Quick Feet"]
+ }
+ ]
+ },
+ "beautifly": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aircutter", "bugbuzz", "hiddenpowerground", "quiverdance"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "dustox": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbuzz", "hiddenpowerground", "quiverdance", "roost", "sludgebomb"],
+ "abilities": ["Shield Dust"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bugbuzz", "defog", "roost", "toxic", "uturn"],
+ "abilities": ["Shield Dust"]
+ }
+ ]
+ },
+ "ludicolo": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["gigadrain", "hydropump", "icebeam", "raindance"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["energyball", "hydropump", "icebeam", "scald"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "shiftry": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["defog", "knockoff", "leafstorm", "lowkick", "suckerpunch"],
+ "abilities": ["Chlorophyll", "Pickpocket"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["knockoff", "leafblade", "lowkick", "suckerpunch", "swordsdance"],
+ "abilities": ["Chlorophyll", "Pickpocket"]
+ }
+ ]
+ },
+ "swellow": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "facade", "protect", "uturn"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "facade", "quickattack", "uturn"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "pelipper": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "hurricane", "knockoff", "roost", "scald", "toxic", "uturn"],
+ "abilities": ["Rain Dish"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "knockoff", "roost", "scald", "toxic", "uturn"],
+ "abilities": ["Rain Dish"]
+ }
+ ]
+ },
+ "gardevoir": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "focusblast", "healingwish", "moonblast", "psychic", "shadowball", "thunderbolt", "trick"],
+ "abilities": ["Trace"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "focusblast", "moonblast", "psyshock", "substitute", "willowisp"],
+ "abilities": ["Trace"]
+ }
+ ]
+ },
+ "gardevoirmega": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "substitute", "taunt", "willowisp"],
+ "abilities": ["Trace"]
+ }
+ ]
+ },
+ "masquerain": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "bugbuzz", "hydropump", "quiverdance"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["airslash", "bugbuzz", "roost", "scald", "stickyweb", "stunspore", "uturn"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "breloom": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletseed", "machpunch", "rocktomb", "spore", "swordsdance"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulletseed", "machpunch", "rocktomb", "swordsdance"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "vigoroth": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "bulkup", "earthquake", "return", "shadowclaw", "slackoff"],
+ "abilities": ["Vital Spirit"]
+ }
+ ]
+ },
+ "slaking": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "gigaimpact", "nightslash", "retaliate"],
+ "abilities": ["Truant"]
+ }
+ ]
+ },
+ "ninjask": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "nightslash", "swordsdance", "uturn", "xscissor"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "shedinja": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"],
+ "abilities": ["Wonder Guard"]
+ }
+ ]
+ },
+ "exploud": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["boomburst", "fireblast", "focusblast", "surf"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "hariyama": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["bulletpunch", "closecombat", "heavyslam", "knockoff", "stoneedge"],
+ "abilities": ["Guts", "Thick Fat"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bulletpunch", "closecombat", "facade", "fakeout", "knockoff"],
+ "abilities": ["Guts"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "delcatty": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["doubleedge", "fakeout", "healbell", "suckerpunch", "thunderwave", "toxic"],
+ "abilities": ["Wonder Skin"]
+ }
+ ]
+ },
+ "sableye": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["foulplay", "knockoff", "recover", "taunt", "willowisp"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "sableyemega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "darkpulse", "recover", "willowisp"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "mawile": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["ironhead", "knockoff", "playrough", "stealthrock", "suckerpunch", "swordsdance"],
+ "abilities": ["Intimidate", "Sheer Force"]
+ }
+ ]
+ },
+ "mawilemega": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["ironhead", "knockoff", "playrough", "suckerpunch", "swordsdance"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "aggron": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "rockpolish", "stealthrock"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "aggronmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "stoneedge", "thunderwave", "toxic"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "medicham": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletpunch", "highjumpkick", "icepunch", "poisonjab", "zenheadbutt"],
+ "abilities": ["Pure Power"]
+ }
+ ]
+ },
+ "medichammega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "highjumpkick", "icepunch", "thunderpunch", "zenheadbutt"],
+ "abilities": ["Pure Power"]
+ }
+ ]
+ },
+ "manectric": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["flamethrower", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "manectricmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "plusle": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
+ "abilities": ["Lightning Rod"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "minun": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
+ "abilities": ["Volt Absorb"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "volbeat": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "roost", "thunderwave", "uturn"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "illumise": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bugbuzz", "encore", "roost", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "swalot": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "encore", "icebeam", "painsplit", "sludgebomb", "toxic", "yawn"],
+ "abilities": ["Liquid Ooze"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "sludgebomb", "toxic"],
+ "abilities": ["Liquid Ooze"]
+ }
+ ]
+ },
+ "sharpedo": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "destinybond", "earthquake", "icebeam", "protect", "waterfall"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "sharpedomega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "icefang", "protect", "waterfall"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "wailord": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "waterspout"],
+ "abilities": ["Water Veil"]
+ }
+ ]
+ },
+ "camerupt": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "fireblast", "rockpolish", "stoneedge"],
+ "abilities": ["Solid Rock"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "lavaplume", "roar", "stealthrock", "toxic"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "cameruptmega": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["ancientpower", "earthpower", "fireblast", "stealthrock", "toxic", "willowisp"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "torkoal": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "lavaplume", "rapidspin", "stealthrock", "yawn"],
+ "abilities": ["White Smoke"]
+ }
+ ]
+ },
+ "grumpig": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["focusblast", "healbell", "psychic", "thunderwave", "toxic", "whirlwind"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "spinda": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["rest", "return", "sleeptalk", "suckerpunch", "superpower", "thief"],
+ "abilities": ["Contrary"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "flygon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "outrage", "stoneedge", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "dracometeor", "earthquake", "roost", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "cacturne": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "focusblast", "gigadrain", "spikes", "suckerpunch"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drainpunch", "seedbomb", "suckerpunch", "swordsdance"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "altaria": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["dragondance", "earthquake", "outrage", "roost"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["dracometeor", "earthquake", "fireblast", "healbell", "roost", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "altariamega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "return", "roost"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "fireblast", "healbell", "return", "roost"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "zangoose": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "facade", "knockoff", "quickattack", "swordsdance"],
+ "abilities": ["Toxic Boost"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "seviper": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "flamethrower", "gigadrain", "glare", "knockoff", "sludgewave", "suckerpunch", "switcheroo"],
+ "abilities": ["Infiltrator"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "lunatone": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "icebeam", "moonblast", "moonlight", "psychic", "rockpolish"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthpower", "moonlight", "psychic", "stealthrock", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "solrock": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "morningsun", "stealthrock", "stoneedge", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "whiscash": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"],
+ "abilities": ["Hydration", "Oblivious"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "scald", "toxic"],
+ "abilities": ["Hydration", "Oblivious"]
+ }
+ ]
+ },
+ "crawdaunt": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "crabhammer", "dragondance", "knockoff", "superpower"],
+ "abilities": ["Adaptability"]
+ }
+ ]
+ },
+ "claydol": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "cradily": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "earthquake", "recover", "seedbomb", "stoneedge", "swordsdance"],
+ "abilities": ["Storm Drain"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "gigadrain", "recover", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Storm Drain"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "armaldo": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "earthquake", "knockoff", "stoneedge", "swordsdance", "xscissor"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ }
+ ]
+ },
+ "milotic": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["dragontail", "haze", "icebeam", "recover", "scald", "toxic"],
+ "abilities": ["Competitive", "Marvel Scale"]
+ }
+ ]
+ },
+ "castform": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "icebeam", "return", "scald", "thunderbolt", "thunderwave"],
+ "abilities": ["Forecast"],
+ "preferredTypes": ["Water"]
+ }
+ ]
+ },
+ "kecleon": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["drainpunch", "fakeout", "knockoff", "recover", "shadowsneak", "stealthrock", "suckerpunch"],
+ "abilities": ["Protean"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drainpunch", "knockoff", "recover", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Protean"]
+ }
+ ]
+ },
+ "banette": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["gunkshot", "knockoff", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"],
+ "abilities": ["Cursed Body", "Frisk"]
+ }
+ ]
+ },
+ "banettemega": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "knockoff", "shadowclaw", "taunt", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "tropius": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["airslash", "leechseed", "protect", "substitute"],
+ "abilities": ["Harvest"]
+ }
+ ]
+ },
+ "chimecho": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["healbell", "knockoff", "psychic", "recover", "toxic"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "psychic", "psyshock", "recover", "signalbeam"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "absol": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["knockoff", "playrough", "pursuit", "suckerpunch", "superpower", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Fairy"]
+ }
+ ]
+ },
+ "absolmega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["irontail", "knockoff", "playrough", "pursuit", "suckerpunch", "superpower", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Fairy"]
+ }
+ ]
+ },
+ "glalie": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "freezedry", "spikes", "superfang", "taunt"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "glaliemega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "explosion", "freezedry", "iceshard", "return", "spikes"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "walrein": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "roar", "superfang", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "huntail": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["icebeam", "return", "shellsmash", "suckerpunch", "waterfall"],
+ "abilities": ["Swift Swim", "Water Veil"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "gorebyss": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "relicanth": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "headsmash", "rockpolish", "waterfall"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "luvdisc": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "scald", "substitute", "toxic"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "salamence": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "outrage", "roost"],
+ "abilities": ["Intimidate", "Moxie"]
+ }
+ ]
+ },
+ "salamencemega": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "dragondance", "earthquake", "return", "roost"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "metagross": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["agility", "earthquake", "icepunch", "meteormash", "thunderpunch", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulletpunch", "earthquake", "explosion", "icepunch", "meteormash", "stealthrock", "thunderpunch", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "metagrossmega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["agility", "earthquake", "hammerarm", "meteormash", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hammerarm", "honeclaws", "meteormash", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "regirock": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "drainpunch", "rest", "stoneedge"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["drainpunch", "earthquake", "stealthrock", "stoneedge", "thunderwave", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "regice": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focusblast", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Electric"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["focusblast", "icebeam", "rockpolish", "thunderbolt"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "registeel": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "ironhead", "rest", "sleeptalk"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "latias": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "latiasmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "latios": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "latiosmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "kyogre": {
+ "level": 68,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "originpulse", "scald", "thunder", "waterspout"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "kyogreprimal": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "rest", "scald", "sleeptalk"],
+ "abilities": ["Drizzle"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "icebeam", "originpulse", "thunder"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "groudon": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "stoneedge", "thunderwave"],
+ "abilities": ["Drought"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["firepunch", "precipiceblades", "rockpolish", "stoneedge", "swordsdance"],
+ "abilities": ["Drought"]
+ }
+ ]
+ },
+ "groudonprimal": {
+ "level": 64,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "thunderwave"],
+ "abilities": ["Drought"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["firepunch", "precipiceblades", "rockpolish", "swordsdance"],
+ "abilities": ["Drought"]
+ }
+ ]
+ },
+ "rayquaza": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dracometeor", "earthquake", "extremespeed", "outrage", "vcreate"],
+ "abilities": ["Air Lock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "extremespeed", "outrage", "vcreate"],
+ "abilities": ["Air Lock"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "extremespeed", "outrage", "swordsdance", "vcreate"],
+ "abilities": ["Air Lock"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "rayquazamega": {
+ "level": 65,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate"],
+ "abilities": ["Air Lock"]
+ }
+ ]
+ },
+ "jirachi": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "deoxys": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysattack": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysdefense": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "recover", "signalbeam"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysspeed": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["knockoff", "psychoboost", "spikes", "stealthrock", "superpower", "taunt"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["darkpulse", "focusblast", "nastyplot", "psychoboost"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "torterra": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "infernape": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"],
+ "abilities": ["Blaze", "Iron Fist"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"],
+ "abilities": ["Blaze", "Iron Fist"]
+ }
+ ]
+ },
+ "empoleon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["defog", "knockoff", "protect", "scald", "stealthrock", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "icebeam", "knockoff", "roar", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["flashcannon", "grassknot", "hydropump", "icebeam", "knockoff", "scald"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "staraptor": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "closecombat", "doubleedge", "quickattack", "uturn"],
+ "abilities": ["Reckless"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "bibarel": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["quickattack", "return", "waterfall", "workup"],
+ "abilities": ["Simple"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "quickattack", "return", "waterfall"],
+ "abilities": ["Simple"]
+ }
+ ]
+ },
+ "kricketune": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["bugbite", "knockoff", "stickyweb", "taunt", "toxic"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "luxray": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "facade", "superpower", "wildcharge"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["crunch", "icefang", "superpower", "voltswitch", "wildcharge"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "roserade": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["gigadrain", "hiddenpowerground", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"],
+ "abilities": ["Natural Cure", "Technician"]
+ }
+ ]
+ },
+ "rampardos": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "firepunch", "rockpolish", "rockslide", "zenheadbutt"],
+ "abilities": ["Sheer Force"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "firepunch", "headsmash", "rockslide"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "bastiodon": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["metalburst", "roar", "rockblast", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["metalburst", "protect", "roar", "rockblast", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "wormadam": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "signalbeam", "synthesis", "toxic"],
+ "abilities": ["Anticipation", "Overcoat"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "psychic", "signalbeam"],
+ "abilities": ["Anticipation", "Overcoat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "hiddenpowerground", "protect", "toxic"],
+ "abilities": ["Anticipation", "Overcoat"]
+ }
+ ]
+ },
+ "wormadamsandy": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "infestation", "protect", "stealthrock", "toxic"],
+ "abilities": ["Overcoat"]
+ }
+ ]
+ },
+ "wormadamtrash": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["flashcannon", "infestation", "protect", "stealthrock", "toxic"],
+ "abilities": ["Overcoat"]
+ }
+ ]
+ },
+ "mothim": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "bugbuzz", "energyball", "quiverdance"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "vespiquen": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["airslash", "defog", "roost", "toxic", "uturn"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "pachirisu": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["nuzzle", "superfang", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "floatzel": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "icepunch", "lowkick", "substitute", "waterfall"],
+ "abilities": ["Water Veil"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "crunch", "icepunch", "lowkick", "waterfall"],
+ "abilities": ["Water Veil"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "cherrim": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dazzlinggleam", "energyball", "healingwish", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerrock", "morningsun"],
+ "abilities": ["Flower Gift"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "energyball", "hiddenpowerground", "leechseed", "morningsun", "toxic"],
+ "abilities": ["Flower Gift"]
+ }
+ ]
+ },
+ "gastrodon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"],
+ "abilities": ["Storm Drain"]
+ }
+ ]
+ },
+ "ambipom": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "knockoff", "lowkick", "return", "uturn"],
+ "abilities": ["Technician"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "drifblim": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["acrobatics", "defog", "destinybond", "shadowball", "substitute", "willowisp"],
+ "abilities": ["Unburden"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["acrobatics", "hex", "substitute", "willowisp"],
+ "abilities": ["Unburden"]
+ }
+ ]
+ },
+ "lopunny": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["healingwish", "highjumpkick", "icepunch", "return", "switcheroo"],
+ "abilities": ["Limber"]
+ }
+ ]
+ },
+ "lopunnymega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["encore", "fakeout", "highjumpkick", "poweruppunch", "return", "substitute"],
+ "abilities": ["Limber"]
+ }
+ ]
+ },
+ "mismagius": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dazzlinggleam", "destinybond", "painsplit", "shadowball", "taunt", "willowisp"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dazzlinggleam", "nastyplot", "shadowball", "thunderbolt", "trick"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "honchkrow": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"],
+ "abilities": ["Moxie"]
+ }
+ ]
+ },
+ "purugly": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "knockoff", "return", "uturn", "wakeupslap"],
+ "abilities": ["Defiant", "Thick Fat"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "skuntank": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "defog", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"],
+ "abilities": ["Aftermath"]
+ }
+ ]
+ },
+ "bronzong": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "ironhead", "psychic", "stealthrock", "toxic"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "chatot": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["boomburst", "chatter", "heatwave", "hiddenpowerground", "uturn"],
+ "abilities": ["Tangled Feet"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["boomburst", "chatter", "heatwave", "nastyplot", "substitute"],
+ "abilities": ["Tangled Feet"]
+ }
+ ]
+ },
+ "spiritomb": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"],
+ "abilities": ["Infiltrator"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["foulplay", "painsplit", "pursuit", "suckerpunch", "toxic", "willowisp"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "garchomp": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["dragonclaw", "earthquake", "fireblast", "outrage", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Rough Skin"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "garchompmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dracometeor", "earthquake", "fireblast", "stealthrock", "stoneedge"],
+ "abilities": ["Rough Skin"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "lucario": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletpunch", "closecombat", "crunch", "extremespeed", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "lucariomega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bulletpunch", "closecombat", "irontail", "swordsdance"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "hippowdon": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "drapion": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquatail", "earthquake", "knockoff", "poisonjab", "pursuit", "swordsdance"],
+ "abilities": ["Battle Armor"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "poisonjab", "taunt", "toxicspikes", "whirlwind"],
+ "abilities": ["Battle Armor"]
+ }
+ ]
+ },
+ "toxicroak": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drainpunch", "earthquake", "gunkshot", "knockoff", "substitute", "suckerpunch", "swordsdance"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "carnivine": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "powerwhip", "sleeppowder", "synthesis", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "lumineon": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "icebeam", "scald", "toxic", "uturn"],
+ "abilities": ["Storm Drain"]
+ }
+ ]
+ },
+ "abomasnow": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blizzard", "earthquake", "gigadrain", "iceshard", "woodhammer"],
+ "abilities": ["Snow Warning"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "abomasnowmega": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blizzard", "earthquake", "gigadrain", "iceshard", "woodhammer"],
+ "abilities": ["Snow Warning"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "weavile": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["iceshard", "iciclecrash", "knockoff", "lowkick", "pursuit", "swordsdance"],
+ "abilities": ["Pickpocket"]
+ }
+ ]
+ },
+ "magnezone": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["flashcannon", "hiddenpowerground", "thunderbolt", "voltswitch"],
+ "abilities": ["Magnet Pull"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["flashcannon", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Analytic"]
+ }
+ ]
+ },
+ "lickilicky": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "healbell", "knockoff", "protect", "wish"],
+ "abilities": ["Cloud Nine", "Oblivious"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["bodyslam", "dragontail", "earthquake", "explosion", "knockoff", "powerwhip"],
+ "abilities": ["Cloud Nine", "Own Tempo"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "earthquake", "explosion", "knockoff", "powerwhip", "return", "swordsdance"],
+ "abilities": ["Cloud Nine", "Oblivious"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "rhyperior": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dragontail", "earthquake", "icepunch", "megahorn", "stoneedge"],
+ "abilities": ["Solid Rock"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stoneedge"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "tangrowth": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "knockoff", "leafstorm", "leechseed", "morningsun", "powerwhip", "rockslide", "sleeppowder", "sludgebomb"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["earthquake", "gigadrain", "knockoff", "powerwhip", "rockslide", "sludgebomb"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "electivire": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"],
+ "abilities": ["Motor Drive"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "magmortar": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowerice", "taunt", "thunderbolt"],
+ "abilities": ["Flame Body"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "togekiss": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["airslash", "aurasphere", "nastyplot", "roost", "thunderwave"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "defog", "healbell", "roost", "thunderwave"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "aurasphere", "dazzlinggleam", "trick"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "yanmega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "protect"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["airslash", "bugbuzz", "gigadrain", "uturn"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "leafeon": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "knockoff", "leafblade", "swordsdance", "synthesis", "xscissor"],
+ "abilities": ["Chlorophyll"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "glaceon": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"],
+ "abilities": ["Ice Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "toxic", "wish"],
+ "abilities": ["Ice Body"]
+ }
+ ]
+ },
+ "gliscor": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "protect", "substitute", "toxic"],
+ "abilities": ["Poison Heal"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "taunt", "toxic", "uturn"],
+ "abilities": ["Poison Heal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "facade", "roost", "swordsdance"],
+ "abilities": ["Poison Heal"]
+ }
+ ]
+ },
+ "mamoswine": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "iceshard", "iciclecrash", "knockoff", "stealthrock"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "porygonz": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "nastyplot", "shadowball", "thunderbolt", "triattack", "trick"],
+ "abilities": ["Adaptability", "Download"]
+ }
+ ]
+ },
+ "gallade": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "icepunch", "knockoff", "shadowsneak", "swordsdance", "zenheadbutt"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "gallademega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["closecombat", "knockoff", "swordsdance", "zenheadbutt"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "probopass": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "flashcannon", "stealthrock", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Magnet Pull"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthpower", "powergem", "stealthrock", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Magnet Pull"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "dusknoir": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "haze", "icepunch", "painsplit", "shadowsneak", "toxic", "willowisp"],
+ "abilities": ["Frisk", "Pressure"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "shadowsneak", "toxic"],
+ "abilities": ["Frisk", "Pressure"]
+ }
+ ]
+ },
+ "froslass": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave"],
+ "abilities": ["Cursed Body"]
+ }
+ ]
+ },
+ "rotom": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomheat": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerice", "overheat", "painsplit", "thunderbolt", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomwash": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hydropump", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomfrost": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blizzard", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomfan": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "painsplit", "thunderbolt", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotommow": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["hiddenpowerice", "leafstorm", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "uxie": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn", "yawn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "mesprit": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "healingwish", "hiddenpowerfire", "psychic", "psyshock", "signalbeam", "thunderbolt", "uturn"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Bug"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "azelf": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dazzlinggleam", "fireblast", "nastyplot", "psychic", "psyshock", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["explosion", "fireblast", "knockoff", "psychic", "stealthrock", "taunt", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "dialga": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "dragontail", "fireblast", "flashcannon", "stealthrock", "thunderbolt", "toxic"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "palkia": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "heatran": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "flashcannon", "lavaplume", "magmastorm", "stealthrock", "taunt", "toxic"],
+ "abilities": ["Flash Fire"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthpower", "magmastorm", "protect", "toxic"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "regigigas": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drainpunch", "knockoff", "return", "substitute", "thunderwave"],
+ "abilities": ["Slow Start"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "giratinaorigin": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "hex", "shadowsneak", "thunderwave", "willowisp"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["defog", "dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "giratina": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["dragontail", "rest", "shadowball", "sleeptalk", "willowisp"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "dragontail", "rest", "shadowball", "willowisp"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "cresselia": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "moonblast", "moonlight", "psyshock"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["moonblast", "moonlight", "psychic", "thunderwave", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "phione": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "icebeam", "knockoff", "scald", "toxic", "uturn"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "manaphy": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["energyball", "icebeam", "surf", "tailglow"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "darkrai": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["darkpulse", "darkvoid", "nastyplot", "sludgebomb"],
+ "abilities": ["Bad Dreams"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "shaymin": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["airslash", "earthpower", "leechseed", "seedflare", "substitute", "synthesis"],
+ "abilities": ["Natural Cure"],
+ "preferredTypes": ["Flying"]
+ }
+ ]
+ },
+ "shayminsky": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "arceus": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusbug": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "judgment"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusdark": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "defog", "fireblast", "judgment", "recover", "sludgebomb", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusdragon": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "outrage", "recover", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceuselectric": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfairy": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfighting": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover", "shadowball"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfire": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "energyball", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusflying": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusghost": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "defog", "focusblast", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["brickbreak", "extremespeed", "shadowforce", "swordsdance"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusgrass": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "judgment"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusground": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusice": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceuspoison": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "icebeam", "recover", "sludgebomb"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "recover", "sludgebomb"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceuspsychic": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusrock": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceussteel": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceuswater": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "victini": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["boltstrike", "uturn", "vcreate", "zenheadbutt"],
+ "abilities": ["Victory Star"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["boltstrike", "energyball", "focusblast", "glaciate", "psychic", "uturn", "vcreate"],
+ "abilities": ["Victory Star"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "serperior": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragonpulse", "glare", "hiddenpowerfire", "leafstorm", "leechseed", "substitute"],
+ "abilities": ["Contrary"]
+ }
+ ]
+ },
+ "emboar": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["flareblitz", "headsmash", "suckerpunch", "superpower", "wildcharge"],
+ "abilities": ["Reckless"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["flareblitz", "grassknot", "suckerpunch", "superpower", "wildcharge"],
+ "abilities": ["Reckless"]
+ }
+ ]
+ },
+ "samurott": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "knockoff", "megahorn", "scald", "superpower"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "knockoff", "megahorn", "superpower", "swordsdance", "waterfall"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "watchog": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hypnosis", "knockoff", "return", "superfang"],
+ "abilities": ["Analytic"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hypnosis", "knockoff", "return", "substitute", "swordsdance"],
+ "abilities": ["Analytic"]
+ }
+ ]
+ },
+ "stoutland": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crunch", "facade", "return", "superpower"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "liepard": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["copycat", "encore", "knockoff", "substitute", "thunderwave", "uturn"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["gunkshot", "knockoff", "playrough", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "simisage": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["gunkshot", "hiddenpowerice", "knockoff", "leafstorm", "rockslide", "superpower"],
+ "abilities": ["Overgrow"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "gigadrain", "hiddenpowerice", "nastyplot", "substitute"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "simisear": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["fireblast", "focusblast", "grassknot", "hiddenpowerrock", "nastyplot", "substitute"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "simipour": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hydropump", "icebeam", "nastyplot", "substitute"],
+ "abilities": ["Torrent"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "musharna": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "moonlight", "psyshock", "shadowball", "signalbeam"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "moonlight", "psychic", "signalbeam", "thunderwave", "toxic"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "unfezant": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["nightslash", "pluck", "return", "roost", "toxic", "uturn"],
+ "abilities": ["Super Luck"]
+ }
+ ]
+ },
+ "zebstrika": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "overheat", "voltswitch", "wildcharge"],
+ "abilities": ["Sap Sipper"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "gigalith": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower", "toxic"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "swoobat": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "heatwave", "roost", "storedpower"],
+ "abilities": ["Simple"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "calmmind", "heatwave", "roost", "storedpower"],
+ "abilities": ["Simple"]
+ }
+ ]
+ },
+ "excadrill": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "ironhead", "rapidspin", "rockslide", "swordsdance"],
+ "abilities": ["Mold Breaker", "Sand Rush"]
+ }
+ ]
+ },
+ "audino": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "protect", "toxic", "wish"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "audinomega": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["dazzlinggleam", "protect", "toxic", "wish"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["calmmind", "dazzlinggleam", "fireblast", "protect", "wish"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "conkeldurr": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drainpunch", "facade", "knockoff", "machpunch"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "drainpunch", "knockoff", "machpunch"],
+ "abilities": ["Iron Fist"]
+ }
+ ]
+ },
+ "seismitoad": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hydropump", "knockoff", "raindance", "sludgewave"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "scald", "stealthrock", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "scald", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "throh": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulkup", "circlethrow", "knockoff", "rest", "sleeptalk"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "sawk": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulkup", "closecombat", "earthquake", "knockoff", "poisonjab", "stoneedge"],
+ "abilities": ["Mold Breaker", "Sturdy"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "leavanny": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["knockoff", "leafblade", "stickyweb", "toxic", "xscissor"],
+ "abilities": ["Chlorophyll", "Swarm"]
+ }
+ ]
+ },
+ "scolipede": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["earthquake", "megahorn", "poisonjab", "spikes", "toxicspikes"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "megahorn", "poisonjab", "swordsdance"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "whimsicott": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["encore", "energyball", "moonblast", "stunspore", "taunt", "toxic", "uturn"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["leechseed", "moonblast", "protect", "substitute"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "lilligant": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "quiverdance", "sleeppowder"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerfire", "hiddenpowerrock", "petaldance", "quiverdance", "sleeppowder"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "basculin": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "crunch", "superpower", "waterfall", "zenheadbutt"],
+ "abilities": ["Adaptability"]
+ }
+ ]
+ },
+ "krookodile": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "knockoff", "pursuit", "stealthrock", "stoneedge", "superpower"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "darmanitan": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "maractus": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["gigadrain", "hiddenpowerfire", "knockoff", "spikes", "synthesis", "toxic"],
+ "abilities": ["Storm Drain", "Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "spikyshield"],
+ "abilities": ["Storm Drain", "Water Absorb"]
+ }
+ ]
+ },
+ "crustle": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "knockoff", "shellsmash", "stoneedge", "xscissor"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "scrafty": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "highjumpkick", "ironhead", "knockoff"],
+ "abilities": ["Intimidate", "Moxie"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bulkup", "drainpunch", "knockoff", "rest"],
+ "abilities": ["Shed Skin"]
+ }
+ ]
+ },
+ "sigilyph": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "calmmind", "heatwave", "psyshock", "roost"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["airslash", "energyball", "heatwave", "icebeam", "psychic", "psyshock"],
+ "abilities": ["Tinted Lens"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["cosmicpower", "psychoshift", "roost", "storedpower"],
+ "abilities": ["Magic Guard"]
+ }
+ ]
+ },
+ "cofagrigus": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["haze", "painsplit", "shadowball", "toxicspikes", "willowisp"],
+ "abilities": ["Mummy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "trickroom"],
+ "abilities": ["Mummy"]
+ }
+ ]
+ },
+ "carracosta": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aquajet", "earthquake", "icebeam", "shellsmash", "stoneedge", "waterfall"],
+ "abilities": ["Solid Rock", "Sturdy", "Swift Swim"]
+ }
+ ]
+ },
+ "archeops": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["acrobatics", "defog", "earthquake", "knockoff", "roost", "stealthrock", "stoneedge", "uturn"],
+ "abilities": ["Defeatist"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "garbodor": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drainpunch", "gunkshot", "haze", "painsplit", "spikes", "toxic", "toxicspikes"],
+ "abilities": ["Aftermath"]
+ }
+ ]
+ },
+ "zoroark": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "flamethrower", "focusblast", "nastyplot", "sludgebomb", "trick", "uturn"],
+ "abilities": ["Illusion"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "cinccino": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletseed", "knockoff", "rockblast", "tailslap", "uturn"],
+ "abilities": ["Skill Link"]
+ }
+ ]
+ },
+ "gothitelle": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "shadowball", "signalbeam", "thunderbolt", "trick"],
+ "abilities": ["Shadow Tag"]
+ }
+ ]
+ },
+ "reuniclus": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover", "signalbeam"],
+ "abilities": ["Magic Guard"]
+ }
+ ]
+ },
+ "swanna": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "roost", "scald", "toxic"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "vanilluxe": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["autotomize", "explosion", "flashcannon", "freezedry", "hiddenpowerground", "icebeam", "toxic"],
+ "abilities": ["Weak Armor"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["explosion", "flashcannon", "freezedry", "hiddenpowerground", "icebeam"],
+ "abilities": ["Weak Armor"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "sawsbuck": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hornleech", "jumpkick", "return", "substitute", "swordsdance"],
+ "abilities": ["Sap Sipper"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "emolga": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["acrobatics", "encore", "knockoff", "nuzzle", "roost", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Motor Drive"]
+ }
+ ]
+ },
+ "escavalier": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drillrun", "ironhead", "knockoff", "megahorn", "pursuit", "swordsdance"],
+ "abilities": ["Overcoat", "Swarm"]
+ }
+ ]
+ },
+ "amoonguss": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["clearsmog", "foulplay", "gigadrain", "hiddenpowerground", "sludgebomb", "spore"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "sludgebomb", "spore", "synthesis"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "jellicent": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icebeam", "recover", "scald", "shadowball", "taunt"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["hex", "recover", "scald", "toxic", "willowisp"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "alomomola": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "protect", "scald", "toxic", "wish"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "galvantula": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bugbuzz", "gigadrain", "stickyweb", "thunder", "voltswitch"],
+ "abilities": ["Compound Eyes"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "ferrothorn": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["gyroball", "leechseed", "powerwhip", "spikes", "stealthrock"],
+ "abilities": ["Iron Barbs"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "powerwhip", "spikes", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Iron Barbs"]
+ }
+ ]
+ },
+ "klinklang": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "eelektross": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["discharge", "flamethrower", "gigadrain", "hiddenpowerice", "knockoff", "superpower", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "beheeyem": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerfighting", "psychic", "psyshock", "recover", "signalbeam", "thunderbolt", "trick", "trickroom"],
+ "abilities": ["Analytic"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "chandelure": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["energyball", "fireblast", "shadowball", "trick"],
+ "abilities": ["Flash Fire"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "fireblast", "shadowball", "substitute"],
+ "abilities": ["Flame Body", "Flash Fire"]
+ }
+ ]
+ },
+ "haxorus": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "outrage", "poisonjab", "taunt"],
+ "abilities": ["Mold Breaker"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "beartic": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquajet", "iciclecrash", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Swift Swim"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "cryogonal": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["freezedry", "haze", "hiddenpowerground", "rapidspin", "recover", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "accelgor": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["bugbuzz", "encore", "focusblast", "hiddenpowerground", "hiddenpowerrock", "spikes", "uturn"],
+ "abilities": ["Hydration", "Sticky Hold"]
+ }
+ ]
+ },
+ "stunfisk": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["discharge", "earthpower", "rest", "scald", "sleeptalk", "stealthrock", "toxic"],
+ "abilities": ["Static"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["discharge", "earthpower", "foulplay", "scald", "sludgebomb"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "mienshao": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["highjumpkick", "knockoff", "poisonjab", "stoneedge", "swordsdance", "uturn"],
+ "abilities": ["Reckless"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["fakeout", "highjumpkick", "knockoff", "uturn"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "druddigon": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["firepunch", "glare", "gunkshot", "outrage", "suckerpunch"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Poison"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "earthquake", "glare", "gunkshot", "outrage", "stealthrock", "suckerpunch"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "golurk": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dynamicpunch", "earthquake", "icepunch", "rockpolish", "stealthrock", "stoneedge"],
+ "abilities": ["No Guard"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "bisharp": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["ironhead", "knockoff", "pursuit", "suckerpunch", "swordsdance"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "bouffalant": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "headcharge", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Reckless", "Sap Sipper"]
+ }
+ ]
+ },
+ "braviary": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "bulkup", "roost", "superpower"],
+ "abilities": ["Defiant"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "return", "superpower", "uturn"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "mandibuzz": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "foulplay", "knockoff", "roost", "taunt", "toxic", "uturn"],
+ "abilities": ["Overcoat"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "foulplay", "roost", "taunt", "toxic", "uturn"],
+ "abilities": ["Overcoat"]
+ }
+ ]
+ },
+ "heatmor": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["fireblast", "gigadrain", "knockoff", "suckerpunch", "superpower"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "durant": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["honeclaws", "ironhead", "rockslide", "superpower", "xscissor"],
+ "abilities": ["Hustle"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "hydreigon": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "dracometeor", "earthpower", "fireblast", "flashcannon", "roost", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["darkpulse", "dracometeor", "fireblast", "roost", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["darkpulse", "dracometeor", "flashcannon", "superpower", "uturn"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "volcarona": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerrock", "quiverdance", "roost"],
+ "abilities": ["Flame Body", "Swarm"]
+ }
+ ]
+ },
+ "cobalion": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "ironhead", "stealthrock", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "terrakion": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "quickattack", "stealthrock", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "virizion": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "tornadus": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"],
+ "abilities": ["Defiant", "Prankster"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "bulkup", "knockoff", "superpower", "taunt"],
+ "abilities": ["Defiant"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "tornadustherian": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "thundurus": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerflying", "hiddenpowerice", "knockoff", "superpower", "taunt", "thunderbolt", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "thundurustherian": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "reshiram": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blueflare", "dracometeor", "roost", "toxic"],
+ "abilities": ["Turboblaze"]
+ }
+ ]
+ },
+ "zekrom": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["boltstrike", "honeclaws", "outrage", "roost", "substitute"],
+ "abilities": ["Teravolt"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["boltstrike", "dracometeor", "outrage", "voltswitch"],
+ "abilities": ["Teravolt"]
+ }
+ ]
+ },
+ "landorus": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "focusblast", "knockoff", "psychic", "rockpolish", "rockslide", "sludgewave", "stealthrock"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "focusblast", "psychic", "rockpolish", "sludgewave"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "landorustherian": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "stealthrock", "stoneedge", "toxic", "uturn"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "knockoff", "rockpolish", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "kyurem": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthpower", "icebeam", "roost", "substitute"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["dracometeor", "earthpower", "icebeam", "outrage", "roost", "substitute"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "earthpower", "focusblast", "icebeam", "outrage"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "kyuremblack": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "fusionbolt", "icebeam", "outrage", "roost", "substitute"],
+ "abilities": ["Teravolt"]
+ }
+ ]
+ },
+ "kyuremwhite": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dracometeor", "earthpower", "fusionflare", "icebeam", "roost"],
+ "abilities": ["Turboblaze"]
+ }
+ ]
+ },
+ "keldeo": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hydropump", "icywind", "scald", "secretsword"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "scald", "secretsword", "substitute"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "hydropump", "scald", "secretsword"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "meloetta": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "uturn"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "knockoff", "relicsong", "return"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "genesect": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["blazekick", "ironhead", "shiftgear", "thunderbolt", "xscissor"],
+ "abilities": ["Download"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["blazekick", "extremespeed", "ironhead", "uturn"],
+ "abilities": ["Download"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bugbuzz", "flamethrower", "flashcannon", "icebeam", "thunderbolt", "uturn"],
+ "abilities": ["Download"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "chesnaught": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulkup", "drainpunch", "spikes", "synthesis", "toxic", "woodhammer"],
+ "abilities": ["Bulletproof"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["drainpunch", "leechseed", "spikyshield", "woodhammer"],
+ "abilities": ["Bulletproof"]
+ }
+ ]
+ },
+ "delphox": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "dazzlinggleam", "fireblast", "grassknot", "psyshock", "switcheroo"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "greninja": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["grassknot", "gunkshot", "hydropump", "icebeam", "spikes", "taunt", "toxicspikes", "uturn"],
+ "abilities": ["Protean"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "diggersby": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "earthquake", "knockoff", "quickattack", "return", "swordsdance"],
+ "abilities": ["Huge Power"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "foulplay", "quickattack", "return", "uturn"],
+ "abilities": ["Huge Power"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "talonflame": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "overheat", "roost", "uturn", "willowisp"],
+ "abilities": ["Gale Wings"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bravebird", "flareblitz", "roost", "swordsdance"],
+ "abilities": ["Gale Wings"]
+ }
+ ]
+ },
+ "vivillon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["energyball", "hurricane", "quiverdance", "sleeppowder"],
+ "abilities": ["Compound Eyes"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bugbuzz", "hurricane", "quiverdance", "sleeppowder"],
+ "abilities": ["Compound Eyes"]
+ }
+ ]
+ },
+ "pyroar": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "fireblast", "hypervoice", "solarbeam", "sunnyday", "willowisp", "workup"],
+ "abilities": ["Unnerve"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "floetteeternal": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerfire", "hiddenpowerground", "lightofruin", "moonblast", "psychic"],
+ "abilities": ["Flower Veil"]
+ }
+ ]
+ },
+ "florges": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "moonblast", "synthesis", "toxic"],
+ "abilities": ["Flower Veil"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["moonblast", "protect", "toxic", "wish"],
+ "abilities": ["Flower Veil"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hiddenpowerground", "moonblast", "synthesis"],
+ "abilities": ["Flower Veil"]
+ }
+ ]
+ },
+ "gogoat": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "earthquake", "hornleech", "milkdrink", "toxic"],
+ "abilities": ["Sap Sipper"]
+ }
+ ]
+ },
+ "pangoro": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drainpunch", "gunkshot", "icepunch", "knockoff", "partingshot", "superpower", "swordsdance"],
+ "abilities": ["Iron Fist", "Scrappy"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "furfrou": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["darkpulse", "rest", "return", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Fur Coat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["cottonguard", "rest", "return", "substitute", "toxic"],
+ "abilities": ["Fur Coat"]
+ }
+ ]
+ },
+ "meowstic": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "lightscreen", "psychic", "reflect", "signalbeam", "thunderwave", "toxic", "yawn"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "meowsticf": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "darkpulse", "psychic", "psyshock", "signalbeam", "thunderbolt"],
+ "abilities": ["Competitive"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "doublade": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["ironhead", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"],
+ "abilities": ["No Guard"]
+ }
+ ]
+ },
+ "aegislash": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["ironhead", "kingsshield", "shadowball", "substitute", "toxic"],
+ "abilities": ["Stance Change"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["ironhead", "kingsshield", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"],
+ "abilities": ["Stance Change"],
+ "preferredTypes": ["Steel"]
+ }
+ ]
+ },
+ "aromatisse": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["calmmind", "moonblast", "protect", "toxic", "wish"],
+ "abilities": ["Aroma Veil"]
+ }
+ ]
+ },
+ "slurpuff": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "drainpunch", "playrough", "return"],
+ "abilities": ["Unburden"]
+ }
+ ]
+ },
+ "malamar": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["knockoff", "rest", "sleeptalk", "superpower"],
+ "abilities": ["Contrary"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["knockoff", "psychocut", "rest", "superpower"],
+ "abilities": ["Contrary"]
+ }
+ ]
+ },
+ "barbaracle": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "lowkick", "razorshell", "shellsmash", "stoneedge"],
+ "abilities": ["Tough Claws"]
+ }
+ ]
+ },
+ "dragalge": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "focusblast", "sludgewave", "toxicspikes"],
+ "abilities": ["Adaptability"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dracometeor", "dragonpulse", "focusblast", "sludgewave"],
+ "abilities": ["Adaptability"]
+ }
+ ]
+ },
+ "clawitzer": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn", "waterpulse"],
+ "abilities": ["Mega Launcher"]
+ }
+ ]
+ },
+ "heliolisk": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "glare", "hypervoice", "surf", "thunderbolt", "voltswitch"],
+ "abilities": ["Dry Skin"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hypervoice", "raindance", "surf", "thunder"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "tyrantrum": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragondance", "earthquake", "headsmash", "outrage", "superpower"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "aurorus": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["ancientpower", "blizzard", "earthpower", "freezedry", "haze", "stealthrock", "thunderwave"],
+ "abilities": ["Snow Warning"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["ancientpower", "earthpower", "freezedry", "haze", "hypervoice", "stealthrock", "thunderwave"],
+ "abilities": ["Refrigerate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "sylveon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "hiddenpowerground", "hypervoice", "protect", "psyshock", "wish"],
+ "abilities": ["Pixilate"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hypervoice", "protect", "wish"],
+ "abilities": ["Pixilate"]
+ }
+ ]
+ },
+ "hawlucha": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "highjumpkick", "skyattack", "substitute", "swordsdance"],
+ "abilities": ["Unburden"]
+ }
+ ]
+ },
+ "dedenne": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "recycle", "thunderbolt", "toxic"],
+ "abilities": ["Cheek Pouch"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["recycle", "substitute", "superfang", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Cheek Pouch"]
+ }
+ ]
+ },
+ "carbink": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["lightscreen", "moonblast", "powergem", "reflect", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "goodra": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["dracometeor", "dragontail", "earthquake", "fireblast", "powerwhip", "sludgebomb"],
+ "abilities": ["Sap Sipper"]
+ }
+ ]
+ },
+ "klefki": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dazzlinggleam", "foulplay", "spikes", "thunderwave"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["magnetrise", "playrough", "spikes", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "trevenant": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drainpunch", "earthquake", "hornleech", "rockslide", "shadowclaw", "trickroom", "woodhammer"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "hornleech", "protect", "toxic"],
+ "abilities": ["Harvest"]
+ }
+ ]
+ },
+ "gourgeistsmall": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "gourgeistlarge": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "gourgeist": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "gourgeistsuper": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "avalugg": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["avalanche", "curse", "earthquake", "rapidspin", "recover"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "noivern": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["boomburst", "dracometeor", "flamethrower", "hurricane", "roost", "switcheroo", "uturn"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "xerneas": {
+ "level": 64,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "geomancy", "moonblast", "psyshock"],
+ "abilities": ["Fairy Aura"]
+ }
+ ]
+ },
+ "yveltal": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "oblivionwing", "roost", "suckerpunch", "taunt", "toxic", "uturn"],
+ "abilities": ["Dark Aura"]
+ }
+ ]
+ },
+ "zygarde": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "extremespeed", "glare", "outrage", "substitute"],
+ "abilities": ["Aura Break"]
+ }
+ ]
+ },
+ "diancie": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["diamondstorm", "earthpower", "healbell", "moonblast", "stealthrock", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "dianciemega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "diamondstorm", "earthpower", "moonblast", "protect"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "hoopa": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "shadowball", "trick"],
+ "abilities": ["Magician"]
+ }
+ ]
+ },
+ "hoopaunbound": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drainpunch", "gunkshot", "hyperspacefury", "trick", "zenheadbutt"],
+ "abilities": ["Magician"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drainpunch", "gunkshot", "hyperspacefury", "psychic", "trick"],
+ "abilities": ["Magician"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "volcanion": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "fireblast", "sludgebomb", "steameruption", "superpower", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen6/teams.ts b/data/random-battles/gen6/teams.ts
new file mode 100644
index 000000000000..dce848f40ad9
--- /dev/null
+++ b/data/random-battles/gen6/teams.ts
@@ -0,0 +1,1126 @@
+import {MoveCounter, TeamData} from '../gen8/teams';
+import RandomGen7Teams, {BattleFactorySpecies, ZeroAttackHPIVs} from '../gen7/teams';
+import {PRNG, PRNGSeed} from '../../../sim/prng';
+import {toID} from '../../../sim/dex';
+
+// Moves that restore HP:
+const RECOVERY_MOVES = [
+ 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'recycle', 'roost', 'slackoff', 'softboiled', 'synthesis',
+];
+// Moves that boost Attack:
+const PHYSICAL_SETUP = [
+ 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'screech', 'swordsdance',
+];
+// Moves which boost Special Attack:
+const SPECIAL_SETUP = [
+ 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow',
+];
+// Some moves that only boost Speed:
+const SPEED_SETUP = [
+ 'agility', 'autotomize', 'flamecharge', 'rockpolish',
+];
+// Conglomerate for ease of access
+const SETUP = [
+ 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'coil', 'curse', 'dragondance', 'flamecharge',
+ 'focusenergy', 'geomancy', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'poweruppunch',
+ 'quiverdance', 'raindance', 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'workup',
+];
+// Moves that shouldn't be the only STAB moves:
+const NO_STAB = [
+ 'aquajet', 'bulletpunch', 'clearsmog', 'dragontail', 'eruption', 'explosion', 'fakeout', 'flamecharge',
+ 'futuresight', 'iceshard', 'icywind', 'incinerate', 'infestation', 'machpunch', 'nuzzle', 'pluck', 'poweruppunch',
+ 'pursuit', 'quickattack', 'rapidspin', 'reversal', 'selfdestruct', 'shadowsneak', 'skyattack', 'skydrop', 'snarl',
+ 'suckerpunch', 'uturn', 'watershuriken', 'vacuumwave', 'voltswitch', 'waterspout',
+];
+// Hazard-setting moves
+const HAZARDS = [
+ 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes',
+];
+// Protect and its variants
+const PROTECT_MOVES = [
+ 'kingsshield', 'protect', 'spikyshield',
+];
+// Moves that switch the user out
+const PIVOT_MOVES = [
+ 'partingshot', 'uturn', 'voltswitch',
+];
+
+// Moves that should be paired together when possible
+const MOVE_PAIRS = [
+ ['lightscreen', 'reflect'],
+ ['sleeptalk', 'rest'],
+ ['protect', 'wish'],
+ ['spikyshield', 'wish'],
+ ['leechseed', 'substitute'],
+ ['perishsong', 'protect'],
+ ['solarbeam', 'sunnyday'],
+];
+
+/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */
+const PRIORITY_POKEMON = [
+ 'aegislash', 'banette', 'breloom', 'cacturne', 'doublade', 'dusknoir', 'honchkrow', 'scizor', 'scizormega', 'shedinja',
+];
+
+export class RandomGen6Teams extends RandomGen7Teams {
+ randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json');
+
+ constructor(format: Format | string, prng: PRNG | PRNGSeed | null) {
+ super(format, prng);
+
+ this.noStab = NO_STAB;
+ this.priorityPokemon = PRIORITY_POKEMON;
+
+ this.moveEnforcementCheckers = {
+ Bug: (movePool, moves, abilities, types, counter) => (
+ ['megahorn', 'pinmissile'].some(m => movePool.includes(m)) ||
+ !counter.get('Bug') && abilities.includes('Tinted Lens')
+ ),
+ Dark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'),
+ Dragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon'),
+ Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'),
+ Fairy: (movePool, moves, abilities, types, counter) => !counter.get('Fairy'),
+ Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'),
+ Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'),
+ Flying: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Flying') && !['aerodactyl', 'aerodactylmega', 'mantine', 'murkrow'].includes(species.id) &&
+ !movePool.includes('hiddenpowerflying')
+ ),
+ Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'),
+ Grass: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Grass') && (species.baseStats.atk >= 100 || movePool.includes('leafstorm'))
+ ),
+ Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'),
+ Ice: (movePool, moves, abilities, types, counter) => (
+ !counter.get('Ice') || (moves.has('icebeam') && movePool.includes('freezedry')) ||
+ abilities.includes('Refrigerate') && (movePool.includes('return') || movePool.includes('hypervoice'))
+ ),
+ Normal: movePool => movePool.includes('boomburst'),
+ Poison: (movePool, moves, abilities, types, counter) => !counter.get('Poison'),
+ Psychic: (movePool, moves, abilities, types, counter) => (
+ !counter.get('Psychic') && (types.has('Fighting') || movePool.includes('calmmind'))
+ ),
+ Rock: (movePool, moves, abilities, types, counter, species) => (!counter.get('Rock') && species.baseStats.atk >= 80),
+ Steel: (movePool, moves, abilities, types, counter, species) => (!counter.get('Steel') && species.baseStats.atk >= 100),
+ Water: (movePool, moves, abilities, types, counter) => !counter.get('Water'),
+ };
+ this.cachedStatusMoves = this.dex.moves.all()
+ .filter(move => move.category === 'Status')
+ .map(move => move.id);
+ }
+
+ cullMovePool(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): void {
+ // Pokemon cannot have multiple Hidden Powers in any circumstance
+ let hasHiddenPower = false;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hasHiddenPower = true;
+ }
+ if (hasHiddenPower) {
+ let movePoolHasHiddenPower = true;
+ while (movePoolHasHiddenPower) {
+ movePoolHasHiddenPower = false;
+ for (const moveid of movePool) {
+ if (moveid.startsWith('hiddenpower')) {
+ this.fastPop(movePool, movePool.indexOf(moveid));
+ movePoolHasHiddenPower = true;
+ break;
+ }
+ }
+ }
+ }
+
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
+ if (moves.size === this.maxMoveCount - 2) {
+ const unpairedMoves = [...movePool];
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
+ }
+ }
+ if (unpairedMoves.length === 1) {
+ this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
+ }
+ }
+
+ // These moves are paired, and shouldn't appear if there is not room for them both.
+ if (moves.size === this.maxMoveCount - 1) {
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(movePool, movePool.indexOf(pair[0]));
+ this.fastPop(movePool, movePool.indexOf(pair[1]));
+ }
+ }
+ }
+
+ // Team-based move culls
+ if (teamDetails.screens && movePool.length >= this.maxMoveCount + 2) {
+ if (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect'));
+ if (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.stickyWeb) {
+ if (movePool.includes('stickyweb')) this.fastPop(movePool, movePool.indexOf('stickyweb'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.stealthRock) {
+ if (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.defog || teamDetails.rapidSpin) {
+ if (movePool.includes('defog')) this.fastPop(movePool, movePool.indexOf('defog'));
+ if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.toxicSpikes) {
+ if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.spikes && teamDetails.spikes >= 2) {
+ if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.statusCure) {
+ if (movePool.includes('aromatherapy')) this.fastPop(movePool, movePool.indexOf('aromatherapy'));
+ if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+
+ // Develop additional move lists
+ const badWithSetup = ['defog', 'dragontail', 'haze', 'healbell', 'nuzzle', 'pursuit', 'rapidspin', 'toxic'];
+ const statusMoves = this.cachedStatusMoves;
+
+ // General incompatibilities
+ const incompatiblePairs = [
+ // These moves don't mesh well with other aspects of the set
+ [statusMoves, ['healingwish', 'memento', 'switcheroo', 'trick']],
+ [SETUP, PIVOT_MOVES],
+ [SETUP, HAZARDS],
+ [SETUP, badWithSetup],
+ [PHYSICAL_SETUP, PHYSICAL_SETUP],
+ [SPEED_SETUP, 'quickattack'],
+ ['defog', HAZARDS],
+ [['fakeout', 'uturn'], ['switcheroo', 'trick']],
+ ['substitute', PIVOT_MOVES],
+ ['leechseed', 'dragontail'],
+ ['rest', 'substitute'],
+ [PHYSICAL_SETUP, 'dracometeor'],
+ [SPECIAL_SETUP, 'knockoff'],
+
+ // These attacks are redundant with each other
+ ['psychic', 'psyshock'],
+ ['scald', ['hydropump', 'originpulse', 'waterpulse']],
+ ['return', ['bodyslam', 'doubleedge']],
+ [['fierydance', 'lavaplume'], ['fireblast', 'magmastorm']],
+ [['flamethrower', 'flareblitz'], ['fireblast', 'overheat']],
+ ['hornleech', 'woodhammer'],
+ [['gigadrain', 'leafstorm'], ['leafstorm', 'petaldance', 'powerwhip']],
+ ['wildcharge', 'thunderbolt'],
+ ['gunkshot', 'poisonjab'],
+ [['drainpunch', 'focusblast'], ['closecombat', 'highjumpkick', 'superpower']],
+ ['stoneedge', 'headsmash'],
+ ['dracometeor', 'dragonpulse'],
+ ['dragonclaw', 'outrage'],
+ ['knockoff', ['darkpulse', 'foulplay']],
+
+ // Status move incompatibilities
+ ['toxic', 'toxicspikes'],
+ ['taunt', 'disable'],
+ ['defog', ['leechseed', 'substitute']],
+
+ // Assorted hardcodes go here:
+ // Lunatone
+ ['moonlight', 'rockpolish'],
+ // Smeargle
+ ['nuzzle', 'whirlwind'],
+ // Liepard
+ ['copycat', 'uturn'],
+ // Seviper
+ ['switcheroo', 'suckerpunch'],
+ // Jirachi
+ ['bodyslam', 'healingwish'],
+ ];
+
+ for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
+
+ if (!types.includes('Dark') && preferredType !== 'Dark') {
+ this.incompatibleMoves(moves, movePool, 'knockoff', ['pursuit', 'suckerpunch']);
+ }
+
+ const statusInflictingMoves = ['thunderwave', 'toxic', 'willowisp', 'yawn'];
+ if (!abilities.includes('Prankster') && role !== 'Staller') {
+ this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves);
+ }
+
+ if (abilities.includes('Guts')) this.incompatibleMoves(moves, movePool, 'protect', 'swordsdance');
+
+ // Force Protect and U-turn on Beedrill-Mega
+ if (species.id === 'beedrillmega') {
+ this.incompatibleMoves(moves, movePool, 'drillrun', 'knockoff');
+ }
+
+ // Cull filler moves for otherwise fixed set Stealth Rock users
+ if (!teamDetails.stealthRock) {
+ if (species.id === 'registeel' && role === 'Staller') {
+ if (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (species.baseSpecies === 'Wormadam' && role === 'Staller') {
+ if (movePool.includes('infestation')) this.fastPop(movePool, movePool.indexOf('infestation'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ }
+ }
+
+ // Generate random moveset for a given species, role, preferred type.
+ randomMoveset(
+ types: string[],
+ abilities: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ movePool: string[],
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): Set {
+ const moves = new Set();
+ let counter = this.newQueryMoves(moves, species, preferredType, abilities);
+ this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead,
+ preferredType, role);
+
+ // If there are only four moves, add all moves and return early
+ if (movePool.length <= this.maxMoveCount) {
+ // Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased)
+ while (movePool.length) {
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ return moves;
+ }
+
+ const runEnforcementChecker = (checkerName: string) => {
+ if (!this.moveEnforcementCheckers[checkerName]) return false;
+ return this.moveEnforcementCheckers[checkerName](
+ movePool, moves, abilities, new Set(types), counter, species, teamDetails
+ );
+ };
+
+ // Add required move (e.g. Relic Song for Meloetta-P)
+ if (species.requiredMove) {
+ const move = this.dex.moves.get(species.requiredMove).id;
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Add other moves you really want to have, e.g. STAB, recovery, setup.
+
+ // Enforce Facade if Guts is a possible ability
+ if (movePool.includes('facade') && abilities.includes('Guts')) {
+ counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Enforce Blizzard, Seismic Toss, Spore, and Sticky Web
+ for (const moveid of ['blizzard', 'seismictoss', 'spore', 'stickyweb']) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Thunder Wave on Prankster users
+ if (movePool.includes('thunderwave') && abilities.includes('Prankster')) {
+ counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Enforce Shadow Sneak on Kecleon
+ if (movePool.includes('shadowsneak') && species.id === 'kecleon') {
+ counter = this.addMove('shadowsneak', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Enforce hazard removal on Bulky Support if the team doesn't already have it
+ if (role === 'Bulky Support' && !teamDetails.defog && !teamDetails.rapidSpin) {
+ if (movePool.includes('rapidspin')) {
+ counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ if (movePool.includes('defog')) {
+ counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce STAB priority
+ if (['Bulky Attacker', 'Bulky Setup', 'Wallbreaker'].includes(role) || this.priorityPokemon.includes(species.id)) {
+ const priorityMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (types.includes(moveType) && move.priority > 0 && (move.basePower || move.basePowerCallback)) {
+ priorityMoves.push(moveid);
+ }
+ }
+ if (priorityMoves.length) {
+ const moveid = this.sample(priorityMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce STAB
+ for (const type of types) {
+ // Check if a STAB move of that type should be required
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ while (runEnforcementChecker(type)) {
+ if (!stabMoves.length) break;
+ const moveid = this.sampleNoReplace(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Preferred Type
+ if (!counter.get('preferred')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && preferredType === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // If no STAB move was added, add a STAB move
+ if (!counter.get('stab')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ } else {
+ // If they have no regular STAB move, enforce U-turn on Bug types.
+ if (movePool.includes('uturn') && types.includes('Bug')) {
+ counter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce recovery
+ if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup', 'Staller'].includes(role)) {
+ const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));
+ if (recoveryMoves.length) {
+ const moveid = this.sample(recoveryMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Staller moves
+ if (role === 'Staller') {
+ const enforcedMoves = [...PROTECT_MOVES, 'toxic'];
+ for (const move of enforcedMoves) {
+ if (movePool.includes(move)) {
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce setup
+ if (role.includes('Setup')) {
+ const setupMoves = movePool.filter(moveid => SETUP.includes(moveid));
+ if (setupMoves.length) {
+ const moveid = this.sample(setupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce a move not on the noSTAB list
+ if (!counter.damagingMoves.size && !(moves.has('uturn') && types.includes('Bug'))) {
+ // Choose an attacking move
+ const attackingMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);
+ }
+ if (attackingMoves.length) {
+ const moveid = this.sample(attackingMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce coverage move
+ if (['Fast Attacker', 'Setup Sweeper', 'Bulky Attacker', 'Wallbreaker'].includes(role)) {
+ if (counter.damagingMoves.size === 1) {
+ // Find the type of the current attacking move
+ const currentAttackType = counter.damagingMoves.values().next().value.type;
+ // Choose an attacking move that is of different type to the current single attack
+ const coverageMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {
+ if (currentAttackType !== moveType) coverageMoves.push(moveid);
+ }
+ }
+ if (coverageMoves.length) {
+ const moveid = this.sample(coverageMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Choose remaining moves randomly from movepool and add them to moves list:
+ while (moves.size < this.maxMoveCount && movePool.length) {
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ for (const pair of MOVE_PAIRS) {
+ if (moveid === pair[0] && movePool.includes(pair[1])) {
+ counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ if (moveid === pair[1] && movePool.includes(pair[0])) {
+ counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+ return moves;
+ }
+
+ shouldCullAbility(
+ ability: string,
+ types: Set,
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role
+ ): boolean {
+ switch (ability) {
+ case 'Chlorophyll': case 'Solar Power':
+ return !teamDetails.sun;
+ case 'Hydration': case 'Swift Swim':
+ return !teamDetails.rain;
+ case 'Iron Fist': case 'Sheer Force': case 'Technician':
+ return !counter.get(toID(ability));
+ case 'Overgrow':
+ return !counter.get('Grass');
+ case 'Prankster':
+ return !counter.get('Status');
+ case 'Rock Head':
+ return !counter.get('recoil');
+ case 'Sand Force': case 'Sand Rush':
+ return !teamDetails.sand;
+ case 'Swarm':
+ return !counter.get('Bug');
+ }
+
+ return false;
+ }
+
+
+ getAbility(
+ types: Set,
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ if (abilities.length <= 1) return abilities[0];
+
+ // Hard-code abilities here
+ if (species.id === 'pangoro' && counter.get('ironfist')) return 'Iron Fist';
+ if (species.id === 'tornadus' && counter.get('Status')) return 'Prankster';
+ if (species.id === 'marowak' && counter.get('recoil')) return 'Rock Head';
+ if (species.id === 'kingler' && counter.get('sheerforce')) return 'Sheer Force';
+ if (species.id === 'golduck' && teamDetails.rain) return 'Swift Swim';
+ if (species.id === 'roserade' && counter.get('technician')) return 'Technician';
+
+ const abilityAllowed: string[] = [];
+ // Obtain a list of abilities that are allowed (not culled)
+ for (const ability of abilities) {
+ if (!this.shouldCullAbility(
+ ability, types, moves, abilities, counter, movePool, teamDetails, species, preferredType, role
+ )) {
+ abilityAllowed.push(ability);
+ }
+ }
+
+ // Pick a random allowed ability
+ if (abilityAllowed.length >= 1) return this.sample(abilityAllowed);
+
+ // If all abilities are rejected, prioritize weather abilities over non-weather abilities
+ if (!abilityAllowed.length) {
+ const weatherAbilities = abilities.filter(
+ a => ['Chlorophyll', 'Hydration', 'Sand Force', 'Sand Rush', 'Solar Power', 'Swift Swim'].includes(a)
+ );
+ if (weatherAbilities.length) return this.sample(weatherAbilities);
+ }
+
+ // Pick a random ability
+ return this.sample(abilities);
+ }
+
+ getPriorityItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string | undefined {
+ if (species.requiredItems) return this.sample(species.requiredItems);
+ if (role === 'AV Pivot') return 'Assault Vest';
+ if (species.name === 'Farfetch\u2019d') return 'Stick';
+ if (species.name === 'Latias' || species.name === 'Latios') return 'Soul Dew';
+ if (species.name === 'Marowak') return 'Thick Club';
+ if (species.name === 'Pikachu') return 'Light Ball';
+ if (species.name === 'Shedinja' || species.name === 'Smeargle') return 'Focus Sash';
+ if (species.name === 'Talonflame') return 'Sharp Beak';
+ if (species.name === 'Unfezant' || moves.has('focusenergy')) return 'Scope Lens';
+ if (species.name === 'Unown') return 'Choice Specs';
+ if (species.name === 'Wobbuffet') return 'Custap Berry';
+ if (species.name === 'Shuckle') return 'Mental Herb';
+ if (ability === 'Harvest' || ability === 'Cheek Pouch') return 'Sitrus Berry';
+ if (species.name === 'Ditto') return 'Choice Scarf';
+ if (ability === 'Poison Heal') return 'Toxic Orb';
+ if (ability === 'Speed Boost') return 'Life Orb';
+ if (species.nfe) return (species.name === 'Scyther' && role === 'Fast Attacker') ? 'Choice Band' : 'Eviolite';
+ if (['healingwish', 'memento', 'switcheroo', 'trick'].some(m => moves.has(m))) {
+ if (species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && role !== 'Wallbreaker') {
+ return 'Choice Scarf';
+ } else {
+ return (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs';
+ }
+ }
+ if (moves.has('bellydrum')) return 'Sitrus Berry';
+ if (moves.has('waterspout')) return 'Choice Scarf';
+ if (moves.has('geomancy') || moves.has('skyattack')) return 'Power Herb';
+ if (moves.has('shellsmash')) {
+ return (ability === 'Solid Rock' && !!counter.get('priority')) ? 'Weakness Policy' : 'White Herb';
+ }
+ if (moves.has('psychoshift')) return 'Flame Orb';
+ if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk') && species.id !== 'stoutland') {
+ return species.name === 'Conkeldurr' ? 'Flame Orb' : 'Toxic Orb';
+ }
+ if (ability === 'Magic Guard') return moves.has('counter') ? 'Focus Sash' : 'Life Orb';
+ if (species.id === 'rampardos' && role === 'Fast Attacker') return 'Choice Scarf';
+ if (ability === 'Sheer Force' && counter.get('sheerforce')) return 'Life Orb';
+ if (ability === 'Unburden') return (species.id === 'hitmonlee') ? 'White Herb' : 'Sitrus Berry';
+ if (moves.has('acrobatics')) return '';
+ if (moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';
+ if (moves.has('rest') && !moves.has('sleeptalk') && !['Hydration', 'Natural Cure', 'Shed Skin'].includes(ability)) {
+ return 'Chesto Berry';
+ }
+ if (role === 'Staller') return 'Leftovers';
+ }
+
+ getItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ const defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd;
+
+ const scarfReqs = (
+ role !== 'Wallbreaker' &&
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
+ !counter.get('priority') && !moves.has('pursuit')
+ );
+
+ if (
+ moves.has('pursuit') && moves.has('suckerpunch') && counter.get('Dark') && !this.priorityPokemon.includes(species.id)
+ ) return 'Black Glasses';
+ if (counter.get('Special') === 4) {
+ return (
+ scarfReqs && species.baseStats.spa >= 90 && this.randomChance(1, 2)
+ ) ? 'Choice Scarf' : 'Choice Specs';
+ }
+ if (counter.get('Special') === 3 && moves.has('uturn')) return 'Choice Specs';
+ if (counter.get('Physical') === 4 && species.id !== 'jirachi' &&
+ ['dragontail', 'fakeout', 'flamecharge', 'nuzzle', 'rapidspin'].every(m => !moves.has(m))
+ ) {
+ return (
+ scarfReqs && (species.baseStats.atk >= 100 || ability === 'Pure Power' || ability === 'Huge Power') &&
+ this.randomChance(1, 2)
+ ) ? 'Choice Scarf' : 'Choice Band';
+ }
+
+ if (ability === 'Sturdy' && moves.has('explosion') && !counter.get('speedsetup')) return 'Custap Berry';
+ if (types.includes('Normal') && moves.has('fakeout') && !!counter.get('Normal')) return 'Silk Scarf';
+ if (role === 'Bulky Setup' && !!counter.get('speedsetup') && !moves.has('swordsdance')) {
+ return 'Weakness Policy';
+ }
+ if (species.id === 'palkia') return 'Lustrous Orb';
+ if (species.id === 'archeops') return 'Expert Belt';
+ if (!counter.get('Status') && (
+ ['Fast Support', 'Bulky Support', 'Bulky Attacker'].some(m => role === m) || moves.has('rapidspin')
+ )) {
+ return 'Assault Vest';
+ }
+ if (moves.has('outrage') && counter.get('setup')) return 'Lum Berry';
+ if (
+ (ability === 'Rough Skin') || (
+ species.id !== 'hooh' &&
+ ability === 'Regenerator' && species.baseStats.hp + species.baseStats.def >= 180 && this.randomChance(1, 2)
+ ) || (
+ ability !== 'Regenerator' && !counter.get('setup') && counter.get('recovery') &&
+ this.dex.getEffectiveness('Fighting', species) < 1 &&
+ (species.baseStats.hp + species.baseStats.def) > 200 && this.randomChance(1, 2)
+ )
+ ) return 'Rocky Helmet';
+ if (['kingsshield', 'protect', 'spikyshield', 'substitute'].some(m => moves.has(m))) return 'Leftovers';
+ if (
+ this.dex.getEffectiveness('Ground', species) >= 2 &&
+ ability !== 'Levitate'
+ ) {
+ return 'Air Balloon';
+ }
+ if (
+ (role === 'Fast Support' || moves.has('stickyweb')) && isLead && defensiveStatTotal < 255 &&
+ !counter.get('recovery') && (counter.get('hazards') || counter.get('setup')) &&
+ (!counter.get('recoil') || ability === 'Rock Head')
+ ) return 'Focus Sash';
+
+ // Default Items
+ if (role === 'Fast Support') {
+ return (
+ counter.get('Physical') + counter.get('Special') >= 3 &&
+ ['nuzzle', 'rapidspin', 'uturn', 'voltswitch'].every(m => !moves.has(m)) &&
+ this.dex.getEffectiveness('Rock', species) < 2
+ ) ? 'Life Orb' : 'Leftovers';
+ }
+ if (!counter.get('Status')) {
+ return (
+ (moves.has('uturn') || moves.has('voltswitch')) && !counter.get('Dragon') && !counter.get('Normal')
+ ) ? 'Expert Belt' : 'Life Orb';
+ }
+ if (
+ ['Fast Attacker', 'Setup Sweeper', 'Wallbreaker'].some(m => role === m) &&
+ this.dex.getEffectiveness('Rock', species) < 2 && ability !== 'Sturdy'
+ ) return 'Life Orb';
+ return 'Leftovers';
+ }
+
+ randomSet(
+ species: string | Species,
+ teamDetails: RandomTeamsTypes.TeamDetails = {},
+ isLead = false
+ ): RandomTeamsTypes.RandomSet {
+ species = this.dex.species.get(species);
+ const forme = this.getForme(species);
+ const sets = this.randomSets[species.id]["sets"];
+ const possibleSets = [];
+ for (const set of sets) possibleSets.push(set);
+ const set = this.sampleIfArray(possibleSets);
+ const role = set.role;
+ const movePool: string[] = Array.from(set.movepool);
+ const preferredTypes = set.preferredTypes;
+ const preferredType = this.sampleIfArray(preferredTypes) || '';
+
+ let ability = '';
+ let item = undefined;
+
+ const evs = {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85};
+ const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};
+
+ const types = species.types;
+ const baseAbilities = set.abilities!;
+ // Use the mega's ability for moveset generation
+ const abilities = (species.battleOnly && !species.requiredAbility) ? Object.values(species.abilities) : baseAbilities;
+
+ // Get moves
+ const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool,
+ preferredType, role);
+ const counter = this.newQueryMoves(moves, species, preferredType, abilities);
+
+ // Get ability
+ ability = this.getAbility(new Set(types), moves, baseAbilities, counter, movePool, teamDetails, species,
+ preferredType, role);
+
+ // Get items
+ item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);
+ if (item === undefined) {
+ item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);
+ }
+
+ // For Trick / Switcheroo
+ if (item === 'Leftovers' && types.includes('Poison')) {
+ item = 'Black Sludge';
+ }
+
+ const level = this.getLevel(species);
+
+ // Minimize confusion damage, including if Foul Play is its only physical attack
+ if (
+ (!counter.get('Physical') || (counter.get('Physical') <= 1 && (moves.has('foulplay') || moves.has('rapidspin')))) &&
+ !moves.has('copycat') && !moves.has('transform')
+ ) {
+ evs.atk = 0;
+ ivs.atk = 0;
+ }
+
+ // We use a special variable to track Hidden Power
+ // so that we can check for all Hidden Powers at once
+ let hasHiddenPower = false;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hasHiddenPower = true;
+ }
+
+ if (hasHiddenPower) {
+ let hpType;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hpType = move.substr(11);
+ }
+ if (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`);
+ const HPivs = ivs.atk === 0 ? ZeroAttackHPIVs[hpType] : this.dex.types.get(hpType).HPivs;
+ let iv: StatID;
+ for (iv in HPivs) {
+ ivs[iv] = HPivs[iv]!;
+ }
+ }
+
+ // Prepare optimal HP
+ const srImmunity = ability === 'Magic Guard';
+ const srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);
+ while (evs.hp > 1) {
+ const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ if (moves.has('substitute') && !['Black Sludge', 'Leftovers'].includes(item)) {
+ if (item === 'Sitrus Berry') {
+ // Two Substitutes should activate Sitrus Berry
+ if (hp % 4 === 0) break;
+ } else {
+ // Should be able to use Substitute four times from full HP without fainting
+ if (hp % 4 > 0) break;
+ }
+ } else if (moves.has('bellydrum') && item === 'Sitrus Berry') {
+ // Belly Drum should activate Sitrus Berry
+ if (hp % 2 === 0) break;
+ } else if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) {
+ // Crash damage move users want an odd HP to survive two misses
+ if (hp % 2 > 0) break;
+ } else {
+ // Maximize number of Stealth Rock switch-ins
+ if (srWeakness <= 0 || ability === 'Regenerator') break;
+ if (srWeakness === 1 && ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break;
+ if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;
+ // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry
+ if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;
+ }
+ evs.hp -= 4;
+ }
+
+ if (['gyroball', 'metalburst', 'trickroom'].some(m => moves.has(m))) {
+ evs.spe = 0;
+ ivs.spe = (hasHiddenPower && level < 100) ? ivs.spe - 30 : 0;
+ }
+
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+
+ return {
+ name: species.baseSpecies,
+ species: forme,
+ gender: species.gender,
+ shiny: this.randomChance(1, 1024),
+ level,
+ moves: shuffledMoves,
+ ability,
+ evs,
+ ivs,
+ item,
+ role,
+ };
+ }
+
+ randomFactorySets: {[format: string]: {[species: string]: BattleFactorySpecies}} = require('./factory-sets.json');
+
+ randomFactorySet(
+ species: Species,
+ teamData: RandomTeamsTypes.FactoryTeamDetails,
+ tier: string
+ ): RandomTeamsTypes.RandomFactorySet | null {
+ const id = toID(species.name);
+ // const flags = this.randomFactorySets[tier][id].flags;
+ const setList = this.randomFactorySets[tier][id].sets;
+
+ const itemsMax: {[k: string]: number} = {choicespecs: 1, choiceband: 1, choicescarf: 1};
+ const movesMax: {[k: string]: number} = {
+ rapidspin: 1, batonpass: 1, stealthrock: 1, defog: 1, spikes: 1, toxicspikes: 1,
+ };
+ const requiredMoves: {[k: string]: string} = {stealthrock: 'hazardSet', rapidspin: 'hazardClear', defog: 'hazardClear'};
+ const weatherAbilitiesRequire: {[k: string]: string} = {
+ hydration: 'raindance', swiftswim: 'raindance',
+ leafguard: 'sunnyday', solarpower: 'sunnyday', chlorophyll: 'sunnyday',
+ sandforce: 'sandstorm', sandrush: 'sandstorm', sandveil: 'sandstorm',
+ snowcloak: 'hail',
+ };
+ const 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
+ let effectivePool: {set: AnyObject, moveVariants?: number[], itemVariants?: number, abilityVariants?: number}[] = [];
+ const priorityPool = [];
+ for (const curSet of setList) {
+ if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;
+
+ const itemData = this.dex.items.get(curSet.item);
+ if (teamData.megaCount && teamData.megaCount > 0 && itemData.megaStone) continue; // reject 2+ mega stones
+ if (itemsMax[itemData.id] && teamData.has[itemData.id] >= itemsMax[itemData.id]) continue;
+
+ const abilityState = this.dex.abilities.get(curSet.ability);
+ if (weatherAbilitiesRequire[abilityState.id] && teamData.weather !== weatherAbilitiesRequire[abilityState.id]) continue;
+ if (teamData.weather && weatherAbilities.includes(abilityState.id)) continue; // reject 2+ weather setters
+
+ let reject = false;
+ let hasRequiredMove = false;
+ const curSetVariants = [];
+ for (const move of curSet.moves) {
+ const variantIndex = this.random(move.length);
+ const moveId = toID(move[variantIndex]);
+ if (movesMax[moveId] && teamData.has[moveId] >= movesMax[moveId]) {
+ reject = true;
+ break;
+ }
+ 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 null;
+ for (const curSet of setList) {
+ effectivePool.push({set: curSet});
+ }
+ }
+
+ const setData = this.sample(effectivePool);
+ const moves = [];
+ for (const [i, moveSlot] of setData.set.moves.entries()) {
+ moves.push(setData.moveVariants ? moveSlot[setData.moveVariants[i]] : this.sample(moveSlot));
+ }
+
+ return {
+ name: setData.set.name || species.baseSpecies,
+ species: setData.set.species,
+ gender: setData.set.gender || species.gender || (this.randomChance(1, 2) ? 'M' : 'F'),
+ item: setData.set.item || '',
+ ability: setData.set.ability || species.abilities['0'],
+ shiny: typeof setData.set.shiny === 'undefined' ? this.randomChance(1, 1024) : setData.set.shiny,
+ level: this.adjustLevel || 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,
+ };
+ }
+
+ randomFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const forceResult = (depth >= 12);
+
+ // 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;
+
+ const pokemon = [];
+
+ const pokemonPool = Object.keys(this.randomFactorySets[chosenTier]);
+
+ const teamData: TeamData = {
+ typeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, has: {}, forceResult,
+ weaknesses: {}, resistances: {},
+ };
+ const requiredMoveFamilies = ['hazardSet', 'hazardClear'];
+ const requiredMoves: {[k: string]: string} = {stealthrock: 'hazardSet', rapidspin: 'hazardClear', defog: 'hazardClear'};
+ const weatherAbilitiesSet: {[k: string]: string} = {
+ drizzle: 'raindance', drought: 'sunnyday', snowwarning: 'hail', sandstream: 'sandstorm',
+ };
+ const resistanceAbilities: {[k: string]: string[]} = {
+ 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 < this.maxTeamSize) {
+ const species = this.dex.species.get(this.sampleNoReplace(pokemonPool));
+ if (!species.exists) continue;
+
+ const speciesFlags = this.randomFactorySets[chosenTier][species.id].flags;
+
+ // Limit to one of each species (Species Clause)
+ if (teamData.baseFormes[species.baseSpecies]) continue;
+
+ // Limit the number of Megas to one
+ if (!teamData.megaCount) teamData.megaCount = 0;
+ if (teamData.megaCount >= 1 && speciesFlags.megaOnly) continue;
+
+ // Dynamically scale limits for different team sizes. The default and minimum value is 1.
+ const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
+
+ // Limit 2 of any type
+ const types = species.types;
+ let skip = false;
+ for (const type of types) {
+ if (teamData.typeCount[type] >= 2 * limitFactor && this.randomChance(4, 5)) {
+ skip = true;
+ break;
+ }
+ }
+ if (skip) continue;
+
+ const set = this.randomFactorySet(species, 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 (teamData.typeComboCount[typeCombo] >= 1 * limitFactor) 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] = (teamData.typeComboCount[typeCombo] + 1) || 1;
+
+ teamData.baseFormes[species.baseSpecies] = 1;
+
+ const itemData = this.dex.items.get(set.item);
+ if (itemData.megaStone) teamData.megaCount++;
+ if (itemData.id in teamData.has) {
+ teamData.has[itemData.id]++;
+ } else {
+ teamData.has[itemData.id] = 1;
+ }
+
+ const abilityState = this.dex.abilities.get(set.ability);
+ if (abilityState.id in weatherAbilitiesSet) {
+ teamData.weather = weatherAbilitiesSet[abilityState.id];
+ }
+
+ for (const move of set.moves) {
+ const moveId = toID(move);
+ if (moveId in teamData.has) {
+ teamData.has[moveId]++;
+ } else {
+ teamData.has[moveId] = 1;
+ }
+ if (moveId in requiredMoves) {
+ teamData.has[requiredMoves[moveId]] = 1;
+ }
+ }
+
+ for (const typeName of this.dex.types.names()) {
+ // Cover any major weakness (3+) with at least one resistance
+ if (teamData.resistances[typeName] >= 1) continue;
+ if (resistanceAbilities[abilityState.id]?.includes(typeName) || !this.dex.getImmunity(typeName, types)) {
+ // Heuristic: assume that 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;
+ }
+ const typeMod = this.dex.getEffectiveness(typeName, types);
+ if (typeMod < 0) {
+ teamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;
+ if (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;
+ } else if (typeMod > 0) {
+ teamData.weaknesses[typeName] = (teamData.weaknesses[typeName] || 0) + 1;
+ }
+ }
+ }
+ if (pokemon.length < this.maxTeamSize) return this.randomFactoryTeam(side, ++depth);
+
+ // Quality control
+ if (!teamData.forceResult) {
+ for (const requiredFamily of requiredMoveFamilies) {
+ if (!teamData.has[requiredFamily]) return this.randomFactoryTeam(side, ++depth);
+ }
+ for (const type in teamData.weaknesses) {
+ if (teamData.weaknesses[type] >= 3) return this.randomFactoryTeam(side, ++depth);
+ }
+ }
+
+ return pokemon;
+ }
+}
+
+export default RandomGen6Teams;
diff --git a/data/mods/gen7/bss-factory-sets.json b/data/random-battles/gen7/bss-factory-sets.json
similarity index 100%
rename from data/mods/gen7/bss-factory-sets.json
rename to data/random-battles/gen7/bss-factory-sets.json
diff --git a/data/mods/gen7/factory-sets.json b/data/random-battles/gen7/factory-sets.json
similarity index 99%
rename from data/mods/gen7/factory-sets.json
rename to data/random-battles/gen7/factory-sets.json
index 16aff626df9a..b2e9a49749cb 100644
--- a/data/mods/gen7/factory-sets.json
+++ b/data/random-battles/gen7/factory-sets.json
@@ -1427,10 +1427,10 @@
"moves": [["Spikes"], ["Toxic Spikes"], ["Taunt"], ["Ice Beam"]]
}]
},
- "greninjaash": {
+ "greninjabond": {
"flags": {},
"sets": [{
- "species": "Greninja",
+ "species": "Greninja-Bond",
"gender": "M",
"item": ["Choice Specs"],
"ability": ["Battle Bond"],
@@ -1438,7 +1438,7 @@
"nature": "Timid",
"moves": [["Hydro Pump", "Surf"], ["Dark Pulse"], ["Water Shuriken"], ["Spikes"]]
}, {
- "species": "Greninja",
+ "species": "Greninja-Bond",
"gender": "M",
"item": ["Waterium Z"],
"ability": ["Battle Bond"],
diff --git a/data/random-battles/gen7/sets.json b/data/random-battles/gen7/sets.json
new file mode 100644
index 000000000000..39c88d20c21c
--- /dev/null
+++ b/data/random-battles/gen7/sets.json
@@ -0,0 +1,7653 @@
+{
+ "venusaur": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"],
+ "abilities": ["Chlorophyll", "Overgrow"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "energyball", "knockoff", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Chlorophyll", "Overgrow"]
+ }
+ ]
+ },
+ "venusaurmega": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "gigadrain", "knockoff", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "charizard": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Z-Move user",
+ "movepool": ["airslash", "earthquake", "fireblast", "holdhands", "roost"],
+ "abilities": ["Blaze", "Solar Power"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "earthquake", "fireblast", "roost", "willowisp"],
+ "abilities": ["Blaze", "Solar Power"]
+ }
+ ]
+ },
+ "charizardmegax": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragonclaw", "dragondance", "earthquake", "flareblitz", "roost"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "charizardmegay": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "fireblast", "roost", "solarbeam"],
+ "abilities": ["Blaze"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dragonpulse", "fireblast", "roost", "solarbeam"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "blastoise": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "rapidspin", "roar", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["haze", "icebeam", "protect", "rapidspin", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "blastoisemega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aurasphere", "darkpulse", "icebeam", "rapidspin", "scald"],
+ "abilities": ["Rain Dish"]
+ }
+ ]
+ },
+ "butterfree": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "bugbuzz", "quiverdance", "sleeppowder"],
+ "abilities": ["Tinted Lens"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["airslash", "bugbuzz", "quiverdance", "sleeppowder"],
+ "abilities": ["Tinted Lens"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "beedrill": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "knockoff", "poisonjab", "toxicspikes", "uturn"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "beedrillmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drillrun", "knockoff", "poisonjab", "swordsdance", "xscissor"],
+ "abilities": ["Swarm"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["drillrun", "knockoff", "poisonjab", "uturn"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "pidgeot": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "heatwave", "return", "roost", "uturn"],
+ "abilities": ["Big Pecks"]
+ }
+ ]
+ },
+ "pidgeotmega": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "heatwave", "hurricane", "roost", "uturn", "workup"],
+ "abilities": ["Big Pecks"]
+ }
+ ]
+ },
+ "raticate": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "facade", "protect", "stompingtantrum", "suckerpunch", "swordsdance", "uturn"],
+ "abilities": ["Guts"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "raticatealola": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "knockoff", "pursuit", "return", "suckerpunch", "swordsdance"],
+ "abilities": ["Hustle"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["doubleedge", "knockoff", "suckerpunch", "swordsdance"],
+ "abilities": ["Hustle"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "fearow": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "uturn"],
+ "abilities": ["Sniper"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drillpeck", "drillrun", "focusenergy", "return"],
+ "abilities": ["Sniper"]
+ }
+ ]
+ },
+ "arbok": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aquatail", "coil", "earthquake", "gunkshot", "suckerpunch"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["coil", "earthquake", "gunkshot", "rest"],
+ "abilities": ["Shed Skin"]
+ }
+ ]
+ },
+ "pikachu": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["extremespeed", "grassknot", "hiddenpowerice", "knockoff", "surf", "voltswitch", "volttackle"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "raichu": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["encore", "hiddenpowerice", "knockoff", "nastyplot", "nuzzle", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "raichualola": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "psyshock", "surf", "thunderbolt", "voltswitch"],
+ "abilities": ["Surge Surfer"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "nastyplot", "psyshock", "surf", "thunderbolt"],
+ "abilities": ["Surge Surfer"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["focusblast", "nastyplot", "psyshock", "surf", "thunderbolt"],
+ "abilities": ["Surge Surfer"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "sandslash": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance", "toxic"],
+ "abilities": ["Sand Rush"]
+ }
+ ]
+ },
+ "sandslashalola": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "iciclecrash", "ironhead", "knockoff", "rapidspin", "stealthrock", "swordsdance"],
+ "abilities": ["Slush Rush"]
+ }
+ ]
+ },
+ "nidoqueen": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "stealthrock", "toxicspikes"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "nidoking": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "fireblast", "icebeam", "sludgewave", "substitute", "superpower"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "clefable": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "knockoff", "moonblast", "softboiled", "stealthrock", "thunderwave"],
+ "abilities": ["Magic Guard", "Unaware"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "fireblast", "moonblast", "softboiled"],
+ "abilities": ["Magic Guard", "Unaware"]
+ }
+ ]
+ },
+ "ninetales": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["fireblast", "hiddenpowerrock", "nastyplot", "solarbeam"],
+ "abilities": ["Drought"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["fireblast", "nastyplot", "solarbeam", "substitute", "willowisp"],
+ "abilities": ["Drought"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "ninetalesalola": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["auroraveil", "blizzard", "encore", "freezedry", "hiddenpowerground", "moonblast", "nastyplot"],
+ "abilities": ["Snow Warning"]
+ }
+ ]
+ },
+ "wigglytuff": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dazzlinggleam", "fireblast", "healbell", "knockoff", "protect", "stealthrock", "thunderwave", "wish"],
+ "abilities": ["Competitive"]
+ }
+ ]
+ },
+ "vileplume": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "gigadrain", "hiddenpowerground", "sleeppowder", "sludgebomb", "strengthsap"],
+ "abilities": ["Effect Spore"]
+ }
+ ]
+ },
+ "parasect": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aromatherapy", "knockoff", "leechlife", "seedbomb", "spore", "stunspore", "swordsdance"],
+ "abilities": ["Dry Skin"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "venomoth": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "sludgebomb"],
+ "abilities": ["Tinted Lens"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["bugbuzz", "quiverdance", "roost", "sleeppowder", "sludgebomb"],
+ "abilities": ["Tinted Lens"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "dugtrio": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["earthquake", "memento", "stealthrock", "stoneedge", "suckerpunch"],
+ "abilities": ["Arena Trap"]
+ }
+ ]
+ },
+ "dugtrioalola": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "ironhead", "stealthrock", "stoneedge", "suckerpunch", "toxic"],
+ "abilities": ["Sand Force", "Tangling Hair"]
+ }
+ ]
+ },
+ "persian": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "knockoff", "return", "seedbomb", "uturn"],
+ "abilities": ["Limber"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "fakeout", "knockoff", "return", "uturn"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerfighting", "hypervoice", "nastyplot", "shadowball"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "persianalola": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["darkpulse", "hiddenpowerfighting", "hypnosis", "nastyplot", "powergem", "thunderbolt"],
+ "abilities": ["Fur Coat"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["darkpulse", "hiddenpowerfighting", "hypnosis", "nastyplot", "powergem", "thunderbolt"],
+ "abilities": ["Fur Coat"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "golduck": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam", "scald"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "primeape": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "gunkshot", "stoneedge", "throatchop", "uturn"],
+ "abilities": ["Defiant"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["closecombat", "earthquake", "gunkshot", "honeclaws", "stoneedge", "throatchop"],
+ "abilities": ["Defiant"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "arcanine": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "roar", "toxic", "wildcharge", "willowisp"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "wildcharge"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "poliwrath": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "icepunch", "raindance", "waterfall"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["circlethrow", "rest", "scald", "sleeptalk"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "alakazam": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["counter", "focusblast", "psychic", "psyshock", "shadowball"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "encore", "focusblast", "psychic", "psyshock", "shadowball", "substitute"],
+ "abilities": ["Magic Guard"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "alakazammega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "encore", "focusblast", "psychic", "psyshock", "shadowball", "substitute"],
+ "abilities": ["Magic Guard"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "machamp": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "bulletpunch", "dynamicpunch", "knockoff", "stoneedge"],
+ "abilities": ["No Guard"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["bulletpunch", "dynamicpunch", "knockoff", "stoneedge"],
+ "abilities": ["No Guard"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bulletpunch", "closecombat", "facade", "knockoff"],
+ "abilities": ["Guts"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "victreebel": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["poisonjab", "powerwhip", "suckerpunch", "swordsdance"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerground", "knockoff", "powerwhip", "sleeppowder", "sludgebomb", "strengthsap", "suckerpunch"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["powerwhip", "sludgebomb", "sunnyday", "weatherball"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "tentacruel": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["haze", "knockoff", "rapidspin", "scald", "sludgebomb", "toxicspikes"],
+ "abilities": ["Clear Body", "Liquid Ooze"]
+ }
+ ]
+ },
+ "golem": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "explosion", "rockpolish", "stoneedge", "suckerpunch"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "golemalola": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["autotomize", "earthquake", "explosion", "return", "stoneedge"],
+ "abilities": ["Galvanize"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "rapidash": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["flareblitz", "highhorsepower", "morningsun", "wildcharge", "willowisp"],
+ "abilities": ["Flame Body", "Flash Fire"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["flareblitz", "highhorsepower", "megahorn", "morningsun", "wildcharge"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "slowbro": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["fireblast", "futuresight", "icebeam", "psyshock", "scald"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "slowbromega": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "fireblast", "psyshock", "scald", "slackoff"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "farfetchd": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bravebird", "knockoff", "leafblade", "return", "swordsdance"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "dodrio": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "jumpkick", "knockoff", "quickattack", "return", "swordsdance"],
+ "abilities": ["Early Bird"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["bravebird", "jumpkick", "knockoff", "return", "swordsdance"],
+ "abilities": ["Early Bird"],
+ "preferredTypes": ["Flying"]
+ }
+ ]
+ },
+ "dewgong": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "icebeam", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "muk": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["brickbreak", "curse", "gunkshot", "haze", "icepunch", "poisonjab", "shadowsneak"],
+ "abilities": ["Poison Touch"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "mukalola": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "gunkshot", "knockoff", "recycle"],
+ "abilities": ["Gluttony"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["firepunch", "gunkshot", "icepunch", "knockoff", "poisonjab", "pursuit", "shadowsneak"],
+ "abilities": ["Poison Touch"]
+ }
+ ]
+ },
+ "cloyster": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hydropump", "iciclespear", "rockblast", "shellsmash"],
+ "abilities": ["Skill Link"]
+ }
+ ]
+ },
+ "gengar": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "painsplit", "shadowball", "sludgewave", "substitute", "trick", "willowisp"],
+ "abilities": ["Cursed Body"]
+ }
+ ]
+ },
+ "gengarmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["disable", "perishsong", "protect", "shadowball", "substitute"],
+ "abilities": ["Cursed Body"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["destinybond", "disable", "focusblast", "shadowball", "sludgewave", "taunt"],
+ "abilities": ["Cursed Body"]
+ }
+ ]
+ },
+ "hypno": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["focusblast", "foulplay", "protect", "psychic", "thunderwave", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ }
+ ]
+ },
+ "kingler": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "knockoff", "liquidation", "rockslide", "superpower", "swordsdance", "xscissor"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "electrode": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["foulplay", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt", "voltswitch"],
+ "abilities": ["Aftermath", "Static"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["hiddenpowerice", "lightscreen", "reflect", "thunderbolt", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Aftermath", "Static"]
+ }
+ ]
+ },
+ "exeggutor": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "hiddenpowerfire", "leechseed", "psychic", "sleeppowder", "substitute"],
+ "abilities": ["Harvest"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "exeggutoralola": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dracometeor", "flamethrower", "gigadrain", "leafstorm"],
+ "abilities": ["Frisk"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dracometeor", "dragontail", "flamethrower", "knockoff", "moonlight", "sleeppowder", "stunspore", "woodhammer"],
+ "abilities": ["Harvest"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "marowak": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance"],
+ "abilities": ["Battle Armor", "Rock Head"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "marowakalola": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "flamecharge", "flareblitz", "shadowbone", "stealthrock", "stoneedge", "swordsdance", "willowisp"],
+ "abilities": ["Rock Head"]
+ }
+ ]
+ },
+ "hitmonlee": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["highjumpkick", "knockoff", "machpunch", "poisonjab", "rapidspin", "stoneedge"],
+ "abilities": ["Reckless"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["closecombat", "curse", "knockoff", "poisonjab", "stoneedge"],
+ "abilities": ["Unburden"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "hitmonchan": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge", "throatchop"],
+ "abilities": ["Iron Fist"]
+ }
+ ]
+ },
+ "weezing": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rhydon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "swordsdance", "toxic"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "chansey": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "kangaskhan": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["doubleedge", "drainpunch", "earthquake", "fakeout", "return", "suckerpunch"],
+ "abilities": ["Scrappy"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["drainpunch", "earthquake", "fakeout", "return", "suckerpunch"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "kangaskhanmega": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["bodyslam", "crunch", "fakeout", "seismictoss", "suckerpunch"],
+ "abilities": ["Scrappy"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bodyslam", "crunch", "earthquake", "poweruppunch", "return", "suckerpunch"],
+ "abilities": ["Scrappy"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "seaking": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "waterfall"],
+ "abilities": ["Lightning Rod"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "raindance", "waterfall"],
+ "abilities": ["Swift Swim"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "starmie": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hydropump", "icebeam", "psyshock", "recover", "thunderbolt"],
+ "abilities": ["Analytic"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["psyshock", "rapidspin", "recover", "scald", "thunderwave", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "mrmime": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "nastyplot", "psychic", "psyshock", "shadowball"],
+ "abilities": ["Filter"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "scyther": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "brickbreak", "knockoff", "pursuit", "uturn"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aerialace", "brickbreak", "bugbite", "knockoff", "roost", "swordsdance"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "jynx": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"],
+ "abilities": ["Dry Skin"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "pinsir": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance", "xscissor"],
+ "abilities": ["Moxie"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "pinsirmega": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["closecombat", "earthquake", "quickattack", "return", "swordsdance"],
+ "abilities": ["Moxie"]
+ }
+ ]
+ },
+ "tauros": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bodyslam", "earthquake", "fireblast", "rockslide", "zenheadbutt"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "earthquake", "stoneedge", "zenheadbutt"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "gyarados": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"],
+ "abilities": ["Intimidate", "Moxie"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["bounce", "dragondance", "earthquake", "waterfall"],
+ "abilities": ["Moxie"],
+ "preferredTypes": ["Flying"]
+ }
+ ]
+ },
+ "gyaradosmega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "dragondance", "earthquake", "substitute", "waterfall"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "lapras": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["freezedry", "healbell", "hydropump", "icebeam", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["freezedry", "hydropump", "protect", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "ditto": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["transform"],
+ "abilities": ["Imposter"]
+ }
+ ]
+ },
+ "vaporeon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "icebeam", "protect", "scald", "wish"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "scald", "toxic", "wish"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "jolteon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "shadowball", "thunderbolt", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerice", "signalbeam", "thunderbolt", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "flareon": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["facade", "flamecharge", "flareblitz", "quickattack", "superpower"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "omastar": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"],
+ "abilities": ["Shell Armor", "Swift Swim"]
+ }
+ ]
+ },
+ "kabutops": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["aquajet", "knockoff", "liquidation", "rapidspin", "stoneedge"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aquajet", "knockoff", "liquidation", "stoneedge", "swordsdance"],
+ "abilities": ["Weak Armor"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["aquajet", "knockoff", "liquidation", "stoneedge", "swordsdance"],
+ "abilities": ["Weak Armor"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "aerodactyl": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"],
+ "abilities": ["Unnerve"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["aerialace", "aquatail", "defog", "earthquake", "pursuit", "roost", "stealthrock", "stoneedge"],
+ "abilities": ["Unnerve"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["earthquake", "honeclaws", "skyattack", "stoneedge"],
+ "abilities": ["Unnerve"],
+ "preferredTypes": ["Flying"]
+ }
+ ]
+ },
+ "aerodactylmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "aquatail", "earthquake", "honeclaws", "roost", "stoneedge"],
+ "abilities": ["Unnerve"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "snorlax": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "crunch", "curse", "earthquake", "rest", "return", "sleeptalk"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "crunch", "curse", "earthquake", "recycle", "return"],
+ "abilities": ["Gluttony"]
+ }
+ ]
+ },
+ "articuno": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["freezedry", "roost", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["freezedry", "hurricane", "roost", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "zapdos": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "discharge", "heatwave", "hiddenpowerice", "roost", "toxic", "uturn"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "moltres": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "fireblast", "hurricane", "roost", "toxic", "uturn", "willowisp"],
+ "abilities": ["Flame Body"]
+ }
+ ]
+ },
+ "dragonite": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Z-Move user",
+ "movepool": ["dragondance", "earthquake", "fly", "outrage"],
+ "abilities": ["Multiscale"],
+ "preferredTypes": ["Flying"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "ironhead", "outrage", "roost"],
+ "abilities": ["Multiscale"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "mewtwo": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"],
+ "abilities": ["Unnerve"]
+ }
+ ]
+ },
+ "mewtwomegax": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "drainpunch", "stoneedge", "taunt", "zenheadbutt"],
+ "abilities": ["Unnerve"]
+ }
+ ]
+ },
+ "mewtwomegay": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "shadowball"],
+ "abilities": ["Unnerve"]
+ }
+ ]
+ },
+ "mew": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["defog", "knockoff", "psychic", "roost", "stealthrock", "taunt", "uturn", "willowisp"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "roost"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "leechlife", "swordsdance", "zenheadbutt"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "meganium": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "dragontail", "earthquake", "energyball", "leechseed", "synthesis", "toxic"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "typhlosion": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "feraligatr": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "dragondance", "earthquake", "icepunch", "liquidation"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "furret": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquatail", "doubleedge", "firepunch", "knockoff", "trick", "uturn"],
+ "abilities": ["Frisk"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["coil", "irontail", "knockoff", "return"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "noctowl": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "hurricane", "hypervoice", "roost", "toxic"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "ledian": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["airslash", "defog", "encore", "focusblast", "knockoff", "roost", "toxic"],
+ "abilities": ["Early Bird"]
+ }
+ ]
+ },
+ "ariados": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["megahorn", "poisonjab", "stickyweb", "suckerpunch", "toxicspikes"],
+ "abilities": ["Insomnia", "Swarm"]
+ }
+ ]
+ },
+ "crobat": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "roost", "superfang", "taunt", "toxic", "uturn"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "lanturn": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["healbell", "icebeam", "scald", "thunderbolt", "toxic", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "xatu": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "heatwave", "psychic", "roost"],
+ "abilities": ["Magic Bounce"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["heatwave", "psychic", "roost", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Magic Bounce"]
+ }
+ ]
+ },
+ "ampharos": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focusblast", "healbell", "hiddenpowerice", "thunderbolt", "toxic", "voltswitch"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "ampharosmega": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["agility", "dragonpulse", "focusblast", "thunderbolt", "voltswitch"],
+ "abilities": ["Static"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["discharge", "dragonpulse", "focusblast", "healbell", "rest", "sleeptalk", "voltswitch"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "bellossom": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["gigadrain", "moonblast", "quiverdance", "strengthsap"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "quiverdance", "strengthsap"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["gigadrain", "quiverdance", "sleeppowder", "strengthsap"],
+ "abilities": ["Chlorophyll"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "azumarill": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "bellydrum", "knockoff", "liquidation", "playrough", "superpower"],
+ "abilities": ["Huge Power"]
+ }
+ ]
+ },
+ "sudowoodo": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "headsmash", "stealthrock", "suckerpunch", "toxic", "woodhammer"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "politoed": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["encore", "icebeam", "protect", "scald", "toxic"],
+ "abilities": ["Drizzle"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "icebeam", "rest", "scald", "toxic"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "jumpluff": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["acrobatics", "leechseed", "strengthsap", "substitute"],
+ "abilities": ["Infiltrator"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["acrobatics", "encore", "sleeppowder", "strengthsap", "toxic", "uturn"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "sunflora": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthpower", "hiddenpowerfire", "solarbeam", "sunnyday"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "quagsire": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "icebeam", "recover", "scald", "toxic"],
+ "abilities": ["Unaware"]
+ }
+ ]
+ },
+ "espeon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "dazzlinggleam", "morningsun", "psychic", "psyshock", "shadowball", "trick"],
+ "abilities": ["Magic Bounce"],
+ "preferredTypes": ["Fairy"]
+ }
+ ]
+ },
+ "umbreon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["foulplay", "protect", "toxic", "wish"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["foulplay", "healbell", "moonlight", "toxic"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "slowking": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "icebeam", "nastyplot", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["dragontail", "fireblast", "futuresight", "icebeam", "psyshock", "scald"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "unown": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerpsychic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "wobbuffet": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["counter", "destinybond", "encore", "mirrorcoat"],
+ "abilities": ["Shadow Tag"]
+ }
+ ]
+ },
+ "girafarig": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dazzlinggleam", "nastyplot", "psychic", "psyshock", "substitute", "thunderbolt"],
+ "abilities": ["Sap Sipper"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hypervoice", "nastyplot", "psyshock", "thunderbolt"],
+ "abilities": ["Sap Sipper"]
+ }
+ ]
+ },
+ "forretress": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["gyroball", "rapidspin", "spikes", "stealthrock", "toxic", "voltswitch"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "dunsparce": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "glare", "headbutt", "roost"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "coil", "earthquake", "roost"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "gligar": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "toxic", "uturn"],
+ "abilities": ["Immunity"]
+ }
+ ]
+ },
+ "steelix": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "ironhead", "roar", "rockslide", "stealthrock", "toxic"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Steel"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "heavyslam", "protect", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "steelixmega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "earthquake", "heavyslam", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "granbull": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "healbell", "playrough", "thunderwave", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "qwilfish": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "scizor": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletpunch", "knockoff", "pursuit", "superpower", "uturn"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "scizormega": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"],
+ "abilities": ["Light Metal"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"],
+ "abilities": ["Light Metal"]
+ }
+ ]
+ },
+ "shuckle": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "knockoff", "stealthrock", "stickyweb", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "heracross": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "facade", "knockoff", "swordsdance"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "knockoff", "megahorn", "stoneedge"],
+ "abilities": ["Moxie"]
+ }
+ ]
+ },
+ "heracrossmega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "earthquake", "knockoff", "pinmissile", "rockblast", "substitute", "swordsdance"],
+ "abilities": ["Moxie"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "ursaring": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "crunch", "facade", "protect"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "crunch", "facade", "swordsdance"],
+ "abilities": ["Quick Feet"]
+ }
+ ]
+ },
+ "magcargo": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["ancientpower", "lavaplume", "recover", "stealthrock", "toxic"],
+ "abilities": ["Flame Body"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["ancientpower", "earthpower", "fireblast", "shellsmash"],
+ "abilities": ["Weak Armor"],
+ "preferredTypes": ["Fire", "Rock"]
+ }
+ ]
+ },
+ "corsola": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["powergem", "recover", "scald", "stealthrock", "toxic"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "octillery": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "scald"],
+ "abilities": ["Sniper"]
+ }
+ ]
+ },
+ "delibird": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "freezedry", "rapidspin", "spikes"],
+ "abilities": ["Insomnia", "Vital Spirit"]
+ }
+ ]
+ },
+ "mantine": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["airslash", "defog", "haze", "roost", "scald", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "skarmory": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["bravebird", "roost", "spikes", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "houndoom": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "suckerpunch"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "houndoommega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "taunt"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "kingdra": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragondance", "ironhead", "outrage", "waterfall"],
+ "abilities": ["Sniper", "Swift Swim"]
+ }
+ ]
+ },
+ "donphan": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "porygon2": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"],
+ "abilities": ["Download", "Trace"]
+ }
+ ]
+ },
+ "stantler": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "suckerpunch", "throatchop", "thunderwave"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "smeargle": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["nuzzle", "spikes", "spore", "stealthrock", "stickyweb", "whirlwind"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "hitmontop": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "miltank": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"],
+ "abilities": ["Sap Sipper", "Thick Fat"]
+ }
+ ]
+ },
+ "blissey": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "raikou": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aurasphere", "hiddenpowerice", "thunderbolt", "voltswitch"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "entei": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["extremespeed", "flareblitz", "sacredfire", "stompingtantrum"],
+ "abilities": ["Inner Focus"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["extremespeed", "flareblitz", "sacredfire", "stoneedge"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "suicune": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "rest", "scald", "sleeptalk"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "icebeam", "rest", "scald", "substitute"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["calmmind", "protect", "scald", "substitute"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "tyranitar": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge"],
+ "abilities": ["Sand Stream"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "tyranitarmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "lugia": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aeroblast", "earthquake", "roost", "substitute", "toxic", "whirlwind"],
+ "abilities": ["Multiscale"]
+ }
+ ]
+ },
+ "hooh": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "earthquake", "roost", "sacredfire", "substitute", "toxic"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "celebi": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthpower", "gigadrain", "leafstorm", "nastyplot", "psychic", "uturn"],
+ "abilities": ["Natural Cure"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["leafstorm", "nastyplot", "psychic", "recover"],
+ "abilities": ["Natural Cure"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "sceptile": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "sceptilemega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragonpulse", "earthquake", "focusblast", "gigadrain", "leafstorm", "substitute"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "leafblade", "outrage", "swordsdance"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "blaziken": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["flareblitz", "highjumpkick", "knockoff", "protect", "stoneedge", "swordsdance"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "blazikenmega": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["flareblitz", "highjumpkick", "knockoff", "protect", "stoneedge", "swordsdance"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "swampert": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "icebeam", "roar", "scald", "stealthrock", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "swampertmega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "icepunch", "raindance", "superpower", "waterfall"],
+ "abilities": ["Damp"]
+ }
+ ]
+ },
+ "mightyena": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "irontail", "playrough", "suckerpunch", "toxic"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fairy"]
+ }
+ ]
+ },
+ "linoone": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "extremespeed", "stompingtantrum", "throatchop"],
+ "abilities": ["Gluttony"]
+ }
+ ]
+ },
+ "beautifly": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aircutter", "bugbuzz", "hiddenpowerground", "quiverdance"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "dustox": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbuzz", "hiddenpowerground", "quiverdance", "roost", "sludgebomb"],
+ "abilities": ["Shield Dust"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bugbuzz", "defog", "roost", "toxic", "uturn"],
+ "abilities": ["Shield Dust"]
+ }
+ ]
+ },
+ "ludicolo": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["gigadrain", "hydropump", "icebeam", "raindance"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["energyball", "hydropump", "icebeam", "scald"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "shiftry": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["defog", "knockoff", "leafstorm", "lowkick", "suckerpunch"],
+ "abilities": ["Chlorophyll", "Pickpocket"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["knockoff", "leafblade", "lowkick", "suckerpunch", "swordsdance"],
+ "abilities": ["Chlorophyll", "Pickpocket"]
+ }
+ ]
+ },
+ "swellow": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "facade", "protect", "quickattack", "uturn"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["boomburst", "heatwave", "hurricane", "uturn"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "pelipper": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "hurricane", "knockoff", "roost", "scald", "uturn"],
+ "abilities": ["Drizzle"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hurricane", "hydropump", "scald", "uturn"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "gardevoir": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "focusblast", "healingwish", "moonblast", "psychic", "shadowball", "thunderbolt", "trick"],
+ "abilities": ["Trace"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "focusblast", "moonblast", "psyshock", "substitute", "willowisp"],
+ "abilities": ["Trace"]
+ }
+ ]
+ },
+ "gardevoirmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "substitute", "taunt", "willowisp"],
+ "abilities": ["Trace"]
+ }
+ ]
+ },
+ "masquerain": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "bugbuzz", "hydropump", "quiverdance"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["airslash", "bugbuzz", "roost", "scald", "stickyweb", "stunspore", "uturn"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "breloom": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletseed", "machpunch", "rocktomb", "spore", "swordsdance"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulletseed", "machpunch", "rocktomb", "swordsdance"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "vigoroth": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "bulkup", "earthquake", "return", "shadowclaw", "slackoff"],
+ "abilities": ["Vital Spirit"]
+ }
+ ]
+ },
+ "slaking": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "gigaimpact", "nightslash", "retaliate"],
+ "abilities": ["Truant"]
+ }
+ ]
+ },
+ "ninjask": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "leechlife", "nightslash", "swordsdance", "uturn"],
+ "abilities": ["Infiltrator"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["aerialace", "dig", "leechlife", "swordsdance"],
+ "abilities": ["Infiltrator"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "shedinja": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"],
+ "abilities": ["Wonder Guard"]
+ }
+ ]
+ },
+ "exploud": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["boomburst", "fireblast", "focusblast", "surf"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "hariyama": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["bulletpunch", "closecombat", "heavyslam", "knockoff", "stoneedge"],
+ "abilities": ["Thick Fat"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bulletpunch", "closecombat", "facade", "fakeout", "knockoff"],
+ "abilities": ["Guts"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "delcatty": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["doubleedge", "fakeout", "healbell", "shadowball", "stompingtantrum", "thunderwave", "toxic"],
+ "abilities": ["Wonder Skin"]
+ }
+ ]
+ },
+ "sableye": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["foulplay", "knockoff", "recover", "taunt", "toxic", "willowisp"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "sableyemega": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "darkpulse", "recover", "willowisp"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "mawile": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["ironhead", "knockoff", "playrough", "stealthrock", "suckerpunch", "swordsdance"],
+ "abilities": ["Intimidate", "Sheer Force"]
+ }
+ ]
+ },
+ "mawilemega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["ironhead", "knockoff", "playrough", "suckerpunch", "swordsdance"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "aggron": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "rockpolish", "stealthrock"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "aggronmega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "stoneedge", "thunderwave", "toxic"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "medicham": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletpunch", "highjumpkick", "icepunch", "poisonjab", "zenheadbutt"],
+ "abilities": ["Pure Power"]
+ }
+ ]
+ },
+ "medichammega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "highjumpkick", "icepunch", "thunderpunch", "zenheadbutt"],
+ "abilities": ["Pure Power"]
+ }
+ ]
+ },
+ "manectric": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["flamethrower", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "manectricmega": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "plusle": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
+ "abilities": ["Lightning Rod"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "minun": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
+ "abilities": ["Volt Absorb"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "volbeat": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "encore", "roost", "thunderwave", "uturn"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["defog", "encore", "lunge", "roost", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "illumise": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bugbuzz", "defog", "encore", "roost", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "swalot": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "encore", "icebeam", "painsplit", "sludgebomb", "toxic", "yawn"],
+ "abilities": ["Liquid Ooze"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "sludgebomb", "toxic"],
+ "abilities": ["Liquid Ooze"]
+ }
+ ]
+ },
+ "sharpedo": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "destinybond", "earthquake", "icebeam", "protect", "waterfall"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "sharpedomega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "icefang", "protect", "psychicfangs", "waterfall"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "wailord": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "waterspout"],
+ "abilities": ["Water Veil"]
+ }
+ ]
+ },
+ "camerupt": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "fireblast", "rockpolish", "stoneedge"],
+ "abilities": ["Solid Rock"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "lavaplume", "roar", "stealthrock", "toxic"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "cameruptmega": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["ancientpower", "earthpower", "fireblast", "stealthrock", "toxic", "willowisp"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "torkoal": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "lavaplume", "rapidspin", "solarbeam", "stealthrock", "yawn"],
+ "abilities": ["Drought"]
+ }
+ ]
+ },
+ "grumpig": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["focusblast", "healbell", "psychic", "thunderwave", "toxic", "whirlwind"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recycle"],
+ "abilities": ["Gluttony"]
+ }
+ ]
+ },
+ "spinda": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["rest", "return", "sleeptalk", "suckerpunch", "superpower", "thief"],
+ "abilities": ["Contrary"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "flygon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragondance", "earthquake", "outrage", "stoneedge", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "dragondance", "earthquake", "outrage", "roost"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["dragondance", "earthquake", "outrage", "roost", "stoneedge"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Dragon"]
+ }
+ ]
+ },
+ "cacturne": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "focusblast", "gigadrain", "spikes", "suckerpunch"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drainpunch", "seedbomb", "suckerpunch", "swordsdance"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "altaria": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "dracometeor", "earthquake", "fireblast", "healbell", "roost", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "altariamega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "return", "roost"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "earthquake", "fireblast", "healbell", "return", "roost"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "zangoose": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "facade", "knockoff", "quickattack", "swordsdance"],
+ "abilities": ["Toxic Boost"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "seviper": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "flamethrower", "gigadrain", "glare", "knockoff", "sludgewave", "suckerpunch", "switcheroo"],
+ "abilities": ["Infiltrator"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "poisonjab", "suckerpunch", "swordsdance"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "lunatone": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "icebeam", "moonblast", "moonlight", "powergem", "psychic", "rockpolish"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthpower", "moonlight", "powergem", "psychic", "stealthrock", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "solrock": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "morningsun", "stealthrock", "stoneedge", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "whiscash": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"],
+ "abilities": ["Hydration", "Oblivious"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "scald", "toxic"],
+ "abilities": ["Hydration", "Oblivious"]
+ }
+ ]
+ },
+ "crawdaunt": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "crabhammer", "dragondance", "knockoff", "superpower"],
+ "abilities": ["Adaptability"]
+ }
+ ]
+ },
+ "claydol": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "cradily": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "earthquake", "recover", "seedbomb", "stoneedge", "swordsdance"],
+ "abilities": ["Storm Drain"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "gigadrain", "recover", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Storm Drain"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "armaldo": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "earthquake", "knockoff", "liquidation", "stoneedge", "swordsdance", "xscissor"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ }
+ ]
+ },
+ "milotic": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["dragontail", "haze", "icebeam", "recover", "scald", "toxic"],
+ "abilities": ["Competitive", "Marvel Scale"]
+ }
+ ]
+ },
+ "castform": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "fireblast", "icebeam", "return", "scald", "thunderbolt", "thunderwave"],
+ "abilities": ["Forecast"],
+ "preferredTypes": ["Water"]
+ }
+ ]
+ },
+ "kecleon": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["drainpunch", "fakeout", "knockoff", "recover", "shadowsneak", "stealthrock", "suckerpunch"],
+ "abilities": ["Protean"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drainpunch", "knockoff", "recover", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Protean"]
+ }
+ ]
+ },
+ "banette": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["gunkshot", "knockoff", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"],
+ "abilities": ["Cursed Body", "Frisk"]
+ }
+ ]
+ },
+ "banettemega": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "gunkshot", "knockoff", "shadowclaw", "shadowsneak", "taunt", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "tropius": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["airslash", "leechseed", "protect", "substitute"],
+ "abilities": ["Harvest"]
+ }
+ ]
+ },
+ "chimecho": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["defog", "healbell", "knockoff", "psychic", "recover", "toxic"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "psychic", "psyshock", "recover", "signalbeam"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "absol": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["knockoff", "playrough", "pursuit", "suckerpunch", "superpower", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Fairy"]
+ }
+ ]
+ },
+ "absolmega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["irontail", "knockoff", "playrough", "pursuit", "suckerpunch", "superpower", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Fairy"]
+ }
+ ]
+ },
+ "glalie": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "freezedry", "spikes", "superfang", "taunt"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "glaliemega": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "explosion", "freezedry", "iceshard", "return", "spikes"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "walrein": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "roar", "superfang", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "huntail": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["icebeam", "return", "shellsmash", "suckerpunch", "waterfall"],
+ "abilities": ["Swift Swim", "Water Veil"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "gorebyss": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "relicanth": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "headsmash", "rockpolish", "waterfall"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "luvdisc": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "scald", "substitute", "toxic"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "salamence": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "outrage", "roost"],
+ "abilities": ["Intimidate", "Moxie"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["dragondance", "earthquake", "fly", "outrage"],
+ "abilities": ["Moxie"],
+ "preferredTypes": ["Flying"]
+ }
+ ]
+ },
+ "salamencemega": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "dragondance", "earthquake", "return", "roost"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["doubleedge", "dracometeor", "earthquake", "fireblast", "return", "roost"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "metagross": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["agility", "earthquake", "icepunch", "meteormash", "thunderpunch", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulletpunch", "earthquake", "explosion", "icepunch", "meteormash", "stealthrock", "thunderpunch", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "metagrossmega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["agility", "earthquake", "hammerarm", "meteormash", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hammerarm", "honeclaws", "meteormash", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "regirock": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "drainpunch", "rest", "stoneedge"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["drainpunch", "earthquake", "stealthrock", "stoneedge", "thunderwave", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "regice": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focusblast", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Electric"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["focusblast", "icebeam", "rockpolish", "thunderbolt"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "registeel": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "ironhead", "rest", "sleeptalk"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "latias": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["calmmind", "defog", "dracometeor", "healingwish", "hiddenpowerfire", "psyshock", "roost", "trick"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Dragon"]
+ }
+ ]
+ },
+ "latiasmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "latios": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["calmmind", "dracometeor", "hiddenpowerfire", "psyshock", "roost", "surf", "thunderbolt", "trick"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Dragon"]
+ }
+ ]
+ },
+ "latiosmega": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "kyogre": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "originpulse", "scald", "thunder", "waterspout"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "kyogreprimal": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "rest", "scald", "sleeptalk"],
+ "abilities": ["Drizzle"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "icebeam", "originpulse", "thunder"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "groudon": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "stoneedge", "thunderwave"],
+ "abilities": ["Drought"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["firepunch", "precipiceblades", "rockpolish", "stoneedge", "swordsdance"],
+ "abilities": ["Drought"]
+ }
+ ]
+ },
+ "groudonprimal": {
+ "level": 65,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "thunderwave"],
+ "abilities": ["Drought"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["firepunch", "precipiceblades", "rockpolish", "swordsdance"],
+ "abilities": ["Drought"]
+ }
+ ]
+ },
+ "rayquaza": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Z-Move user",
+ "movepool": ["dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate"],
+ "abilities": ["Air Lock"],
+ "preferredTypes": ["Flying"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "extremespeed", "outrage", "vcreate"],
+ "abilities": ["Air Lock"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "extremespeed", "outrage", "swordsdance", "vcreate"],
+ "abilities": ["Air Lock"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "rayquazamega": {
+ "level": 66,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate"],
+ "abilities": ["Air Lock"]
+ }
+ ]
+ },
+ "jirachi": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["drainpunch", "happyhour", "ironhead", "psychic"],
+ "abilities": ["Serene Grace"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "deoxys": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysattack": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysdefense": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "recover", "signalbeam"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysspeed": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["knockoff", "psychoboost", "spikes", "stealthrock", "superpower", "taunt"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["darkpulse", "focusblast", "nastyplot", "psychoboost"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "torterra": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "infernape": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"],
+ "abilities": ["Blaze", "Iron Fist"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["fireblast", "focusblast", "grassknot", "nastyplot", "vacuumwave"],
+ "abilities": ["Blaze"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"],
+ "abilities": ["Blaze", "Iron Fist"]
+ }
+ ]
+ },
+ "empoleon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["defog", "knockoff", "protect", "scald", "stealthrock", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "icebeam", "knockoff", "roar", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["flashcannon", "grassknot", "hydropump", "icebeam", "knockoff", "scald"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "staraptor": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "closecombat", "doubleedge", "quickattack", "uturn"],
+ "abilities": ["Reckless"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "bibarel": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aquajet", "liquidation", "quickattack", "return", "swordsdance"],
+ "abilities": ["Simple"]
+ }
+ ]
+ },
+ "kricketune": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["knockoff", "leechlife", "stickyweb", "taunt", "toxic"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "luxray": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "facade", "superpower", "wildcharge"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["crunch", "icefang", "superpower", "voltswitch", "wildcharge"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "roserade": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["gigadrain", "hiddenpowerground", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"],
+ "abilities": ["Natural Cure", "Technician"]
+ }
+ ]
+ },
+ "rampardos": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "firepunch", "rockpolish", "rockslide", "zenheadbutt"],
+ "abilities": ["Sheer Force"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "firepunch", "headsmash", "rockslide"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "bastiodon": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["metalburst", "roar", "rockblast", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["metalburst", "protect", "roar", "rockblast", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "wormadam": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbuzz", "energyball", "gigadrain", "hiddenpowerground", "hiddenpowerrock", "quiverdance"],
+ "abilities": ["Anticipation", "Overcoat"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bugbuzz", "hiddenpowerground", "hiddenpowerrock", "leafstorm", "psychic"],
+ "abilities": ["Anticipation", "Overcoat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "hiddenpowerground", "protect", "toxic"],
+ "abilities": ["Anticipation", "Overcoat"]
+ }
+ ]
+ },
+ "wormadamsandy": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "infestation", "protect", "stealthrock", "toxic"],
+ "abilities": ["Overcoat"]
+ }
+ ]
+ },
+ "wormadamtrash": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["flashcannon", "infestation", "protect", "stealthrock", "toxic"],
+ "abilities": ["Overcoat"]
+ }
+ ]
+ },
+ "mothim": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "bugbuzz", "energyball", "quiverdance"],
+ "abilities": ["Tinted Lens"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["airslash", "bugbuzz", "energyball", "quiverdance"],
+ "abilities": ["Tinted Lens"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "vespiquen": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["airslash", "defog", "roost", "toxic", "uturn"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "pachirisu": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["nuzzle", "superfang", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "floatzel": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "icepunch", "liquidation", "lowkick", "substitute"],
+ "abilities": ["Water Veil"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "crunch", "icepunch", "liquidation", "lowkick"],
+ "abilities": ["Water Veil"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["bulkup", "icepunch", "liquidation", "lowkick"],
+ "abilities": ["Water Veil"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "cherrim": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dazzlinggleam", "energyball", "healingwish", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerrock", "morningsun"],
+ "abilities": ["Flower Gift"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "energyball", "hiddenpowerground", "leechseed", "morningsun", "toxic"],
+ "abilities": ["Flower Gift"]
+ }
+ ]
+ },
+ "gastrodon": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"],
+ "abilities": ["Storm Drain"]
+ }
+ ]
+ },
+ "ambipom": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "knockoff", "lowkick", "return", "uturn"],
+ "abilities": ["Technician"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "drifblim": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["acrobatics", "defog", "destinybond", "shadowball", "substitute", "willowisp"],
+ "abilities": ["Unburden"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["acrobatics", "hex", "substitute", "willowisp"],
+ "abilities": ["Unburden"]
+ }
+ ]
+ },
+ "lopunny": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["brutalswing", "healingwish", "highjumpkick", "return", "switcheroo"],
+ "abilities": ["Limber"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["brutalswing", "highjumpkick", "return", "splash"],
+ "abilities": ["Limber"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "lopunnymega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["encore", "fakeout", "highjumpkick", "poweruppunch", "return", "substitute"],
+ "abilities": ["Limber"]
+ }
+ ]
+ },
+ "mismagius": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dazzlinggleam", "painsplit", "shadowball", "taunt", "willowisp"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dazzlinggleam", "mysticalfire", "nastyplot", "shadowball", "thunderbolt", "trick"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Fairy"]
+ }
+ ]
+ },
+ "honchkrow": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"],
+ "abilities": ["Moxie"]
+ }
+ ]
+ },
+ "purugly": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "knockoff", "return", "stompingtantrum", "uturn"],
+ "abilities": ["Defiant", "Thick Fat"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "skuntank": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "defog", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"],
+ "abilities": ["Aftermath"]
+ }
+ ]
+ },
+ "bronzong": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "ironhead", "psychic", "stealthrock", "toxic"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "chatot": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["boomburst", "chatter", "heatwave", "hiddenpowerground", "uturn"],
+ "abilities": ["Tangled Feet"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["boomburst", "chatter", "heatwave", "nastyplot", "substitute"],
+ "abilities": ["Tangled Feet"]
+ }
+ ]
+ },
+ "spiritomb": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"],
+ "abilities": ["Infiltrator"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["foulplay", "painsplit", "pursuit", "suckerpunch", "toxic", "willowisp"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "garchomp": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["dragonclaw", "earthquake", "fireblast", "outrage", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Rough Skin"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"],
+ "abilities": ["Rough Skin"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"],
+ "abilities": ["Rough Skin"],
+ "preferredTypes": ["Dragon"]
+ }
+ ]
+ },
+ "garchompmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dracometeor", "earthquake", "fireblast", "stealthrock", "stoneedge"],
+ "abilities": ["Rough Skin"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "lucario": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "crunch", "extremespeed", "meteormash", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "lucariomega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["closecombat", "extremespeed", "meteormash", "swordsdance"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "hippowdon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "drapion": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquatail", "earthquake", "knockoff", "poisonjab", "pursuit", "swordsdance"],
+ "abilities": ["Battle Armor"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "poisonjab", "taunt", "toxicspikes", "whirlwind"],
+ "abilities": ["Battle Armor"]
+ }
+ ]
+ },
+ "toxicroak": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drainpunch", "earthquake", "gunkshot", "knockoff", "substitute", "suckerpunch", "swordsdance"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "carnivine": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "knockoff", "powerwhip", "sleeppowder", "synthesis", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "lumineon": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "icebeam", "scald", "toxic", "uturn"],
+ "abilities": ["Storm Drain"]
+ }
+ ]
+ },
+ "abomasnow": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blizzard", "earthquake", "gigadrain", "iceshard", "woodhammer"],
+ "abilities": ["Snow Warning"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "abomasnowmega": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blizzard", "earthquake", "gigadrain", "iceshard", "woodhammer"],
+ "abilities": ["Snow Warning"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "weavile": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["iceshard", "iciclecrash", "knockoff", "lowkick", "pursuit", "swordsdance"],
+ "abilities": ["Pickpocket"]
+ }
+ ]
+ },
+ "magnezone": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["flashcannon", "hiddenpowerground", "thunderbolt", "voltswitch"],
+ "abilities": ["Magnet Pull"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["flashcannon", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Analytic"]
+ }
+ ]
+ },
+ "lickilicky": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "healbell", "knockoff", "protect", "wish"],
+ "abilities": ["Cloud Nine", "Oblivious"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["bodyslam", "dragontail", "earthquake", "explosion", "knockoff", "powerwhip"],
+ "abilities": ["Cloud Nine", "Own Tempo"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "earthquake", "explosion", "knockoff", "powerwhip", "return", "swordsdance"],
+ "abilities": ["Cloud Nine", "Oblivious"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "rhyperior": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dragontail", "earthquake", "icepunch", "megahorn", "stoneedge"],
+ "abilities": ["Solid Rock"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stoneedge"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "tangrowth": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "knockoff", "leafstorm", "leechseed", "morningsun", "powerwhip", "rockslide", "sleeppowder", "sludgebomb"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["earthquake", "gigadrain", "knockoff", "powerwhip", "rockslide", "sludgebomb"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "electivire": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"],
+ "abilities": ["Motor Drive"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "magmortar": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowerice", "taunt", "thunderbolt"],
+ "abilities": ["Flame Body"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "togekiss": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["airslash", "aurasphere", "nastyplot", "roost", "thunderwave"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "defog", "healbell", "roost", "thunderwave"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "aurasphere", "dazzlinggleam", "trick"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "yanmega": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "protect"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["airslash", "bugbuzz", "gigadrain", "uturn"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "leafeon": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "knockoff", "leafblade", "swordsdance", "synthesis", "xscissor"],
+ "abilities": ["Chlorophyll"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "glaceon": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"],
+ "abilities": ["Ice Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "toxic", "wish"],
+ "abilities": ["Ice Body"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["celebrate", "hiddenpowerground", "icebeam", "storedpower"],
+ "abilities": ["Ice Body"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "gliscor": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "protect", "substitute", "toxic"],
+ "abilities": ["Poison Heal"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "taunt", "toxic", "uturn"],
+ "abilities": ["Poison Heal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "facade", "roost", "swordsdance"],
+ "abilities": ["Poison Heal"]
+ }
+ ]
+ },
+ "mamoswine": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "iceshard", "iciclecrash", "knockoff", "stealthrock"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "porygonz": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "nastyplot", "shadowball", "thunderbolt", "triattack", "trick"],
+ "abilities": ["Adaptability", "Download"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["conversion", "icebeam", "recover", "shadowball", "thunderbolt"],
+ "abilities": ["Adaptability"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "gallade": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "icepunch", "knockoff", "shadowsneak", "swordsdance", "zenheadbutt"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "gallademega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["closecombat", "knockoff", "swordsdance", "zenheadbutt"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "probopass": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "flashcannon", "stealthrock", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Magnet Pull"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthpower", "powergem", "stealthrock", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Magnet Pull"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "dusknoir": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "haze", "icepunch", "painsplit", "shadowsneak", "toxic", "willowisp"],
+ "abilities": ["Frisk", "Pressure"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "shadowsneak", "toxic"],
+ "abilities": ["Frisk", "Pressure"]
+ }
+ ]
+ },
+ "froslass": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave", "willowisp"],
+ "abilities": ["Cursed Body"]
+ }
+ ]
+ },
+ "rotom": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomheat": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerice", "overheat", "painsplit", "thunderbolt", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomwash": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "hydropump", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomfrost": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blizzard", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["blizzard", "painsplit", "thunderbolt", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "rotomfan": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["airslash", "defog", "painsplit", "thunderbolt", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotommow": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "hiddenpowerice", "leafstorm", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "uxie": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn", "yawn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "mesprit": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "healingwish", "hiddenpowerfire", "psychic", "psyshock", "signalbeam", "thunderbolt", "uturn"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Bug"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "azelf": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dazzlinggleam", "fireblast", "nastyplot", "psychic", "psyshock", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["explosion", "fireblast", "knockoff", "psychic", "stealthrock", "taunt", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "dialga": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "dragontail", "fireblast", "flashcannon", "stealthrock", "thunderbolt", "toxic"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "palkia": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "heatran": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "flashcannon", "lavaplume", "magmastorm", "stealthrock", "taunt", "toxic"],
+ "abilities": ["Flash Fire"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthpower", "magmastorm", "protect", "toxic"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "regigigas": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drainpunch", "knockoff", "return", "substitute", "thunderwave"],
+ "abilities": ["Slow Start"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "giratinaorigin": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "hex", "shadowsneak", "thunderwave", "willowisp"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["defog", "dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "giratina": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["dragontail", "rest", "shadowball", "sleeptalk", "willowisp"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "dragontail", "rest", "shadowball", "willowisp"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "cresselia": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "moonblast", "moonlight", "psyshock"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["moonblast", "moonlight", "psychic", "thunderwave", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "phione": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "icebeam", "knockoff", "scald", "toxic", "uturn"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "manaphy": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["energyball", "icebeam", "surf", "tailglow"],
+ "abilities": ["Hydration"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["energyball", "icebeam", "surf", "tailglow"],
+ "abilities": ["Hydration"],
+ "preferredTypes": ["Water"]
+ }
+ ]
+ },
+ "darkrai": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Z-Move user",
+ "movepool": ["darkpulse", "focusblast", "hypnosis", "nastyplot", "sludgebomb"],
+ "abilities": ["Bad Dreams"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["darkpulse", "focusblast", "hypnosis", "nastyplot", "sludgebomb", "substitute"],
+ "abilities": ["Bad Dreams"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "shaymin": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["airslash", "earthpower", "leechseed", "seedflare", "substitute", "synthesis"],
+ "abilities": ["Natural Cure"],
+ "preferredTypes": ["Flying"]
+ }
+ ]
+ },
+ "shayminsky": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "arceus": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusbug": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "judgment"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusdark": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "defog", "fireblast", "judgment", "recover", "sludgebomb", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusdragon": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["earthquake", "extremespeed", "outrage", "recover", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceuselectric": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfairy": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfighting": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover", "shadowball"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfire": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "energyball", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["calmmind", "earthpower", "energyball", "fireblast", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusflying": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusghost": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "defog", "focusblast", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["brickbreak", "extremespeed", "shadowforce", "swordsdance"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusgrass": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "judgment"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusground": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Z-Move user",
+ "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusice": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceuspoison": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "icebeam", "recover", "sludgebomb"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "recover", "sludgebomb"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["calmmind", "earthpower", "icebeam", "recover", "sludgebomb"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceuspsychic": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusrock": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceussteel": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["earthquake", "ironhead", "recover", "stoneedge", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceuswater": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "victini": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["boltstrike", "uturn", "vcreate", "zenheadbutt"],
+ "abilities": ["Victory Star"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["boltstrike", "energyball", "focusblast", "glaciate", "psychic", "uturn", "vcreate"],
+ "abilities": ["Victory Star"],
+ "preferredTypes": ["Electric"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["blueflare", "boltstrike", "celebrate", "storedpower"],
+ "abilities": ["Victory Star"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "serperior": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "dragonpulse", "glare", "hiddenpowerfire", "leafstorm", "leechseed", "substitute"],
+ "abilities": ["Contrary"]
+ }
+ ]
+ },
+ "emboar": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["flareblitz", "headsmash", "suckerpunch", "superpower", "wildcharge"],
+ "abilities": ["Reckless"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["flareblitz", "grassknot", "suckerpunch", "superpower", "wildcharge"],
+ "abilities": ["Reckless"]
+ }
+ ]
+ },
+ "samurott": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "knockoff", "megahorn", "sacredsword", "scald"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "knockoff", "liquidation", "megahorn", "sacredsword", "swordsdance"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "watchog": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hypnosis", "knockoff", "return", "superfang"],
+ "abilities": ["Analytic"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hypnosis", "knockoff", "return", "stompingtantrum", "swordsdance"],
+ "abilities": ["Analytic"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "stoutland": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crunch", "facade", "return", "superpower"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "liepard": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["copycat", "encore", "knockoff", "substitute", "thunderwave", "uturn"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["gunkshot", "knockoff", "playrough", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "simisage": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["gunkshot", "hiddenpowerice", "knockoff", "leafstorm", "rockslide", "superpower"],
+ "abilities": ["Overgrow"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "gigadrain", "hiddenpowerice", "nastyplot", "substitute"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "simisear": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["fireblast", "focusblast", "grassknot", "hiddenpowerrock", "nastyplot", "substitute"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "simipour": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hydropump", "icebeam", "nastyplot", "substitute"],
+ "abilities": ["Torrent"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "musharna": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "moonlight", "psyshock", "shadowball", "signalbeam"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "moonlight", "psychic", "signalbeam", "thunderwave", "toxic"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "unfezant": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "nightslash", "pluck", "return", "roost", "toxic", "uturn"],
+ "abilities": ["Super Luck"]
+ }
+ ]
+ },
+ "zebstrika": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "overheat", "voltswitch", "wildcharge"],
+ "abilities": ["Sap Sipper"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "gigalith": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower", "toxic"],
+ "abilities": ["Sand Stream"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "swoobat": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "heatwave", "roost", "storedpower"],
+ "abilities": ["Simple"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "calmmind", "heatwave", "roost", "storedpower"],
+ "abilities": ["Simple"]
+ }
+ ]
+ },
+ "excadrill": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "ironhead", "rapidspin", "rockslide", "swordsdance"],
+ "abilities": ["Mold Breaker", "Sand Rush"]
+ }
+ ]
+ },
+ "audino": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "protect", "toxic", "wish"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "audinomega": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["dazzlinggleam", "protect", "toxic", "wish"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["calmmind", "dazzlinggleam", "fireblast", "protect", "wish"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "gurdurr": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bulkup", "drainpunch", "knockoff", "machpunch"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "conkeldurr": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drainpunch", "facade", "knockoff", "machpunch"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "seismitoad": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hydropump", "knockoff", "raindance", "sludgewave"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "scald", "stealthrock", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "scald", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "throh": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bulkup", "facade", "knockoff", "stormthrow"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulkup", "circlethrow", "knockoff", "rest", "sleeptalk"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "sawk": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulkup", "closecombat", "earthquake", "knockoff", "poisonjab", "stoneedge"],
+ "abilities": ["Mold Breaker", "Sturdy"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "leavanny": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["knockoff", "leafblade", "stickyweb", "toxic", "xscissor"],
+ "abilities": ["Chlorophyll", "Swarm"]
+ }
+ ]
+ },
+ "scolipede": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["earthquake", "megahorn", "poisonjab", "spikes", "toxicspikes"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "megahorn", "poisonjab", "swordsdance"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "whimsicott": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "encore", "energyball", "moonblast", "stunspore", "taunt", "toxic", "uturn"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["leechseed", "moonblast", "protect", "substitute"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "lilligant": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "quiverdance", "sleeppowder"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerfire", "hiddenpowerrock", "petaldance", "quiverdance", "sleeppowder"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "basculin": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "crunch", "headsmash", "liquidation", "superpower"],
+ "abilities": ["Adaptability"]
+ }
+ ]
+ },
+ "krookodile": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "knockoff", "pursuit", "stealthrock", "stoneedge", "superpower"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "darmanitan": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "maractus": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["gigadrain", "hiddenpowerfire", "knockoff", "spikes", "synthesis", "toxic"],
+ "abilities": ["Storm Drain", "Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "spikyshield"],
+ "abilities": ["Storm Drain", "Water Absorb"]
+ }
+ ]
+ },
+ "crustle": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "knockoff", "shellsmash", "stoneedge", "xscissor"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "scrafty": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "highjumpkick", "ironhead", "knockoff"],
+ "abilities": ["Intimidate", "Moxie"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bulkup", "drainpunch", "knockoff", "rest"],
+ "abilities": ["Shed Skin"]
+ }
+ ]
+ },
+ "sigilyph": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "calmmind", "defog", "heatwave", "psyshock", "roost"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["airslash", "energyball", "heatwave", "icebeam", "psychic", "psyshock"],
+ "abilities": ["Tinted Lens"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["airslash", "cosmicpower", "roost", "storedpower"],
+ "abilities": ["Magic Guard"]
+ }
+ ]
+ },
+ "cofagrigus": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["haze", "painsplit", "shadowball", "toxicspikes", "willowisp"],
+ "abilities": ["Mummy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "trickroom"],
+ "abilities": ["Mummy"]
+ }
+ ]
+ },
+ "carracosta": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aquajet", "earthquake", "icebeam", "liquidation", "shellsmash", "stoneedge"],
+ "abilities": ["Solid Rock", "Sturdy", "Swift Swim"]
+ }
+ ]
+ },
+ "archeops": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["acrobatics", "defog", "earthquake", "knockoff", "roost", "stealthrock", "stoneedge", "uturn"],
+ "abilities": ["Defeatist"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "garbodor": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["gunkshot", "haze", "painsplit", "spikes", "stompingtantrum", "toxic", "toxicspikes"],
+ "abilities": ["Aftermath"]
+ }
+ ]
+ },
+ "zoroark": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "flamethrower", "focusblast", "nastyplot", "sludgebomb", "trick", "uturn"],
+ "abilities": ["Illusion"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "cinccino": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletseed", "knockoff", "rockblast", "tailslap", "uturn"],
+ "abilities": ["Skill Link"]
+ }
+ ]
+ },
+ "gothitelle": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "shadowball", "signalbeam", "thunderbolt", "trick"],
+ "abilities": ["Shadow Tag"]
+ }
+ ]
+ },
+ "reuniclus": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover", "signalbeam"],
+ "abilities": ["Magic Guard"]
+ }
+ ]
+ },
+ "swanna": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "roost", "scald", "toxic"],
+ "abilities": ["Hydration"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["hurricane", "raindance", "rest", "scald"],
+ "abilities": ["Hydration"],
+ "preferredTypes": ["Water"]
+ }
+ ]
+ },
+ "vanilluxe": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["autotomize", "blizzard", "explosion", "flashcannon", "freezedry", "hiddenpowerground"],
+ "abilities": ["Snow Warning"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["blizzard", "explosion", "flashcannon", "freezedry", "hiddenpowerground"],
+ "abilities": ["Snow Warning"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "sawsbuck": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["headbutt", "hornleech", "jumpkick", "return", "substitute", "swordsdance"],
+ "abilities": ["Sap Sipper", "Serene Grace"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "emolga": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["acrobatics", "defog", "encore", "knockoff", "roost", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Motor Drive"]
+ }
+ ]
+ },
+ "escavalier": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drillrun", "ironhead", "knockoff", "megahorn", "pursuit", "swordsdance"],
+ "abilities": ["Overcoat", "Swarm"]
+ }
+ ]
+ },
+ "amoonguss": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["clearsmog", "foulplay", "gigadrain", "sludgebomb", "spore", "stompingtantrum"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "sludgebomb", "spore", "synthesis"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "jellicent": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icebeam", "recover", "scald", "shadowball", "taunt"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["hex", "recover", "scald", "toxic", "willowisp"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "alomomola": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "protect", "scald", "toxic", "wish"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "galvantula": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bugbuzz", "gigadrain", "stickyweb", "thunder", "voltswitch"],
+ "abilities": ["Compound Eyes"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "ferrothorn": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["gyroball", "leechseed", "powerwhip", "spikes", "stealthrock"],
+ "abilities": ["Iron Barbs"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "powerwhip", "spikes", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Iron Barbs"]
+ }
+ ]
+ },
+ "klinklang": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Electric", "Normal", "Steel"]
+ }
+ ]
+ },
+ "eelektross": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["discharge", "flamethrower", "gigadrain", "hiddenpowerice", "knockoff", "superpower", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "beheeyem": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerfighting", "psychic", "psyshock", "recover", "signalbeam", "thunderbolt", "trick", "trickroom"],
+ "abilities": ["Analytic"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "chandelure": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["energyball", "fireblast", "shadowball", "trick"],
+ "abilities": ["Flash Fire"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "fireblast", "shadowball", "substitute"],
+ "abilities": ["Flame Body", "Flash Fire"]
+ }
+ ]
+ },
+ "haxorus": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "outrage", "poisonjab", "taunt"],
+ "abilities": ["Mold Breaker"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["dragondance", "earthquake", "outrage", "poisonjab"],
+ "abilities": ["Mold Breaker"],
+ "preferredTypes": ["Dragon"]
+ }
+ ]
+ },
+ "beartic": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquajet", "iciclecrash", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Slush Rush", "Swift Swim"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "cryogonal": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["freezedry", "haze", "hiddenpowerground", "rapidspin", "recover", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "accelgor": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["bugbuzz", "encore", "focusblast", "hiddenpowerground", "hiddenpowerrock", "spikes", "toxicspikes", "uturn"],
+ "abilities": ["Hydration", "Sticky Hold"]
+ }
+ ]
+ },
+ "stunfisk": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["discharge", "earthpower", "rest", "scald", "sleeptalk", "stealthrock", "toxic"],
+ "abilities": ["Static"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["discharge", "earthpower", "foulplay", "scald", "sludgebomb"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "mienshao": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["highjumpkick", "knockoff", "poisonjab", "stoneedge", "swordsdance", "uturn"],
+ "abilities": ["Reckless"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["fakeout", "highjumpkick", "knockoff", "uturn"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "druddigon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["firepunch", "glare", "gunkshot", "outrage", "suckerpunch"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Poison"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "earthquake", "glare", "gunkshot", "outrage", "stealthrock", "suckerpunch"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "golurk": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dynamicpunch", "earthquake", "icepunch", "rockpolish", "stealthrock", "stoneedge"],
+ "abilities": ["No Guard"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "icepunch", "rockpolish", "shadowpunch"],
+ "abilities": ["Iron Fist"]
+ }
+ ]
+ },
+ "bisharp": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["ironhead", "knockoff", "pursuit", "suckerpunch", "swordsdance"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "bouffalant": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "headcharge", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Reckless", "Sap Sipper"]
+ }
+ ]
+ },
+ "braviary": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "bulkup", "roost", "superpower"],
+ "abilities": ["Defiant"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "return", "superpower", "uturn"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "mandibuzz": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "foulplay", "knockoff", "roost", "taunt", "toxic", "uturn"],
+ "abilities": ["Overcoat"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "foulplay", "roost", "taunt", "toxic", "uturn"],
+ "abilities": ["Overcoat"]
+ }
+ ]
+ },
+ "heatmor": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["fireblast", "firelash", "gigadrain", "knockoff", "suckerpunch", "superpower"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "durant": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["honeclaws", "ironhead", "rockslide", "superpower", "xscissor"],
+ "abilities": ["Hustle"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "hydreigon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "dracometeor", "earthpower", "fireblast", "flashcannon", "roost", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["darkpulse", "defog", "dracometeor", "fireblast", "roost", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["darkpulse", "dracometeor", "flashcannon", "superpower", "uturn"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "volcarona": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerrock", "quiverdance", "roost"],
+ "abilities": ["Flame Body", "Swarm"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["bugbuzz", "fireblast", "gigadrain", "quiverdance", "roost"],
+ "abilities": ["Flame Body", "Swarm"],
+ "preferredTypes": ["Bug", "Fire"]
+ }
+ ]
+ },
+ "cobalion": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "ironhead", "stealthrock", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["closecombat", "ironhead", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "terrakion": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "quickattack", "stealthrock", "stoneedge"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["closecombat", "earthquake", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["closecombat", "earthquake", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Fighting", "Rock"]
+ }
+ ]
+ },
+ "virizion": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "tornadus": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"],
+ "abilities": ["Defiant", "Prankster"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "bulkup", "knockoff", "superpower", "taunt"],
+ "abilities": ["Defiant"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "tornadustherian": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "thundurus": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerflying", "hiddenpowerice", "knockoff", "superpower", "taunt", "thunderbolt", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "thundurustherian": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "reshiram": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blueflare", "defog", "dracometeor", "roost", "toxic"],
+ "abilities": ["Turboblaze"]
+ }
+ ]
+ },
+ "zekrom": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["boltstrike", "honeclaws", "outrage", "roost", "substitute"],
+ "abilities": ["Teravolt"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["boltstrike", "dracometeor", "outrage", "voltswitch"],
+ "abilities": ["Teravolt"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["boltstrike", "honeclaws", "outrage", "roost"],
+ "abilities": ["Teravolt"],
+ "preferredTypes": ["Dragon"]
+ }
+ ]
+ },
+ "landorus": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "focusblast", "knockoff", "psychic", "rockpolish", "rockslide", "sludgewave", "stealthrock"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "focusblast", "psychic", "rockpolish", "sludgewave"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "landorustherian": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "knockoff", "stealthrock", "stoneedge", "toxic", "uturn"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "knockoff", "rockpolish", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["earthquake", "fly", "rockpolish", "stoneedge", "swordsdance"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Flying"]
+ }
+ ]
+ },
+ "kyurem": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthpower", "icebeam", "roost", "substitute"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["dracometeor", "earthpower", "icebeam", "outrage", "roost", "substitute"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "earthpower", "focusblast", "icebeam", "outrage"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "kyuremblack": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "fusionbolt", "icebeam", "outrage", "roost", "substitute"],
+ "abilities": ["Teravolt"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["freezeshock", "fusionbolt", "honeclaws", "outrage"],
+ "abilities": ["Teravolt"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "kyuremwhite": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dracometeor", "earthpower", "fusionflare", "icebeam", "roost"],
+ "abilities": ["Turboblaze"]
+ }
+ ]
+ },
+ "keldeo": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hydropump", "icywind", "scald", "secretsword"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "scald", "secretsword", "substitute"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "hydropump", "scald", "secretsword"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "meloetta": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "uturn"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "knockoff", "relicsong", "return"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["celebrate", "focusblast", "hypervoice", "psyshock"],
+ "abilities": ["Serene Grace"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "genesect": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["blazekick", "ironhead", "shiftgear", "thunderbolt", "xscissor"],
+ "abilities": ["Download"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["blazekick", "extremespeed", "ironhead", "uturn"],
+ "abilities": ["Download"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bugbuzz", "flamethrower", "flashcannon", "icebeam", "thunderbolt", "uturn"],
+ "abilities": ["Download"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "chesnaught": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulkup", "drainpunch", "spikes", "synthesis", "toxic", "woodhammer"],
+ "abilities": ["Bulletproof"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["drainpunch", "leechseed", "spikyshield", "woodhammer"],
+ "abilities": ["Bulletproof"]
+ }
+ ]
+ },
+ "delphox": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "dazzlinggleam", "fireblast", "grassknot", "psyshock", "switcheroo"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "greninja": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["grassknot", "gunkshot", "hydropump", "icebeam", "spikes", "taunt", "toxicspikes", "uturn"],
+ "abilities": ["Protean"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "greninjabond": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "hydropump", "icebeam", "uturn", "watershuriken"],
+ "abilities": ["Battle Bond"]
+ }
+ ]
+ },
+ "diggersby": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "earthquake", "knockoff", "quickattack", "return", "swordsdance"],
+ "abilities": ["Huge Power"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "foulplay", "quickattack", "return", "uturn"],
+ "abilities": ["Huge Power"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "talonflame": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "overheat", "roost", "uturn", "willowisp"],
+ "abilities": ["Flame Body"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["bravebird", "flareblitz", "roost", "swordsdance"],
+ "abilities": ["Gale Wings"],
+ "preferredTypes": ["Flying"]
+ }
+ ]
+ },
+ "vivillon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["energyball", "hurricane", "quiverdance", "sleeppowder"],
+ "abilities": ["Compound Eyes"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bugbuzz", "hurricane", "quiverdance", "sleeppowder"],
+ "abilities": ["Compound Eyes"]
+ }
+ ]
+ },
+ "pyroar": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "fireblast", "hypervoice", "solarbeam", "sunnyday", "willowisp", "workup"],
+ "abilities": ["Unnerve"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["darkpulse", "fireblast", "hypervoice", "solarbeam", "willowisp"],
+ "abilities": ["Unnerve"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "floetteeternal": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerfire", "hiddenpowerground", "lightofruin", "moonblast", "psychic"],
+ "abilities": ["Flower Veil"]
+ }
+ ]
+ },
+ "florges": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "defog", "moonblast", "synthesis", "toxic"],
+ "abilities": ["Flower Veil"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["moonblast", "protect", "toxic", "wish"],
+ "abilities": ["Flower Veil"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hiddenpowerground", "moonblast", "synthesis"],
+ "abilities": ["Flower Veil"]
+ }
+ ]
+ },
+ "gogoat": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "earthquake", "hornleech", "milkdrink", "toxic"],
+ "abilities": ["Sap Sipper"]
+ }
+ ]
+ },
+ "pangoro": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bulletpunch", "drainpunch", "gunkshot", "icepunch", "knockoff", "partingshot", "superpower", "swordsdance"],
+ "abilities": ["Iron Fist", "Scrappy"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "furfrou": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["darkpulse", "rest", "return", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Fur Coat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["cottonguard", "rest", "return", "substitute", "toxic"],
+ "abilities": ["Fur Coat"]
+ }
+ ]
+ },
+ "meowstic": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "lightscreen", "psychic", "reflect", "signalbeam", "thunderwave", "toxic", "yawn"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "meowsticf": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "darkpulse", "psychic", "psyshock", "signalbeam", "thunderbolt"],
+ "abilities": ["Competitive"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "doublade": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["ironhead", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"],
+ "abilities": ["No Guard"]
+ }
+ ]
+ },
+ "aegislash": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["ironhead", "kingsshield", "shadowball", "substitute", "toxic"],
+ "abilities": ["Stance Change"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["ironhead", "kingsshield", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"],
+ "abilities": ["Stance Change"],
+ "preferredTypes": ["Steel"]
+ }
+ ]
+ },
+ "aromatisse": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["calmmind", "moonblast", "protect", "toxic", "wish"],
+ "abilities": ["Aroma Veil"]
+ }
+ ]
+ },
+ "slurpuff": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "drainpunch", "playrough", "return"],
+ "abilities": ["Unburden"]
+ }
+ ]
+ },
+ "malamar": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["knockoff", "rest", "sleeptalk", "superpower"],
+ "abilities": ["Contrary"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["happyhour", "knockoff", "psychocut", "superpower"],
+ "abilities": ["Contrary"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "barbaracle": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "liquidation", "lowkick", "shellsmash", "stoneedge"],
+ "abilities": ["Tough Claws"]
+ }
+ ]
+ },
+ "dragalge": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "focusblast", "sludgewave", "toxicspikes"],
+ "abilities": ["Adaptability"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dracometeor", "dragonpulse", "focusblast", "sludgewave"],
+ "abilities": ["Adaptability"]
+ }
+ ]
+ },
+ "clawitzer": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn", "waterpulse"],
+ "abilities": ["Mega Launcher"]
+ }
+ ]
+ },
+ "heliolisk": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "glare", "hypervoice", "surf", "thunderbolt", "voltswitch"],
+ "abilities": ["Dry Skin"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hypervoice", "raindance", "surf", "thunder"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "tyrantrum": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragondance", "earthquake", "headsmash", "outrage", "superpower"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["dragondance", "earthquake", "headsmash", "outrage"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Dragon", "Rock"]
+ }
+ ]
+ },
+ "aurorus": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["ancientpower", "blizzard", "earthpower", "freezedry", "stealthrock", "thunderwave"],
+ "abilities": ["Snow Warning"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "sylveon": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "hiddenpowerground", "hypervoice", "protect", "psyshock", "wish"],
+ "abilities": ["Pixilate"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hypervoice", "protect", "wish"],
+ "abilities": ["Pixilate"]
+ }
+ ]
+ },
+ "hawlucha": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "highjumpkick", "skyattack", "substitute", "swordsdance"],
+ "abilities": ["Unburden"]
+ }
+ ]
+ },
+ "dedenne": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "recycle", "thunderbolt", "toxic"],
+ "abilities": ["Cheek Pouch"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["recycle", "substitute", "superfang", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Cheek Pouch"]
+ }
+ ]
+ },
+ "carbink": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["lightscreen", "moonblast", "powergem", "reflect", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "goodra": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["dracometeor", "dragontail", "earthquake", "fireblast", "powerwhip", "sludgebomb"],
+ "abilities": ["Sap Sipper"]
+ }
+ ]
+ },
+ "klefki": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dazzlinggleam", "foulplay", "spikes", "thunderwave"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["magnetrise", "playrough", "spikes", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "trevenant": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drainpunch", "earthquake", "hornleech", "rockslide", "shadowclaw", "trickroom", "woodhammer"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "hornleech", "protect", "toxic"],
+ "abilities": ["Harvest"]
+ }
+ ]
+ },
+ "gourgeistsmall": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "gourgeistlarge": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "gourgeist": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "gourgeistsuper": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "avalugg": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["avalanche", "curse", "earthquake", "rapidspin", "recover"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "noivern": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["boomburst", "dracometeor", "flamethrower", "hurricane", "roost", "switcheroo"],
+ "abilities": ["Infiltrator"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "dracometeor", "flamethrower", "hurricane", "roost", "uturn"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "xerneas": {
+ "level": 64,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "geomancy", "moonblast", "psyshock"],
+ "abilities": ["Fairy Aura"]
+ }
+ ]
+ },
+ "yveltal": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "oblivionwing", "roost", "suckerpunch", "taunt", "toxic", "uturn"],
+ "abilities": ["Dark Aura"]
+ }
+ ]
+ },
+ "zygarde": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "extremespeed", "outrage", "substitute", "thousandarrows"],
+ "abilities": ["Power Construct"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["coil", "rest", "sleeptalk", "thousandarrows"],
+ "abilities": ["Power Construct"]
+ }
+ ]
+ },
+ "zygarde10": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["extremespeed", "irontail", "outrage", "thousandarrows"],
+ "abilities": ["Aura Break"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["coil", "extremespeed", "irontail", "outrage", "thousandarrows"],
+ "abilities": ["Aura Break"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["coil", "extremespeed", "irontail", "outrage", "thousandarrows"],
+ "abilities": ["Aura Break"],
+ "preferredTypes": ["Dragon"]
+ }
+ ]
+ },
+ "diancie": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["diamondstorm", "earthpower", "healbell", "moonblast", "stealthrock", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "dianciemega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "diamondstorm", "earthpower", "moonblast", "stealthrock"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "hoopa": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "shadowball", "trick"],
+ "abilities": ["Magician"]
+ }
+ ]
+ },
+ "hoopaunbound": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drainpunch", "gunkshot", "hyperspacefury", "trick", "zenheadbutt"],
+ "abilities": ["Magician"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drainpunch", "gunkshot", "hyperspacefury", "psychic", "trick"],
+ "abilities": ["Magician"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "volcanion": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthpower", "fireblast", "sludgebomb", "steameruption", "superpower", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "decidueye": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "leafstorm", "roost", "spiritshackle", "uturn"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["leafblade", "shadowsneak", "spiritshackle", "swordsdance"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "incineroar": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["darkestlariat", "earthquake", "fakeout", "flareblitz", "knockoff", "overheat", "uturn"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["darkestlariat", "flamecharge", "flareblitz", "swordsdance"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "primarina": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hydropump", "moonblast", "psychic", "scald"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "toucannon": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["beakblast", "boomburst", "brickbreak", "bulletseed", "roost"],
+ "abilities": ["Keen Eye", "Skill Link"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "brickbreak", "bulletseed", "knockoff", "rockblast", "swordsdance", "uturn"],
+ "abilities": ["Keen Eye", "Skill Link"]
+ }
+ ]
+ },
+ "gumshoos": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "earthquake", "return", "uturn"],
+ "abilities": ["Adaptability", "Stakeout"]
+ }
+ ]
+ },
+ "vikavolt": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["agility", "bugbuzz", "energyball", "thunderbolt", "voltswitch"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bugbuzz", "discharge", "energyball", "roost", "toxic", "voltswitch"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "crabominable": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "drainpunch", "earthquake", "icehammer", "stoneedge"],
+ "abilities": ["Iron Fist"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["drainpunch", "earthquake", "icehammer", "thunderpunch"],
+ "abilities": ["Iron Fist"]
+ }
+ ]
+ },
+ "oricorio": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "defog", "hurricane", "revelationdance", "roost", "toxic"],
+ "abilities": ["Dancer"]
+ }
+ ]
+ },
+ "oricoriopompom": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "defog", "hurricane", "revelationdance", "roost", "toxic"],
+ "abilities": ["Dancer"]
+ }
+ ]
+ },
+ "oricoriopau": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "defog", "hurricane", "revelationdance", "roost", "toxic"],
+ "abilities": ["Dancer"]
+ }
+ ]
+ },
+ "oricoriosensu": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "defog", "hurricane", "revelationdance", "roost", "toxic"],
+ "abilities": ["Dancer"]
+ }
+ ]
+ },
+ "ribombee": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbuzz", "hiddenpowerground", "moonblast", "quiverdance", "roost"],
+ "abilities": ["Shield Dust"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["aromatherapy", "moonblast", "roost", "stickyweb", "stunspore", "uturn"],
+ "abilities": ["Shield Dust"]
+ }
+ ]
+ },
+ "lycanroc": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["accelerock", "drillrun", "stoneedge", "swordsdance", "zenheadbutt"],
+ "abilities": ["Sand Rush"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["accelerock", "drillrun", "stoneedge", "swordsdance", "zenheadbutt"],
+ "abilities": ["Sand Rush"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "lycanrocmidnight": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["stealthrock", "stompingtantrum", "stoneedge", "suckerpunch", "swordsdance"],
+ "abilities": ["No Guard"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["stompingtantrum", "stoneedge", "suckerpunch", "swordsdance"],
+ "abilities": ["No Guard"]
+ }
+ ]
+ },
+ "lycanrocdusk": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["accelerock", "drillrun", "return", "stoneedge", "swordsdance", "zenheadbutt"],
+ "abilities": ["Tough Claws"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["accelerock", "drillrun", "return", "stoneedge", "swordsdance", "zenheadbutt"],
+ "abilities": ["Tough Claws"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "wishiwashi": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["earthquake", "hiddenpowergrass", "hydropump", "icebeam", "scald", "uturn"],
+ "abilities": ["Schooling"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "scald"],
+ "abilities": ["Schooling"]
+ }
+ ]
+ },
+ "toxapex": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["haze", "recover", "scald", "toxic", "toxicspikes"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["banefulbunker", "recover", "scald", "toxic"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "mudsdale": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "earthquake", "heavyslam", "rockslide", "stealthrock", "toxic"],
+ "abilities": ["Stamina"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "araquanid": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["leechlife", "liquidation", "mirrorcoat", "stickyweb", "toxic"],
+ "abilities": ["Water Bubble"]
+ }
+ ]
+ },
+ "lurantis": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "hiddenpowerice", "knockoff", "leafstorm", "superpower", "synthesis"],
+ "abilities": ["Contrary"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["hiddenpowerice", "hiddenpowerrock", "knockoff", "leafstorm", "superpower"],
+ "abilities": ["Contrary"]
+ }
+ ]
+ },
+ "shiinotic": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "hiddenpowerground", "leechseed", "moonblast", "spore", "strengthsap"],
+ "abilities": ["Effect Spore"]
+ }
+ ]
+ },
+ "salazzle": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Z-Move user",
+ "movepool": ["dragonpulse", "fireblast", "hiddenpowergrass", "nastyplot", "sludgewave"],
+ "abilities": ["Corrosion"],
+ "preferredTypes": ["Dragon", "Fire"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["flamethrower", "protect", "substitute", "toxic"],
+ "abilities": ["Corrosion"]
+ }
+ ]
+ },
+ "bewear": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["doubleedge", "return", "shadowclaw", "superpower", "swordsdance"],
+ "abilities": ["Fluffy"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "drainpunch", "shadowclaw", "superpower"],
+ "abilities": ["Fluffy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bulkup", "doubleedge", "drainpunch", "return", "shadowclaw"],
+ "abilities": ["Fluffy"]
+ }
+ ]
+ },
+ "tsareena": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["highjumpkick", "knockoff", "powerwhip", "rapidspin", "synthesis", "uturn"],
+ "abilities": ["Queenly Majesty"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "comfey": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "defog", "drainingkiss", "synthesis", "toxic", "uturn"],
+ "abilities": ["Triage"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "drainingkiss", "gigadrain", "hiddenpowerground"],
+ "abilities": ["Triage"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "drainingkiss", "gigadrain", "hiddenpowerground", "synthesis"],
+ "abilities": ["Triage"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "oranguru": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["focusblast", "nastyplot", "naturepower", "psychic", "psyshock", "thunderbolt", "trick"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "passimian": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "gunkshot", "knockoff", "rockslide", "uturn"],
+ "abilities": ["Defiant"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bulkup", "drainpunch", "gunkshot", "knockoff"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "golisopod": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["firstimpression", "knockoff", "leechlife", "liquidation", "spikes"],
+ "abilities": ["Emergency Exit"]
+ }
+ ]
+ },
+ "palossand": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "shadowball", "shoreup", "stealthrock", "toxic"],
+ "abilities": ["Water Compaction"]
+ }
+ ]
+ },
+ "pyukumuku": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["block", "recover", "soak", "toxic"],
+ "abilities": ["Unaware"]
+ }
+ ]
+ },
+ "typenull": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["payback", "rest", "return", "sleeptalk", "swordsdance"],
+ "abilities": ["Battle Armor"]
+ }
+ ]
+ },
+ "silvally": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "doubleedge", "explosion", "flamecharge", "ironhead", "return", "swordsdance"],
+ "abilities": ["RKS System"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "silvallybug": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "icebeam", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallydark": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["flamecharge", "ironhead", "multiattack", "swordsdance"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallydragon": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "dracometeor", "flamethrower", "ironhead", "partingshot", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["flamecharge", "ironhead", "outrage", "swordsdance"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallyelectric": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic", "uturn"],
+ "abilities": ["RKS System"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "silvallyfairy": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "multiattack", "partingshot", "surf", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallyfighting": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "shadowball", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "flamecharge", "ironhead", "multiattack", "rockslide", "swordsdance"],
+ "abilities": ["RKS System"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "silvallyfire": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "icebeam", "multiattack", "partingshot", "surf", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallyflying": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "ironhead", "multiattack", "partingshot", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallyghost": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["explosion", "multiattack", "swordsdance", "xscissor"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallygrass": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallyground": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["flamecharge", "multiattack", "rockslide", "swordsdance"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallyice": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "multiattack", "partingshot", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["RKS System"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "silvallypoison": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "multiattack", "partingshot", "surf", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallypsychic": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "multiattack", "partingshot", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallyrock": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "grasspledge", "multiattack", "partingshot", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallysteel": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "flamethrower", "multiattack", "partingshot", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "silvallywater": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "icebeam", "multiattack", "partingshot", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["RKS System"]
+ }
+ ]
+ },
+ "minior": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "earthquake", "powergem", "shellsmash"],
+ "abilities": ["Shields Down"]
+ }
+ ]
+ },
+ "komala": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "knockoff", "rapidspin", "return", "suckerpunch", "superpower", "uturn", "woodhammer"],
+ "abilities": ["Comatose"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "turtonator": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["dracometeor", "dragontail", "earthquake", "explosion", "fireblast"],
+ "abilities": ["Shell Armor"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dracometeor", "dragonpulse", "earthquake", "fireblast", "shellsmash"],
+ "abilities": ["Shell Armor"]
+ }
+ ]
+ },
+ "togedemaru": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["ironhead", "nuzzle", "spikyshield", "uturn", "wish"],
+ "abilities": ["Iron Barbs", "Lightning Rod", "Sturdy"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["ironhead", "spikyshield", "uturn", "wish", "zingzap"],
+ "abilities": ["Iron Barbs", "Lightning Rod", "Sturdy"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["ironhead", "nuzzle", "superfang", "uturn", "zingzap"],
+ "abilities": ["Iron Barbs", "Lightning Rod", "Sturdy"],
+ "preferredTypes": ["Steel"]
+ }
+ ]
+ },
+ "mimikyu": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drainpunch", "playrough", "shadowclaw", "shadowsneak", "swordsdance"],
+ "abilities": ["Disguise"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["drainpunch", "playrough", "shadowclaw", "shadowsneak", "swordsdance"],
+ "abilities": ["Disguise"]
+ }
+ ]
+ },
+ "bruxish": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "crunch", "icefang", "liquidation", "psychicfangs", "swordsdance"],
+ "abilities": ["Strong Jaw"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "drampa": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dracometeor", "fireblast", "hypervoice", "thunderbolt"],
+ "abilities": ["Sap Sipper"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dracometeor", "fireblast", "hypervoice", "roost"],
+ "abilities": ["Berserk"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "fireblast", "glare", "hypervoice", "roost"],
+ "abilities": ["Berserk"]
+ }
+ ]
+ },
+ "dhelmise": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["anchorshot", "earthquake", "knockoff", "powerwhip", "rapidspin", "synthesis"],
+ "abilities": ["Steelworker"],
+ "preferredTypes": ["Steel"]
+ }
+ ]
+ },
+ "kommoo": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Z-Move user",
+ "movepool": ["clangingscales", "closecombat", "dragondance", "ironhead"],
+ "abilities": ["Bulletproof", "Soundproof"],
+ "preferredTypes": ["Dragon"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["closecombat", "dragondance", "ironhead", "outrage"],
+ "abilities": ["Bulletproof", "Soundproof"]
+ }
+ ]
+ },
+ "tapukoko": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["bravebird", "dazzlinggleam", "defog", "naturesmadness", "uturn", "wildcharge"],
+ "abilities": ["Electric Surge"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["calmmind", "dazzlinggleam", "grassknot", "roost", "thunderbolt"],
+ "abilities": ["Electric Surge"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "tapulele": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "moonblast", "psychic", "psyshock"],
+ "abilities": ["Psychic Surge"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "focusblast", "moonblast", "psychic", "psyshock"],
+ "abilities": ["Psychic Surge"]
+ }
+ ]
+ },
+ "tapubulu": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "hornleech", "megahorn", "stoneedge", "superpower", "woodhammer"],
+ "abilities": ["Grassy Surge"]
+ }
+ ]
+ },
+ "tapufini": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hydropump", "icebeam", "moonblast", "surf", "taunt"],
+ "abilities": ["Misty Surge"]
+ }
+ ]
+ },
+ "solgaleo": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "flareblitz", "knockoff", "morningsun", "stoneedge", "sunsteelstrike", "zenheadbutt"],
+ "abilities": ["Full Metal Body"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "flareblitz", "knockoff", "stoneedge", "sunsteelstrike", "zenheadbutt"],
+ "abilities": ["Full Metal Body"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "flamecharge", "knockoff", "psychic", "sunsteelstrike"],
+ "abilities": ["Full Metal Body"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "lunala": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "moonblast", "moongeistbeam", "roost"],
+ "abilities": ["Shadow Shield"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["calmmind", "moonblast", "moongeistbeam", "psyshock", "roost"],
+ "abilities": ["Shadow Shield"]
+ }
+ ]
+ },
+ "nihilego": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["grassknot", "hiddenpowerfire", "hiddenpowerground", "powergem", "sludgewave", "stealthrock", "thunderbolt", "toxicspikes"],
+ "abilities": ["Beast Boost"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "buzzwole": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["drainpunch", "earthquake", "ironhead", "leechlife", "stoneedge", "superpower"],
+ "abilities": ["Beast Boost"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "drainpunch", "leechlife", "roost", "stoneedge", "toxic"],
+ "abilities": ["Beast Boost"]
+ }
+ ]
+ },
+ "pheromosa": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["highjumpkick", "icebeam", "poisonjab", "throatchop", "uturn"],
+ "abilities": ["Beast Boost"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "xurkitree": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dazzlinggleam", "energyball", "hiddenpowerice", "tailglow", "thunderbolt", "voltswitch"],
+ "abilities": ["Beast Boost"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["dazzlinggleam", "electricterrain", "energyball", "hiddenpowerice", "thunderbolt"],
+ "abilities": ["Beast Boost"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "celesteela": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["airslash", "earthquake", "fireblast", "heavyslam"],
+ "abilities": ["Beast Boost"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["airslash", "heavyslam", "leechseed", "protect"],
+ "abilities": ["Beast Boost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["airslash", "autotomize", "earthquake", "fireblast", "heavyslam"],
+ "abilities": ["Beast Boost"]
+ }
+ ]
+ },
+ "kartana": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["knockoff", "leafblade", "sacredsword", "smartstrike", "swordsdance"],
+ "abilities": ["Beast Boost"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["knockoff", "leafblade", "sacredsword", "smartstrike", "swordsdance"],
+ "abilities": ["Beast Boost"],
+ "preferredTypes": ["Fighting", "Grass", "Steel"]
+ }
+ ]
+ },
+ "guzzlord": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["dracometeor", "earthquake", "fireblast", "heavyslam", "knockoff"],
+ "abilities": ["Beast Boost"]
+ }
+ ]
+ },
+ "necrozma": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "heatwave", "moonlight", "photongeyser", "stealthrock"],
+ "abilities": ["Prism Armor"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["calmmind", "heatwave", "moonlight", "photongeyser"],
+ "abilities": ["Prism Armor"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "knockoff", "photongeyser", "swordsdance"],
+ "abilities": ["Prism Armor"]
+ }
+ ]
+ },
+ "necrozmaduskmane": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["autotomize", "earthquake", "knockoff", "photongeyser", "sunsteelstrike", "swordsdance"],
+ "abilities": ["Prism Armor"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["autotomize", "earthquake", "knockoff", "photongeyser", "sunsteelstrike", "swordsdance"],
+ "abilities": ["Prism Armor"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "necrozmadawnwings": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["autotomize", "calmmind", "heatwave", "moongeistbeam", "photongeyser", "signalbeam"],
+ "abilities": ["Prism Armor"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["autotomize", "calmmind", "heatwave", "moongeistbeam", "photongeyser", "signalbeam"],
+ "abilities": ["Prism Armor"]
+ }
+ ]
+ },
+ "magearna": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "flashcannon", "fleurcannon", "shiftgear"],
+ "abilities": ["Soul-Heart"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["aurasphere", "flashcannon", "fleurcannon", "healbell", "painsplit", "thunderwave", "voltswitch"],
+ "abilities": ["Soul-Heart"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["aurasphere", "fleurcannon", "ironhead", "shiftgear"],
+ "abilities": ["Soul-Heart"],
+ "preferredTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "marshadow": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulkup", "closecombat", "rocktomb", "shadowsneak", "spectralthief"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["bulkup", "closecombat", "rocktomb", "shadowsneak", "spectralthief"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "naganadel": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dracometeor", "fireblast", "sludgewave", "uturn"],
+ "abilities": ["Beast Boost"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dracometeor", "fireblast", "nastyplot", "sludgewave"],
+ "abilities": ["Beast Boost"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["dracometeor", "fireblast", "nastyplot", "sludgewave"],
+ "abilities": ["Beast Boost"],
+ "preferredTypes": ["Dragon"]
+ }
+ ]
+ },
+ "stakataka": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "gyroball", "stoneedge", "superpower", "trickroom"],
+ "abilities": ["Beast Boost"]
+ }
+ ]
+ },
+ "blacephalon": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "fireblast", "hiddenpowerice", "psyshock", "shadowball", "trick"],
+ "abilities": ["Beast Boost"]
+ },
+ {
+ "role": "Z-Move user",
+ "movepool": ["calmmind", "fireblast", "hiddenpowerice", "psyshock", "shadowball"],
+ "abilities": ["Beast Boost"],
+ "preferredTypes": ["Fire", "Ghost"]
+ }
+ ]
+ },
+ "zeraora": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "closecombat", "knockoff", "plasmafists"],
+ "abilities": ["Volt Absorb"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["closecombat", "grassknot", "hiddenpowerice", "knockoff", "plasmafists", "voltswitch"],
+ "abilities": ["Volt Absorb"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen7/teams.ts b/data/random-battles/gen7/teams.ts
new file mode 100644
index 000000000000..d7fb776a4063
--- /dev/null
+++ b/data/random-battles/gen7/teams.ts
@@ -0,0 +1,1946 @@
+import {MoveCounter, TeamData, RandomGen8Teams} from '../gen8/teams';
+import {PRNG, PRNGSeed} from '../../../sim/prng';
+import {toID} from '../../../sim/dex';
+
+export interface BattleFactorySpecies {
+ flags: {megaOnly?: 1, zmoveOnly?: 1, limEevee?: 1};
+ sets: BattleFactorySet[];
+}
+interface BattleFactorySet {
+ species: string;
+ item: string;
+ ability: string;
+ nature: string;
+ moves: string[];
+ evs?: Partial;
+ ivs?: Partial;
+}
+
+export const ZeroAttackHPIVs: {[k: string]: SparseStatsTable} = {
+ grass: {hp: 30, spa: 30},
+ fire: {spa: 30, spe: 30},
+ ice: {def: 30},
+ ground: {spa: 30, spd: 30},
+ fighting: {def: 30, spa: 30, spd: 30, spe: 30},
+ electric: {def: 30, spe: 30},
+ psychic: {spe: 30},
+ flying: {spa: 30, spd: 30, spe: 30},
+ rock: {def: 30, spd: 30, spe: 30},
+};
+
+// Moves that restore HP:
+const RECOVERY_MOVES = [
+ 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'recycle', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis',
+];
+// Moves that drop stats:
+const CONTRARY_MOVES = [
+ 'closecombat', 'leafstorm', 'overheat', 'superpower', 'vcreate',
+];
+// Moves that boost Attack:
+const PHYSICAL_SETUP = [
+ 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'screech', 'swordsdance',
+];
+// Moves which boost Special Attack:
+const SPECIAL_SETUP = [
+ 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow',
+];
+// Moves that boost Attack AND Special Attack:
+const MIXED_SETUP = [
+ 'celebrate', 'growth', 'happyhour', 'holdhands', 'shellsmash', 'workup',
+];
+// Some moves that only boost Speed:
+const SPEED_SETUP = [
+ 'agility', 'autotomize', 'flamecharge', 'rockpolish',
+];
+// Conglomerate for ease of access
+const SETUP = [
+ 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'celebrate', 'coil', 'conversion', 'curse', 'dragondance',
+ 'electricterrain', 'flamecharge', 'focusenergy', 'geomancy', 'growth', 'happyhour', 'holdhands', 'honeclaws', 'howl', 'irondefense', 'meditate',
+ 'nastyplot', 'poweruppunch', 'quiverdance', 'raindance', 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'workup',
+];
+// Moves that shouldn't be the only STAB moves:
+const NO_STAB = [
+ 'accelerock', 'aquajet', 'bulletpunch', 'clearsmog', 'dragontail', 'eruption', 'explosion',
+ 'fakeout', 'firstimpression', 'flamecharge', 'futuresight', 'iceshard', 'icywind', 'incinerate', 'infestation', 'machpunch',
+ 'nuzzle', 'pluck', 'poweruppunch', 'pursuit', 'quickattack', 'rapidspin', 'reversal', 'selfdestruct', 'shadowsneak',
+ 'skyattack', 'skydrop', 'snarl', 'suckerpunch', 'uturn', 'watershuriken', 'vacuumwave', 'voltswitch', 'waterspout',
+];
+// Hazard-setting moves
+const HAZARDS = [
+ 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes',
+];
+// Protect and its variants
+const PROTECT_MOVES = [
+ 'banefulbunker', 'kingsshield', 'protect', 'spikyshield',
+];
+// Moves that switch the user out
+const PIVOT_MOVES = [
+ 'partingshot', 'uturn', 'voltswitch',
+];
+
+// Moves that should be paired together when possible
+const MOVE_PAIRS = [
+ ['lightscreen', 'reflect'],
+ ['sleeptalk', 'rest'],
+ ['protect', 'wish'],
+ ['spikyshield', 'wish'],
+ ['leechseed', 'substitute'],
+ ['perishsong', 'protect'],
+ ['solarbeam', 'sunnyday'],
+];
+
+/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */
+const PRIORITY_POKEMON = [
+ 'aegislash', 'banette', 'breloom', 'cacturne', 'doublade', 'dusknoir', 'golisopod', 'honchkrow', 'mimikyu', 'scizor', 'scizormega', 'shedinja',
+];
+function sereneGraceBenefits(move: Move) {
+ return move.secondary?.chance && move.secondary.chance >= 20 && move.secondary.chance < 100;
+}
+
+export class RandomGen7Teams extends RandomGen8Teams {
+ randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json');
+ protected cachedStatusMoves: ID[];
+
+ constructor(format: Format | string, prng: PRNG | PRNGSeed | null) {
+ super(format, prng);
+
+ this.noStab = NO_STAB;
+ this.priorityPokemon = PRIORITY_POKEMON;
+
+ this.moveEnforcementCheckers = {
+ Bug: (movePool, moves, abilities, types, counter) => (
+ ['megahorn', 'pinmissile'].some(m => movePool.includes(m)) ||
+ !counter.get('Bug') && (abilities.includes('Tinted Lens') || abilities.includes('Adaptability'))
+ ),
+ Dark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'),
+ Dragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon') && !abilities.includes('Aerilate'),
+ Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'),
+ Fairy: (movePool, moves, abilities, types, counter) => !counter.get('Fairy'),
+ Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'),
+ Fire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'),
+ Flying: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Flying') && !['aerodactyl', 'aerodactylmega', 'mantine'].includes(species.id) &&
+ !movePool.includes('hiddenpowerflying')
+ ),
+ Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'),
+ Grass: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Grass') && (species.baseStats.atk >= 100 || movePool.includes('leafstorm'))
+ ),
+ Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'),
+ Ice: (movePool, moves, abilities, types, counter) => (
+ !counter.get('Ice') || (moves.has('icebeam') && movePool.includes('freezedry')) ||
+ (abilities.includes('Refrigerate') && movePool.includes('return'))
+ ),
+ Normal: movePool => (movePool.includes('boomburst') || movePool.includes('hypervoice')),
+ Poison: (movePool, moves, abilities, types, counter) => !counter.get('Poison'),
+ Psychic: (movePool, moves, abilities, types, counter) => (
+ !counter.get('Psychic') && (
+ types.has('Fighting') || movePool.includes('psychicfangs') || movePool.includes('calmmind')
+ )
+ ),
+ Rock: (movePool, moves, abilities, types, counter, species) => (!counter.get('Rock') && species.baseStats.atk >= 80),
+ Steel: (movePool, moves, abilities, types, counter, species) => (!counter.get('Steel') && species.baseStats.atk >= 100),
+ Water: (movePool, moves, abilities, types, counter) => !counter.get('Water'),
+ };
+ // Nature Power is Tri Attack this gen
+ this.cachedStatusMoves = this.dex.moves.all()
+ .filter(move => move.category === 'Status' && move.id !== 'naturepower')
+ .map(move => move.id);
+ }
+
+ newQueryMoves(
+ moves: Set | null,
+ species: Species,
+ preferredType: string,
+ abilities: string[],
+ ): MoveCounter {
+ // This is primarily a helper function for random setbuilder functions.
+ const counter = new MoveCounter();
+ const types = species.types;
+ if (!moves?.size) return counter;
+
+ const categories = {Physical: 0, Special: 0, Status: 0};
+
+ // Iterate through all moves we've chosen so far and keep track of what they do:
+ for (const moveid of moves) {
+ let move = this.dex.moves.get(moveid);
+ // Nature Power calls Earthquake in Gen 5
+ if (this.gen === 5 && moveid === 'naturepower') move = this.dex.moves.get('earthquake');
+ if (this.gen > 5 && moveid === 'naturepower') move = this.dex.moves.get('triattack');
+
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (move.damage || move.damageCallback) {
+ // Moves that do a set amount of damage:
+ counter.add('damage');
+ counter.damagingMoves.add(move);
+ } else {
+ // Are Physical/Special/Status moves:
+ categories[move.category]++;
+ }
+ // Moves that have a low base power:
+ if (moveid === 'lowkick' || (move.basePower && move.basePower <= 60 && !['nuzzle', 'rapidspin'].includes(moveid))) {
+ counter.add('technician');
+ }
+ // Moves that hit up to 5 times:
+ if (move.multihit && Array.isArray(move.multihit) && move.multihit[1] === 5) counter.add('skilllink');
+ if (move.recoil || move.hasCrashDamage) counter.add('recoil');
+ if (move.drain) counter.add('drain');
+ // Moves which have a base power:
+ if (move.basePower || move.basePowerCallback) {
+ if (!this.noStab.includes(moveid) || this.priorityPokemon.includes(species.id) && move.priority > 0) {
+ counter.add(moveType);
+ if (types.includes(moveType)) counter.add('stab');
+ if (preferredType === moveType) counter.add('preferred');
+ counter.damagingMoves.add(move);
+ }
+ if (move.flags['bite']) counter.add('strongjaw');
+ if (move.flags['punch']) counter.add('ironfist');
+ if (move.flags['sound']) counter.add('sound');
+ if (move.priority > 0) counter.add('priority');
+ }
+ // Moves with secondary effects:
+ if (move.secondary || move.hasSheerForce) {
+ counter.add('sheerforce');
+ if (sereneGraceBenefits(move)) {
+ counter.add('serenegrace');
+ }
+ }
+ // Moves with low accuracy:
+ if (move.accuracy && move.accuracy !== true && move.accuracy < 90) counter.add('inaccurate');
+
+ // Moves that change stats:
+ if (RECOVERY_MOVES.includes(moveid)) counter.add('recovery');
+ if (CONTRARY_MOVES.includes(moveid)) counter.add('contrary');
+ if (PHYSICAL_SETUP.includes(moveid)) counter.add('physicalsetup');
+ if (SPECIAL_SETUP.includes(moveid)) counter.add('specialsetup');
+ if (MIXED_SETUP.includes(moveid)) counter.add('mixedsetup');
+ if (SPEED_SETUP.includes(moveid)) counter.add('speedsetup');
+ if (SETUP.includes(moveid)) counter.add('setup');
+ if (HAZARDS.includes(moveid)) counter.add('hazards');
+ }
+
+ counter.set('Physical', Math.floor(categories['Physical']));
+ counter.set('Special', Math.floor(categories['Special']));
+ counter.set('Status', categories['Status']);
+ return counter;
+ }
+
+ cullMovePool(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): void {
+ // Pokemon cannot have multiple Hidden Powers in any circumstance
+ let hasHiddenPower = false;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hasHiddenPower = true;
+ }
+ if (hasHiddenPower) {
+ let movePoolHasHiddenPower = true;
+ while (movePoolHasHiddenPower) {
+ movePoolHasHiddenPower = false;
+ for (const moveid of movePool) {
+ if (moveid.startsWith('hiddenpower')) {
+ this.fastPop(movePool, movePool.indexOf(moveid));
+ movePoolHasHiddenPower = true;
+ break;
+ }
+ }
+ }
+ }
+
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
+ if (moves.size === this.maxMoveCount - 2) {
+ const unpairedMoves = [...movePool];
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
+ }
+ }
+ if (unpairedMoves.length === 1) {
+ this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
+ }
+ }
+
+ // These moves are paired, and shouldn't appear if there is not room for them both.
+ if (moves.size === this.maxMoveCount - 1) {
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(movePool, movePool.indexOf(pair[0]));
+ this.fastPop(movePool, movePool.indexOf(pair[1]));
+ }
+ }
+ }
+
+ // Team-based move culls
+ if (teamDetails.screens && movePool.length >= this.maxMoveCount + 2) {
+ if (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect'));
+ if (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.stickyWeb) {
+ if (movePool.includes('stickyweb')) this.fastPop(movePool, movePool.indexOf('stickyweb'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.stealthRock) {
+ if (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.defog || teamDetails.rapidSpin) {
+ if (movePool.includes('defog')) this.fastPop(movePool, movePool.indexOf('defog'));
+ if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.toxicSpikes) {
+ if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.spikes && teamDetails.spikes >= 2) {
+ if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.statusCure) {
+ if (movePool.includes('aromatherapy')) this.fastPop(movePool, movePool.indexOf('aromatherapy'));
+ if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+
+ // Develop additional move lists
+ const badWithSetup = ['defog', 'dragontail', 'haze', 'healbell', 'nuzzle', 'pursuit', 'rapidspin', 'toxic'];
+ const statusMoves = this.cachedStatusMoves;
+
+ // General incompatibilities
+ const incompatiblePairs = [
+ // These moves don't mesh well with other aspects of the set
+ [statusMoves, ['healingwish', 'memento', 'switcheroo', 'trick']],
+ [PIVOT_MOVES, PIVOT_MOVES],
+ [SETUP, PIVOT_MOVES],
+ [SETUP, HAZARDS],
+ [SETUP, badWithSetup],
+ [PHYSICAL_SETUP, PHYSICAL_SETUP],
+ [SPEED_SETUP, 'quickattack'],
+ ['defog', HAZARDS],
+ [['fakeout', 'uturn'], ['switcheroo', 'trick']],
+ ['substitute', PIVOT_MOVES],
+ ['leechseed', 'dragontail'],
+ ['rest', 'substitute'],
+ [PHYSICAL_SETUP, 'dracometeor'],
+ [SPECIAL_SETUP, 'knockoff'],
+
+ // These attacks are redundant with each other
+ ['psychic', 'psyshock'],
+ [['scald', 'surf'], ['hydropump', 'originpulse', 'waterpulse']],
+ ['return', ['bodyslam', 'doubleedge', 'headbutt']],
+ [['fierydance', 'firelash', 'lavaplume'], ['fireblast', 'magmastorm']],
+ [['flamethrower', 'flareblitz'], ['fireblast', 'overheat']],
+ ['hornleech', 'woodhammer'],
+ [['gigadrain', 'leafstorm'], ['energyball', 'leafstorm', 'petaldance', 'powerwhip']],
+ ['wildcharge', 'thunderbolt'],
+ ['gunkshot', 'poisonjab'],
+ [['drainpunch', 'focusblast'], ['closecombat', 'highjumpkick', 'superpower']],
+ ['dracometeor', 'dragonpulse'],
+ ['dragonclaw', 'outrage'],
+ ['knockoff', ['darkestlariat', 'darkpulse', 'foulplay']],
+
+ // Status move incompatibilities
+ ['toxic', 'toxicspikes'],
+ ['taunt', 'disable'],
+ ['defog', ['leechseed', 'substitute']],
+
+ // Assorted hardcodes go here:
+ // Lunatone
+ ['moonlight', 'rockpolish'],
+ // Smeargle
+ ['nuzzle', 'whirlwind'],
+ // Liepard
+ ['copycat', 'uturn'],
+ // Seviper
+ ['switcheroo', 'suckerpunch'],
+ // Jirachi
+ ['bodyslam', 'healingwish'],
+ ];
+
+ for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
+
+ if (!types.includes('Dark') && preferredType !== 'Dark') {
+ this.incompatibleMoves(moves, movePool, 'knockoff', ['pursuit', 'suckerpunch']);
+ }
+
+ const statusInflictingMoves = ['thunderwave', 'toxic', 'willowisp', 'yawn'];
+ if (!abilities.includes('Prankster') && role !== 'Staller') {
+ this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves);
+ }
+
+ if (abilities.includes('Guts')) this.incompatibleMoves(moves, movePool, 'protect', 'swordsdance');
+
+ // Z-Conversion Porygon-Z
+ if (species.id === 'porygonz') {
+ this.incompatibleMoves(moves, movePool, 'shadowball', 'recover');
+ }
+
+ // Cull filler moves for otherwise fixed set Stealth Rock users
+ if (!teamDetails.stealthRock) {
+ if (species.id === 'registeel' && role === 'Staller') {
+ if (movePool.includes('thunderwave')) this.fastPop(movePool, movePool.indexOf('thunderwave'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (species.baseSpecies === 'Wormadam' && role === 'Staller') {
+ if (movePool.includes('infestation')) this.fastPop(movePool, movePool.indexOf('infestation'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ }
+ }
+
+ // Checks for and removes incompatible moves, starting with the first move in movesA.
+ incompatibleMoves(
+ moves: Set,
+ movePool: string[],
+ movesA: string | string[],
+ movesB: string | string[],
+ ): void {
+ const moveArrayA = (Array.isArray(movesA)) ? movesA : [movesA];
+ const moveArrayB = (Array.isArray(movesB)) ? movesB : [movesB];
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ for (const moveid1 of moves) {
+ if (moveArrayB.includes(moveid1)) {
+ for (const moveid2 of moveArrayA) {
+ if (moveid1 !== moveid2 && movePool.includes(moveid2)) {
+ this.fastPop(movePool, movePool.indexOf(moveid2));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ }
+ }
+ if (moveArrayA.includes(moveid1)) {
+ for (const moveid2 of moveArrayB) {
+ if (moveid1 !== moveid2 && movePool.includes(moveid2)) {
+ this.fastPop(movePool, movePool.indexOf(moveid2));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ }
+ }
+ }
+ }
+
+ // Adds a move to the moveset, returns the MoveCounter
+ addMove(
+ move: string,
+ moves: Set,
+ types: string[],
+ abilities: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ movePool: string[],
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): MoveCounter {
+ moves.add(move);
+ this.fastPop(movePool, movePool.indexOf(move));
+ const counter = this.newQueryMoves(moves, species, preferredType, abilities);
+ this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead,
+ preferredType, role);
+ return counter;
+ }
+
+ // Returns the type of a given move for STAB/coverage enforcement purposes
+ getMoveType(move: Move, species: Species, abilities: string[], preferredType: string): string {
+ if (['judgment', 'multiattack', 'revelationdance'].includes(move.id)) return species.types[0];
+ if (species.id === 'genesectdouse' && move.id === 'technoblast') return 'Water';
+
+ const moveType = move.type;
+ if (moveType === 'Normal') {
+ if (abilities.includes('Aerilate')) return 'Flying';
+ if (abilities.includes('Galvanize')) return 'Electric';
+ if (abilities.includes('Pixilate')) return 'Fairy';
+ if (abilities.includes('Refrigerate')) return 'Ice';
+ }
+ return moveType;
+ }
+
+ // Generate random moveset for a given species, role, preferred type.
+ randomMoveset(
+ types: string[],
+ abilities: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ movePool: string[],
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): Set {
+ const moves = new Set();
+ let counter = this.newQueryMoves(moves, species, preferredType, abilities);
+ this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead,
+ preferredType, role);
+
+ // If there are only four moves, add all moves and return early
+ if (movePool.length <= this.maxMoveCount) {
+ // Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased)
+ while (movePool.length) {
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ return moves;
+ }
+
+ const runEnforcementChecker = (checkerName: string) => {
+ if (!this.moveEnforcementCheckers[checkerName]) return false;
+ return this.moveEnforcementCheckers[checkerName](
+ movePool, moves, abilities, new Set(types), counter, species, teamDetails
+ );
+ };
+
+ // Add required move (e.g. Relic Song for Meloetta-P)
+ if (species.requiredMove) {
+ const move = this.dex.moves.get(species.requiredMove).id;
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Add other moves you really want to have, e.g. STAB, recovery, setup.
+
+ // Enforce Facade if Guts is a possible ability
+ if (movePool.includes('facade') && abilities.includes('Guts')) {
+ counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Enforce Aurora Veil, Blizzard, Seismic Toss, Spore, and Sticky Web
+ for (const moveid of ['auroraveil', 'blizzard', 'seismictoss', 'spore', 'stickyweb']) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Thunder Wave on Prankster users
+ if (movePool.includes('thunderwave') && abilities.includes('Prankster')) {
+ counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Enforce Shadow Sneak on Kecleon
+ if (movePool.includes('shadowsneak') && species.id === 'kecleon') {
+ counter = this.addMove('shadowsneak', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+
+ // Enforce hazard removal on Bulky Support if the team doesn't already have it
+ if (role === 'Bulky Support' && !teamDetails.defog && !teamDetails.rapidSpin) {
+ if (movePool.includes('rapidspin')) {
+ counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ if (movePool.includes('defog')) {
+ counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce STAB priority
+ if (['Bulky Attacker', 'Bulky Setup', 'Wallbreaker'].includes(role) || this.priorityPokemon.includes(species.id)) {
+ const priorityMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (types.includes(moveType) && move.priority > 0 && (move.basePower || move.basePowerCallback)) {
+ priorityMoves.push(moveid);
+ }
+ }
+ if (priorityMoves.length) {
+ const moveid = this.sample(priorityMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce STAB
+ for (const type of types) {
+ // Check if a STAB move of that type should be required
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ while (runEnforcementChecker(type)) {
+ if (!stabMoves.length) break;
+ const moveid = this.sampleNoReplace(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Preferred Type
+ if (!counter.get('preferred')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && preferredType === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // If no STAB move was added, add a STAB move
+ if (!counter.get('stab')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ } else {
+ // If they have no regular STAB move, enforce U-turn on Bug types.
+ if (movePool.includes('uturn') && types.includes('Bug')) {
+ counter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce recovery
+ if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup', 'Staller'].includes(role)) {
+ const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));
+ if (recoveryMoves.length) {
+ const moveid = this.sample(recoveryMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce Staller moves
+ if (role === 'Staller') {
+ const enforcedMoves = [...PROTECT_MOVES, 'toxic'];
+ for (const move of enforcedMoves) {
+ if (movePool.includes(move)) {
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce setup
+ if (role.includes('Setup') || role === 'Z-Move user') {
+ // Prioritise other setup moves over Flame Charge
+ const setupMoves = movePool.filter(moveid => SETUP.includes(moveid) && moveid !== 'flamecharge');
+ if (setupMoves.length) {
+ const moveid = this.sample(setupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ } else {
+ if (movePool.includes('flamecharge')) {
+ counter = this.addMove('flamecharge', moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Enforce a move not on the noSTAB list
+ if (!counter.damagingMoves.size && !(moves.has('uturn') && types.includes('Bug'))) {
+ // Choose an attacking move
+ const attackingMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);
+ }
+ if (attackingMoves.length) {
+ const moveid = this.sample(attackingMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+
+ // Enforce coverage move
+ if (['Fast Attacker', 'Setup Sweeper', 'Bulky Attacker', 'Wallbreaker', 'Z-Move user'].includes(role)) {
+ if (counter.damagingMoves.size === 1) {
+ // Find the type of the current attacking move
+ const currentAttackType = counter.damagingMoves.values().next().value.type;
+ // Choose an attacking move that is of different type to the current single attack
+ const coverageMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, preferredType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {
+ if (currentAttackType !== moveType) coverageMoves.push(moveid);
+ }
+ }
+ if (coverageMoves.length) {
+ const moveid = this.sample(coverageMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+
+ // Choose remaining moves randomly from movepool and add them to moves list:
+ while (moves.size < this.maxMoveCount && movePool.length) {
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ for (const pair of MOVE_PAIRS) {
+ if (moveid === pair[0] && movePool.includes(pair[1])) {
+ counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ if (moveid === pair[1] && movePool.includes(pair[0])) {
+ counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead,
+ movePool, preferredType, role);
+ }
+ }
+ }
+ return moves;
+ }
+
+ shouldCullAbility(
+ ability: string,
+ types: Set,
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role
+ ): boolean {
+ switch (ability) {
+ case 'Chlorophyll': case 'Solar Power':
+ return !teamDetails.sun;
+ case 'Hydration': case 'Swift Swim':
+ return !teamDetails.rain;
+ case 'Iron Fist': case 'Skill Link': case 'Technician':
+ return !counter.get(toID(ability));
+ case 'Overgrow':
+ return !counter.get('Grass');
+ case 'Prankster':
+ return !counter.get('Status');
+ case 'Rock Head':
+ return !counter.get('recoil');
+ case 'Sand Force': case 'Sand Rush':
+ return !teamDetails.sand;
+ case 'Slush Rush':
+ return !teamDetails.hail;
+ case 'Swarm':
+ return !counter.get('Bug');
+ }
+
+ return false;
+ }
+
+
+ getAbility(
+ types: Set,
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ if (abilities.length <= 1) return abilities[0];
+
+ // Hard-code abilities here
+ if (species.id === 'pangoro' && counter.get('ironfist')) return 'Iron Fist';
+ if (species.id === 'tornadus' && counter.get('Status')) return 'Prankster';
+ if (species.id === 'marowak' && counter.get('recoil')) return 'Rock Head';
+ if (species.id === 'sawsbuck') return moves.has('headbutt') ? 'Serene Grace' : 'Sap Sipper';
+ if (species.id === 'toucannon' && counter.get('skilllink')) return 'Skill Link';
+ if (species.id === 'golduck' && teamDetails.rain) return 'Swift Swim';
+ if (species.id === 'roserade' && counter.get('technician')) return 'Technician';
+
+ const abilityAllowed: string[] = [];
+ // Obtain a list of abilities that are allowed (not culled)
+ for (const ability of abilities) {
+ if (!this.shouldCullAbility(
+ ability, types, moves, abilities, counter, movePool, teamDetails, species, preferredType, role
+ )) {
+ abilityAllowed.push(ability);
+ }
+ }
+
+ // Pick a random allowed ability
+ if (abilityAllowed.length >= 1) return this.sample(abilityAllowed);
+
+ // If all abilities are rejected, prioritize weather abilities over non-weather abilities
+ if (!abilityAllowed.length) {
+ const weatherAbilities = abilities.filter(
+ a => ['Chlorophyll', 'Hydration', 'Sand Force', 'Sand Rush', 'Slush Rush', 'Solar Power', 'Swift Swim'].includes(a)
+ );
+ if (weatherAbilities.length) return this.sample(weatherAbilities);
+ }
+
+ // Pick a random ability
+ return this.sample(abilities);
+ }
+
+ getPriorityItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string | undefined {
+ // Z-Moves
+ if (role === 'Z-Move user') {
+ // Specific Z-Crystals
+ if (species.baseSpecies === 'Arceus' && species.requiredItems) return species.requiredItems[1];
+ if (species.name === 'Raichu-Alola') return 'Aloraichium Z';
+ if (species.name === 'Decidueye') return 'Decidium Z';
+ if (species.name === 'Incineroar') return 'Incinium Z';
+ if (species.name === 'Kommo-o') return 'Kommonium Z';
+ if (species.name === 'Lunala') return 'Lunalium Z';
+ if (species.baseSpecies === 'Lycanroc') return 'Lycanium Z';
+ if (species.name === 'Marshadow') return 'Marshadium Z';
+ if (species.name === 'Mew') return 'Mewnium Z';
+ if (species.name === 'Mimikyu') return 'Mimikium Z';
+ if (species.name === 'Necrozma-Dusk-Mane' || species.name === 'Necrozma-Dawn-Wings') {
+ if (moves.has('autotomize') && moves.has('sunsteelstrike')) return 'Solganium Z';
+ if (moves.has('autotomize') && moves.has('moongeistbeam')) return 'Lunalium Z';
+ return 'Ultranecrozium Z';
+ }
+ // General Z-Crystals
+ if (preferredType === 'Normal') return 'Normalium Z';
+ if (preferredType) return this.dex.species.get(`Arceus-${preferredType}`).requiredItems![1];
+ }
+ if (species.requiredItems) {
+ if (species.baseSpecies === 'Arceus') return species.requiredItems[0];
+ return this.sample(species.requiredItems);
+ }
+ if (role === 'AV Pivot') return 'Assault Vest';
+ if (species.name === 'Farfetch\u2019d') return 'Stick';
+ if (species.baseSpecies === 'Marowak') return 'Thick Club';
+ if (species.name === 'Pikachu') return 'Light Ball';
+ if (species.name === 'Shedinja' || species.name === 'Smeargle') return 'Focus Sash';
+ if (species.name === 'Unfezant' || moves.has('focusenergy')) return 'Scope Lens';
+ if (species.name === 'Unown') return 'Choice Specs';
+ if (species.name === 'Wobbuffet') return 'Custap Berry';
+ if (species.name === 'Shuckle') return 'Mental Herb';
+ if (
+ ability === 'Harvest' || ability === 'Cheek Pouch' || (ability === 'Emergency Exit' && !!counter.get('Status'))
+ ) return 'Sitrus Berry';
+ if (species.name === 'Ditto') return 'Choice Scarf';
+ if (ability === 'Poison Heal') return 'Toxic Orb';
+ if (ability === 'Speed Boost') return 'Life Orb';
+ if (species.nfe) return (species.name === 'Scyther' && role === 'Fast Attacker') ? 'Choice Band' : 'Eviolite';
+ if (['healingwish', 'memento', 'switcheroo', 'trick'].some(m => moves.has(m))) {
+ if (species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && role !== 'Wallbreaker') {
+ return 'Choice Scarf';
+ } else {
+ return (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs';
+ }
+ }
+ if (moves.has('bellydrum') || moves.has('recycle')) {
+ if (ability === 'Gluttony') {
+ return `${this.sample(['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'])} Berry`;
+ } else {
+ return 'Sitrus Berry';
+ }
+ }
+ if (moves.has('waterspout')) return 'Choice Scarf';
+ if (moves.has('geomancy') || moves.has('skyattack')) return 'Power Herb';
+ if (moves.has('shellsmash')) {
+ return (ability === 'Solid Rock' && !!counter.get('priority')) ? 'Weakness Policy' : 'White Herb';
+ }
+ if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk') && species.id !== 'stoutland') {
+ return (types.includes('Fire') || ability === 'Quick Feet' || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb';
+ }
+ if (ability === 'Magic Guard') return moves.has('counter') ? 'Focus Sash' : 'Life Orb';
+ if (species.id === 'rampardos' && role === 'Fast Attacker') return 'Choice Scarf';
+ if (ability === 'Sheer Force' && counter.get('sheerforce')) return 'Life Orb';
+ if (ability === 'Unburden') return moves.has('closecombat') ? 'White Herb' : 'Sitrus Berry';
+ if (moves.has('acrobatics')) return '';
+ if (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';
+ if (moves.has('rest') && !moves.has('sleeptalk') && !['Hydration', 'Natural Cure', 'Shed Skin'].includes(ability)) {
+ return 'Chesto Berry';
+ }
+ if (role === 'Staller') return 'Leftovers';
+ }
+
+ getItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ const defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd;
+
+ const scarfReqs = (
+ role !== 'Wallbreaker' &&
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 109 &&
+ !counter.get('priority') && !moves.has('pursuit')
+ );
+
+ if (
+ moves.has('pursuit') && moves.has('suckerpunch') && counter.get('Dark') && !this.priorityPokemon.includes(species.id)
+ ) return 'Black Glasses';
+ if (counter.get('Special') === 4) {
+ return (
+ scarfReqs && species.baseStats.spa >= 90 && this.randomChance(1, 2)
+ ) ? 'Choice Scarf' : 'Choice Specs';
+ }
+ if (counter.get('Special') === 3 && moves.has('uturn')) return 'Choice Specs';
+ if (counter.get('Physical') === 4 && species.id !== 'jirachi' &&
+ ['dragontail', 'fakeout', 'flamecharge', 'nuzzle', 'rapidspin'].every(m => !moves.has(m))
+ ) {
+ return (
+ scarfReqs && (species.baseStats.atk >= 100 || ability === 'Pure Power' || ability === 'Huge Power') &&
+ this.randomChance(1, 2)
+ ) ? 'Choice Scarf' : 'Choice Band';
+ }
+
+ if (ability === 'Sturdy' && moves.has('explosion') && !counter.get('speedsetup')) return 'Custap Berry';
+ if (types.includes('Normal') && moves.has('fakeout') && !!counter.get('Normal')) return 'Silk Scarf';
+ if (species.id === 'latias' || species.id === 'latios') return 'Soul Dew';
+ if (role === 'Bulky Setup' && !!counter.get('speedsetup') && !moves.has('swordsdance')) {
+ return 'Weakness Policy';
+ }
+ if (species.id === 'palkia') return 'Lustrous Orb';
+ if (species.id === 'archeops') return 'Expert Belt';
+ if (!counter.get('Status') && (
+ ['Fast Support', 'Bulky Support', 'Bulky Attacker'].some(m => role === m) || moves.has('rapidspin')
+ )) {
+ return 'Assault Vest';
+ }
+ if (moves.has('outrage') && counter.get('setup')) return 'Lum Berry';
+ if (
+ (ability === 'Rough Skin') || (
+ species.id !== 'hooh' &&
+ ability === 'Regenerator' && species.baseStats.hp + species.baseStats.def >= 180 && this.randomChance(1, 2)
+ ) || (
+ ability !== 'Regenerator' && !counter.get('setup') && counter.get('recovery') &&
+ this.dex.getEffectiveness('Fighting', species) < 1 &&
+ (species.baseStats.hp + species.baseStats.def) > 200 && this.randomChance(1, 2)
+ )
+ ) return 'Rocky Helmet';
+ if (['kingsshield', 'protect', 'spikyshield', 'substitute'].some(m => moves.has(m))) return 'Leftovers';
+ if (
+ this.dex.getEffectiveness('Ground', species) >= 2 &&
+ ability !== 'Levitate' && species.id !== 'golemalola'
+ ) {
+ return 'Air Balloon';
+ }
+ if (
+ (role === 'Fast Support' || moves.has('stickyweb')) && isLead && defensiveStatTotal < 255 &&
+ !counter.get('recovery') && (counter.get('hazards') || counter.get('setup')) &&
+ (!counter.get('recoil') || ability === 'Rock Head')
+ ) return 'Focus Sash';
+
+ // Default Items
+ if (role === 'Fast Support') {
+ return (
+ counter.get('Physical') + counter.get('Special') >= 3 &&
+ ['nuzzle', 'rapidspin', 'uturn', 'voltswitch'].every(m => !moves.has(m)) &&
+ this.dex.getEffectiveness('Rock', species) < 2
+ ) ? 'Life Orb' : 'Leftovers';
+ }
+ if (!counter.get('Status')) {
+ return (
+ (moves.has('uturn') || moves.has('voltswitch')) && !counter.get('Dragon') && !counter.get('Normal')
+ ) ? 'Expert Belt' : 'Life Orb';
+ }
+ if (
+ ['Fast Attacker', 'Setup Sweeper', 'Wallbreaker'].some(m => role === m) &&
+ (this.dex.getEffectiveness('Rock', species) < 2 || species.id === 'ninjask') &&
+ ability !== 'Sturdy'
+ ) return 'Life Orb';
+ return 'Leftovers';
+ }
+
+ getLevel(species: Species): number {
+ // level set by rules
+ if (this.adjustLevel) return this.adjustLevel;
+ if (this.gen >= 2) {
+ // Revamped generations use random-sets.json
+ const sets = this.randomSets[species.id];
+ if (sets.level) return sets.level;
+ } else {
+ // Other generations use random-data.json
+ const data = this.randomData[species.id];
+ if (data.level) return data.level;
+ }
+ // Gen 2 still uses tier-based levelling
+ if (this.gen === 2) {
+ const levelScale: {[k: string]: number} = {
+ ZU: 81,
+ ZUBL: 79,
+ PU: 77,
+ PUBL: 75,
+ NU: 73,
+ NUBL: 71,
+ UU: 69,
+ UUBL: 67,
+ OU: 65,
+ Uber: 61,
+ };
+ if (levelScale[species.tier]) return levelScale[species.tier];
+ }
+ // Default to 80
+ return 80;
+ }
+
+ randomSet(
+ species: string | Species,
+ teamDetails: RandomTeamsTypes.TeamDetails = {},
+ isLead = false
+ ): RandomTeamsTypes.RandomSet {
+ species = this.dex.species.get(species);
+ const forme = this.getForme(species);
+ const sets = this.randomSets[species.id]["sets"];
+ const possibleSets = [];
+ // Check if the Pokemon has a Z-Move user set
+ let canZMove = false;
+ for (const set of sets) {
+ if (!teamDetails.zMove && set.role === 'Z-Move user') canZMove = true;
+ }
+ for (const set of sets) {
+ // Prevent multiple Z-Move users
+ if (teamDetails.zMove && set.role === 'Z-Move user') continue;
+ // Prevent Setup Sweeper and Bulky Setup if Z-Move user is available
+ if (canZMove && ['Setup Sweeper', 'Bulky Setup'].includes(set.role)) continue;
+ possibleSets.push(set);
+ }
+ const set = this.sampleIfArray(possibleSets);
+ const role = set.role;
+ const movePool: string[] = Array.from(set.movepool);
+ const preferredTypes = set.preferredTypes;
+ const preferredType = this.sampleIfArray(preferredTypes) || '';
+
+ let ability = '';
+ let item = undefined;
+
+ const evs = {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85};
+ const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};
+
+ const types = species.types;
+ const baseAbilities = set.abilities!;
+ // Use the mega's ability for moveset generation
+ const abilities = (species.battleOnly && !species.requiredAbility) ? Object.values(species.abilities) : baseAbilities;
+
+ // Get moves
+ const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool,
+ preferredType, role);
+ const counter = this.newQueryMoves(moves, species, preferredType, abilities);
+
+ // Get ability
+ ability = this.getAbility(new Set(types), moves, baseAbilities, counter, movePool, teamDetails, species,
+ preferredType, role);
+
+ // Get items
+ item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);
+ if (item === undefined) {
+ item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);
+ }
+
+ // For Trick / Switcheroo
+ if (item === 'Leftovers' && types.includes('Poison')) {
+ item = 'Black Sludge';
+ }
+
+ const level = this.getLevel(species);
+
+ // Minimize confusion damage, including if Foul Play is its only physical attack
+ if (
+ (!counter.get('Physical') || (counter.get('Physical') <= 1 && (moves.has('foulplay') || moves.has('rapidspin')))) &&
+ !moves.has('copycat') && !moves.has('transform')
+ ) {
+ evs.atk = 0;
+ ivs.atk = 0;
+ }
+
+ if (ability === 'Beast Boost' && !counter.get('Special')) {
+ evs.spa = 0;
+ ivs.spa = 0;
+ }
+
+ // We use a special variable to track Hidden Power
+ // so that we can check for all Hidden Powers at once
+ let hasHiddenPower = false;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hasHiddenPower = true;
+ }
+
+ // Fix IVs for non-Bottle Cap-able sets
+ if (hasHiddenPower && level < 100) {
+ let hpType;
+ for (const move of moves) {
+ if (move.startsWith('hiddenpower')) hpType = move.substr(11);
+ }
+ if (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`);
+ const HPivs = ivs.atk === 0 ? ZeroAttackHPIVs[hpType] : this.dex.types.get(hpType).HPivs;
+ let iv: StatID;
+ for (iv in HPivs) {
+ ivs[iv] = HPivs[iv]!;
+ }
+ }
+
+ // Prepare optimal HP
+ const srImmunity = ability === 'Magic Guard';
+ const srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);
+ while (evs.hp > 1) {
+ const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ if (moves.has('substitute') && !['Black Sludge', 'Leftovers'].includes(item)) {
+ if (item === 'Sitrus Berry' || ability === 'Power Construct') {
+ // Two Substitutes should activate Sitrus Berry or Power Construct
+ if (hp % 4 === 0) break;
+ } else {
+ // Should be able to use Substitute four times from full HP without fainting
+ if (hp % 4 > 0) break;
+ }
+ } else if (moves.has('bellydrum') && (item === 'Sitrus Berry' || ability === 'Gluttony')) {
+ // Belly Drum should activate Sitrus Berry
+ if (hp % 2 === 0) break;
+ } else if (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) {
+ // Crash damage move users want an odd HP to survive two misses
+ if (hp % 2 > 0) break;
+ } else {
+ // Maximize number of Stealth Rock switch-ins
+ if (srWeakness <= 0 || ability === 'Regenerator') break;
+ if (srWeakness === 1 && ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break;
+ if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;
+ // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry
+ if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;
+ }
+ evs.hp -= 4;
+ }
+
+ // Ensure Nihilego's Beast Boost gives it Special Attack boosts instead of Special Defense
+ if (forme === 'Nihilego') {
+ while (evs.spd > 1) {
+ const spa = Math.floor(Math.floor(2 * species.baseStats.spa + ivs.spa + Math.floor(evs.spa / 4)) * level / 100 + 5);
+ const spd = Math.floor(Math.floor(2 * species.baseStats.spd + ivs.spd + Math.floor(evs.spd / 4)) * level / 100 + 5);
+ if (spa >= spd) break;
+ evs.spd -= 4;
+ }
+ }
+
+ if (['gyroball', 'metalburst', 'trickroom'].some(m => moves.has(m))) {
+ evs.spe = 0;
+ ivs.spe = (hasHiddenPower && level < 100) ? ivs.spe - 30 : 0;
+ }
+
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+
+ // Z-Conversion Porygon-Z should have Shadow Ball first if no Recover, otherwise Thunderbolt
+ if (species.id === 'porygonz' && role === 'Z-Move user') {
+ const firstMove = (moves.has('shadowball') ? 'shadowball' : 'thunderbolt');
+ this.fastPop(shuffledMoves, shuffledMoves.indexOf(firstMove));
+ shuffledMoves.unshift(firstMove);
+ }
+ return {
+ name: species.baseSpecies,
+ species: forme,
+ gender: species.baseSpecies === 'Greninja' ? 'M' : species.gender,
+ shiny: this.randomChance(1, 1024),
+ level,
+ moves: shuffledMoves,
+ ability,
+ evs,
+ ivs,
+ item,
+ role,
+ };
+ }
+
+ randomTeam() {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const seed = this.prng.seed;
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+ const pokemon: RandomTeamsTypes.RandomSet[] = [];
+
+ // For Monotype
+ const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
+ const typePool = this.dex.types.names();
+ const type = this.forceMonotype || this.sample(typePool);
+
+ const baseFormes: {[k: string]: number} = {};
+ let hasMega = false;
+
+ const typeCount: {[k: string]: number} = {};
+ const typeComboCount: {[k: string]: number} = {};
+ const typeWeaknesses: {[k: string]: number} = {};
+ const typeDoubleWeaknesses: {[k: string]: number} = {};
+ const teamDetails: RandomTeamsTypes.TeamDetails = {};
+ let numMaxLevelPokemon = 0;
+
+ // We make at most two passes through the potential Pokemon pool when creating a team - if the first pass doesn't
+ // result in a team of six Pokemon we perform a second iteration relaxing as many restrictions as possible.
+ for (const restrict of [true, false]) {
+ if (pokemon.length >= this.maxTeamSize) break;
+
+ const pokemonList = Object.keys(this.randomSets);
+ const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);
+ while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
+ const baseSpecies = this.sampleNoReplace(baseSpeciesPool);
+ const currentSpeciesPool: Species[] = [];
+ // Check if the base species has a mega forme available
+ let canMega = false;
+ for (const poke of pokemonPool[baseSpecies]) {
+ const species = this.dex.species.get(poke);
+ if (!hasMega && species.isMega) canMega = true;
+ }
+ for (const poke of pokemonPool[baseSpecies]) {
+ const species = this.dex.species.get(poke);
+ // Prevent multiple megas
+ if (hasMega && species.isMega) continue;
+ // Prevent base forme, if a mega is available
+ if (canMega && !species.isMega) continue;
+ currentSpeciesPool.push(species);
+ }
+ const species = this.sample(currentSpeciesPool);
+
+ if (!species.exists) continue;
+
+ // Limit to one of each species (Species Clause)
+ if (baseFormes[species.baseSpecies]) continue;
+
+ // Limit one Mega per team
+ if (hasMega && species.isMega) continue;
+
+ const types = species.types;
+ const typeCombo = types.slice().sort().join();
+ const weakToFreezeDry = (
+ this.dex.getEffectiveness('Ice', species) > 0 ||
+ (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water'))
+ );
+ // Dynamically scale limits for different team sizes. The default and minimum value is 1.
+ const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
+
+ if (restrict) {
+ if (!isMonotype && !this.forceMonotype) {
+ // Limit two of any type
+ let skip = false;
+ for (const typeName of types) {
+ if (typeCount[typeName] >= 2 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (skip) continue;
+
+ // Limit three weak to any type, and one double weak to any type
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;
+ if (typeWeaknesses[typeName] >= 3 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0;
+ if (typeDoubleWeaknesses[typeName] >= 1 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ if (skip) continue;
+
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (
+ this.dex.getEffectiveness('Fire', species) === 0 &&
+ Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length
+ ) {
+ if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0;
+ if (typeWeaknesses['Fire'] >= 3 * limitFactor) continue;
+ }
+
+ // Limit four weak to Freeze-Dry
+ if (weakToFreezeDry) {
+ if (!typeWeaknesses['Freeze-Dry']) typeWeaknesses['Freeze-Dry'] = 0;
+ if (typeWeaknesses['Freeze-Dry'] >= 4 * limitFactor) continue;
+ }
+
+ // Limit one level 100 Pokemon
+ if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) {
+ continue;
+ }
+ }
+
+ // Limit three of any type combination in Monotype
+ if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue;
+ }
+
+ const set = this.randomSet(
+ species,
+ teamDetails,
+ pokemon.length === this.maxTeamSize - 1
+ );
+
+ const item = this.dex.items.get(set.item);
+
+ // Limit one Z-Move per team
+ if (item.zMove && teamDetails.zMove) continue;
+
+ // Zoroark copies the last Pokemon and should not be generated in that slot
+ if (set.ability === 'Illusion' && pokemon.length < 1) continue;
+
+ // Okay, the set passes, add it to our team
+ pokemon.unshift(set);
+
+ // Don't bother tracking details for the last Pokemon
+ if (pokemon.length === this.maxTeamSize) break;
+
+ // Now that our Pokemon has passed all checks, we can increment our counters
+ baseFormes[species.baseSpecies] = 1;
+
+ // Increment type counters
+ for (const typeName of types) {
+ if (typeName in typeCount) {
+ typeCount[typeName]++;
+ } else {
+ typeCount[typeName] = 1;
+ }
+ }
+ if (typeCombo in typeComboCount) {
+ typeComboCount[typeCombo]++;
+ } else {
+ typeComboCount[typeCombo] = 1;
+ }
+
+ // Increment weakness counter
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ typeWeaknesses[typeName]++;
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ typeDoubleWeaknesses[typeName]++;
+ }
+ }
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) {
+ typeWeaknesses['Fire']++;
+ }
+ if (weakToFreezeDry) typeWeaknesses['Freeze-Dry']++;
+
+ // Increment level 100 counter
+ if (set.level === 100) numMaxLevelPokemon++;
+
+ // Track what the team has
+ if (item.megaStone || species.name === 'Rayquaza-Mega') hasMega = true;
+ if (item.zMove) teamDetails.zMove = 1;
+ if (set.ability === 'Snow Warning' || set.moves.includes('hail')) teamDetails.hail = 1;
+ if (set.moves.includes('raindance') || set.ability === 'Drizzle' && !item.onPrimal) teamDetails.rain = 1;
+ if (set.ability === 'Sand Stream') teamDetails.sand = 1;
+ if (set.moves.includes('sunnyday') || set.ability === 'Drought' && !item.onPrimal) teamDetails.sun = 1;
+ if (set.moves.includes('aromatherapy') || set.moves.includes('healbell')) teamDetails.statusCure = 1;
+ if (set.moves.includes('spikes')) teamDetails.spikes = (teamDetails.spikes || 0) + 1;
+ if (set.moves.includes('stealthrock')) teamDetails.stealthRock = 1;
+ if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1;
+ if (set.moves.includes('toxicspikes')) teamDetails.toxicSpikes = 1;
+ if (set.moves.includes('defog')) teamDetails.defog = 1;
+ if (set.moves.includes('rapidspin')) teamDetails.rapidSpin = 1;
+ if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) {
+ teamDetails.screens = 1;
+ }
+ }
+ }
+ if (pokemon.length < this.maxTeamSize && pokemon.length < 12) {
+ throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
+ }
+
+ return pokemon;
+ }
+
+ randomFactorySets: {[format: string]: {[species: string]: BattleFactorySpecies}} = require('./factory-sets.json');
+
+ randomFactorySet(
+ species: Species, teamData: RandomTeamsTypes.FactoryTeamDetails, tier: string
+ ): RandomTeamsTypes.RandomFactorySet | null {
+ const id = toID(species.name);
+ const setList = this.randomFactorySets[tier][id].sets;
+
+ const itemsMax: {[k: string]: number} = {
+ choicespecs: 1,
+ choiceband: 1,
+ choicescarf: 1,
+ };
+ const movesMax: {[k: string]: number} = {
+ rapidspin: 1,
+ batonpass: 1,
+ stealthrock: 1,
+ defog: 1,
+ spikes: 1,
+ toxicspikes: 1,
+ };
+ const requiredMoves: {[k: string]: string} = {
+ stealthrock: 'hazardSet',
+ rapidspin: 'hazardClear',
+ defog: 'hazardClear',
+ };
+ const weatherAbilitiesRequire: {[k: string]: string} = {
+ hydration: 'raindance', swiftswim: 'raindance',
+ leafguard: 'sunnyday', solarpower: 'sunnyday', chlorophyll: 'sunnyday',
+ sandforce: 'sandstorm', sandrush: 'sandstorm', sandveil: 'sandstorm',
+ slushrush: 'hail', snowcloak: 'hail',
+ };
+ const 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
+ let effectivePool: {set: AnyObject, moveVariants?: number[], item?: string, ability?: string}[] = [];
+ const priorityPool = [];
+ for (const curSet of setList) {
+ if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;
+
+ // reject disallowed items
+ const allowedItems: string[] = [];
+ for (const itemString of curSet.item) {
+ const item = this.dex.items.get(itemString);
+ if (teamData.megaCount && teamData.megaCount > 0 && item.megaStone) continue; // reject 2+ mega stones
+ if (teamData.zCount && teamData.zCount > 0 && item.zMove) continue; // reject 2+ Z stones
+ if (itemsMax[item.id] && teamData.has[item.id] >= itemsMax[item.id]) continue; // reject 2+ same choice item
+ allowedItems.push(itemString);
+ }
+ if (allowedItems.length === 0) continue;
+ const curSetItem = this.sample(allowedItems);
+
+ // reject bad weather abilities
+ const allowedAbilities: string[] = [];
+ for (const abilityString of curSet.ability) {
+ const ability = this.dex.abilities.get(abilityString);
+ if (weatherAbilitiesRequire[ability.id] && teamData.weather !== weatherAbilitiesRequire[ability.id]) continue;
+ if (teamData.weather && weatherAbilities.includes(ability.id)) continue; // reject 2+ weather setters
+ allowedAbilities.push(abilityString);
+ }
+ if (allowedAbilities.length === 0) continue;
+ const curSetAbility = this.sample(allowedAbilities);
+
+ let reject = false;
+ let hasRequiredMove = false;
+ const curSetVariants = [];
+ for (const move of curSet.moves) {
+ const variantIndex = this.random(move.length);
+ const moveId = toID(move[variantIndex]);
+ if (movesMax[moveId] && teamData.has[moveId] >= movesMax[moveId]) {
+ reject = true;
+ break;
+ }
+ if (requiredMoves[moveId] && !teamData.has[requiredMoves[moveId]]) {
+ hasRequiredMove = true;
+ }
+ curSetVariants.push(variantIndex);
+ }
+ if (reject) continue;
+
+ const fullSetSpec = {set: curSet, moveVariants: curSetVariants, item: curSetItem, ability: curSetAbility};
+ effectivePool.push(fullSetSpec);
+ if (hasRequiredMove) priorityPool.push(fullSetSpec);
+ }
+ if (priorityPool.length) effectivePool = priorityPool;
+
+ if (!effectivePool.length) {
+ if (!teamData.forceResult) return null;
+ for (const curSet of setList) {
+ effectivePool.push({set: curSet});
+ }
+ }
+
+ const setData = this.sample(effectivePool);
+ const moves = [];
+ for (const [i, moveSlot] of setData.set.moves.entries()) {
+ moves.push(setData.moveVariants ? moveSlot[setData.moveVariants[i]] : this.sample(moveSlot));
+ }
+
+
+ const item = setData.item || this.sampleIfArray(setData.set.item);
+ const ability = setData.ability || this.sampleIfArray(setData.set.ability);
+ const nature = this.sampleIfArray(setData.set.nature);
+ const level = this.adjustLevel || setData.set.level || (tier === "LC" ? 5 : 100);
+
+ return {
+ name: setData.set.name || species.baseSpecies,
+ species: setData.set.species,
+ gender: setData.set.gender || species.gender || (this.randomChance(1, 2) ? 'M' : 'F'),
+ item: item || '',
+ ability: ability || species.abilities['0'],
+ shiny: typeof setData.set.shiny === 'undefined' ? this.randomChance(1, 1024) : setData.set.shiny,
+ level,
+ happiness: typeof setData.set.happiness === 'undefined' ? 255 : setData.set.happiness,
+ evs: {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0, ...setData.set.evs},
+ ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31, ...setData.set.ivs},
+ nature: nature || 'Serious',
+ moves,
+ };
+ }
+
+ randomFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const forceResult = (depth >= 12);
+ const isMonotype = !!this.forceMonotype || this.dex.formats.getRuleTable(this.format).has('sametypeclause');
+
+ // 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 = isMonotype ? 'Mono' : this.sample(['Uber', 'OU', 'UU', 'RU', 'NU', 'PU', 'LC']);
+ } else if (isMonotype && this.factoryTier !== 'Mono') {
+ // I don't think this can ever happen?
+ throw new Error(`Can't generate a Monotype Battle Factory set in a battle with factory tier ${this.factoryTier}`);
+ }
+
+ const tierValues: {[k: string]: number} = {
+ Uber: 5,
+ OU: 4, UUBL: 4,
+ UU: 3, RUBL: 3,
+ RU: 2, NUBL: 2,
+ NU: 1, PUBL: 1,
+ PU: 0,
+ };
+
+ const pokemon = [];
+ const pokemonPool = Object.keys(this.randomFactorySets[this.factoryTier]);
+
+ const typePool = this.dex.types.names();
+ const type = this.sample(typePool);
+
+ const teamData: TeamData = {
+ typeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, zCount: 0,
+ has: {}, forceResult: forceResult, weaknesses: {}, resistances: {},
+ };
+ const requiredMoveFamilies = ['hazardSet', 'hazardClear'];
+ const requiredMoves: {[k: string]: string} = {
+ stealthrock: 'hazardSet',
+ rapidspin: 'hazardClear',
+ defog: 'hazardClear',
+ };
+ const weatherAbilitiesSet: {[k: string]: string} = {
+ drizzle: 'raindance',
+ drought: 'sunnyday',
+ snowwarning: 'hail',
+ sandstream: 'sandstorm',
+ };
+ const resistanceAbilities: {[k: string]: string[]} = {
+ 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 < this.maxTeamSize) {
+ const species = this.dex.species.get(this.sampleNoReplace(pokemonPool));
+ if (!species.exists) continue;
+
+ // Lessen the need of deleting sets of Pokemon after tier shifts
+ if (
+ this.factoryTier in tierValues && species.tier in tierValues &&
+ tierValues[species.tier] > tierValues[this.factoryTier]
+ ) continue;
+
+ const speciesFlags = this.randomFactorySets[this.factoryTier][species.id].flags;
+
+ // Limit to one of each species (Species Clause)
+ if (teamData.baseFormes[species.baseSpecies]) continue;
+
+ // Limit the number of Megas to one
+ if (!teamData.megaCount) teamData.megaCount = 0;
+ if (teamData.megaCount >= 1 && speciesFlags.megaOnly) continue;
+
+ const set = this.randomFactorySet(species, teamData, this.factoryTier);
+ if (!set) continue;
+
+ const itemData = this.dex.items.get(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 && teamData.zCount >= 1 && itemData.zMove) continue;
+
+ let types = species.types;
+ // Dynamically scale limits for different team sizes. The default and minimum value is 1.
+ const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
+
+ // Enforce Monotype
+ if (isMonotype) {
+ // Prevents Mega Evolutions from breaking the type limits
+ if (itemData.megaStone) {
+ const megaSpecies = this.dex.species.get(itemData.megaStone);
+ if (types.length > megaSpecies.types.length) types = [species.types[0]];
+ // Only check the second type because a Mega Evolution should always share the first type with its base forme.
+ if (megaSpecies.types[1] && types[1] && megaSpecies.types[1] !== types[1]) {
+ types = [megaSpecies.types[0]];
+ }
+ }
+ if (!types.includes(type)) continue;
+ } else {
+ // If not Monotype, limit to two of each type
+ let skip = false;
+ for (const typeName of types) {
+ if (teamData.typeCount[typeName] >= 2 * limitFactor && 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 + '';
+ }
+ if (teamData.typeComboCount[typeCombo] >= 1 * limitFactor) continue;
+ }
+
+ // Okay, the set passes, add it to our team
+ pokemon.push(set);
+ const typeCombo = types.slice().sort().join();
+ // Now that our Pokemon has passed all checks, we can update team data:
+ for (const typeName of types) {
+ if (typeName in teamData.typeCount) {
+ teamData.typeCount[typeName]++;
+ } else {
+ teamData.typeCount[typeName] = 1;
+ }
+ }
+ teamData.typeComboCount[typeCombo] = (teamData.typeComboCount[typeCombo] + 1) || 1;
+
+ teamData.baseFormes[species.baseSpecies] = 1;
+
+ if (itemData.megaStone) teamData.megaCount++;
+ if (itemData.zMove) {
+ if (!teamData.zCount) teamData.zCount = 0;
+ teamData.zCount++;
+ }
+ if (itemData.id in teamData.has) {
+ teamData.has[itemData.id]++;
+ } else {
+ teamData.has[itemData.id] = 1;
+ }
+
+ const abilityState = this.dex.abilities.get(set.ability);
+ if (abilityState.id in weatherAbilitiesSet) {
+ teamData.weather = weatherAbilitiesSet[abilityState.id];
+ }
+
+ for (const move of set.moves) {
+ const moveId = toID(move);
+ if (moveId in teamData.has) {
+ teamData.has[moveId]++;
+ } else {
+ teamData.has[moveId] = 1;
+ }
+ if (moveId in requiredMoves) {
+ teamData.has[requiredMoves[moveId]] = 1;
+ }
+ }
+
+ for (const typeName of this.dex.types.names()) {
+ // Cover any major weakness (3+) with at least one resistance
+ if (teamData.resistances[typeName] >= 1) continue;
+ if (resistanceAbilities[abilityState.id]?.includes(typeName) || !this.dex.getImmunity(typeName, types)) {
+ // Heuristic: assume that Pokémon with these abilities don't have (too) negative typing.
+ teamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;
+ if (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;
+ continue;
+ }
+ const typeMod = this.dex.getEffectiveness(typeName, types);
+ if (typeMod < 0) {
+ teamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;
+ if (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;
+ } else if (typeMod > 0) {
+ teamData.weaknesses[typeName] = (teamData.weaknesses[typeName] || 0) + 1;
+ }
+ }
+ }
+ if (pokemon.length < this.maxTeamSize) return this.randomFactoryTeam(side, ++depth);
+
+ // Quality control
+ if (!teamData.forceResult) {
+ for (const requiredFamily of requiredMoveFamilies) {
+ if (!teamData.has[requiredFamily]) return this.randomFactoryTeam(side, ++depth);
+ }
+ for (const typeName in teamData.weaknesses) {
+ if (teamData.weaknesses[typeName] >= 3) return this.randomFactoryTeam(side, ++depth);
+ }
+ }
+
+ return pokemon;
+ }
+
+ randomBSSFactorySets: AnyObject = require('./bss-factory-sets.json');
+
+ randomBSSFactorySet(
+ species: Species, teamData: RandomTeamsTypes.FactoryTeamDetails
+ ): RandomTeamsTypes.RandomFactorySet | null {
+ const id = toID(species.name);
+ // const flags = this.randomBSSFactorySets[tier][id].flags;
+ const setList = this.randomBSSFactorySets[id].sets;
+
+ const movesMax: {[k: string]: number} = {
+ batonpass: 1,
+ stealthrock: 1,
+ spikes: 1,
+ toxicspikes: 1,
+ doubleedge: 1,
+ trickroom: 1,
+ };
+ const requiredMoves: {[k: string]: number} = {};
+ const weatherAbilitiesRequire: {[k: string]: string} = {
+ swiftswim: 'raindance',
+ sandrush: 'sandstorm', sandveil: 'sandstorm',
+ };
+ const 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
+ let effectivePool: {set: AnyObject, moveVariants?: number[], itemVariants?: number, abilityVariants?: number}[] = [];
+ const priorityPool = [];
+ for (const curSet of setList) {
+ if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;
+
+ const item = this.dex.items.get(curSet.item);
+ if (teamData.megaCount && teamData.megaCount > 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
+
+ const ability = this.dex.abilities.get(curSet.ability);
+ if (weatherAbilitiesRequire[ability.id] && teamData.weather !== weatherAbilitiesRequire[ability.id]) continue;
+ if (teamData.weather && weatherAbilities.includes(ability.id)) continue; // reject 2+ weather setters
+
+ if (curSet.species === 'Aron' && teamData.weather !== 'sandstorm') continue; // reject Aron without a Sand Stream user
+
+ let reject = false;
+ let hasRequiredMove = false;
+ const curSetVariants = [];
+ for (const move of curSet.moves) {
+ const variantIndex = this.random(move.length);
+ const moveId = toID(move[variantIndex]);
+ if (movesMax[moveId] && teamData.has[moveId] >= movesMax[moveId]) {
+ reject = true;
+ break;
+ }
+ 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 null;
+ for (const curSet of setList) {
+ effectivePool.push({set: curSet});
+ }
+ }
+
+ const setData = this.sample(effectivePool);
+ const moves = [];
+ for (const [i, moveSlot] of setData.set.moves.entries()) {
+ moves.push(setData.moveVariants ? moveSlot[setData.moveVariants[i]] : this.sample(moveSlot));
+ }
+
+ return {
+ name: setData.set.nickname || setData.set.name || species.baseSpecies,
+ species: setData.set.species,
+ gender: setData.set.gender || species.gender || (this.randomChance(1, 2) ? 'M' : 'F'),
+ item: this.sampleIfArray(setData.set.item) || '',
+ ability: setData.set.ability || species.abilities['0'],
+ 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: {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0, ...setData.set.evs},
+ ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31, ...setData.set.ivs},
+ nature: setData.set.nature || 'Serious',
+ moves,
+ };
+ }
+
+ randomBSSFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const forceResult = (depth >= 4);
+
+ const pokemon = [];
+
+ const pokemonPool = Object.keys(this.randomBSSFactorySets);
+
+ const teamData: TeamData = {
+ typeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, zCount: 0,
+ eeveeLimCount: 0, has: {}, forceResult, weaknesses: {}, resistances: {},
+ };
+ const requiredMoveFamilies: string[] = [];
+ const requiredMoves: {[k: string]: string} = {};
+ const weatherAbilitiesSet: {[k: string]: string} = {
+ drizzle: 'raindance',
+ drought: 'sunnyday',
+ snowwarning: 'hail',
+ sandstream: 'sandstorm',
+ };
+ const resistanceAbilities: {[k: string]: string[]} = {
+ waterabsorb: ['Water'],
+ flashfire: ['Fire'],
+ lightningrod: ['Electric'], voltabsorb: ['Electric'],
+ thickfat: ['Ice', 'Fire'],
+ levitate: ['Ground'],
+ };
+
+ while (pokemonPool.length && pokemon.length < this.maxTeamSize) {
+ const species = this.dex.species.get(this.sampleNoReplace(pokemonPool));
+ if (!species.exists) continue;
+
+ const speciesFlags = this.randomBSSFactorySets[species.id].flags;
+ if (!teamData.megaCount) teamData.megaCount = 0;
+
+ // Limit to one of each species (Species Clause)
+ if (teamData.baseFormes[species.baseSpecies]) continue;
+
+ // Limit the number of Megas + Z-moves to 3
+ if (teamData.megaCount + (teamData.zCount ? teamData.zCount : 0) >= 3 && speciesFlags.megaOnly) continue;
+
+ // Dynamically scale limits for different team sizes. The default and minimum value is 1.
+ const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
+
+ // Limit 2 of any type
+ const types = species.types;
+ let skip = false;
+ for (const type of types) {
+ if (teamData.typeCount[type] >= 2 * limitFactor && this.randomChance(4, 5)) {
+ skip = true;
+ break;
+ }
+ }
+ if (skip) continue;
+
+ // Restrict Eevee with certain Pokemon
+ if (speciesFlags.limEevee) {
+ if (!teamData.eeveeLimCount) teamData.eeveeLimCount = 0;
+ teamData.eeveeLimCount++;
+ }
+ if (teamData.eeveeLimCount && teamData.eeveeLimCount >= 1 && speciesFlags.limEevee) continue;
+
+ const set = this.randomBSSFactorySet(species, teamData);
+ if (!set) continue;
+
+ // Limit 1 of any type combination
+ let typeCombo = types.slice().sort().join();
+ if (set.ability === 'Drought' || set.ability === 'Drizzle') {
+ // Drought and Drizzle don't count towards the type combo limit
+ typeCombo = set.ability;
+ }
+ if (teamData.typeComboCount[typeCombo] >= 1 * limitFactor) 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] = (teamData.typeComboCount[typeCombo] + 1) || 1;
+
+ teamData.baseFormes[species.baseSpecies] = 1;
+
+ // Limit Mega and Z-move
+ const itemData = this.dex.items.get(set.item);
+ if (itemData.megaStone) teamData.megaCount++;
+ if (itemData.zMove) {
+ if (!teamData.zCount) teamData.zCount = 0;
+ teamData.zCount++;
+ }
+ teamData.has[itemData.id] = 1;
+
+ const abilityState = this.dex.abilities.get(set.ability);
+ if (abilityState.id in weatherAbilitiesSet) {
+ teamData.weather = weatherAbilitiesSet[abilityState.id];
+ }
+
+ for (const move of set.moves) {
+ const moveId = toID(move);
+ if (moveId in teamData.has) {
+ teamData.has[moveId]++;
+ } else {
+ teamData.has[moveId] = 1;
+ }
+ if (moveId in requiredMoves) {
+ teamData.has[requiredMoves[moveId]] = 1;
+ }
+ }
+
+ for (const typeName of this.dex.types.names()) {
+ // Cover any major weakness (3+) with at least one resistance
+ if (teamData.resistances[typeName] >= 1) continue;
+ if (resistanceAbilities[abilityState.id]?.includes(typeName) || !this.dex.getImmunity(typeName, types)) {
+ // Heuristic: assume that Pokémon with these abilities don't have (too) negative typing.
+ teamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;
+ if (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;
+ continue;
+ }
+ const typeMod = this.dex.getEffectiveness(typeName, types);
+ if (typeMod < 0) {
+ teamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;
+ if (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;
+ } else if (typeMod > 0) {
+ teamData.weaknesses[typeName] = (teamData.weaknesses[typeName] || 0) + 1;
+ }
+ }
+ }
+ if (pokemon.length < this.maxTeamSize) return this.randomBSSFactoryTeam(side, ++depth);
+
+ // Quality control
+ if (!teamData.forceResult) {
+ for (const requiredFamily of requiredMoveFamilies) {
+ if (!teamData.has[requiredFamily]) return this.randomBSSFactoryTeam(side, ++depth);
+ }
+ for (const type in teamData.weaknesses) {
+ if (teamData.weaknesses[type] >= 3) return this.randomBSSFactoryTeam(side, ++depth);
+ }
+ }
+
+ return pokemon;
+ }
+}
+
+export default RandomGen7Teams;
diff --git a/data/mods/gen7letsgo/random-data.json b/data/random-battles/gen7letsgo/data.json
similarity index 99%
rename from data/mods/gen7letsgo/random-data.json
rename to data/random-battles/gen7letsgo/data.json
index fb081f58eb12..7d8ba0f5ff0d 100644
--- a/data/mods/gen7letsgo/random-data.json
+++ b/data/random-battles/gen7letsgo/data.json
@@ -1346,7 +1346,7 @@
"greninja": {
"moves": ["gunkshot", "hydropump", "icebeam", "spikes", "taunt", "toxicspikes", "uturn"]
},
- "greninjaash": {
+ "greninjabond": {
"moves": ["darkpulse", "hydropump", "icebeam", "uturn", "watershuriken"]
},
"diggersby": {
diff --git a/data/mods/gen7letsgo/random-teams.ts b/data/random-battles/gen7letsgo/teams.ts
similarity index 96%
rename from data/mods/gen7letsgo/random-teams.ts
rename to data/random-battles/gen7letsgo/teams.ts
index 3b1ca50bf800..74cca6128fab 100644
--- a/data/mods/gen7letsgo/random-teams.ts
+++ b/data/random-battles/gen7letsgo/teams.ts
@@ -1,8 +1,8 @@
import type {PRNG} from '../../../sim';
-import {MoveCounter, RandomGen8Teams, OldRandomBattleSpecies} from '../gen8/random-teams';
+import {MoveCounter, RandomGen8Teams, OldRandomBattleSpecies} from '../gen8/teams';
export class RandomLetsGoTeams extends RandomGen8Teams {
- randomData: {[species: string]: OldRandomBattleSpecies} = require('./random-data.json');
+ randomData: {[species: string]: OldRandomBattleSpecies} = require('./data.json');
constructor(format: Format | string, prng: PRNG | PRNGSeed | null) {
super(format, prng);
@@ -24,7 +24,7 @@ export class RandomLetsGoTeams extends RandomGen8Teams {
move: Move,
types: Set,
moves: Set,
- abilities: Set,
+ abilities: string[],
counter: MoveCounter,
movePool: string[],
teamDetails: RandomTeamsTypes.TeamDetails,
@@ -127,7 +127,7 @@ export class RandomLetsGoTeams extends RandomGen8Teams {
const data = this.randomData[species.id];
- const movePool = (data.moves || Object.keys(this.dex.species.getLearnset(species.id)!)).slice();
+ const movePool: string[] = [...(data.moves || this.dex.species.getMovePool(species.id))];
const types = new Set(species.types);
const moves = new Set();
@@ -140,13 +140,13 @@ export class RandomLetsGoTeams extends RandomGen8Teams {
moves.add(moveid);
}
- counter = this.queryMoves(moves, species.types, new Set(), movePool);
+ counter = this.queryMoves(moves, species.types, [], movePool);
// Iterate through the moves again, this time to cull them:
for (const moveid of moves) {
const move = this.dex.moves.get(moveid);
- let {cull, isSetup} = this.shouldCullMove(move, types, moves, new Set(), counter, movePool, teamDetails);
+ let {cull, isSetup} = this.shouldCullMove(move, types, moves, [], counter, movePool, teamDetails);
if (
!isSetup &&
@@ -184,7 +184,7 @@ export class RandomLetsGoTeams extends RandomGen8Teams {
cull = true;
} else {
for (const type of types) {
- if (this.moveEnforcementCheckers[type]?.(movePool, moves, new Set(), types, counter, species, teamDetails)) cull = true;
+ if (this.moveEnforcementCheckers[type]?.(movePool, moves, [], types, counter, species, teamDetails)) cull = true;
}
}
}
diff --git a/data/mods/gen8/bss-factory-sets.json b/data/random-battles/gen8/bss-factory-sets.json
similarity index 100%
rename from data/mods/gen8/bss-factory-sets.json
rename to data/random-battles/gen8/bss-factory-sets.json
diff --git a/data/mods/gen8/cap-1v1-sets.json b/data/random-battles/gen8/cap-1v1-sets.json
similarity index 100%
rename from data/mods/gen8/cap-1v1-sets.json
rename to data/random-battles/gen8/cap-1v1-sets.json
diff --git a/data/mods/gen8/random-data.json b/data/random-battles/gen8/data.json
similarity index 94%
rename from data/mods/gen8/random-data.json
rename to data/random-battles/gen8/data.json
index 43e7f00b153d..ffbb725fed59 100644
--- a/data/mods/gen8/random-data.json
+++ b/data/random-battles/gen8/data.json
@@ -1,6 +1,6 @@
{
"venusaur": {
- "level": 82,
+ "level": 83,
"moves": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"]
},
"venusaurgmax": {
@@ -8,7 +8,7 @@
"doublesMoves": ["earthpower", "energyball", "leechseed", "protect", "sleeppowder", "sludgebomb"]
},
"charizard": {
- "level": 82,
+ "level": 83,
"moves": ["airslash", "earthquake", "fireblast", "focusblast", "roost"],
"doublesLevel": 80,
"doublesMoves": ["airslash", "heatwave", "overheat", "protect", "scorchingsands", "tailwind"],
@@ -44,7 +44,7 @@
},
"pikachu": {
"level": 92,
- "moves": ["irontail", "knockoff", "surf", "voltswitch", "volttackle"],
+ "moves": ["knockoff", "playrough", "surf", "voltswitch", "volttackle"],
"doublesLevel": 91,
"doublesMoves": ["fakeout", "grassknot", "knockoff", "protect", "volttackle"]
},
@@ -53,7 +53,7 @@
"doublesMoves": ["extremespeed", "fakeout", "knockoff", "surf", "volttackle"]
},
"raichu": {
- "level": 86,
+ "level": 87,
"moves": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch"],
"doublesLevel": 88,
"doublesMoves": ["encore", "fakeout", "helpinghand", "nuzzle", "thunderbolt", "voltswitch"],
@@ -66,19 +66,19 @@
"doublesMoves": ["focusblast", "nastyplot", "psyshock", "thunderbolt", "voltswitch"]
},
"sandslash": {
- "level": 86,
+ "level": 87,
"moves": ["earthquake", "knockoff", "rapidspin", "spikes", "stealthrock", "stoneedge", "swordsdance", "toxic"],
"doublesLevel": 89,
"doublesMoves": ["drillrun", "knockoff", "protect", "stealthrock", "stoneedge", "swordsdance"]
},
"sandslashalola": {
- "level": 86,
+ "level": 87,
"moves": ["earthquake", "ironhead", "knockoff", "rapidspin", "swordsdance", "tripleaxel"],
"doublesLevel": 90,
"doublesMoves": ["drillrun", "ironhead", "protect", "swordsdance", "tripleaxel"]
},
"nidoqueen": {
- "level": 84,
+ "level": 82,
"moves": ["earthpower", "icebeam", "sludgewave", "stealthrock", "toxicspikes"],
"doublesLevel": 84,
"doublesMoves": ["earthpower", "icebeam", "protect", "sludgebomb", "stealthrock"]
@@ -112,7 +112,7 @@
"doublesMoves": ["auroraveil", "blizzard", "encore", "freezedry", "moonblast"]
},
"wigglytuff": {
- "level": 90,
+ "level": 95,
"moves": ["dazzlinggleam", "fireblast", "healbell", "lightscreen", "reflect", "stealthrock"],
"doublesLevel": 90,
"doublesMoves": ["dazzlinggleam", "healpulse", "helpinghand", "hypervoice", "thunderwave"]
@@ -124,7 +124,7 @@
"doublesMoves": ["aromatherapy", "energyball", "pollenpuff", "sleeppowder", "sludgebomb", "strengthsap"]
},
"dugtrio": {
- "level": 82,
+ "level": 81,
"moves": ["earthquake", "memento", "stoneedge", "suckerpunch"],
"doublesLevel": 88,
"doublesMoves": ["highhorsepower", "memento", "protect", "rockslide", "suckerpunch"]
@@ -136,7 +136,7 @@
"doublesMoves": ["highhorsepower", "ironhead", "memento", "protect", "rockslide", "suckerpunch"]
},
"persian": {
- "level": 88,
+ "level": 90,
"moves": ["doubleedge", "fakeout", "knockoff", "playrough", "uturn"],
"doublesLevel": 90,
"doublesMoves": ["doubleedge", "fakeout", "hypnosis", "icywind", "knockoff", "taunt"]
@@ -148,8 +148,8 @@
"doublesMoves": ["fakeout", "foulplay", "icywind", "partingshot", "snarl", "taunt"]
},
"golduck": {
- "level": 86,
- "moves": ["calmmind", "focusblast", "icebeam", "psyshock", "scald", "substitute"],
+ "level": 85,
+ "moves": ["calmmind", "focusblast", "icebeam", "scald", "substitute"],
"doublesLevel": 88,
"doublesMoves": ["calmmind", "encore", "icebeam", "muddywater", "protect"]
},
@@ -160,7 +160,7 @@
"doublesMoves": ["closecombat", "extremespeed", "flareblitz", "morningsun", "protect", "snarl", "willowisp"]
},
"poliwrath": {
- "level": 84,
+ "level": 86,
"moves": ["closecombat", "darkestlariat", "liquidation", "raindance"],
"doublesLevel": 88,
"doublesMoves": ["closecombat", "coaching", "helpinghand", "liquidation", "protect"]
@@ -172,13 +172,13 @@
"doublesMoves": ["focusblast", "nastyplot", "protect", "psychic", "shadowball"]
},
"machamp": {
- "level": 82,
+ "level": 81,
"moves": ["bulletpunch", "closecombat", "dynamicpunch", "facade", "knockoff", "stoneedge"],
"doublesLevel": 88,
"doublesMoves": ["bulletpunch", "closecombat", "facade", "knockoff", "protect"]
},
"tentacruel": {
- "level": 84,
+ "level": 83,
"moves": ["haze", "knockoff", "rapidspin", "scald", "sludgebomb", "toxicspikes"],
"doublesLevel": 87,
"doublesMoves": ["acidspray", "icywind", "knockoff", "muddywater", "rapidspin", "sludgebomb"]
@@ -190,32 +190,32 @@
"doublesMoves": ["flareblitz", "highhorsepower", "morningsun", "protect", "swordsdance", "wildcharge"]
},
"rapidashgalar": {
- "level": 84,
+ "level": 83,
"moves": ["highhorsepower", "morningsun", "playrough", "swordsdance", "zenheadbutt"],
"doublesLevel": 88,
"doublesMoves": ["highhorsepower", "playrough", "protect", "swordsdance", "zenheadbutt"]
},
"slowbro": {
- "level": 84,
+ "level": 85,
"moves": ["futuresight", "icebeam", "scald", "slackoff", "teleport", "thunderwave"],
"doublesLevel": 84,
"doublesMoves": ["calmmind", "fireblast", "icebeam", "psychic", "scald", "slackoff", "trickroom"]
},
"slowbrogalar": {
- "level": 86,
+ "level": 87,
"moves": ["flamethrower", "psychic", "shellsidearm", "trick", "trickroom"],
"doublesLevel": 85,
"doublesMoves": ["fireblast", "healpulse", "protect", "psychic", "shellsidearm", "trickroom"]
},
"farfetchd": {
- "level": 90,
+ "level": 91,
"moves": ["bravebird", "closecombat", "knockoff", "leafblade", "swordsdance"],
"doublesLevel": 95,
"doublesMoves": ["bravebird", "closecombat", "leafblade", "protect", "quickattack", "swordsdance"]
},
"cloyster": {
- "level": 80,
- "moves": ["explosion", "hydropump", "iciclespear", "rockblast", "shellsmash"],
+ "level": 78,
+ "moves": ["hydropump", "iciclespear", "rockblast", "shellsmash"],
"doublesLevel": 84,
"doublesMoves": ["hydropump", "iciclespear", "protect", "rockblast", "shellsmash"],
"noDynamaxMoves": ["hydropump", "iciclespear", "rockblast", "shellsmash"]
@@ -245,63 +245,63 @@
"doublesMoves": ["energyball", "protect", "psychic", "sleeppowder", "trickroom"]
},
"exeggutoralola": {
- "level": 87,
+ "level": 86,
"moves": ["dracometeor", "flamethrower", "gigadrain", "leafstorm", "trickroom"],
"doublesLevel": 88,
"doublesMoves": ["dragonpulse", "energyball", "flamethrower", "protect", "trickroom"]
},
"marowak": {
- "level": 86,
+ "level": 87,
"moves": ["doubleedge", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance"],
"doublesLevel": 88,
"doublesMoves": ["bonemerang", "knockoff", "protect", "stealthrock", "stoneedge"]
},
"marowakalola": {
- "level": 84,
+ "level": 83,
"moves": ["earthquake", "flamecharge", "flareblitz", "poltergeist", "stealthrock", "stoneedge"],
"doublesLevel": 83,
"doublesMoves": ["bonemerang", "flamecharge", "flareblitz", "protect", "shadowbone"]
},
"hitmonlee": {
- "level": 84,
+ "level": 83,
"moves": ["closecombat", "curse", "highjumpkick", "knockoff", "poisonjab", "stoneedge"],
"doublesLevel": 86,
"doublesMoves": ["closecombat", "fakeout", "knockoff", "poisonjab", "protect", "rockslide"]
},
"hitmonchan": {
- "level": 86,
+ "level": 87,
"moves": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "throatchop"],
"doublesLevel": 88,
"doublesMoves": ["coaching", "drainpunch", "feint", "firepunch", "icepunch", "machpunch"]
},
"weezing": {
- "level": 86,
+ "level": 87,
"moves": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"],
"doublesLevel": 88,
"doublesMoves": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"]
},
"weezinggalar": {
- "level": 86,
+ "level": 87,
"moves": ["defog", "fireblast", "painsplit", "sludgebomb", "strangesteam", "toxicspikes", "willowisp"],
"doublesLevel": 89,
"doublesMoves": ["clearsmog", "defog", "fireblast", "painsplit", "strangesteam", "toxicspikes", "willowisp"]
},
"rhydon": {
- "level": 87,
+ "level": 85,
"moves": ["earthquake", "megahorn", "stealthrock", "stoneedge", "toxic"]
},
"chansey": {
"level": 84,
- "moves": ["healbell", "seismictoss", "softboiled", "stealthrock", "toxic"]
+ "moves": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "toxic"]
},
"kangaskhan": {
- "level": 84,
+ "level": 85,
"moves": ["doubleedge", "earthquake", "fakeout", "hammerarm", "suckerpunch"],
"doublesLevel": 88,
"doublesMoves": ["doubleedge", "drainpunch", "fakeout", "protect", "rockslide", "suckerpunch"]
},
"seaking": {
- "level": 88,
+ "level": 90,
"moves": ["drillrun", "knockoff", "megahorn", "swordsdance", "waterfall"],
"doublesLevel": 88,
"doublesMoves": ["drillrun", "knockoff", "megahorn", "protect", "scaleshot", "swordsdance", "waterfall"]
@@ -319,17 +319,17 @@
"doublesMoves": ["dazzlinggleam", "fakeout", "icywind", "lightscreen", "psychic", "reflect"]
},
"mrmimegalar": {
- "level": 86,
+ "level": 84,
"moves": ["focusblast", "freezedry", "nastyplot", "psychic", "rapidspin"]
},
"scyther": {
- "level": 81,
+ "level": 82,
"moves": ["brickbreak", "dualwingbeat", "knockoff", "roost", "swordsdance", "uturn"],
"doublesLevel": 84,
"doublesMoves": ["brickbreak", "bugbite", "dualwingbeat", "uturn"]
},
"jynx": {
- "level": 86,
+ "level": 85,
"moves": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock", "trick"],
"doublesLevel": 86,
"doublesMoves": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psychic"]
@@ -341,19 +341,19 @@
"doublesMoves": ["closecombat", "feint", "protect", "rockslide", "swordsdance", "xscissor"]
},
"tauros": {
- "level": 82,
- "moves": ["bodyslam", "closecombat", "rockslide", "throatchop", "zenheadbutt"],
+ "level": 81,
+ "moves": ["bodyslam", "closecombat", "throatchop", "zenheadbutt"],
"doublesLevel": 84,
"doublesMoves": ["bodyslam", "closecombat", "lashout", "protect", "rockslide"]
},
"gyarados": {
- "level": 76,
+ "level": 75,
"moves": ["bounce", "dragondance", "earthquake", "powerwhip", "waterfall"],
"doublesLevel": 81,
"doublesMoves": ["bounce", "dragondance", "icefang", "powerwhip", "protect", "waterfall"]
},
"laprasgmax": {
- "level": 86,
+ "level": 85,
"moves": ["freezedry", "icebeam", "protect", "sparklingaria", "thunderbolt", "toxic"],
"doublesLevel": 84,
"doublesMoves": ["freezedry", "helpinghand", "hydropump", "icywind", "protect", "thunderbolt"]
@@ -365,7 +365,7 @@
"doublesMoves": ["transform"]
},
"vaporeon": {
- "level": 84,
+ "level": 85,
"moves": ["healbell", "icebeam", "protect", "scald", "toxic", "wish"],
"doublesLevel": 88,
"doublesMoves": ["helpinghand", "icywind", "protect", "scald", "toxic", "wish"]
@@ -377,25 +377,25 @@
"doublesMoves": ["faketears", "helpinghand", "shadowball", "thunderbolt", "thunderwave"]
},
"flareon": {
- "level": 86,
+ "level": 87,
"moves": ["facade", "flamecharge", "flareblitz", "quickattack", "superpower"],
"doublesLevel": 88,
"doublesMoves": ["facade", "flamecharge", "flareblitz", "protect", "quickattack", "superpower"]
},
"omastar": {
"level": 82,
- "moves": ["earthpower", "hydropump", "icebeam", "shellsmash", "spikes", "stealthrock"],
+ "moves": ["earthpower", "hydropump", "icebeam", "shellsmash"],
"doublesLevel": 86,
"doublesMoves": ["earthpower", "icebeam", "muddywater", "shellsmash"]
},
"kabutops": {
- "level": 82,
+ "level": 83,
"moves": ["aquajet", "knockoff", "liquidation", "rapidspin", "stoneedge", "swordsdance"],
"doublesLevel": 86,
"doublesMoves": ["aquajet", "protect", "stoneedge", "superpower", "swordsdance", "waterfall"]
},
"aerodactyl": {
- "level": 82,
+ "level": 83,
"moves": ["aquatail", "dualwingbeat", "earthquake", "honeclaws", "stoneedge"],
"doublesLevel": 82,
"doublesMoves": ["aquatail", "dragondance", "dualwingbeat", "earthquake", "rockslide"]
@@ -411,13 +411,13 @@
"doublesMoves": ["bodyslam", "curse", "darkestlariat", "highhorsepower", "recycle"]
},
"articuno": {
- "level": 84,
+ "level": 85,
"moves": ["defog", "freezedry", "healbell", "roost", "toxic"],
"doublesLevel": 86,
"doublesMoves": ["freezedry", "healbell", "hurricane", "icebeam", "roost"]
},
"articunogalar": {
- "level": 80,
+ "level": 81,
"moves": ["airslash", "calmmind", "freezingglare", "recover"],
"doublesLevel": 81,
"doublesMoves": ["calmmind", "freezingglare", "hurricane", "recover", "tailwind"],
@@ -430,7 +430,7 @@
"doublesMoves": ["heatwave", "hurricane", "roost", "tailwind", "thunderbolt", "voltswitch"]
},
"zapdosgalar": {
- "level": 76,
+ "level": 74,
"moves": ["bravebird", "bulkup", "closecombat", "throatchop", "uturn"],
"doublesLevel": 76,
"doublesMoves": ["bravebird", "bulkup", "closecombat", "throatchop", "thunderouskick", "uturn"]
@@ -443,7 +443,7 @@
"noDynamaxMoves": ["defog", "fireblast", "hurricane", "roost", "uturn"]
},
"moltresgalar": {
- "level": 75,
+ "level": 74,
"moves": ["fierywrath", "hurricane", "nastyplot", "rest"],
"doublesLevel": 75,
"doublesMoves": ["fierywrath", "hurricane", "nastyplot", "protect"],
@@ -457,13 +457,13 @@
"noDynamaxMoves": ["dragondance", "dualwingbeat", "earthquake", "outrage", "roost"]
},
"mewtwo": {
- "level": 72,
+ "level": 70,
"moves": ["fireblast", "nastyplot", "psystrike", "recover", "shadowball"],
"doublesLevel": 74,
"doublesMoves": ["aurasphere", "icebeam", "nastyplot", "psystrike", "recover"]
},
"mew": {
- "level": 80,
+ "level": 79,
"moves": ["bravebird", "closecombat", "dragondance", "flareblitz", "psychicfangs", "swordsdance"],
"doublesLevel": 80,
"doublesMoves": ["fakeout", "pollenpuff", "psychic", "stealthrock", "tailwind", "toxicspikes", "transform"],
@@ -489,25 +489,25 @@
"doublesMoves": ["healbell", "icebeam", "protect", "scald", "thunderbolt", "thunderwave"]
},
"xatu": {
- "level": 89,
+ "level": 90,
"moves": ["heatwave", "psychic", "roost", "teleport", "thunderwave"],
"doublesLevel": 88,
"doublesMoves": ["airslash", "heatwave", "lightscreen", "psychic", "reflect", "roost", "tailwind"]
},
"bellossom": {
- "level": 82,
+ "level": 81,
"moves": ["gigadrain", "moonblast", "quiverdance", "sleeppowder", "strengthsap"],
"doublesLevel": 86,
"doublesMoves": ["energyball", "moonblast", "quiverdance", "sleeppowder", "strengthsap"]
},
"azumarill": {
- "level": 84,
+ "level": 83,
"moves": ["aquajet", "knockoff", "liquidation", "playrough", "superpower"],
"doublesLevel": 87,
"doublesMoves": ["aquajet", "knockoff", "liquidation", "playrough", "protect"]
},
"sudowoodo": {
- "level": 87,
+ "level": 89,
"moves": ["earthquake", "headsmash", "stealthrock", "suckerpunch", "woodhammer"],
"doublesLevel": 90,
"doublesMoves": ["bodypress", "firepunch", "headsmash", "protect", "suckerpunch", "woodhammer"]
@@ -519,7 +519,7 @@
"doublesMoves": ["haze", "helpinghand", "icywind", "protect", "scald"]
},
"quagsire": {
- "level": 84,
+ "level": 82,
"moves": ["earthquake", "icebeam", "recover", "scald", "toxic"],
"doublesLevel": 88,
"doublesMoves": ["highhorsepower", "protect", "recover", "scald", "yawn"]
@@ -531,13 +531,13 @@
"doublesMoves": ["calmmind", "dazzlinggleam", "morningsun", "protect", "psychic", "shadowball"]
},
"umbreon": {
- "level": 82,
+ "level": 81,
"moves": ["foulplay", "protect", "toxic", "wish"],
"doublesLevel": 88,
"doublesMoves": ["foulplay", "helpinghand", "moonlight", "protect", "snarl", "toxic"]
},
"slowking": {
- "level": 86,
+ "level": 87,
"moves": ["fireblast", "futuresight", "psyshock", "scald", "slackoff", "teleport", "toxic", "trick"],
"doublesLevel": 88,
"doublesMoves": ["fireblast", "icebeam", "nastyplot", "psychic", "scald", "slackoff", "trickroom"]
@@ -549,14 +549,14 @@
"doublesMoves": ["fireblast", "protect", "psychic", "sludgebomb", "trick", "trickroom"]
},
"wobbuffet": {
- "level": 92,
+ "level": 97,
"moves": ["charm", "counter", "encore", "mirrorcoat"],
"doublesLevel": 100,
"doublesMoves": ["charm", "counter", "encore", "mirrorcoat"],
"noDynamaxMoves": ["counter", "destinybond", "encore", "mirrorcoat"]
},
"dunsparce": {
- "level": 90,
+ "level": 91,
"moves": ["bodyslam", "coil", "earthquake", "roost"],
"doublesLevel": 90,
"doublesMoves": ["glare", "headbutt", "protect", "rockslide"]
@@ -569,13 +569,13 @@
"noDynamaxMoves": ["curse", "earthquake", "headsmash", "heavyslam", "stealthrock", "toxic"]
},
"qwilfish": {
- "level": 84,
+ "level": 85,
"moves": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
"doublesLevel": 88,
"doublesMoves": ["liquidation", "poisonjab", "protect", "taunt", "thunderwave", "toxicspikes"]
},
"scizor": {
- "level": 80,
+ "level": 79,
"moves": ["bulletpunch", "dualwingbeat", "knockoff", "roost", "superpower", "swordsdance", "uturn"],
"doublesLevel": 80,
"doublesMoves": ["bugbite", "bulletpunch", "dualwingbeat", "feint", "protect", "superpower", "swordsdance", "uturn"],
@@ -594,7 +594,7 @@
"doublesMoves": ["closecombat", "facade", "knockoff", "megahorn", "protect", "swordsdance"]
},
"corsola": {
- "level": 93,
+ "level": 97,
"moves": ["powergem", "recover", "scald", "stealthrock", "toxic"],
"doublesLevel": 95,
"doublesMoves": ["icywind", "lifedew", "recover", "scald", "toxic"]
@@ -604,10 +604,10 @@
"moves": ["haze", "nightshade", "stealthrock", "strengthsap", "willowisp"]
},
"octillery": {
- "level": 86,
- "moves": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "protect"],
- "doublesLevel": 84,
- "doublesMoves": ["fireblast", "gunkshot", "hydropump", "icebeam", "protect", "substitute"]
+ "level": 90,
+ "moves": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "scald", "thunderwave"],
+ "doublesLevel": 90,
+ "doublesMoves": ["fireblast", "gunkshot", "hydropump", "icebeam", "protect", "thunderwave"]
},
"delibird": {
"level": 100,
@@ -617,7 +617,7 @@
},
"mantine": {
"level": 86,
- "moves": ["defog", "hurricane", "icebeam", "roost", "scald", "toxic"],
+ "moves": ["defog", "hurricane", "roost", "scald", "toxic"],
"doublesLevel": 88,
"doublesMoves": ["haze", "helpinghand", "hurricane", "roost", "scald", "tailwind"]
},
@@ -641,37 +641,37 @@
"doublesMoves": ["icebeam", "recover", "thunderbolt", "toxic", "triattack", "trickroom"]
},
"hitmontop": {
- "level": 85,
+ "level": 86,
"moves": ["closecombat", "earthquake", "rapidspin", "suckerpunch", "toxic", "tripleaxel"],
"doublesLevel": 88,
"doublesMoves": ["closecombat", "coaching", "fakeout", "helpinghand", "rapidspin", "suckerpunch", "tripleaxel"]
},
"miltank": {
- "level": 84,
+ "level": 83,
"moves": ["bodyslam", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"],
"doublesLevel": 86,
"doublesMoves": ["bodypress", "bodyslam", "helpinghand", "icywind", "milkdrink", "protect", "rockslide"]
},
"blissey": {
- "level": 83,
+ "level": 84,
"moves": ["seismictoss", "softboiled", "stealthrock", "teleport", "toxic"],
"doublesLevel": 88,
"doublesMoves": ["allyswitch", "healpulse", "helpinghand", "protect", "seismictoss", "softboiled", "thunderwave", "toxic"]
},
"raikou": {
- "level": 80,
+ "level": 79,
"moves": ["aurasphere", "calmmind", "scald", "substitute", "thunderbolt", "voltswitch"],
"doublesLevel": 82,
"doublesMoves": ["aurasphere", "calmmind", "protect", "scald", "snarl", "thunderbolt", "voltswitch"]
},
"entei": {
- "level": 78,
+ "level": 77,
"moves": ["extremespeed", "flareblitz", "sacredfire", "stompingtantrum", "stoneedge"],
"doublesLevel": 79,
"doublesMoves": ["extremespeed", "protect", "sacredfire", "snarl", "stompingtantrum", "stoneedge"]
},
"suicune": {
- "level": 80,
+ "level": 79,
"moves": ["airslash", "calmmind", "icebeam", "rest", "scald", "sleeptalk"],
"doublesLevel": 82,
"doublesMoves": ["calmmind", "icebeam", "scald", "snarl", "tailwind"],
@@ -684,19 +684,19 @@
"doublesMoves": ["dragondance", "firepunch", "highhorsepower", "lashout", "protect", "rockslide", "stoneedge"]
},
"lugia": {
- "level": 74,
+ "level": 73,
"moves": ["airslash", "earthquake", "roost", "substitute", "toxic"],
"doublesLevel": 72,
"doublesMoves": ["aeroblast", "calmmind", "psyshock", "roost", "toxic"]
},
"hooh": {
- "level": 72,
+ "level": 70,
"moves": ["bravebird", "defog", "earthquake", "roost", "sacredfire", "toxic"],
"doublesLevel": 72,
"doublesMoves": ["bravebird", "earthpower", "protect", "roost", "sacredfire", "tailwind"]
},
"celebi": {
- "level": 82,
+ "level": 80,
"moves": ["earthpower", "gigadrain", "leafstorm", "nastyplot", "psychic", "recover", "stealthrock", "uturn"],
"doublesLevel": 84,
"doublesMoves": ["earthpower", "energyball", "nastyplot", "protect", "psychic", "recover"]
@@ -708,7 +708,7 @@
"doublesMoves": ["breakingswipe", "energyball", "focusblast", "leafstorm"]
},
"blaziken": {
- "level": 76,
+ "level": 75,
"moves": ["closecombat", "flareblitz", "knockoff", "stoneedge", "swordsdance"],
"doublesLevel": 78,
"doublesMoves": ["closecombat", "flareblitz", "knockoff", "protect", "swordsdance"]
@@ -720,7 +720,7 @@
"doublesMoves": ["highhorsepower", "icywind", "muddywater", "protect", "stealthrock", "wideguard"]
},
"linoone": {
- "level": 84,
+ "level": 85,
"moves": ["bellydrum", "extremespeed", "stompingtantrum", "throatchop"],
"doublesLevel": 90,
"doublesMoves": ["bellydrum", "extremespeed", "protect", "throatchop"]
@@ -732,7 +732,7 @@
"doublesMoves": ["energyball", "fakeout", "hydropump", "icebeam", "raindance"]
},
"shiftry": {
- "level": 86,
+ "level": 87,
"moves": ["darkpulse", "defog", "heatwave", "leafstorm", "nastyplot", "suckerpunch"],
"doublesLevel": 88,
"doublesMoves": ["defog", "fakeout", "knockoff", "leafblade", "suckerpunch", "tailwind"],
@@ -757,56 +757,56 @@
"doublesMoves": ["acrobatics", "defog", "leechlife", "protect", "swordsdance"]
},
"shedinja": {
- "level": 88,
+ "level": 91,
"moves": ["poltergeist", "shadowsneak", "swordsdance", "willowisp", "xscissor"],
"doublesLevel": 95,
"doublesMoves": ["poltergeist", "protect", "shadowsneak", "swordsdance", "willowisp", "xscissor"]
},
"exploud": {
- "level": 84,
+ "level": 85,
"moves": ["boomburst", "fireblast", "focusblast", "surf"],
"doublesLevel": 88,
"doublesMoves": ["boomburst", "fireblast", "focusblast", "hypervoice", "icywind", "protect"]
},
"sableye": {
- "level": 88,
+ "level": 90,
"moves": ["knockoff", "recover", "taunt", "toxic", "willowisp"],
"doublesLevel": 88,
"doublesMoves": ["disable", "encore", "fakeout", "foulplay", "knockoff", "quash", "recover", "willowisp"],
"noDynamaxMoves": ["encore", "knockoff", "recover", "taunt", "toxic", "willowisp"]
},
"mawile": {
- "level": 86,
+ "level": 89,
"moves": ["ironhead", "playrough", "stealthrock", "suckerpunch", "swordsdance"],
"doublesLevel": 88,
"doublesMoves": ["firefang", "ironhead", "playrough", "protect", "suckerpunch", "swordsdance"]
},
"aggron": {
- "level": 85,
+ "level": 86,
"moves": ["bodypress", "earthquake", "headsmash", "heavyslam", "rockpolish", "stealthrock"],
"doublesLevel": 89,
"doublesMoves": ["aquatail", "bodypress", "headsmash", "heavyslam", "highhorsepower", "rockpolish"]
},
"manectric": {
- "level": 86,
+ "level": 87,
"moves": ["flamethrower", "overheat", "switcheroo", "thunderbolt", "voltswitch"],
"doublesLevel": 88,
"doublesMoves": ["overheat", "protect", "snarl", "thunderbolt", "voltswitch"]
},
"sharpedo": {
- "level": 82,
+ "level": 81,
"moves": ["closecombat", "crunch", "hydropump", "protect"],
"doublesLevel": 84,
"doublesMoves": ["closecombat", "crunch", "flipturn", "icebeam", "protect", "waterfall"]
},
"wailord": {
- "level": 90,
+ "level": 91,
"moves": ["hydropump", "hypervoice", "icebeam", "waterspout"],
"doublesLevel": 88,
"doublesMoves": ["hydropump", "heavyslam", "icebeam", "waterspout"]
},
"torkoal": {
- "level": 86,
+ "level": 87,
"moves": ["earthquake", "lavaplume", "rapidspin", "solarbeam", "stealthrock"],
"doublesLevel": 84,
"doublesMoves": ["bodypress", "earthpower", "fireblast", "heatwave", "protect", "solarbeam", "willowisp"]
@@ -818,37 +818,37 @@
"doublesMoves": ["dragonclaw", "dragondance", "earthquake", "firepunch", "protect", "rockslide", "tailwind"]
},
"altaria": {
- "level": 90,
+ "level": 91,
"moves": ["defog", "dracometeor", "earthquake", "fireblast", "roost", "toxic"],
"doublesLevel": 92,
"doublesMoves": ["defog", "dracometeor", "fireblast", "roost", "tailwind", "toxic"]
},
"lunatone": {
- "level": 86,
+ "level": 88,
"moves": ["earthpower", "moonblast", "nastyplot", "powergem", "psychic", "stealthrock"],
"doublesLevel": 88,
"doublesMoves": ["earthpower", "icebeam", "meteorbeam", "protect", "psychic", "trickroom"]
},
"solrock": {
- "level": 88,
+ "level": 91,
"moves": ["earthquake", "explosion", "morningsun", "rockslide", "stealthrock", "willowisp"],
"doublesLevel": 88,
"doublesMoves": ["flareblitz", "helpinghand", "rockslide", "stoneedge", "willowisp"]
},
"whiscash": {
- "level": 86,
+ "level": 87,
"moves": ["dragondance", "earthquake", "liquidation", "stoneedge", "zenheadbutt"],
"doublesLevel": 90,
"doublesMoves": ["dragondance", "earthquake", "liquidation", "protect", "stoneedge"]
},
"crawdaunt": {
- "level": 84,
+ "level": 85,
"moves": ["aquajet", "closecombat", "crabhammer", "dragondance", "knockoff"],
"doublesLevel": 86,
"doublesMoves": ["aquajet", "closecombat", "crabhammer", "knockoff", "protect", "swordsdance"]
},
"claydol": {
- "level": 86,
+ "level": 87,
"moves": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"],
"doublesLevel": 88,
"doublesMoves": ["allyswitch", "earthpower", "icebeam", "psychic", "rapidspin"]
@@ -860,14 +860,14 @@
"doublesMoves": ["powerwhip", "protect", "recover", "stealthrock", "stoneedge", "stringshot"]
},
"armaldo": {
- "level": 86,
+ "level": 89,
"moves": ["earthquake", "knockoff", "liquidation", "rapidspin", "stealthrock", "stoneedge", "swordsdance"],
"doublesLevel": 88,
"doublesMoves": ["knockoff", "liquidation", "stoneedge", "superpower", "xscissor"],
"noDynamaxMoves": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance"]
},
"milotic": {
- "level": 82,
+ "level": 81,
"moves": ["haze", "icebeam", "recover", "scald", "toxic"],
"doublesLevel": 80,
"doublesMoves": ["coil", "hypnosis", "muddywater", "recover"]
@@ -879,10 +879,10 @@
"doublesMoves": ["closecombat", "knockoff", "protect", "suckerpunch", "swordsdance"]
},
"glalie": {
- "level": 80,
- "moves": ["disable", "earthquake", "freezedry", "protect", "substitute"],
- "doublesLevel": 84,
- "doublesMoves": ["disable", "earthquake", "freezedry", "protect", "substitute"]
+ "level": 94,
+ "moves": ["earthquake", "freezedry", "spikes", "superfang", "taunt"],
+ "doublesLevel": 94,
+ "doublesMoves": ["disable", "foulplay", "freezedry", "helpinghand", "icywind", "protect"]
},
"walrein": {
"level": 86,
@@ -891,14 +891,14 @@
"doublesMoves": ["brine", "icebeam", "icywind", "superfang"]
},
"relicanth": {
- "level": 86,
+ "level": 88,
"moves": ["bodypress", "earthquake", "headsmash", "liquidation", "stealthrock", "yawn"],
"doublesLevel": 88,
"doublesMoves": ["bodypress", "headsmash", "liquidation", "stealthrock", "yawn"]
},
"salamence": {
- "level": 76,
- "moves": ["dragondance", "dualwingbeat", "earthquake", "outrage", "roost"],
+ "level": 74,
+ "moves": ["dragondance", "dualwingbeat", "earthquake", "outrage"],
"doublesLevel": 79,
"doublesMoves": ["dragonclaw", "fireblast", "hurricane", "protect", "tailwind"]
},
@@ -909,51 +909,51 @@
"doublesMoves": ["agility", "bulletpunch", "icepunch", "meteormash", "stompingtantrum", "trick", "zenheadbutt"]
},
"regirock": {
- "level": 85,
+ "level": 86,
"moves": ["bodypress", "curse", "earthquake", "explosion", "rest", "rockslide", "stoneedge"],
"doublesLevel": 86,
"doublesMoves": ["bodypress", "curse", "rest", "rockslide"]
},
"regice": {
- "level": 84,
+ "level": 85,
"moves": ["focusblast", "icebeam", "rest", "rockpolish", "sleeptalk", "thunderbolt"],
"doublesLevel": 87,
"doublesMoves": ["focusblast", "icebeam", "icywind", "rockpolish", "thunderbolt"]
},
"registeel": {
- "level": 83,
+ "level": 84,
"moves": ["bodypress", "curse", "ironhead", "protect", "rest", "sleeptalk", "stealthrock", "toxic"],
"doublesLevel": 86,
"doublesMoves": ["bodypress", "curse", "ironhead", "rest", "toxic"]
},
"latias": {
"level": 80,
- "moves": ["calmmind", "dracometeor", "healingwish", "mysticalfire", "psychic", "roost"],
+ "moves": ["calmmind", "dracometeor", "healingwish", "mysticalfire", "psyshock", "roost"],
"doublesLevel": 82,
"doublesMoves": ["calmmind", "dracometeor", "healpulse", "mysticalfire", "psyshock", "roost", "tailwind"]
},
"latios": {
- "level": 78,
+ "level": 77,
"moves": ["calmmind", "dracometeor", "mysticalfire", "psyshock", "roost", "trick"],
"doublesLevel": 80,
"doublesMoves": ["dracometeor", "mysticalfire", "psychic", "psyshock", "roost", "tailwind", "trick"]
},
"kyogre": {
- "level": 72,
+ "level": 71,
"moves": ["calmmind", "icebeam", "originpulse", "thunder", "waterspout"],
"doublesLevel": 69,
"doublesMoves": ["icebeam", "originpulse", "thunder", "waterspout"]
},
"groudon": {
- "level": 73,
+ "level": 71,
"moves": ["heatcrash", "heavyslam", "precipiceblades", "stealthrock", "stoneedge", "swordsdance", "thunderwave"],
"doublesLevel": 72,
"doublesMoves": ["heatcrash", "precipiceblades", "rockpolish", "stoneedge", "swordsdance"],
"noDynamaxMoves": ["heatcrash", "precipiceblades", "stealthrock", "stoneedge", "swordsdance", "thunderwave"]
},
"rayquaza": {
- "level": 74,
- "moves": ["dracometeor", "dragonascent", "dragondance", "earthquake", "extremespeed", "swordsdance", "vcreate"],
+ "level": 73,
+ "moves": ["dragonascent", "dragondance", "earthquake", "extremespeed", "swordsdance", "vcreate"],
"doublesLevel": 74,
"doublesMoves": ["dracometeor", "dragonascent", "dragonclaw", "dragondance", "earthpower", "extremespeed", "vcreate"],
"noDynamaxMoves": ["dracometeor", "dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate"]
@@ -965,7 +965,7 @@
"doublesMoves": ["firepunch", "followme", "ironhead", "lifedew", "protect", "thunderwave"]
},
"luxray": {
- "level": 84,
+ "level": 86,
"moves": ["agility", "crunch", "facade", "superpower", "voltswitch", "wildcharge"],
"doublesLevel": 84,
"doublesMoves": ["playrough", "protect", "superpower", "voltswitch", "wildcharge"]
@@ -977,13 +977,13 @@
"doublesMoves": ["energyball", "leafstorm", "protect", "sleeppowder", "sludgebomb"]
},
"vespiquen": {
- "level": 96,
+ "level": 97,
"moves": ["airslash", "defog", "roost", "toxic", "uturn"],
"doublesLevel": 98,
"doublesMoves": ["airslash", "roost", "tailwind", "toxicspikes"]
},
"cherrim": {
- "level": 93,
+ "level": 94,
"moves": ["dazzlinggleam", "energyball", "healingwish", "petaldance", "pollenpuff"],
"doublesLevel": 92,
"doublesMoves": ["energyball", "healingwish", "helpinghand", "pollenpuff"]
@@ -993,31 +993,31 @@
"doublesMoves": ["playrough", "solarblade", "sunnyday", "weatherball"]
},
"gastrodon": {
- "level": 84,
+ "level": 85,
"moves": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"],
"doublesLevel": 80,
"doublesMoves": ["clearsmog", "earthpower", "icywind", "recover", "scald", "yawn"]
},
"drifblim": {
- "level": 84,
+ "level": 85,
"moves": ["calmmind", "shadowball", "strengthsap", "thunderbolt"],
"doublesLevel": 84,
"doublesMoves": ["calmmind", "icywind", "shadowball", "strengthsap"]
},
"lopunny": {
- "level": 90,
+ "level": 93,
"moves": ["closecombat", "facade", "healingwish", "switcheroo"],
"doublesLevel": 92,
"doublesMoves": ["closecombat", "fakeout", "switcheroo", "uturn"]
},
"skuntank": {
- "level": 85,
+ "level": 83,
"moves": ["crunch", "defog", "fireblast", "poisonjab", "suckerpunch", "taunt", "toxic"],
"doublesLevel": 88,
"doublesMoves": ["crunch", "defog", "fireblast", "poisonjab", "suckerpunch", "taunt"]
},
"bronzong": {
- "level": 83,
+ "level": 84,
"moves": ["earthquake", "ironhead", "protect", "stealthrock", "toxic"],
"doublesLevel": 88,
"doublesMoves": ["allyswitch", "bodypress", "ironhead", "trickroom"]
@@ -1035,31 +1035,31 @@
"doublesMoves": ["dragonclaw", "earthquake", "fireblast", "protect", "rockslide", "swordsdance"]
},
"lucario": {
- "level": 82,
+ "level": 81,
"moves": ["closecombat", "extremespeed", "meteormash", "stoneedge", "swordsdance"],
"doublesLevel": 84,
"doublesMoves": ["closecombat", "extremespeed", "icepunch", "meteormash", "protect", "swordsdance"]
},
"hippowdon": {
- "level": 80,
+ "level": 81,
"moves": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"],
"doublesLevel": 88,
"doublesMoves": ["highhorsepower", "slackoff", "stealthrock", "whirlwind", "yawn"]
},
"drapion": {
- "level": 82,
+ "level": 81,
"moves": ["aquatail", "earthquake", "knockoff", "poisonjab", "swordsdance", "taunt", "toxicspikes"],
"doublesLevel": 88,
"doublesMoves": ["knockoff", "poisonjab", "protect", "swordsdance", "taunt"]
},
"toxicroak": {
- "level": 84,
+ "level": 85,
"moves": ["drainpunch", "gunkshot", "icepunch", "knockoff", "substitute", "suckerpunch", "swordsdance"],
"doublesLevel": 86,
"doublesMoves": ["drainpunch", "fakeout", "gunkshot", "protect", "suckerpunch", "swordsdance", "taunt"]
},
"abomasnow": {
- "level": 82,
+ "level": 83,
"moves": ["auroraveil", "blizzard", "earthquake", "iceshard", "woodhammer"],
"doublesLevel": 88,
"doublesMoves": ["auroraveil", "blizzard", "iceshard", "protect", "woodhammer"]
@@ -1071,7 +1071,7 @@
"doublesMoves": ["fakeout", "iceshard", "knockoff", "lowkick", "tripleaxel"]
},
"magnezone": {
- "level": 84,
+ "level": 83,
"moves": ["bodypress", "flashcannon", "mirrorcoat", "thunderbolt", "voltswitch"],
"doublesLevel": 88,
"doublesMoves": ["bodypress", "electroweb", "flashcannon", "protect", "thunderbolt", "voltswitch"]
@@ -1083,7 +1083,7 @@
"doublesMoves": ["bodyslam", "explosion", "helpinghand", "icywind", "knockoff"]
},
"rhyperior": {
- "level": 82,
+ "level": 80,
"moves": ["earthquake", "firepunch", "megahorn", "rockpolish", "stoneedge"],
"doublesLevel": 84,
"doublesMoves": ["highhorsepower", "icepunch", "megahorn", "protect", "rockslide", "stoneedge"]
@@ -1095,13 +1095,13 @@
"doublesMoves": ["focusblast", "knockoff", "powerwhip", "ragepowder", "sleeppowder"]
},
"electivire": {
- "level": 82,
+ "level": 81,
"moves": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"],
"doublesLevel": 88,
"doublesMoves": ["crosschop", "flamethrower", "icepunch", "stompingtantrum", "wildcharge"]
},
"magmortar": {
- "level": 86,
+ "level": 87,
"moves": ["earthquake", "fireblast", "focusblast", "psychic", "taunt", "thunderbolt"],
"doublesLevel": 88,
"doublesMoves": ["fireblast", "focusblast", "heatwave", "protect", "thunderbolt"]
@@ -1113,13 +1113,13 @@
"doublesMoves": ["airslash", "dazzlinggleam", "followme", "helpinghand", "protect", "tailwind"]
},
"leafeon": {
- "level": 86,
- "moves": ["doubleedge", "knockoff", "leafblade", "swordsdance", "synthesis", "xscissor"],
+ "level": 87,
+ "moves": ["doubleedge", "knockoff", "leafblade", "swordsdance", "synthesis"],
"doublesLevel": 86,
"doublesMoves": ["doubleedge", "knockoff", "leafblade", "protect", "swordsdance"]
},
"glaceon": {
- "level": 88,
+ "level": 90,
"moves": ["freezedry", "protect", "toxic", "wish"],
"doublesLevel": 88,
"doublesMoves": ["blizzard", "freezedry", "helpinghand", "protect", "shadowball", "wish"]
@@ -1144,7 +1144,7 @@
"doublesMoves": ["closecombat", "feint", "knockoff", "protect", "swordsdance", "tripleaxel", "zenheadbutt"]
},
"dusknoir": {
- "level": 86,
+ "level": 88,
"moves": ["earthquake", "icepunch", "painsplit", "poltergeist", "shadowsneak", "trick", "willowisp"],
"doublesLevel": 86,
"doublesMoves": ["earthquake", "haze", "icepunch", "poltergeist", "shadowsneak", "trickroom", "willowisp"]
@@ -1156,7 +1156,7 @@
"doublesMoves": ["destinybond", "icebeam", "icywind", "protect", "shadowball", "willowisp"]
},
"rotom": {
- "level": 84,
+ "level": 85,
"moves": ["nastyplot", "shadowball", "thunderbolt", "voltswitch", "willowisp"],
"doublesLevel": 88,
"doublesMoves": ["electroweb", "protect", "shadowball", "thunderbolt", "voltswitch", "willowisp"]
@@ -1174,7 +1174,7 @@
"doublesMoves": ["hydropump", "protect", "thunderbolt", "thunderwave", "voltswitch", "willowisp"]
},
"rotomfrost": {
- "level": 84,
+ "level": 82,
"moves": ["blizzard", "nastyplot", "thunderbolt", "voltswitch", "willowisp"],
"doublesLevel": 86,
"doublesMoves": ["blizzard", "nastyplot", "protect", "thunderbolt", "willowisp"]
@@ -1186,7 +1186,7 @@
"doublesMoves": ["airslash", "nastyplot", "protect", "thunderbolt"]
},
"rotommow": {
- "level": 86,
+ "level": 84,
"moves": ["leafstorm", "nastyplot", "thunderbolt", "trick", "voltswitch", "willowisp"],
"doublesLevel": 88,
"doublesMoves": ["electroweb", "leafstorm", "protect", "thunderbolt", "voltswitch", "willowisp"]
@@ -1195,7 +1195,7 @@
"level": 82,
"moves": ["healbell", "knockoff", "psychic", "stealthrock", "uturn", "yawn"],
"doublesLevel": 86,
- "doublesMoves": ["helpinghand", "knockoff", "psychic", "stealthrock", "thunderwave", "u-turn", "yawn"]
+ "doublesMoves": ["helpinghand", "knockoff", "psychic", "stealthrock", "thunderwave", "uturn", "yawn"]
},
"mesprit": {
"level": 84,
@@ -1204,19 +1204,19 @@
"doublesMoves": ["dazzlinggleam", "knockoff", "nastyplot", "psychic", "thunderbolt", "thunderwave"]
},
"azelf": {
- "level": 82,
+ "level": 81,
"moves": ["dazzlinggleam", "fireblast", "nastyplot", "psychic", "psyshock", "stealthrock", "taunt", "uturn"],
"doublesLevel": 84,
"doublesMoves": ["energyball", "fireblast", "nastyplot", "psychic", "shadowball", "uturn"]
},
"dialga": {
- "level": 74,
+ "level": 73,
"moves": ["dracometeor", "fireblast", "flashcannon", "stealthrock", "thunderbolt", "toxic"],
"doublesLevel": 74,
"doublesMoves": ["dracometeor", "earthpower", "fireblast", "flashcannon", "protect", "thunderbolt", "thunderwave"]
},
"palkia": {
- "level": 74,
+ "level": 73,
"moves": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"],
"doublesLevel": 74,
"doublesMoves": ["fireblast", "hydropump", "protect", "spacialrend", "thunderbolt", "thunderwave"]
@@ -1234,7 +1234,7 @@
"doublesMoves": ["bodyslam", "knockoff", "protect", "thunderwave"]
},
"giratinaorigin": {
- "level": 74,
+ "level": 72,
"moves": ["dualwingbeat", "honeclaws", "outrage", "poltergeist", "shadowsneak"],
"doublesLevel": 74,
"doublesMoves": ["dracometeor", "protect", "shadowball", "shadowsneak", "tailwind", "willowisp"],
@@ -1253,25 +1253,25 @@
"doublesMoves": ["helpinghand", "icywind", "moonblast", "moonlight", "psychic", "thunderwave"]
},
"victini": {
- "level": 78,
+ "level": 77,
"moves": ["blueflare", "boltstrike", "energyball", "glaciate", "uturn", "vcreate", "zenheadbutt"],
"doublesLevel": 81,
"doublesMoves": ["boltstrike", "glaciate", "protect", "uturn", "vcreate", "zenheadbutt"]
},
"stoutland": {
- "level": 86,
+ "level": 87,
"moves": ["crunch", "facade", "playrough", "superpower", "wildcharge"],
"doublesLevel": 90,
"doublesMoves": ["facade", "helpinghand", "superpower", "thunderwave"]
},
"liepard": {
- "level": 86,
+ "level": 90,
"moves": ["copycat", "encore", "knockoff", "playrough", "thunderwave", "uturn"],
"doublesLevel": 88,
"doublesMoves": ["copycat", "encore", "fakeout", "foulplay", "snarl", "taunt", "thunderwave"]
},
"musharna": {
- "level": 86,
+ "level": 87,
"moves": ["calmmind", "moonblast", "moonlight", "psychic", "thunderwave"],
"doublesLevel": 88,
"doublesMoves": ["helpinghand", "hypnosis", "moonblast", "psychic", "trickroom"]
@@ -1283,59 +1283,59 @@
"doublesMoves": ["bravebird", "nightslash", "quickattack", "tailwind", "uturn"]
},
"gigalith": {
- "level": 82,
+ "level": 83,
"moves": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower"],
"doublesLevel": 88,
"doublesMoves": ["bodypress", "explosion", "protect", "rockslide", "stealthrock", "stompingtantrum", "stoneedge", "wideguard"]
},
"swoobat": {
- "level": 86,
+ "level": 89,
"moves": ["airslash", "calmmind", "heatwave", "roost", "storedpower"],
"doublesLevel": 86,
"doublesMoves": ["airslash", "calmmind", "heatwave", "psychic"]
},
"excadrill": {
- "level": 78,
+ "level": 77,
"moves": ["earthquake", "ironhead", "rapidspin", "rockslide", "swordsdance"],
"doublesLevel": 80,
"doublesMoves": ["highhorsepower", "ironhead", "protect", "rapidspin", "rockslide", "swordsdance"]
},
"audino": {
- "level": 91,
+ "level": 92,
"moves": ["healbell", "knockoff", "protect", "toxic", "wish"],
"doublesLevel": 90,
"doublesMoves": ["bodyslam", "healpulse", "helpinghand", "knockoff", "protect", "thunderwave"]
},
"gurdurr": {
- "level": 83,
+ "level": 84,
"moves": ["bulkup", "defog", "drainpunch", "knockoff", "machpunch"]
},
"conkeldurr": {
- "level": 80,
+ "level": 78,
"moves": ["closecombat", "drainpunch", "facade", "knockoff", "machpunch"],
"doublesLevel": 84,
"doublesMoves": ["closecombat", "drainpunch", "icepunch", "knockoff", "machpunch", "protect"]
},
"seismitoad": {
- "level": 84,
+ "level": 83,
"moves": ["earthquake", "liquidation", "raindance", "sludgebomb", "stealthrock"],
"doublesLevel": 86,
"doublesMoves": ["earthpower", "knockoff", "muddywater", "powerwhip", "protect", "raindance"]
},
"throh": {
- "level": 86,
+ "level": 85,
"moves": ["bulkup", "circlethrow", "icepunch", "knockoff", "rest", "sleeptalk", "stormthrow"],
"doublesLevel": 86,
"doublesMoves": ["facade", "knockoff", "protect", "stormthrow", "wideguard"]
},
"sawk": {
- "level": 86,
+ "level": 85,
"moves": ["bulkup", "closecombat", "knockoff", "poisonjab", "stoneedge"],
"doublesLevel": 86,
"doublesMoves": ["closecombat", "helpinghand", "knockoff", "poisonjab", "protect", "rockslide"]
},
"scolipede": {
- "level": 80,
+ "level": 79,
"moves": ["earthquake", "megahorn", "poisonjab", "protect", "spikes", "swordsdance", "toxicspikes"],
"doublesLevel": 84,
"doublesMoves": ["megahorn", "poisonjab", "protect", "rockslide", "superpower", "swordsdance"]
@@ -1359,12 +1359,6 @@
"doublesLevel": 86,
"doublesMoves": ["flipturn", "liquidation", "muddywater", "protect", "superpower"]
},
- "basculinbluestriped": {
- "level": 86,
- "moves": ["aquajet", "crunch", "flipturn", "liquidation", "psychicfangs", "superpower"],
- "doublesLevel": 86,
- "doublesMoves": ["flipturn", "liquidation", "muddywater", "protect", "superpower"]
- },
"krookodile": {
"level": 78,
"moves": ["closecombat", "earthquake", "knockoff", "stealthrock", "stoneedge"],
@@ -1372,30 +1366,30 @@
"doublesMoves": ["closecombat", "highhorsepower", "knockoff", "protect", "rockslide", "taunt"]
},
"darmanitan": {
- "level": 80,
+ "level": 79,
"moves": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"],
"doublesLevel": 82,
"doublesMoves": ["earthquake", "flareblitz", "protect", "rockslide", "superpower", "uturn"]
},
"darmanitangalar": {
- "level": 78,
+ "level": 77,
"moves": ["earthquake", "flareblitz", "iciclecrash", "superpower", "uturn"],
"doublesLevel": 80,
"doublesMoves": ["flareblitz", "iciclecrash", "rockslide", "superpower", "uturn"]
},
"darmanitangalarzen": {
- "level": 78,
+ "level": 77,
"moves": ["bellydrum", "earthquake", "firepunch", "iciclecrash", "substitute"]
},
"maractus": {
- "level": 95,
+ "level": 96,
"moves": ["energyball", "knockoff", "leechseed", "spikes", "spikyshield", "toxic"],
"doublesLevel": 96,
"doublesMoves": ["acupressure", "helpinghand", "leafstorm", "leechseed", "spikyshield"]
},
"crustle": {
"level": 82,
- "moves": ["earthquake", "shellsmash", "spikes", "stealthrock", "stoneedge", "xscissor"],
+ "moves": ["earthquake", "shellsmash", "stoneedge", "xscissor"],
"doublesLevel": 84,
"doublesMoves": ["knockoff", "protect", "rockslide", "shellsmash", "xscissor"]
},
@@ -1412,13 +1406,13 @@
"doublesMoves": ["airslash", "heatwave", "protect", "psychic", "tailwind"]
},
"cofagrigus": {
- "level": 86,
+ "level": 87,
"moves": ["bodypress", "memento", "shadowball", "toxicspikes", "willowisp"],
"doublesLevel": 88,
"doublesMoves": ["bodypress", "irondefense", "painsplit", "shadowball", "trickroom", "willowisp"]
},
"carracosta": {
- "level": 84,
+ "level": 83,
"moves": ["aquajet", "hydropump", "shellsmash", "stoneedge", "superpower"],
"doublesLevel": 88,
"doublesMoves": ["aquajet", "liquidation", "shellsmash", "stoneedge", "superpower"]
@@ -1436,7 +1430,9 @@
"doublesMoves": ["drainpunch", "explosion", "gunkshot", "protect", "toxicspikes"]
},
"zoroark": {
+ "level": 83,
"moves": ["darkpulse", "flamethrower", "nastyplot", "sludgebomb", "trick"],
+ "doublesLevel": 84,
"doublesMoves": ["darkpulse", "flamethrower", "focusblast", "nastyplot", "protect", "sludgebomb"]
},
"cinccino": {
@@ -1446,8 +1442,8 @@
"doublesMoves": ["bulletseed", "knockoff", "protect", "rockblast", "tailslap", "tripleaxel", "uturn"]
},
"gothitelle": {
- "level": 86,
- "moves": ["nastyplot", "psychic", "shadowball", "thunderbolt", "trick"],
+ "level": 87,
+ "moves": ["darkpulse", "nastyplot", "psychic", "thunderbolt", "trick"],
"doublesLevel": 83,
"doublesMoves": ["fakeout", "healpulse", "helpinghand", "hypnosis", "protect", "psychic", "trickroom"]
},
@@ -1464,7 +1460,7 @@
"doublesMoves": ["auroraveil", "blizzard", "explosion", "freezedry", "protect"]
},
"emolga": {
- "level": 88,
+ "level": 90,
"moves": ["airslash", "defog", "energyball", "roost", "thunderbolt", "toxic", "uturn"],
"doublesLevel": 88,
"doublesMoves": ["acrobatics", "helpinghand", "nuzzle", "tailwind", "taunt", "voltswitch"]
@@ -1476,38 +1472,38 @@
"doublesMoves": ["closecombat", "drillrun", "ironhead", "knockoff", "megahorn", "protect", "swordsdance"]
},
"amoonguss": {
- "level": 84,
+ "level": 83,
"moves": ["gigadrain", "sludgebomb", "spore", "synthesis", "toxic"],
"doublesLevel": 81,
"doublesMoves": ["clearsmog", "pollenpuff", "protect", "ragepowder", "spore"]
},
"jellicent": {
- "level": 84,
+ "level": 86,
"moves": ["icebeam", "recover", "scald", "shadowball", "toxic", "willowisp"],
"doublesLevel": 84,
"doublesMoves": ["scald", "shadowball", "strengthsap", "trickroom", "willowisp"]
},
"galvantula": {
- "level": 82,
+ "level": 81,
"moves": ["bugbuzz", "gigadrain", "stickyweb", "thunder", "voltswitch"],
"doublesLevel": 85,
"doublesMoves": ["bugbuzz", "electroweb", "energyball", "protect", "stickyweb", "thunder"]
},
"ferrothorn": {
- "level": 78,
+ "level": 77,
"moves": ["gyroball", "knockoff", "leechseed", "powerwhip", "protect", "spikes", "stealthrock"],
"doublesLevel": 83,
"doublesMoves": ["bodypress", "gyroball", "leechseed", "powerwhip", "protect", "toxic"]
},
"klinklang": {
- "level": 84,
+ "level": 83,
"moves": ["geargrind", "shiftgear", "substitute", "wildcharge"],
"doublesLevel": 88,
"doublesMoves": ["geargrind", "protect", "shiftgear", "wildcharge"]
},
"beheeyem": {
- "level": 86,
- "moves": ["psychic", "shadowball", "thunderbolt", "trick", "trickroom"],
+ "level": 89,
+ "moves": ["darkpulse", "psychic", "thunderbolt", "trick", "trickroom"],
"doublesLevel": 88,
"doublesMoves": ["protect", "psychic", "shadowball", "thunderbolt", "trickroom"]
},
@@ -1536,14 +1532,14 @@
"doublesMoves": ["freezedry", "haze", "icebeam", "icywind", "rapidspin", "recover", "toxic"]
},
"accelgor": {
- "level": 86,
- "moves": ["bugbuzz", "energyball", "focusblast", "sludgebomb", "spikes", "toxic", "yawn"],
+ "level": 90,
+ "moves": ["bugbuzz", "energyball", "focusblast", "sludgebomb", "spikes", "toxicspikes", "yawn"],
"doublesLevel": 88,
"doublesMoves": ["acidspray", "bugbuzz", "encore", "energyball", "focusblast"],
"noDynamaxMoves": ["bugbuzz", "encore", "energyball", "focusblast", "spikes", "toxic"]
},
"stunfisk": {
- "level": 84,
+ "level": 83,
"moves": ["discharge", "earthpower", "foulplay", "sludgebomb", "stealthrock"],
"doublesLevel": 88,
"doublesMoves": ["earthpower", "electroweb", "foulplay", "stealthrock", "thunderbolt"]
@@ -1555,13 +1551,13 @@
"doublesMoves": ["earthquake", "stealthrock", "stoneedge", "thunderwave", "yawn"]
},
"mienshao": {
- "level": 82,
+ "level": 81,
"moves": ["closecombat", "fakeout", "knockoff", "poisonjab", "stoneedge", "swordsdance", "uturn"],
"doublesLevel": 84,
"doublesMoves": ["closecombat", "fakeout", "knockoff", "poisonjab", "protect", "uturn"]
},
"druddigon": {
- "level": 84,
+ "level": 85,
"moves": ["earthquake", "glare", "gunkshot", "outrage", "stealthrock", "suckerpunch", "superpower"],
"doublesLevel": 87,
"doublesMoves": ["dragonclaw", "firepunch", "glare", "gunkshot", "protect", "suckerpunch"]
@@ -1585,19 +1581,19 @@
"doublesMoves": ["closecombat", "headcharge", "lashout", "protect", "wildcharge"]
},
"braviary": {
- "level": 82,
+ "level": 78,
"moves": ["bravebird", "bulkup", "closecombat", "roost"],
"doublesLevel": 82,
"doublesMoves": ["bravebird", "bulkup", "closecombat", "roost", "tailwind"]
},
"mandibuzz": {
"level": 82,
- "moves": ["bravebird", "defog", "foulplay", "roost", "toxic"],
+ "moves": ["bravebird", "defog", "foulplay", "roost", "toxic", "uturn"],
"doublesLevel": 88,
"doublesMoves": ["foulplay", "roost", "snarl", "tailwind", "taunt"]
},
"heatmor": {
- "level": 90,
+ "level": 92,
"moves": ["firelash", "gigadrain", "knockoff", "substitute", "suckerpunch", "superpower"],
"doublesLevel": 88,
"doublesMoves": ["firelash", "gigadrain", "incinerate", "protect", "suckerpunch", "superpower"]
@@ -1609,13 +1605,13 @@
"doublesMoves": ["firstimpression", "ironhead", "protect", "stompingtantrum", "superpower", "xscissor"]
},
"hydreigon": {
- "level": 80,
+ "level": 78,
"moves": ["darkpulse", "dracometeor", "fireblast", "flashcannon", "nastyplot", "roost", "uturn"],
"doublesLevel": 84,
"doublesMoves": ["darkpulse", "dracometeor", "dragonpulse", "earthpower", "fireblast", "nastyplot", "protect", "tailwind"]
},
"volcarona": {
- "level": 76,
+ "level": 75,
"moves": ["bugbuzz", "fireblast", "gigadrain", "quiverdance", "roost"],
"doublesLevel": 80,
"doublesMoves": ["bugbuzz", "gigadrain", "heatwave", "protect", "quiverdance"]
@@ -1627,20 +1623,20 @@
"doublesMoves": ["closecombat", "ironhead", "protect", "stoneedge", "swordsdance", "thunderwave"]
},
"terrakion": {
- "level": 78,
+ "level": 79,
"moves": ["closecombat", "earthquake", "quickattack", "stoneedge", "swordsdance"],
"doublesLevel": 80,
"doublesMoves": ["closecombat", "protect", "rockslide", "swordsdance"]
},
"virizion": {
- "level": 82,
+ "level": 81,
"moves": ["closecombat", "leafblade", "stoneedge", "swordsdance"],
"doublesLevel": 86,
"doublesMoves": ["closecombat", "coaching", "leafblade", "protect", "stoneedge", "swordsdance"],
"noDynamaxMoves": ["closecombat", "leafblade", "stoneedge", "swordsdance"]
},
"tornadus": {
- "level": 80,
+ "level": 79,
"moves": ["defog", "grassknot", "heatwave", "hurricane", "nastyplot"],
"doublesLevel": 80,
"doublesMoves": ["heatwave", "hurricane", "nastyplot", "superpower", "tailwind", "taunt"]
@@ -1652,19 +1648,19 @@
"doublesMoves": ["heatwave", "hurricane", "knockoff", "nastyplot", "protect", "uturn"]
},
"thundurus": {
- "level": 80,
+ "level": 81,
"moves": ["grassknot", "knockoff", "nastyplot", "sludgewave", "superpower", "thunderbolt", "thunderwave"],
"doublesLevel": 82,
"doublesMoves": ["grassknot", "knockoff", "nastyplot", "protect", "sludgebomb", "thunderbolt", "thunderwave"]
},
"thundurustherian": {
- "level": 80,
+ "level": 79,
"moves": ["focusblast", "grassknot", "nastyplot", "psychic", "thunderbolt", "voltswitch"],
"doublesLevel": 82,
"doublesMoves": ["agility", "focusblast", "grassknot", "nastyplot", "sludgebomb", "thunderbolt", "voltswitch"]
},
"reshiram": {
- "level": 74,
+ "level": 73,
"moves": ["blueflare", "defog", "dracometeor", "earthpower", "roost", "stoneedge", "toxic"],
"doublesLevel": 72,
"doublesMoves": ["blueflare", "dracometeor", "earthpower", "heatwave", "roost", "tailwind"]
@@ -1676,50 +1672,50 @@
"doublesMoves": ["boltstrike", "dragonclaw", "dragondance", "roost"]
},
"landorus": {
- "level": 76,
+ "level": 74,
"moves": ["earthpower", "focusblast", "knockoff", "rockpolish", "rockslide", "sludgewave", "stealthrock"],
"doublesLevel": 80,
"doublesMoves": ["calmmind", "earthpower", "focusblast", "protect", "psychic", "sludgebomb"]
},
"landorustherian": {
- "level": 72,
+ "level": 73,
"moves": ["earthquake", "fly", "stealthrock", "stoneedge", "swordsdance", "uturn"],
"doublesLevel": 76,
"doublesMoves": ["earthquake", "fly", "knockoff", "stoneedge", "swordsdance", "uturn"],
"noDynamaxMoves": ["earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance", "uturn"]
},
"kyurem": {
- "level": 80,
+ "level": 79,
"moves": ["dracometeor", "earthpower", "freezedry", "icebeam", "roost", "substitute"],
"doublesLevel": 78,
"doublesMoves": ["dracometeor", "earthpower", "freezedry", "glaciate", "protect", "roost"]
},
"kyuremblack": {
- "level": 73,
+ "level": 70,
"moves": ["dragondance", "fusionbolt", "iciclespear", "outrage"],
"doublesLevel": 75,
"doublesMoves": ["dragonclaw", "dragondance", "fusionbolt", "iciclespear", "protect"]
},
"kyuremwhite": {
- "level": 74,
+ "level": 73,
"moves": ["dracometeor", "earthpower", "freezedry", "fusionflare", "icebeam", "roost"],
"doublesLevel": 72,
"doublesMoves": ["dracometeor", "dragonpulse", "earthpower", "freezedry", "fusionflare", "icebeam", "protect", "roost"]
},
"keldeoresolute": {
- "level": 79,
+ "level": 77,
"moves": ["airslash", "calmmind", "hydropump", "icywind", "scald", "secretsword", "substitute"],
"doublesLevel": 82,
"doublesMoves": ["airslash", "calmmind", "icywind", "muddywater", "protect", "secretsword"]
},
"genesect": {
- "level": 74,
+ "level": 72,
"moves": ["blazekick", "extremespeed", "ironhead", "leechlife", "shiftgear", "thunderbolt", "uturn"],
"doublesLevel": 78,
"doublesMoves": ["blazekick", "ironhead", "leechlife", "protect", "shiftgear", "thunderbolt", "uturn"]
},
"genesectdouse": {
- "level": 74,
+ "level": 72,
"moves": ["bugbuzz", "extremespeed", "flamethrower", "icebeam", "ironhead", "technoblast", "thunderbolt", "uturn"]
},
"diggersby": {
@@ -1732,7 +1728,7 @@
"level": 81,
"moves": ["bravebird", "defog", "flareblitz", "roost", "swordsdance", "uturn"],
"doublesLevel": 86,
- "doublesMoves": ["bravebird", "defog", "incinerate", "overheat", "tailwind", "u-turn", "willowisp"]
+ "doublesMoves": ["bravebird", "defog", "incinerate", "overheat", "tailwind", "uturn", "willowisp"]
},
"pangoro": {
"level": 84,
@@ -1748,12 +1744,12 @@
},
"meowsticf": {
"level": 86,
- "moves": ["energyball", "nastyplot", "psychic", "shadowball", "thunderbolt"],
+ "moves": ["darkpulse", "energyball", "nastyplot", "psychic", "thunderbolt"],
"doublesLevel": 88,
"doublesMoves": ["fakeout", "nastyplot", "psychic", "shadowball", "thunderbolt"]
},
"doublade": {
- "level": 82,
+ "level": 81,
"moves": ["closecombat", "ironhead", "shadowclaw", "shadowsneak", "swordsdance"]
},
"aegislash": {
@@ -1769,13 +1765,13 @@
"doublesMoves": ["closecombat", "ironhead", "kingsshield", "shadowclaw", "shadowsneak", "swordsdance"]
},
"aromatisse": {
- "level": 88,
+ "level": 89,
"moves": ["calmmind", "moonblast", "protect", "toxic", "wish"],
"doublesLevel": 86,
"doublesMoves": ["healpulse", "moonblast", "protect", "trickroom", "wish"]
},
"slurpuff": {
- "level": 80,
+ "level": 79,
"moves": ["bellydrum", "drainpunch", "facade", "playrough"],
"doublesLevel": 86,
"doublesMoves": ["faketears", "flamethrower", "helpinghand", "playrough", "stickyweb"]
@@ -1793,13 +1789,13 @@
"doublesMoves": ["liquidation", "protect", "rockslide", "shellsmash", "superpower"]
},
"dragalge": {
- "level": 86,
+ "level": 87,
"moves": ["dracometeor", "dragonpulse", "flipturn", "focusblast", "sludgewave", "toxicspikes"],
"doublesLevel": 86,
"doublesMoves": ["dracometeor", "dragonpulse", "focusblast", "protect", "sludgebomb"]
},
"clawitzer": {
- "level": 84,
+ "level": 85,
"moves": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn", "waterpulse"],
"doublesLevel": 84,
"doublesMoves": ["aurasphere", "darkpulse", "icebeam", "muddywater", "uturn"]
@@ -1811,7 +1807,7 @@
"doublesMoves": ["glare", "grassknot", "hypervoice", "protect", "thunderbolt", "voltswitch"]
},
"tyrantrum": {
- "level": 82,
+ "level": 83,
"moves": ["closecombat", "dragondance", "earthquake", "headsmash", "outrage"],
"doublesLevel": 86,
"doublesMoves": ["closecombat", "dragonclaw", "dragondance", "headsmash", "highhorsepower"]
@@ -1823,31 +1819,31 @@
"doublesMoves": ["auroraveil", "blizzard", "earthpower", "freezedry", "protect", "thunderwave"]
},
"sylveon": {
- "level": 84,
+ "level": 83,
"moves": ["calmmind", "hypervoice", "mysticalfire", "protect", "psyshock", "shadowball", "wish"],
"doublesLevel": 80,
"doublesMoves": ["calmmind", "hypervoice", "mysticalfire", "protect", "psyshock"]
},
"hawlucha": {
- "level": 80,
+ "level": 79,
"moves": ["bravebird", "closecombat", "roost", "stoneedge", "swordsdance", "throatchop"],
"doublesLevel": 80,
"doublesMoves": ["bravebird", "closecombat", "protect", "swordsdance"]
},
"dedenne": {
- "level": 87,
+ "level": 90,
"moves": ["protect", "recycle", "thunderbolt", "toxic"],
"doublesLevel": 88,
"doublesMoves": ["eerieimpulse", "helpinghand", "nuzzle", "recycle", "superfang", "thunderbolt"]
},
"carbink": {
- "level": 86,
+ "level": 87,
"moves": ["bodypress", "lightscreen", "moonblast", "reflect", "stealthrock"],
"doublesLevel": 90,
"doublesMoves": ["bodypress", "irondefense", "moonblast", "stealthrock"]
},
"goodra": {
- "level": 82,
+ "level": 83,
"moves": ["dracometeor", "earthquake", "fireblast", "powerwhip", "sludgebomb", "thunderbolt"],
"doublesLevel": 85,
"doublesMoves": ["breakingswipe", "dracometeor", "fireblast", "muddywater", "powerwhip", "protect", "sludgebomb", "thunderbolt"]
@@ -1859,19 +1855,19 @@
"doublesMoves": ["dazzlinggleam", "foulplay", "spikes", "thunderwave"]
},
"trevenant": {
- "level": 86,
+ "level": 87,
"moves": ["earthquake", "hornleech", "poltergeist", "rockslide", "trickroom", "woodhammer"],
"doublesLevel": 88,
"doublesMoves": ["poltergeist", "protect", "trickroom", "willowisp", "woodhammer"]
},
"gourgeist": {
- "level": 84,
+ "level": 85,
"moves": ["poltergeist", "powerwhip", "shadowsneak", "synthesis", "willowisp"],
"doublesLevel": 88,
"doublesMoves": ["leechseed", "poltergeist", "powerwhip", "substitute", "willowisp"]
},
"gourgeistsmall": {
- "level": 84,
+ "level": 82,
"moves": ["leechseed", "poltergeist", "powerwhip", "substitute", "willowisp"],
"doublesLevel": 88,
"doublesMoves": ["leechseed", "poltergeist", "powerwhip", "substitute", "willowisp"]
@@ -1895,14 +1891,14 @@
"doublesMoves": ["avalanche", "bodypress", "curse", "highhorsepower", "protect", "recover"]
},
"noivern": {
- "level": 82,
+ "level": 83,
"moves": ["defog", "dracometeor", "flamethrower", "hurricane", "roost", "switcheroo"],
"doublesLevel": 84,
"doublesMoves": ["boomburst", "dracometeor", "flamethrower", "hurricane", "protect", "tailwind"]
},
"xerneas": {
- "level": 67,
- "moves": ["focusblast", "geomancy", "moonblast", "psyshock", "thunderbolt"],
+ "level": 66,
+ "moves": ["focusblast", "geomancy", "moonblast", "psyshock"],
"doublesLevel": 70,
"doublesMoves": ["dazzlinggleam", "focusblast", "geomancy", "moonblast", "thunderbolt"]
},
@@ -1913,13 +1909,13 @@
"doublesMoves": ["darkpulse", "heatwave", "knockoff", "oblivionwing", "roost", "suckerpunch", "tailwind"]
},
"zygarde": {
- "level": 70,
+ "level": 69,
"moves": ["dragondance", "outrage", "substitute", "thousandarrows"],
"doublesLevel": 72,
"doublesMoves": ["coil", "dragondance", "extremespeed", "glare", "irontail", "thousandarrows"]
},
"zygarde10": {
- "level": 82,
+ "level": 81,
"moves": ["coil", "extremespeed", "irontail", "outrage", "thousandarrows"],
"doublesLevel": 77,
"doublesMoves": ["dragondance", "extremespeed", "irontail", "protect", "stoneedge", "thousandarrows"]
@@ -1931,7 +1927,7 @@
"doublesMoves": ["bodypress", "diamondstorm", "earthpower", "moonblast"]
},
"volcanion": {
- "level": 80,
+ "level": 78,
"moves": ["defog", "earthpower", "flamethrower", "sludgebomb", "steameruption"],
"doublesLevel": 80,
"doublesMoves": ["earthpower", "heatwave", "protect", "sludgebomb", "steameruption"]
@@ -1950,8 +1946,8 @@
"doublesMoves": ["fakeout", "flareblitz", "knockoff", "partingshot", "uturn"]
},
"primarina": {
- "level": 82,
- "moves": ["energyball", "hydropump", "moonblast", "psychic", "sparklingaria"],
+ "level": 80,
+ "moves": ["energyball", "hydropump", "moonblast", "psychic", "scald"],
"doublesLevel": 82,
"doublesMoves": ["dazzlinggleam", "flipturn", "hypervoice", "moonblast", "protect", "psychic"]
},
@@ -1962,43 +1958,43 @@
"doublesMoves": ["bugbuzz", "energyball", "protect", "stickyweb", "thunderbolt", "voltswitch"]
},
"ribombee": {
- "level": 82,
+ "level": 80,
"moves": ["moonblast", "psychic", "stickyweb", "stunspore", "uturn"],
"doublesLevel": 84,
"doublesMoves": ["helpinghand", "moonblast", "pollenpuff", "speedswap", "stickyweb", "tailwind"]
},
"lycanroc": {
- "level": 80,
+ "level": 79,
"moves": ["accelerock", "closecombat", "psychicfangs", "stoneedge", "swordsdance"],
"doublesLevel": 84,
"doublesMoves": ["accelerock", "closecombat", "drillrun", "protect", "rockslide", "swordsdance"]
},
"lycanrocmidnight": {
- "level": 82,
+ "level": 84,
"moves": ["closecombat", "irontail", "stealthrock", "stoneedge", "suckerpunch", "swordsdance"],
"doublesLevel": 88,
"doublesMoves": ["closecombat", "irontail", "protect", "stoneedge", "suckerpunch", "swordsdance"]
},
"lycanrocdusk": {
- "level": 80,
+ "level": 79,
"moves": ["accelerock", "closecombat", "psychicfangs", "stoneedge", "swordsdance"],
"doublesLevel": 81,
"doublesMoves": ["accelerock", "closecombat", "drillrun", "protect", "rockslide", "swordsdance"]
},
- "wishiwashischool": {
- "level": 84,
+ "wishiwashi": {
+ "level": 86,
"moves": ["earthquake", "hydropump", "icebeam", "scald", "uturn"],
"doublesLevel": 88,
"doublesMoves": ["earthquake", "helpinghand", "hydropump", "icebeam", "muddywater", "protect"]
},
"toxapex": {
- "level": 82,
+ "level": 79,
"moves": ["banefulbunker", "haze", "recover", "scald", "toxic", "toxicspikes"],
"doublesLevel": 90,
"doublesMoves": ["banefulbunker", "haze", "recover", "scald", "toxic", "toxicspikes"]
},
"mudsdale": {
- "level": 82,
+ "level": 83,
"moves": ["bodypress", "earthquake", "heavyslam", "rockslide", "stealthrock"],
"doublesLevel": 86,
"doublesMoves": ["bodypress", "heavyslam", "highhorsepower", "protect", "rest", "rocktomb"]
@@ -2010,31 +2006,31 @@
"doublesMoves": ["leechlife", "liquidation", "lunge", "protect", "stickyweb", "wideguard"]
},
"lurantis": {
- "level": 86,
+ "level": 88,
"moves": ["defog", "knockoff", "leafstorm", "superpower", "synthesis"],
"doublesLevel": 88,
"doublesMoves": ["defog", "knockoff", "leafstorm", "protect", "superpower"]
},
"shiinotic": {
- "level": 86,
+ "level": 89,
"moves": ["energyball", "leechseed", "moonblast", "spore", "strengthsap"],
"doublesLevel": 88,
"doublesMoves": ["energyball", "moonblast", "protect", "spore", "strengthsap"]
},
"salazzle": {
- "level": 82,
+ "level": 81,
"moves": ["flamethrower", "protect", "substitute", "toxic"],
"doublesLevel": 88,
"doublesMoves": ["encore", "fakeout", "fireblast", "nastyplot", "protect", "sludgebomb"]
},
"bewear": {
- "level": 82,
+ "level": 83,
"moves": ["closecombat", "darkestlariat", "doubleedge", "icepunch", "swordsdance"],
"doublesLevel": 88,
"doublesMoves": ["closecombat", "darkestlariat", "doubleedge", "drainpunch", "icepunch", "protect", "wideguard"]
},
"tsareena": {
- "level": 84,
+ "level": 85,
"moves": ["highjumpkick", "knockoff", "powerwhip", "rapidspin", "synthesis", "tripleaxel", "uturn"],
"doublesLevel": 88,
"doublesMoves": ["highjumpkick", "knockoff", "playrough", "powerwhip", "rapidspin", "tripleaxel", "uturn"]
@@ -2046,7 +2042,7 @@
"doublesMoves": ["drainingkiss", "floralhealing", "gigadrain", "helpinghand", "protect"]
},
"oranguru": {
- "level": 86,
+ "level": 90,
"moves": ["focusblast", "nastyplot", "psychic", "thunderbolt", "trickroom"],
"doublesLevel": 88,
"doublesMoves": ["allyswitch", "focusblast", "instruct", "psychic", "trickroom"]
@@ -2058,19 +2054,19 @@
"doublesMoves": ["closecombat", "gunkshot", "knockoff", "rockslide", "uturn"]
},
"golisopod": {
- "level": 84,
+ "level": 85,
"moves": ["firstimpression", "knockoff", "leechlife", "liquidation", "spikes"],
"doublesLevel": 88,
"doublesMoves": ["aquajet", "firstimpression", "knockoff", "leechlife", "liquidation", "protect", "wideguard"]
},
"palossand": {
- "level": 86,
+ "level": 87,
"moves": ["earthpower", "scorchingsands", "shadowball", "shoreup", "stealthrock", "toxic"],
"doublesLevel": 88,
"doublesMoves": ["hypnosis", "protect", "scorchingsands", "shadowball", "shoreup", "stealthrock"]
},
"pyukumuku": {
- "level": 84,
+ "level": 85,
"moves": ["counter", "mirrorcoat", "recover", "toxic"],
"doublesLevel": 100,
"doublesMoves": ["helpinghand", "lightscreen", "memento", "reflect"]
@@ -2080,109 +2076,109 @@
"moves": ["crushclaw", "payback", "rest", "sleeptalk", "swordsdance"]
},
"silvally": {
- "level": 84,
+ "level": 83,
"moves": ["crunch", "explosion", "flamecharge", "flamethrower", "multiattack", "swordsdance", "uturn"],
"doublesLevel": 88,
"doublesMoves": ["crunch", "explosion", "flamethrower", "multiattack", "protect", "tailwind"]
},
"silvallybug": {
- "level": 84,
+ "level": 83,
"moves": ["flamethrower", "multiattack", "partingshot", "psychicfangs", "thunderbolt"],
"doublesLevel": 88,
"doublesMoves": ["flamethrower", "multiattack", "psychicfangs", "tailwind", "uturn"]
},
"silvallydark": {
- "level": 84,
+ "level": 83,
"moves": ["ironhead", "multiattack", "partingshot", "psychicfangs", "swordsdance"],
"doublesLevel": 86,
"doublesMoves": ["ironhead", "multiattack", "psychicfangs", "swordsdance", "tailwind"]
},
"silvallydragon": {
- "level": 84,
+ "level": 83,
"moves": ["flamecharge", "ironhead", "multiattack", "partingshot", "swordsdance"],
"doublesLevel": 88,
"doublesMoves": ["firefang", "ironhead", "multiattack", "swordsdance", "tailwind"]
},
"silvallyelectric": {
- "level": 84,
+ "level": 83,
"moves": ["flamethrower", "icebeam", "multiattack", "partingshot", "toxic"],
"doublesLevel": 88,
"doublesMoves": ["flamethrower", "grasspledge", "icebeam", "multiattack", "tailwind"]
},
"silvallyfairy": {
- "level": 84,
+ "level": 83,
"moves": ["flamecharge", "multiattack", "psychicfangs", "swordsdance"],
"doublesLevel": 88,
"doublesMoves": ["flamethrower", "multiattack", "partingshot", "tailwind"]
},
"silvallyfighting": {
- "level": 84,
+ "level": 83,
"moves": ["crunch", "ironhead", "multiattack", "swordsdance", "uturn"],
"doublesLevel": 88,
"doublesMoves": ["crunch", "multiattack", "rockslide", "swordsdance", "tailwind"]
},
"silvallyfire": {
- "level": 84,
+ "level": 83,
"moves": ["crunch", "ironhead", "multiattack", "swordsdance"],
"doublesLevel": 88,
"doublesMoves": ["heatwave", "icebeam", "multiattack", "tailwind", "thunderbolt"]
},
"silvallyflying": {
- "level": 84,
+ "level": 83,
"moves": ["flamecharge", "ironhead", "multiattack", "rockslide", "swordsdance"],
"doublesLevel": 86,
"doublesMoves": ["firefang", "ironhead", "multiattack", "swordsdance", "tailwind"]
},
"silvallyghost": {
- "level": 84,
+ "level": 83,
"moves": ["flamecharge", "multiattack", "partingshot", "swordsdance", "xscissor"],
"doublesLevel": 88,
"doublesMoves": ["multiattack", "swordsdance", "tailwind", "xscissor"]
},
"silvallygrass": {
- "level": 84,
+ "level": 83,
"moves": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot"],
"doublesLevel": 88,
"doublesMoves": ["flamethrower", "icebeam", "multiattack", "partingshot", "tailwind"]
},
"silvallyground": {
- "level": 84,
+ "level": 83,
"moves": ["defog", "flamethrower", "icebeam", "multiattack", "partingshot", "toxic"],
"doublesLevel": 89,
"doublesMoves": ["multiattack", "rockslide", "swordsdance", "tailwind"]
},
"silvallyice": {
- "level": 84,
+ "level": 83,
"moves": ["flamecharge", "multiattack", "psychicfangs", "swordsdance"],
"doublesLevel": 88,
"doublesMoves": ["flamethrower", "multiattack", "partingshot", "tailwind", "thunderbolt"]
},
"silvallypoison": {
- "level": 84,
- "moves": ["defog", "flamethrower", "grasspledge", "multiattack", "partingshot", "toxic"],
+ "level": 83,
+ "moves": ["defog", "flamethrower", "multiattack", "partingshot", "surf", "toxic"],
"doublesLevel": 88,
"doublesMoves": ["flamethrower", "grasspledge", "multiattack", "partingshot", "snarl", "tailwind"]
},
"silvallypsychic": {
- "level": 84,
+ "level": 83,
"moves": ["crunch", "multiattack", "swordsdance", "uturn"],
"doublesLevel": 88,
"doublesMoves": ["flamethrower", "multiattack", "partingshot", "tailwind", "xscissor"]
},
"silvallyrock": {
- "level": 84,
+ "level": 83,
"moves": ["flamecharge", "multiattack", "partingshot", "psychicfangs", "swordsdance"],
"doublesLevel": 88,
"doublesMoves": ["flamethrower", "multiattack", "partingshot", "psychicfangs", "tailwind"]
},
"silvallysteel": {
- "level": 84,
+ "level": 83,
"moves": ["defog", "flamethrower", "multiattack", "partingshot", "thunderbolt", "toxic"],
"doublesLevel": 87,
"doublesMoves": ["flamethrower", "multiattack", "partingshot", "tailwind", "thunderbolt"]
},
"silvallywater": {
- "level": 84,
+ "level": 83,
"moves": ["defog", "icebeam", "multiattack", "partingshot", "thunderbolt", "toxic"],
"doublesLevel": 88,
"doublesMoves": ["icebeam", "multiattack", "partingshot", "tailwind", "thunderbolt"]
@@ -2200,7 +2196,7 @@
"doublesMoves": ["encore", "fakeout", "ironhead", "nuzzle", "spikyshield", "zingzap"]
},
"mimikyu": {
- "level": 76,
+ "level": 75,
"moves": ["drainpunch", "playrough", "shadowclaw", "shadowsneak", "swordsdance"],
"doublesLevel": 84,
"doublesMoves": ["playrough", "shadowclaw", "shadowsneak", "swordsdance"]
@@ -2212,7 +2208,7 @@
"doublesMoves": ["dracometeor", "dragonpulse", "heatwave", "hypervoice"]
},
"dhelmise": {
- "level": 86,
+ "level": 87,
"moves": ["anchorshot", "earthquake", "poltergeist", "powerwhip", "rapidspin", "swordsdance"],
"doublesLevel": 88,
"doublesMoves": ["anchorshot", "knockoff", "powerwhip", "protect"]
@@ -2224,13 +2220,13 @@
"doublesMoves": ["bodypress", "dracometeor", "irondefense", "protect"]
},
"tapukoko": {
- "level": 78,
+ "level": 77,
"moves": ["calmmind", "dazzlinggleam", "grassknot", "substitute", "thunderbolt", "voltswitch"],
"doublesLevel": 80,
"doublesMoves": ["bravebird", "dazzlinggleam", "grassknot", "taunt", "thunderbolt", "uturn"]
},
"tapulele": {
- "level": 79,
+ "level": 78,
"moves": ["calmmind", "focusblast", "moonblast", "psychic", "psyshock", "shadowball"],
"doublesLevel": 80,
"doublesMoves": ["calmmind", "dazzlinggleam", "focusblast", "moonblast", "protect", "psyshock"]
@@ -2242,13 +2238,13 @@
"doublesMoves": ["closecombat", "hornleech", "protect", "stoneedge", "swordsdance", "woodhammer"]
},
"tapufini": {
- "level": 78,
+ "level": 77,
"moves": ["calmmind", "defog", "moonblast", "surf", "taunt"],
"doublesLevel": 80,
"doublesMoves": ["haze", "healpulse", "moonblast", "muddywater", "naturesmadness", "protect", "taunt"]
},
"solgaleo": {
- "level": 72,
+ "level": 71,
"moves": ["closecombat", "flamecharge", "flareblitz", "knockoff", "psychicfangs", "sunsteelstrike"],
"doublesLevel": 76,
"doublesMoves": ["closecombat", "flareblitz", "morningsun", "protect", "psychicfangs", "stoneedge", "sunsteelstrike"]
@@ -2260,20 +2256,20 @@
"doublesMoves": ["calmmind", "moonblast", "moongeistbeam", "protect", "psyshock", "roost"]
},
"nihilego": {
- "level": 79,
+ "level": 78,
"moves": ["grassknot", "powergem", "sludgewave", "stealthrock", "thunderbolt", "toxicspikes"],
"doublesLevel": 81,
"doublesMoves": ["grassknot", "meteorbeam", "protect", "sludgebomb", "thunderbolt"]
},
"buzzwole": {
- "level": 77,
- "moves": ["closecombat", "darkestlariat", "dualwingbeat", "ironhead", "leechlife", "stoneedge"],
+ "level": 75,
+ "moves": ["closecombat", "darkestlariat", "dualwingbeat", "earthquake", "leechlife", "stoneedge"],
"doublesLevel": 80,
"doublesMoves": ["closecombat", "darkestlariat", "dualwingbeat", "ironhead", "leechlife", "stoneedge"],
"noDynamaxMoves": ["bulkup", "closecombat", "darkestlariat", "leechlife", "poisonjab", "roost", "stoneedge"]
},
"pheromosa": {
- "level": 75,
+ "level": 73,
"moves": ["closecombat", "icebeam", "poisonjab", "throatchop", "uturn"],
"doublesLevel": 78,
"doublesMoves": ["closecombat", "icebeam", "poisonjab", "protect", "throatchop", "uturn"]
@@ -2285,20 +2281,20 @@
"doublesMoves": ["dazzlinggleam", "energyball", "thunderbolt", "voltswitch"]
},
"celesteela": {
- "level": 77,
+ "level": 76,
"moves": ["airslash", "earthquake", "fireblast", "flashcannon", "leechseed", "protect"],
"doublesLevel": 78,
"doublesMoves": ["airslash", "fireblast", "flashcannon", "leechseed", "protect", "wideguard"],
"noDynamaxMoves": ["airslash", "earthquake", "fireblast", "heavyslam", "leechseed", "protect"]
},
"kartana": {
- "level": 74,
+ "level": 72,
"moves": ["knockoff", "leafblade", "sacredsword", "smartstrike", "swordsdance"],
"doublesLevel": 78,
"doublesMoves": ["knockoff", "leafblade", "sacredsword", "smartstrike", "swordsdance"]
},
"guzzlord": {
- "level": 84,
+ "level": 83,
"moves": ["darkpulse", "dracometeor", "fireblast", "knockoff", "sludgebomb"],
"doublesLevel": 88,
"doublesMoves": ["dracometeor", "fireblast", "knockoff", "protect", "sludgebomb"]
@@ -2310,50 +2306,44 @@
"doublesMoves": ["calmmind", "earthpower", "heatwave", "moonlight", "photongeyser", "protect"]
},
"necrozmaduskmane": {
- "level": 67,
+ "level": 64,
"moves": ["dragondance", "earthquake", "morningsun", "photongeyser", "sunsteelstrike"],
"doublesLevel": 72,
"doublesMoves": ["dragondance", "photongeyser", "protect", "sunsteelstrike"]
},
"necrozmadawnwings": {
- "level": 76,
+ "level": 75,
"moves": ["calmmind", "heatwave", "moongeistbeam", "photongeyser", "stealthrock"],
"doublesLevel": 72,
"doublesMoves": ["heatwave", "moongeistbeam", "photongeyser", "protect", "thunderwave"]
},
"magearna": {
- "level": 76,
- "moves": ["agility", "calmmind", "flashcannon", "fleurcannon"],
- "doublesLevel": 72,
- "doublesMoves": ["agility", "aurasphere", "dazzlinggleam", "flashcannon", "fleurcannon", "protect", "trick"]
- },
- "magearnaoriginal": {
- "level": 76,
+ "level": 73,
"moves": ["agility", "calmmind", "flashcannon", "fleurcannon"],
"doublesLevel": 72,
"doublesMoves": ["agility", "aurasphere", "dazzlinggleam", "flashcannon", "fleurcannon", "protect", "trick"]
},
"marshadow": {
- "level": 70,
+ "level": 69,
"moves": ["bulkup", "closecombat", "icepunch", "rocktomb", "shadowsneak", "spectralthief"],
"doublesLevel": 72,
"doublesMoves": ["closecombat", "protect", "rocktomb", "shadowsneak", "spectralthief"]
},
"naganadel": {
- "level": 74,
+ "level": 72,
"moves": ["airslash", "dracometeor", "fireblast", "nastyplot", "sludgewave"],
"doublesLevel": 76,
"doublesMoves": ["dracometeor", "flamethrower", "nastyplot", "sludgebomb", "uturn"],
"noDynamaxMoves": ["dracometeor", "fireblast", "nastyplot", "sludgewave", "uturn"]
},
"stakataka": {
- "level": 80,
+ "level": 79,
"moves": ["bodypress", "earthquake", "gyroball", "stealthrock", "stoneedge", "trickroom"],
"doublesLevel": 82,
"doublesMoves": ["bodypress", "gyroball", "highhorsepower", "rockslide", "trickroom"]
},
"blacephalon": {
- "level": 80,
+ "level": 79,
"moves": ["calmmind", "fireblast", "psyshock", "shadowball", "trick"],
"doublesLevel": 80,
"doublesMoves": ["fireblast", "protect", "psyshock", "shadowball", "trick"]
@@ -2365,29 +2355,29 @@
"doublesMoves": ["closecombat", "fakeout", "grassknot", "knockoff", "plasmafists", "snarl"]
},
"melmetal": {
- "level": 74,
+ "level": 73,
"moves": ["doubleironbash", "earthquake", "superpower", "thunderpunch", "thunderwave"],
"doublesLevel": 76,
"doublesMoves": ["acidarmor", "bodypress", "doubleironbash", "protect", "thunderpunch", "thunderwave"]
},
"rillaboom": {
- "level": 78,
+ "level": 75,
"moves": ["grassyglide", "highhorsepower", "knockoff", "uturn", "woodhammer"],
"doublesLevel": 80,
"doublesMoves": ["fakeout", "grassyglide", "highhorsepower", "protect", "uturn", "woodhammer"]
},
"rillaboomgmax": {
- "level": 78,
+ "level": 75,
"moves": ["acrobatics", "grassyglide", "highhorsepower", "knockoff", "swordsdance"]
},
"cinderace": {
- "level": 74,
+ "level": 73,
"moves": ["courtchange", "gunkshot", "highjumpkick", "pyroball", "uturn", "zenheadbutt"],
"doublesLevel": 80,
"doublesMoves": ["courtchange", "gunkshot", "highjumpkick", "protect", "pyroball", "suckerpunch", "uturn"]
},
"cinderacegmax": {
- "level": 74,
+ "level": 73,
"moves": ["bulkup", "highjumpkick", "pyroball", "suckerpunch"]
},
"inteleon": {
@@ -2415,7 +2405,7 @@
"doublesMoves": ["bodypress", "bravebird", "bulkup", "roost", "tailwind"]
},
"orbeetle": {
- "level": 86,
+ "level": 87,
"moves": ["bodypress", "bugbuzz", "calmmind", "psychic", "recover", "stickyweb", "uturn"]
},
"orbeetlegmax": {
@@ -2423,7 +2413,7 @@
"doublesMoves": ["helpinghand", "hypnosis", "lightscreen", "psychic", "reflect", "stickyweb", "strugglebug"]
},
"thievul": {
- "level": 86,
+ "level": 89,
"moves": ["darkpulse", "foulplay", "grassknot", "nastyplot", "partingshot", "psychic"],
"doublesLevel": 89,
"doublesMoves": ["faketears", "foulplay", "partingshot", "snarl", "taunt"]
@@ -2441,20 +2431,20 @@
"doublesMoves": ["doubleedge", "swordsdance", "thunderwave", "wildcharge", "zenheadbutt"]
},
"drednaw": {
- "level": 84,
+ "level": 82,
"moves": ["liquidation", "stealthrock", "stoneedge", "superpower", "swordsdance"],
"doublesLevel": 84,
"doublesMoves": ["highhorsepower", "liquidation", "protect", "rockslide", "superpower", "swordsdance"],
"noDynamaxMoves": ["liquidation", "raindance", "stealthrock", "stoneedge", "superpower"]
},
"boltund": {
- "level": 84,
+ "level": 85,
"moves": ["bulkup", "crunch", "firefang", "playrough", "psychicfangs", "thunderfang", "voltswitch"],
"doublesLevel": 86,
"doublesMoves": ["crunch", "firefang", "nuzzle", "playrough", "protect", "psychicfangs", "snarl", "thunderfang"]
},
"coalossalgmax": {
- "level": 87,
+ "level": 88,
"moves": ["overheat", "rapidspin", "spikes", "stealthrock", "stoneedge", "willowisp"],
"doublesLevel": 85,
"doublesMoves": ["fireblast", "incinerate", "protect", "stealthrock", "stoneedge", "willowisp"]
@@ -2466,17 +2456,17 @@
"doublesMoves": ["acrobatics", "dragondance", "dragonrush", "gravapple", "protect"]
},
"appletun": {
- "level": 90,
+ "level": 91,
"moves": ["appleacid", "dragonpulse", "leechseed", "recover"],
"doublesLevel": 90,
"doublesMoves": ["appleacid", "dragonpulse", "leechseed", "protect", "recover"]
},
"appletungmax": {
- "level": 90,
+ "level": 91,
"moves": ["appleacid", "dracometeor", "leechseed", "recover"]
},
"sandaconda": {
- "level": 84,
+ "level": 83,
"moves": ["coil", "earthquake", "glare", "rest", "stealthrock", "stoneedge"]
},
"sandacondagmax": {
@@ -2484,7 +2474,7 @@
"doublesMoves": ["coil", "glare", "highhorsepower", "protect", "stoneedge"]
},
"cramorant": {
- "level": 84,
+ "level": 85,
"moves": ["bravebird", "defog", "roost", "superpower", "surf"],
"doublesLevel": 88,
"doublesMoves": ["bravebird", "icebeam", "protect", "roost", "surf", "tailwind"]
@@ -2512,7 +2502,7 @@
"doublesMoves": ["boomburst", "overdrive", "sludgebomb", "snarl", "voltswitch"]
},
"centiskorch": {
- "level": 84,
+ "level": 86,
"moves": ["coil", "firelash", "knockoff", "leechlife", "powerwhip"],
"doublesLevel": 89,
"doublesMoves": ["coil", "firelash", "knockoff", "leechlife", "powerwhip", "protect"]
@@ -2522,29 +2512,29 @@
"doublesMoves": ["coil", "firelash", "knockoff", "leechlife", "powerwhip", "protect"]
},
"grapploct": {
- "level": 86,
+ "level": 87,
"moves": ["brutalswing", "bulkup", "drainpunch", "icepunch", "suckerpunch"],
"doublesLevel": 88,
"doublesMoves": ["closecombat", "coaching", "drainpunch", "icepunch", "octolock", "protect"]
},
"polteageist": {
- "level": 78,
+ "level": 77,
"moves": ["gigadrain", "shadowball", "shellsmash", "storedpower", "strengthsap"],
"doublesLevel": 84,
"doublesMoves": ["gigadrain", "protect", "shadowball", "shellsmash", "storedpower"]
},
"hatterenegmax": {
- "level": 86,
+ "level": 85,
"moves": ["calmmind", "dazzlinggleam", "mysticalfire", "psychic", "psyshock", "trickroom"],
"doublesLevel": 80,
"doublesMoves": ["dazzlinggleam", "mysticalfire", "protect", "psychic", "trickroom"]
},
"grimmsnarl": {
- "level": 82,
+ "level": 84,
"moves": ["lightscreen", "reflect", "spiritbreak", "taunt", "thunderwave"]
},
"grimmsnarlgmax": {
- "level": 82,
+ "level": 84,
"moves": ["bulkup", "darkestlariat", "playrough", "rest", "suckerpunch", "trick"],
"doublesLevel": 84,
"doublesMoves": ["darkestlariat", "fakeout", "lightscreen", "reflect", "spiritbreak", "taunt", "thunderwave"]
@@ -2556,26 +2546,26 @@
"doublesMoves": ["closecombat", "facade", "knockoff", "obstruct", "partingshot", "taunt"]
},
"perrserker": {
- "level": 86,
+ "level": 87,
"moves": ["closecombat", "crunch", "fakeout", "ironhead", "uturn"],
"doublesLevel": 88,
"doublesMoves": ["closecombat", "fakeout", "ironhead", "lashout", "protect", "uturn"]
},
"cursola": {
- "level": 86,
+ "level": 88,
"moves": ["earthpower", "hydropump", "icebeam", "shadowball", "stealthrock", "strengthsap"],
"doublesLevel": 88,
"doublesMoves": ["earthpower", "hydropump", "icebeam", "protect", "shadowball", "strengthsap"]
},
"sirfetchd": {
- "level": 82,
+ "level": 83,
"moves": ["bravebird", "closecombat", "firstimpression", "knockoff", "swordsdance"],
"doublesLevel": 85,
"doublesMoves": ["bravebird", "closecombat", "firstimpression", "knockoff", "poisonjab", "protect", "swordsdance"],
"noDynamaxMoves": ["bravebird", "closecombat", "firstimpression", "knockoff", "poisonjab", "swordsdance"]
},
"mrrime": {
- "level": 86,
+ "level": 87,
"moves": ["focusblast", "freezedry", "psychic", "rapidspin", "slackoff", "trick"],
"doublesLevel": 88,
"doublesMoves": ["fakeout", "focusblast", "freezedry", "icywind", "protect", "psychic", "rapidspin"]
@@ -2587,25 +2577,25 @@
"doublesMoves": ["earthquake", "poltergeist", "protect", "toxicspikes", "trickroom", "willowisp"]
},
"alcremiegmax": {
- "level": 86,
+ "level": 85,
"moves": ["calmmind", "dazzlinggleam", "mysticalfire", "psychic", "recover"],
"doublesLevel": 85,
"doublesMoves": ["dazzlinggleam", "decorate", "mysticalfire", "protect", "recover"]
},
"falinks": {
"level": 84,
- "moves": ["closecombat", "noretreat", "poisonjab", "rockslide", "throatchop"],
+ "moves": ["closecombat", "ironhead", "noretreat", "rockslide", "throatchop"],
"doublesLevel": 86,
"doublesMoves": ["closecombat", "noretreat", "poisonjab", "rockslide", "throatchop"]
},
"pincurchin": {
- "level": 88,
+ "level": 90,
"moves": ["risingvoltage", "scald", "spikes", "suckerpunch", "toxicspikes"],
"doublesLevel": 90,
"doublesMoves": ["acupressure", "protect", "risingvoltage", "scald", "suckerpunch"]
},
"frosmoth": {
- "level": 82,
+ "level": 83,
"moves": ["bugbuzz", "gigadrain", "hurricane", "icebeam", "quiverdance"],
"doublesLevel": 88,
"doublesMoves": ["bugbuzz", "gigadrain", "hurricane", "icebeam", "protect", "quiverdance", "wideguard"]
@@ -2623,7 +2613,7 @@
"doublesMoves": ["bellydrum", "iciclecrash", "liquidation", "protect"]
},
"indeedee": {
- "level": 83,
+ "level": 84,
"moves": ["calmmind", "expandingforce", "hypervoice", "mysticalfire", "trick"],
"doublesLevel": 80,
"doublesMoves": ["encore", "expandingforce", "hypervoice", "mysticalfire", "protect", "trick"]
@@ -2641,72 +2631,72 @@
"doublesMoves": ["aurawheel", "fakeout", "partingshot", "protect", "rapidspin", "superfang"]
},
"copperajah": {
- "level": 84,
+ "level": 83,
"moves": ["earthquake", "ironhead", "playrough", "rockslide", "stealthrock"],
"doublesLevel": 88,
"doublesMoves": ["heatcrash", "highhorsepower", "ironhead", "playrough", "powerwhip", "protect", "stoneedge"]
},
"copperajahgmax": {
- "level": 84,
+ "level": 83,
"moves": ["earthquake", "heatcrash", "heavyslam", "powerwhip", "stoneedge"]
},
"dracozolt": {
- "level": 78,
+ "level": 77,
"moves": ["aerialace", "boltbeak", "earthquake", "lowkick", "outrage"],
"doublesLevel": 82,
"doublesMoves": ["aerialace", "boltbeak", "dragonclaw", "highhorsepower", "rockslide"],
"noDynamaxMoves": ["boltbeak", "dragonclaw", "earthquake", "outrage"]
},
"arctozolt": {
- "level": 86,
+ "level": 87,
"moves": ["boltbeak", "freezedry", "iciclecrash", "stompingtantrum", "thunderwave"],
"doublesLevel": 88,
"doublesMoves": ["blizzard", "boltbeak", "iciclecrash", "lowkick", "protect"]
},
"dracovish": {
- "level": 80,
+ "level": 78,
"moves": ["crunch", "fishiousrend", "icefang", "lowkick", "psychicfangs"],
"doublesLevel": 78,
"doublesMoves": ["crunch", "dragonrush", "fishiousrend", "icefang", "psychicfangs"]
},
"arctovish": {
- "level": 86,
+ "level": 87,
"moves": ["bodyslam", "fishiousrend", "freezedry", "iciclecrash", "psychicfangs"],
"doublesLevel": 88,
"doublesMoves": ["blizzard", "fishiousrend", "iciclecrash", "protect", "superfang"]
},
"duraludon": {
- "level": 84,
+ "level": 83,
"moves": ["bodypress", "dracometeor", "flashcannon", "stealthrock", "thunderbolt"],
"doublesLevel": 87,
"doublesMoves": ["bodypress", "dracometeor", "dragonpulse", "flashcannon", "protect", "snarl", "thunderbolt"]
},
"dragapult": {
- "level": 78,
+ "level": 76,
"moves": ["dracometeor", "fireblast", "shadowball", "thunderbolt", "uturn"],
"doublesLevel": 80,
"doublesMoves": ["dragondarts", "fireblast", "protect", "shadowball", "thunderbolt", "thunderwave"]
},
"zacian": {
- "level": 68,
+ "level": 65,
"moves": ["closecombat", "crunch", "playrough", "psychicfangs", "swordsdance"],
"doublesLevel": 72,
"doublesMoves": ["closecombat", "crunch", "playrough", "protect", "psychicfangs", "swordsdance"]
},
"zaciancrowned": {
- "level": 62,
- "moves": ["behemothblade", "closecombat", "crunch", "playrough", "psychicfangs", "swordsdance"],
+ "level": 61,
+ "moves": ["behemothblade", "closecombat", "playrough", "psychicfangs", "swordsdance"],
"doublesLevel": 65,
"doublesMoves": ["behemothblade", "closecombat", "playrough", "protect", "psychicfangs", "swordsdance"]
},
"zamazenta": {
- "level": 73,
+ "level": 71,
"moves": ["closecombat", "crunch", "psychicfangs", "wildcharge"],
"doublesLevel": 74,
"doublesMoves": ["closecombat", "crunch", "playrough", "protect", "psychicfangs"]
},
"zamazentacrowned": {
- "level": 71,
+ "level": 69,
"moves": ["behemothbash", "closecombat", "crunch", "howl", "psychicfangs"],
"doublesLevel": 72,
"doublesMoves": ["behemothbash", "closecombat", "crunch", "howl", "protect"]
@@ -2718,33 +2708,27 @@
"doublesMoves": ["cosmicpower", "dynamaxcannon", "flamethrower", "recover"]
},
"urshifu": {
- "level": 76,
+ "level": 74,
"moves": ["closecombat", "ironhead", "suckerpunch", "uturn", "wickedblow"],
"doublesLevel": 76,
"doublesMoves": ["closecombat", "ironhead", "protect", "suckerpunch", "wickedblow"]
},
"urshifurapidstrike": {
- "level": 78,
+ "level": 76,
"moves": ["bulkup", "drainpunch", "substitute", "surgingstrikes"],
"doublesLevel": 80,
"doublesMoves": ["aquajet", "closecombat", "icepunch", "protect", "surgingstrikes", "uturn"]
},
"urshifugmax": {
- "level": 76,
+ "level": 74,
"moves": ["bulkup", "drainpunch", "substitute", "wickedblow"]
},
"urshifurapidstrikegmax": {
- "level": 78,
+ "level": 76,
"moves": ["bulkup", "closecombat", "icepunch", "surgingstrikes", "uturn"]
},
"zarude": {
- "level": 78,
- "moves": ["bulkup", "closecombat", "darkestlariat", "junglehealing", "powerwhip", "uturn"],
- "doublesLevel": 80,
- "doublesMoves": ["closecombat", "darkestlariat", "junglehealing", "powerwhip", "protect"]
- },
- "zarudedada": {
- "level": 78,
+ "level": 77,
"moves": ["bulkup", "closecombat", "darkestlariat", "junglehealing", "powerwhip", "uturn"],
"doublesLevel": 80,
"doublesMoves": ["closecombat", "darkestlariat", "junglehealing", "powerwhip", "protect"]
@@ -2763,7 +2747,7 @@
"doublesMoves": ["crunch", "dragonclaw", "dragonenergy", "firefang"]
},
"glastrier": {
- "level": 82,
+ "level": 83,
"moves": ["closecombat", "highhorsepower", "iciclecrash", "swordsdance"],
"doublesLevel": 82,
"doublesMoves": ["closecombat", "highhorsepower", "iciclecrash", "protect"]
@@ -2775,19 +2759,19 @@
"doublesMoves": ["darkpulse", "nastyplot", "protect", "shadowball"]
},
"calyrex": {
- "level": 88,
+ "level": 89,
"moves": ["calmmind", "gigadrain", "leechseed", "psyshock", "substitute"],
"doublesLevel": 94,
"doublesMoves": ["helpinghand", "leafstorm", "pollenpuff", "protect"]
},
"calyrexice": {
- "level": 72,
+ "level": 71,
"moves": ["agility", "closecombat", "glaciallance", "highhorsepower", "trickroom"],
"doublesLevel": 72,
"doublesMoves": ["closecombat", "glaciallance", "highhorsepower", "swordsdance", "trickroom"]
},
"calyrexshadow": {
- "level": 65,
+ "level": 64,
"moves": ["astralbarrage", "nastyplot", "pollenpuff", "psyshock", "substitute", "trick"],
"doublesLevel": 68,
"doublesMoves": ["astralbarrage", "nastyplot", "pollenpuff", "protect", "psyshock"]
diff --git a/data/mods/gen8/factory-sets.json b/data/random-battles/gen8/factory-sets.json
similarity index 99%
rename from data/mods/gen8/factory-sets.json
rename to data/random-battles/gen8/factory-sets.json
index 4b7be6a7bc86..301ddaf593d5 100644
--- a/data/mods/gen8/factory-sets.json
+++ b/data/random-battles/gen8/factory-sets.json
@@ -2754,7 +2754,7 @@
"ability": ["Sturdy"],
"evs": {"hp": 252, "atk": 4, "spd": 252},
"nature": "Careful",
- "moves": [["Earthquake"], ["Heavy Slam"], ["Stealth Rock", "Stealth Rock", "Protect"], ["Toxic"]]
+ "moves": [["Earthquake"], ["Heavy Slam"], ["Stealth Rock", "Protect"], ["Toxic"]]
}]
},
"suicune": {
diff --git a/data/mods/gen8/random-teams.ts b/data/random-battles/gen8/teams.ts
similarity index 85%
rename from data/mods/gen8/random-teams.ts
rename to data/random-battles/gen8/teams.ts
index 21581bf54cb4..210968ed3df2 100644
--- a/data/mods/gen8/random-teams.ts
+++ b/data/random-battles/gen8/teams.ts
@@ -47,50 +47,46 @@ export class MoveCounter extends Utils.Multiset {
this.damagingMoves = new Set();
this.setupType = '';
}
-
- get(key: string): number {
- return super.get(key) || 0;
- }
}
type MoveEnforcementChecker = (
- movePool: string[], moves: Set, abilities: Set, types: Set,
+ movePool: string[], moves: Set, abilities: string[], types: Set,
counter: MoveCounter, species: Species, teamDetails: RandomTeamsTypes.TeamDetails
) => boolean;
// Moves that restore HP:
-const RecoveryMove = [
+const RECOVERY_MOVES = [
'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis',
];
// Moves that drop stats:
-const ContraryMoves = [
+const CONTRARY_MOVES = [
'closecombat', 'leafstorm', 'overheat', 'superpower', 'vcreate',
];
// Moves that boost Attack:
-const PhysicalSetup = [
+const PHYSICAL_SETUP = [
'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'screech', 'swordsdance',
];
// Moves which boost Special Attack:
-const SpecialSetup = [
+const SPECIAL_SETUP = [
'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow',
];
// Moves that boost Attack AND Special Attack:
-const MixedSetup = [
+const MIXED_SETUP = [
'clangoroussoul', 'growth', 'happyhour', 'holdhands', 'noretreat', 'shellsmash', 'workup',
];
// Some moves that only boost Speed:
-const SpeedSetup = [
+const SPEED_SETUP = [
'agility', 'autotomize', 'flamecharge', 'rockpolish',
];
// Moves that shouldn't be the only STAB moves:
-const NoStab = [
+const NO_STAB = [
'accelerock', 'aquajet', 'beakblast', 'bounce', 'breakingswipe', 'chatter', 'clearsmog', 'dragontail', 'eruption', 'explosion',
'fakeout', 'firstimpression', 'flamecharge', 'flipturn', 'iceshard', 'icywind', 'incinerate', 'machpunch',
'meteorbeam', 'pluck', 'pursuit', 'quickattack', 'reversal', 'selfdestruct', 'skydrop', 'snarl', 'suckerpunch', 'uturn', 'watershuriken',
'vacuumwave', 'voltswitch', 'waterspout',
];
// Hazard-setting moves
-const Hazards = [
+const HAZARDS = [
'spikes', 'stealthrock', 'stickyweb', 'toxicspikes',
];
@@ -99,18 +95,19 @@ function sereneGraceBenefits(move: Move) {
}
export class RandomGen8Teams {
- dex: ModdedDex;
+ readonly dex: ModdedDex;
gen: number;
factoryTier: string;
format: Format;
prng: PRNG;
noStab: string[];
+ priorityPokemon: string[];
readonly maxTeamSize: number;
readonly adjustLevel: number | null;
readonly maxMoveCount: number;
readonly forceMonotype: string | undefined;
- randomData: {[species: string]: OldRandomBattleSpecies} = require('./random-data.json');
+ randomData: {[species: string]: OldRandomBattleSpecies} = require('./data.json');
/**
* Checkers for move enforcement based on a Pokémon's types or other factors
@@ -119,11 +116,17 @@ export class RandomGen8Teams {
*/
moveEnforcementCheckers: {[k: string]: MoveEnforcementChecker};
+ /** Used by .getPools() */
+ private poolsCacheKey: [string | undefined, number | undefined, RuleTable | undefined, boolean] | undefined;
+ private cachedPool: number[] | undefined;
+ private cachedSpeciesPool: Species[] | undefined;
+
constructor(format: Format | string, prng: PRNG | PRNGSeed | null) {
format = Dex.formats.get(format);
this.dex = Dex.forFormat(format);
this.gen = this.dex.gen;
- this.noStab = NoStab;
+ this.noStab = NO_STAB;
+ this.priorityPokemon = [];
const ruleTable = Dex.formats.getRuleTable(format);
this.maxTeamSize = ruleTable.maxTeamSize;
@@ -207,10 +210,11 @@ export class RandomGen8Teams {
Ice: (movePool, moves, abilities, types, counter) => {
if (!counter.get('Ice')) return true;
if (movePool.includes('iciclecrash')) return true;
- return abilities.has('Snow Warning') && movePool.includes('blizzard');
+ return abilities.includes('Snow Warning') && movePool.includes('blizzard');
},
Normal: (movePool, moves, abilities, types, counter) => (
- (abilities.has('Guts') && movePool.includes('facade')) || (abilities.has('Pixilate') && !counter.get('Normal'))
+ (abilities.includes('Guts') && movePool.includes('facade')) ||
+ (abilities.includes('Pixilate') && !counter.get('Normal'))
),
Poison: (movePool, moves, abilities, types, counter) => {
if (counter.get('Poison')) return false;
@@ -219,7 +223,7 @@ export class RandomGen8Teams {
Psychic: (movePool, moves, abilities, types, counter) => {
if (counter.get('Psychic')) return false;
if (types.has('Ghost') || types.has('Steel')) return false;
- return abilities.has('Psychic Surge') || !!counter.setupType || movePool.includes('psychicfangs');
+ return abilities.includes('Psychic Surge') || !!counter.setupType || movePool.includes('psychicfangs');
},
Rock: (movePool, moves, abilities, types, counter, species) => !counter.get('Rock') && species.baseStats.atk >= 80,
Steel: (movePool, moves, abilities, types, counter, species) => {
@@ -230,9 +234,12 @@ export class RandomGen8Teams {
Water: (movePool, moves, abilities, types, counter, species) => {
if (!counter.get('Water') && !moves.has('hypervoice')) return true;
if (['hypervoice', 'liquidation', 'surgingstrikes'].some(m => movePool.includes(m))) return true;
- return abilities.has('Huge Power') && movePool.includes('aquajet');
+ return abilities.includes('Huge Power') && movePool.includes('aquajet');
},
};
+ this.poolsCacheKey = undefined;
+ this.cachedPool = undefined;
+ this.cachedSpeciesPool = undefined;
}
setSeed(prng?: PRNG | PRNGSeed) {
@@ -429,28 +436,11 @@ export class RandomGen8Teams {
// Four random unique moves from the movepool
let pool = ['struggle'];
if (forme === 'Smeargle') {
- pool = this.dex.moves
- .all()
+ pool = this.dex.moves.all()
.filter(move => !(move.isNonstandard || move.isZ || move.isMax || move.realMove))
.map(m => m.id);
} else {
- const formes = ['gastrodoneast', 'pumpkaboosuper', 'zygarde10'];
- let learnset = this.dex.species.getLearnset(species.id);
- if (formes.includes(species.id) || !learnset) {
- learnset = this.dex.species.getLearnset(this.dex.species.get(species.baseSpecies).id);
- }
- if (learnset) {
- pool = Object.keys(learnset).filter(
- moveid => learnset![moveid].find(learned => learned.startsWith(String(this.gen)))
- );
- }
- if (species.changesFrom) {
- learnset = this.dex.species.getLearnset(toID(species.changesFrom));
- const basePool = Object.keys(learnset!).filter(
- moveid => learnset![moveid].find(learned => learned.startsWith(String(this.gen)))
- );
- pool = [...new Set(pool.concat(basePool))];
- }
+ pool = [...this.dex.species.getMovePool(species.id)];
}
const moves = this.multipleSamplesNoReplace(pool, this.maxMoveCount);
@@ -536,7 +526,7 @@ export class RandomGen8Teams {
};
if (this.gen === 9) {
// Tera type
- set.teraType = this.sample(this.dex.types.all()).name;
+ set.teraType = this.sample(this.dex.types.names());
}
team.push(set);
}
@@ -544,37 +534,34 @@ export class RandomGen8Teams {
return team;
}
- randomNPokemon(n: number, requiredType?: string, minSourceGen?: number, ruleTable?: RuleTable, requireMoves = false) {
- // Picks `n` random pokemon--no repeats, even among formes
- // Also need to either normalize for formes or select formes at random
- // Unreleased are okay but no CAP
- const last = [0, 151, 251, 386, 493, 649, 721, 807, 898, 1010][this.gen];
-
- if (n <= 0 || n > last) throw new Error(`n must be a number between 1 and ${last} (got ${n})`);
- if (requiredType && !this.dex.types.get(requiredType).exists) {
- throw new Error(`"${requiredType}" is not a valid type.`);
- }
-
+ private getPools(requiredType?: string, minSourceGen?: number, ruleTable?: RuleTable, requireMoves = false) {
+ // Memoize pool and speciesPool because, at least during tests, they are constructed with the same parameters
+ // hundreds of times and are expensive to compute.
const isNotCustom = !ruleTable;
-
- const pool: number[] = [];
+ let pool: number[] = [];
let speciesPool: Species[] = [];
- if (isNotCustom) {
+ const ck = this.poolsCacheKey;
+ if (ck && this.cachedPool && this.cachedSpeciesPool &&
+ ck[0] === requiredType && ck[1] === minSourceGen && ck[2] === ruleTable && ck[3] === requireMoves) {
+ speciesPool = this.cachedSpeciesPool.slice();
+ pool = this.cachedPool.slice();
+ } else if (isNotCustom) {
speciesPool = [...this.dex.species.all()];
for (const species of speciesPool) {
if (species.isNonstandard && species.isNonstandard !== 'Unobtainable') continue;
if (requireMoves) {
- const hasMovesInCurrentGen = Object.values(this.dex.species.getLearnset(species.id) || {})
- .some(sources => sources.some(source => source.startsWith('9')));
+ const hasMovesInCurrentGen = this.dex.species.getMovePool(species.id).size;
if (!hasMovesInCurrentGen) continue;
}
if (requiredType && !species.types.includes(requiredType)) continue;
if (minSourceGen && species.gen < minSourceGen) continue;
const num = species.num;
if (num <= 0 || pool.includes(num)) continue;
- if (num > last) break;
pool.push(num);
}
+ this.poolsCacheKey = [requiredType, minSourceGen, ruleTable, requireMoves];
+ this.cachedPool = pool.slice();
+ this.cachedSpeciesPool = speciesPool.slice();
} else {
const EXISTENCE_TAG = ['past', 'future', 'lgpe', 'unobtainable', 'cap', 'custom', 'nonexistent'];
const nonexistentBanReason = ruleTable.check('nonexistent');
@@ -595,7 +582,7 @@ export class RandomGen8Teams {
let tagBlacklisted = false;
for (const ruleid of ruleTable.tagRules) {
if (ruleid.startsWith('*')) continue;
- const tagid = ruleid.slice(12);
+ const tagid = ruleid.slice(12) as ID;
const tag = Tags[tagid];
if ((tag.speciesFilter || tag.genericFilter)!(species)) {
const existenceTag = EXISTENCE_TAG.includes(tagid);
@@ -619,7 +606,23 @@ export class RandomGen8Teams {
if (pool.includes(num)) continue;
pool.push(num);
}
+ this.poolsCacheKey = [requiredType, minSourceGen, ruleTable, requireMoves];
+ this.cachedPool = pool.slice();
+ this.cachedSpeciesPool = speciesPool.slice();
}
+ return {pool, speciesPool};
+ }
+
+ randomNPokemon(n: number, requiredType?: string, minSourceGen?: number, ruleTable?: RuleTable, requireMoves = false) {
+ // Picks `n` random pokemon--no repeats, even among formes
+ // Also need to either normalize for formes or select formes at random
+ // Unreleased are okay but no CAP
+ if (requiredType && !this.dex.types.get(requiredType).exists) {
+ throw new Error(`"${requiredType}" is not a valid type.`);
+ }
+
+ const {pool, speciesPool} = this.getPools(requiredType, minSourceGen, ruleTable, requireMoves);
+ const isNotCustom = !ruleTable;
const hasDexNumber: {[k: string]: number} = {};
for (let i = 0; i < n; i++) {
@@ -632,6 +635,7 @@ export class RandomGen8Teams {
if (!(species.num in hasDexNumber)) continue;
if (isNotCustom && (species.gen > this.gen ||
(species.isNonstandard && species.isNonstandard !== 'Unobtainable'))) continue;
+ if (requiredType && !species.types.includes(requiredType)) continue;
if (!formes[hasDexNumber[species.num]]) formes[hasDexNumber[species.num]] = [];
formes[hasDexNumber[species.num]].push(species.name);
}
@@ -889,7 +893,7 @@ export class RandomGen8Teams {
};
if (this.gen === 9) {
// Random Tera type
- set.teraType = this.sample(this.dex.types.all()).name;
+ set.teraType = this.sample(this.dex.types.names());
}
team.push(set);
}
@@ -900,7 +904,7 @@ export class RandomGen8Teams {
queryMoves(
moves: Set | null,
types: string[],
- abilities: Set = new Set(),
+ abilities: string[],
movePool: string[] = []
): MoveCounter {
// This is primarily a helper function for random setbuilder functions.
@@ -948,9 +952,9 @@ export class RandomGen8Teams {
}
} else if (
// Less obvious forms of STAB
- (moveType === 'Normal' && (['Aerilate', 'Galvanize', 'Pixilate', 'Refrigerate'].some(abil => abilities.has(abil)))) ||
- (move.priority === 0 && (abilities.has('Libero') || abilities.has('Protean')) && !this.noStab.includes(moveid)) ||
- (moveType === 'Steel' && abilities.has('Steelworker'))
+ (moveType === 'Normal' && (['Aerilate', 'Galvanize', 'Pixilate', 'Refrigerate'].some(a => abilities.includes(a)))) ||
+ (move.priority === 0 && (['Libero', 'Protean'].some(a => abilities.includes(a))) && !this.noStab.includes(moveid)) ||
+ (moveType === 'Steel' && abilities.includes('Steelworker'))
) {
counter.add('stab');
}
@@ -958,7 +962,7 @@ export class RandomGen8Teams {
if (move.flags['bite']) counter.add('strongjaw');
if (move.flags['punch']) counter.add('ironfist');
if (move.flags['sound']) counter.add('sound');
- if (move.priority !== 0 || (moveid === 'grassyglide' && abilities.has('Grassy Surge'))) {
+ if (move.priority !== 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) {
counter.add('priority');
}
counter.damagingMoves.add(move);
@@ -974,19 +978,19 @@ export class RandomGen8Teams {
if (move.accuracy && move.accuracy !== true && move.accuracy < 90) counter.add('inaccurate');
// Moves that change stats:
- if (RecoveryMove.includes(moveid)) counter.add('recovery');
- if (ContraryMoves.includes(moveid)) counter.add('contrary');
- if (PhysicalSetup.includes(moveid)) {
+ if (RECOVERY_MOVES.includes(moveid)) counter.add('recovery');
+ if (CONTRARY_MOVES.includes(moveid)) counter.add('contrary');
+ if (PHYSICAL_SETUP.includes(moveid)) {
counter.add('physicalsetup');
counter.setupType = 'Physical';
- } else if (SpecialSetup.includes(moveid)) {
+ } else if (SPECIAL_SETUP.includes(moveid)) {
counter.add('specialsetup');
counter.setupType = 'Special';
}
- if (MixedSetup.includes(moveid)) counter.add('mixedsetup');
- if (SpeedSetup.includes(moveid)) counter.add('speedsetup');
- if (Hazards.includes(moveid)) counter.add('hazards');
+ if (MIXED_SETUP.includes(moveid)) counter.add('mixedsetup');
+ if (SPEED_SETUP.includes(moveid)) counter.add('speedsetup');
+ if (HAZARDS.includes(moveid)) counter.add('hazards');
}
// Keep track of the available moves
@@ -1042,7 +1046,7 @@ export class RandomGen8Teams {
move: Move,
types: Set,
moves: Set,
- abilities: Set,
+ abilities: string[],
counter: MoveCounter,
movePool: string[],
teamDetails: RandomTeamsTypes.TeamDetails,
@@ -1079,7 +1083,7 @@ export class RandomGen8Teams {
return {cull: movePool.includes('protect') || movePool.includes('wish')};
case 'fireblast':
// Special case for Togekiss, which always wants Aura Sphere
- return {cull: abilities.has('Serene Grace') && (!moves.has('trick') || counter.get('Status') > 1)};
+ return {cull: abilities.includes('Serene Grace') && (!moves.has('trick') || counter.get('Status') > 1)};
case 'firepunch':
// Special case for Darmanitan-Zen-Galar, which doesn't always want Fire Punch
return {cull: movePool.includes('bellydrum') || (moves.has('earthquake') && movePool.includes('substitute'))};
@@ -1097,7 +1101,7 @@ export class RandomGen8Teams {
return {cull: species.id !== 'registeel' && (movePool.includes('sleeptalk') || bulkySetup)};
case 'sleeptalk':
if (!moves.has('rest')) return {cull: true};
- if (movePool.length > 1 && !abilities.has('Contrary')) {
+ if (movePool.length > 1 && !abilities.includes('Contrary')) {
const rest = movePool.indexOf('rest');
if (rest >= 0) this.fastPop(movePool, rest);
}
@@ -1186,7 +1190,7 @@ export class RandomGen8Teams {
if (
!isDoubles &&
counter.get('Status') < 2 &&
- ['Hunger Switch', 'Speed Boost', 'Moody'].every(m => !abilities.has(m))
+ ['Hunger Switch', 'Speed Boost'].every(m => !abilities.includes(m))
) return {cull: true};
if (movePool.includes('leechseed') || (movePool.includes('toxic') && !moves.has('wish'))) return {cull: true};
if (isDoubles && (
@@ -1339,8 +1343,8 @@ export class RandomGen8Teams {
return {
cull: moves.has('hydropump') ||
(counter.get('Physical') >= 4 && movePool.includes('uturn')) ||
- (moves.has('substitute') && !abilities.has('Contrary')),
- isSetup: abilities.has('Contrary'),
+ (moves.has('substitute') && !abilities.includes('Contrary')),
+ isSetup: abilities.includes('Contrary'),
};
case 'poisonjab':
return {cull: !types.has('Poison') && counter.get('Status') >= 2};
@@ -1361,7 +1365,7 @@ export class RandomGen8Teams {
return {cull:
(species.id === 'naganadel' && moves.has('nastyplot')) ||
hasRestTalk ||
- (abilities.has('Simple') && !!counter.get('recovery')) ||
+ (abilities.includes('Simple') && !!counter.get('recovery')) ||
counter.setupType === 'Physical',
};
case 'bravebird':
@@ -1382,7 +1386,7 @@ export class RandomGen8Teams {
return {cull: moves.has('rapidspin')};
case 'psyshock':
// Special case for Sylveon which only wants Psyshock if it gets a Choice item
- const sylveonCase = abilities.has('Pixilate') && counter.get('Special') < 4;
+ const sylveonCase = abilities.includes('Pixilate') && counter.get('Special') < 4;
return {cull: moves.has('psychic') || (!counter.setupType && sylveonCase) || (isDoubles && moves.has('psychic'))};
case 'bugbuzz':
return {cull: moves.has('uturn') && !counter.setupType};
@@ -1393,7 +1397,7 @@ export class RandomGen8Teams {
movePool.includes('spikes'),
};
case 'stoneedge':
- const gutsCullCondition = abilities.has('Guts') && (!moves.has('dynamicpunch') || moves.has('spikes'));
+ const gutsCullCondition = abilities.includes('Guts') && (!moves.has('dynamicpunch') || moves.has('spikes'));
const rockSlidePlusStatusPossible = counter.get('Status') && movePool.includes('rockslide');
const otherRockMove = moves.has('rockblast') || moves.has('rockslide');
const lucarioCull = species.id === 'lucario' && !!counter.setupType;
@@ -1405,7 +1409,7 @@ export class RandomGen8Teams {
return {cull:
(isDoubles && moves.has('phantomforce')) ||
// Special case for Sylveon, which never wants Shadow Ball as its only coverage move
- (abilities.has('Pixilate') && (!!counter.setupType || counter.get('Status') > 1)) ||
+ (abilities.includes('Pixilate') && (!!counter.setupType || counter.get('Status') > 1)) ||
(!types.has('Ghost') && movePool.includes('focusblast')),
};
case 'shadowclaw':
@@ -1491,16 +1495,18 @@ export class RandomGen8Teams {
ability: string,
types: Set,
moves: Set,
- abilities: Set,
+ abilities: string[],
counter: MoveCounter,
movePool: string[],
teamDetails: RandomTeamsTypes.TeamDetails,
species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
isDoubles: boolean,
isNoDynamax: boolean
): boolean {
if ([
- 'Flare Boost', 'Hydration', 'Ice Body', 'Immunity', 'Innards Out', 'Insomnia', 'Misty Surge',
+ 'Flare Boost', 'Hydration', 'Ice Body', 'Immunity', 'Innards Out', 'Insomnia', 'Misty Surge', 'Moody',
'Perish Body', 'Quick Feet', 'Rain Dish', 'Snow Cloak', 'Steadfast', 'Steam Engine',
].includes(ability)) return true;
@@ -1511,7 +1517,7 @@ export class RandomGen8Teams {
case 'Analytic':
return (moves.has('rapidspin') || species.nfe || isDoubles);
case 'Blaze':
- return (isDoubles && abilities.has('Solar Power')) || (!isDoubles && !isNoDynamax && species.id === 'charizard');
+ return (isDoubles && abilities.includes('Solar Power')) || (!isDoubles && !isNoDynamax && species.id === 'charizard');
// case 'Bulletproof': case 'Overcoat':
// return !!counter.setupType;
case 'Chlorophyll':
@@ -1523,7 +1529,7 @@ export class RandomGen8Teams {
case 'Compound Eyes': case 'No Guard':
return !counter.get('inaccurate');
case 'Cursed Body':
- return abilities.has('Infiltrator');
+ return abilities.includes('Infiltrator');
case 'Defiant':
return !counter.get('Physical');
case 'Download':
@@ -1531,24 +1537,24 @@ export class RandomGen8Teams {
case 'Early Bird':
return (types.has('Grass') && isDoubles);
case 'Flash Fire':
- return (this.dex.getEffectiveness('Fire', species) < -1 || abilities.has('Drought'));
+ return (this.dex.getEffectiveness('Fire', species) < -1 || abilities.includes('Drought'));
case 'Gluttony':
return !moves.has('bellydrum');
case 'Guts':
return (!moves.has('facade') && !moves.has('sleeptalk') && !species.nfe);
case 'Harvest':
- return (abilities.has('Frisk') && !isDoubles);
+ return (abilities.includes('Frisk') && !isDoubles);
case 'Hustle': case 'Inner Focus':
- return (counter.get('Physical') < 2 || abilities.has('Iron Fist'));
+ return ((species.id !== 'glalie' && counter.get('Physical') < 2) || abilities.includes('Iron Fist'));
case 'Infiltrator':
- return (moves.has('rest') && moves.has('sleeptalk')) || (isDoubles && abilities.has('Clear Body'));
+ return (moves.has('rest') && moves.has('sleeptalk')) || (isDoubles && abilities.includes('Clear Body'));
case 'Intimidate':
if (species.id === 'salamence' && moves.has('dragondance')) return true;
return ['bodyslam', 'bounce', 'tripleaxel'].some(m => moves.has(m));
case 'Iron Fist':
return (counter.get('ironfist') < 2 || moves.has('dynamicpunch'));
case 'Justified':
- return (isDoubles && abilities.has('Inner Focus'));
+ return (isDoubles && abilities.includes('Inner Focus'));
case 'Lightning Rod':
return (species.types.includes('Ground') || (!isNoDynamax && counter.setupType === 'Physical'));
case 'Limber':
@@ -1557,11 +1563,11 @@ export class RandomGen8Teams {
return !moves.has('hypervoice');
case 'Magic Guard':
// For Sigilyph
- return (abilities.has('Tinted Lens') && !counter.get('Status') && !isDoubles);
+ return (abilities.includes('Tinted Lens') && !counter.get('Status') && !isDoubles);
case 'Mold Breaker':
return (
- abilities.has('Adaptability') || abilities.has('Scrappy') || (abilities.has('Unburden') && !!counter.setupType) ||
- (abilities.has('Sheer Force') && !!counter.get('sheerforce'))
+ abilities.includes('Adaptability') || abilities.includes('Scrappy') || (abilities.includes('Unburden') && !!counter.setupType) ||
+ (abilities.includes('Sheer Force') && !!counter.get('sheerforce'))
);
case 'Moxie':
return (counter.get('Physical') < 2 || moves.has('stealthrock') || moves.has('defog'));
@@ -1579,7 +1585,7 @@ export class RandomGen8Teams {
return !counter.get('Normal');
case 'Regenerator':
// For Reuniclus
- return abilities.has('Magic Guard');
+ return abilities.includes('Magic Guard');
case 'Reckless':
return !counter.get('recoil') || moves.has('curse');
case 'Rock Head':
@@ -1599,11 +1605,11 @@ export class RandomGen8Teams {
// For Scrafty
return moves.has('dragondance');
case 'Sheer Force':
- return (!counter.get('sheerforce') || abilities.has('Guts') || (species.id === 'druddigon' && !isDoubles));
+ return (!counter.get('sheerforce') || abilities.includes('Guts') || (species.id === 'druddigon' && !isDoubles));
case 'Shell Armor':
return (species.id === 'omastar' && (moves.has('spikes') || moves.has('stealthrock')));
case 'Slush Rush':
- return (!teamDetails.hail && !abilities.has('Swift Swim'));
+ return (!teamDetails.hail && !abilities.includes('Swift Swim'));
case 'Sniper':
// Inteleon wants Torrent unless it is Gmax
return (species.name === 'Inteleon' || (counter.get('Water') > 1 && !moves.has('focusenergy')));
@@ -1614,7 +1620,7 @@ export class RandomGen8Teams {
case 'Steely Spirit':
return (moves.has('fakeout') && !isDoubles);
case 'Sturdy':
- return (moves.has('bulkup') || !!counter.get('recoil') || (!isNoDynamax && abilities.has('Solid Rock')));
+ return (moves.has('bulkup') || !!counter.get('recoil') || (!isNoDynamax && abilities.includes('Solid Rock')));
case 'Swarm':
return (!counter.get('Bug') || !!counter.get('recovery'));
case 'Sweet Veil':
@@ -1623,15 +1629,15 @@ export class RandomGen8Teams {
if (isNoDynamax) {
const neverWantsSwim = !moves.has('raindance') && [
'Intimidate', 'Rock Head', 'Water Absorb',
- ].some(m => abilities.has(m));
+ ].some(m => abilities.includes(m));
const noSwimIfNoRain = !moves.has('raindance') && [
'Cloud Nine', 'Lightning Rod', 'Intimidate', 'Rock Head', 'Sturdy', 'Water Absorb', 'Weak Armor',
- ].some(m => abilities.has(m));
+ ].some(m => abilities.includes(m));
return teamDetails.rain ? neverWantsSwim : noSwimIfNoRain;
}
return (!moves.has('raindance') && (
- ['Intimidate', 'Rock Head', 'Slush Rush', 'Water Absorb'].some(abil => abilities.has(abil)) ||
- (abilities.has('Lightning Rod') && !counter.setupType)
+ ['Intimidate', 'Rock Head', 'Slush Rush', 'Water Absorb'].some(abil => abilities.includes(abil)) ||
+ (abilities.includes('Lightning Rod') && !counter.setupType)
));
case 'Synchronize':
return counter.get('Status') < 3;
@@ -1639,7 +1645,7 @@ export class RandomGen8Teams {
return (
!counter.get('technician') ||
moves.has('tailslap') ||
- abilities.has('Punk Rock') ||
+ abilities.includes('Punk Rock') ||
// For Doubles Alolan Persian
movePool.includes('snarl')
);
@@ -1648,7 +1654,7 @@ export class RandomGen8Teams {
// For Sigilyph
moves.has('defog') ||
// For Butterfree
- (moves.has('hurricane') && abilities.has('Compound Eyes')) ||
+ (moves.has('hurricane') && abilities.includes('Compound Eyes')) ||
(counter.get('Status') > 2 && !counter.setupType)
);
case 'Torrent':
@@ -1661,13 +1667,13 @@ export class RandomGen8Teams {
// For Swoobat and Clefable
return (!!counter.setupType || moves.has('fireblast'));
case 'Unburden':
- return (abilities.has('Prankster') || !counter.setupType && !isDoubles);
+ return (abilities.includes('Prankster') || !counter.setupType && !isDoubles);
case 'Volt Absorb':
return (this.dex.getEffectiveness('Electric', species) < -1);
case 'Water Absorb':
return (
moves.has('raindance') ||
- ['Drizzle', 'Strong Jaw', 'Unaware', 'Volt Absorb'].some(abil => abilities.has(abil))
+ ['Drizzle', 'Strong Jaw', 'Unaware', 'Volt Absorb'].some(abil => abilities.includes(abil))
);
case 'Weak Armor':
// The Speed less than 50 case is intended for Cursola, but could apply to any slow Pokémon.
@@ -1681,6 +1687,105 @@ export class RandomGen8Teams {
return false;
}
+
+ getAbility(
+ types: Set,
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
+ isDoubles: boolean,
+ isNoDynamax: boolean
+ ): string {
+ const abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a));
+ Utils.sortBy(abilityData, abil => -abil.rating);
+
+ if (abilityData.length <= 1) return abilityData[0].name;
+
+ // Hard-code abilities here
+
+ // Lopunny, and other Facade users, don't want Limber, even if other abilities are poorly rated,
+ // since paralysis would arguably be good for them.
+ if (species.id === 'lopunny' && moves.has('facade')) return 'Cute Charm';
+ if (species.id === 'copperajahgmax') return 'Heavy Metal';
+ if (abilities.includes('Guts') &&
+ // for Ursaring in BDSP
+ !abilities.includes('Quick Feet') && (
+ species.id === 'gurdurr' || species.id === 'throh' ||
+ moves.has('facade') || (moves.has('rest') && moves.has('sleeptalk'))
+ )) return 'Guts';
+ if (abilities.includes('Moxie') && (counter.get('Physical') > 3 || moves.has('bounce')) && !isDoubles) return 'Moxie';
+
+ if (isDoubles) {
+ if (abilities.includes('Competitive') && species.id !== 'boltund' && species.id !== 'gothitelle') return 'Competitive';
+ if (abilities.includes('Friend Guard')) return 'Friend Guard';
+ if (abilities.includes('Gluttony') && moves.has('recycle')) return 'Gluttony';
+ if (abilities.includes('Guts')) return 'Guts';
+ if (abilities.includes('Harvest')) return 'Harvest';
+ if (abilities.includes('Healer') && (
+ abilities.includes('Natural Cure') ||
+ (abilities.includes('Aroma Veil') && this.randomChance(1, 2))
+ )) return 'Healer';
+ if (abilities.includes('Intimidate')) return 'Intimidate';
+ if (species.id === 'lopunny') return 'Klutz';
+ if (abilities.includes('Magic Guard') && !abilities.includes('Unaware')) return 'Magic Guard';
+ if (abilities.includes('Ripen')) return 'Ripen';
+ if (abilities.includes('Stalwart')) return 'Stalwart';
+ if (abilities.includes('Storm Drain')) return 'Storm Drain';
+ if (abilities.includes('Telepathy') && (
+ abilities.includes('Pressure') || abilities.includes('Analytic')
+ )) return 'Telepathy';
+ }
+
+ let abilityAllowed: Ability[] = [];
+ // Obtain a list of abilities that are allowed (not culled)
+ for (const ability of abilityData) {
+ if (ability.rating >= 1 && !this.shouldCullAbility(
+ ability.name, types, moves, abilities, counter, movePool, teamDetails, species, '', '', isDoubles, isNoDynamax
+ )) {
+ abilityAllowed.push(ability);
+ }
+ }
+
+ // If all abilities are rejected, re-allow all abilities
+ if (!abilityAllowed.length) {
+ for (const ability of abilityData) {
+ if (ability.rating > 0) abilityAllowed.push(ability);
+ }
+ if (!abilityAllowed.length) abilityAllowed = abilityData;
+ }
+
+ if (abilityAllowed.length === 1) return abilityAllowed[0].name;
+ // Sort abilities by rating with an element of randomness
+ // All three abilities can be chosen
+ if (abilityAllowed[2] && abilityAllowed[0].rating - 0.5 <= abilityAllowed[2].rating) {
+ if (abilityAllowed[1].rating <= abilityAllowed[2].rating) {
+ if (this.randomChance(1, 2)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]];
+ } else {
+ if (this.randomChance(1, 3)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]];
+ }
+ if (abilityAllowed[0].rating <= abilityAllowed[1].rating) {
+ if (this.randomChance(2, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];
+ } else {
+ if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];
+ }
+ } else {
+ // Third ability cannot be chosen
+ if (abilityAllowed[0].rating <= abilityAllowed[1].rating) {
+ if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];
+ } else if (abilityAllowed[0].rating - 0.5 <= abilityAllowed[1].rating) {
+ if (this.randomChance(1, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];
+ }
+ }
+
+ // After sorting, choose the first ability
+ return abilityAllowed[0].name;
+ }
+
getHighPriorityItem(
ability: string,
types: Set,
@@ -1781,11 +1886,11 @@ export class RandomGen8Teams {
ability: string,
types: Set,
moves: Set,
- abilities: Set,
+ abilities: string[],
counter: MoveCounter,
teamDetails: RandomTeamsTypes.TeamDetails,
species: Species,
- ) {
+ ): string | undefined {
const defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd;
if (
@@ -1799,7 +1904,7 @@ export class RandomGen8Teams {
moves.has('flipturn') || moves.has('uturn')
)) {
return (
- !counter.get('priority') && !abilities.has('Speed Boost') &&
+ !counter.get('priority') && !abilities.includes('Speed Boost') &&
species.baseStats.spe >= 60 && species.baseStats.spe <= 100 &&
this.randomChance(1, 2)
) ? 'Choice Scarf' : 'Choice Band';
@@ -1903,7 +2008,7 @@ export class RandomGen8Teams {
if (counter.damagingMoves.size >= 4 && defensiveStatTotal >= 235) return 'Assault Vest';
if (
['clearsmog', 'curse', 'haze', 'healbell', 'protect', 'sleeptalk', 'strangesteam'].some(m => moves.has(m)) &&
- (ability === 'Moody' || !isDoubles)
+ !isDoubles
) return 'Leftovers';
}
@@ -1911,7 +2016,7 @@ export class RandomGen8Teams {
ability: string,
types: Set,
moves: Set,
- abilities: Set,
+ abilities: string[],
counter: MoveCounter,
teamDetails: RandomTeamsTypes.TeamDetails,
species: Species,
@@ -1940,12 +2045,11 @@ export class RandomGen8Teams {
(!teamDetails.defog || ability === 'Intimidate' || moves.has('uturn') || moves.has('voltswitch'))
);
const spinnerCase = (moves.has('rapidspin') && (ability === 'Regenerator' || !!counter.get('recovery')));
- // Glalie prefers Leftovers
- if (!isDoubles && (rockWeaknessCase || spinnerCase) && species.id !== 'glalie') return 'Heavy-Duty Boots';
+ if (!isDoubles && (rockWeaknessCase || spinnerCase)) return 'Heavy-Duty Boots';
if (
!isDoubles && this.dex.getEffectiveness('Ground', species) >= 2 && !types.has('Poison') &&
- ability !== 'Levitate' && !abilities.has('Iron Barbs')
+ ability !== 'Levitate' && !abilities.includes('Iron Barbs')
) return 'Air Balloon';
if (
!isDoubles &&
@@ -2008,8 +2112,8 @@ export class RandomGen8Teams {
const customScale: {[k: string]: number} = {
// These Pokemon are too strong and need a lower level
zaciancrowned: 65, calyrexshadow: 68, xerneas: 70, necrozmaduskmane: 72, zacian: 72, kyogre: 73, eternatus: 73,
- zekrom: 74, marshadow: 75, glalie: 78, urshifurapidstrike: 79, haxorus: 80, inteleon: 80,
- cresselia: 83, octillery: 84, jolteon: 84, swoobat: 84, dugtrio: 84, slurpuff: 84, polteageist: 84,
+ zekrom: 74, marshadow: 75, urshifurapidstrike: 79, haxorus: 80, inteleon: 80,
+ cresselia: 83, jolteon: 84, swoobat: 84, dugtrio: 84, slurpuff: 84, polteageist: 84,
wobbuffet: 86, scrafty: 86,
// These Pokemon are too weak and need a higher level
delibird: 100, vespiquen: 96, pikachu: 92, shedinja: 92, solrock: 90, arctozolt: 88, reuniclus: 87,
@@ -2043,6 +2147,28 @@ export class RandomGen8Teams {
return 80;
}
+ getForme(species: Species): string {
+ if (typeof species.battleOnly === 'string') {
+ // Only change the forme. The species has custom moves, and may have different typing and requirements.
+ return species.battleOnly;
+ }
+ if (species.cosmeticFormes) return this.sample([species.name].concat(species.cosmeticFormes));
+ if (species.name.endsWith('-Gmax')) return species.name.slice(0, -5);
+
+ // Consolidate mostly-cosmetic formes, at least for the purposes of Random Battles
+ if (['Magearna', 'Polteageist', 'Zarude'].includes(species.baseSpecies)) {
+ return this.sample([species.name].concat(species.otherFormes!));
+ }
+ if (species.baseSpecies === 'Basculin') return 'Basculin' + this.sample(['', '-Blue-Striped']);
+ if (species.baseSpecies === 'Keldeo' && this.gen <= 7) return 'Keldeo' + this.sample(['', '-Resolute']);
+ if (species.baseSpecies === 'Pikachu' && this.dex.currentMod === 'gen8') {
+ return 'Pikachu' + this.sample(
+ ['', '-Original', '-Hoenn', '-Sinnoh', '-Unova', '-Kalos', '-Alola', '-Partner', '-World']
+ );
+ }
+ return species.name;
+ }
+
randomSet(
species: string | Species,
teamDetails: RandomTeamsTypes.TeamDetails = {},
@@ -2051,20 +2177,8 @@ export class RandomGen8Teams {
isNoDynamax = false
): RandomTeamsTypes.RandomSet {
species = this.dex.species.get(species);
- let forme = species.name;
- let gmax = false;
-
- if (typeof species.battleOnly === 'string') {
- // Only change the forme. The species has custom moves, and may have different typing and requirements.
- forme = species.battleOnly;
- }
- if (species.cosmeticFormes) {
- forme = this.sample([species.name].concat(species.cosmeticFormes));
- }
- if (species.name.endsWith('-Gmax')) {
- forme = species.name.slice(0, -5);
- gmax = true;
- }
+ const forme = this.getForme(species);
+ const gmax = species.name.endsWith('-Gmax');
const data = this.randomData[species.id];
@@ -2072,8 +2186,8 @@ export class RandomGen8Teams {
(isDoubles && data.doublesMoves) ||
(isNoDynamax && data.noDynamaxMoves) ||
data.moves;
- const movePool = (randMoves || Object.keys(this.dex.species.getLearnset(species.id)!)).slice();
- if (this.format.gameType === 'multi' || this.format.gameType === 'freeforall') {
+ const movePool: string[] = [...(randMoves || this.dex.species.getMovePool(species.id))];
+ if (this.format.playerCount > 2) {
// Random Multi Battle uses doubles move pools, but Ally Switch fails in multi battles
// Random Free-For-All also uses doubles move pools, for now
const allySwitch = movePool.indexOf('allyswitch');
@@ -2094,8 +2208,9 @@ export class RandomGen8Teams {
const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};
const types = new Set(species.types);
- const abilities = new Set(Object.values(species.abilities));
- if (species.unreleasedHidden) abilities.delete(species.abilities.H);
+ const abilitiesSet = new Set(Object.values(species.abilities));
+ if (species.unreleasedHidden) abilitiesSet.delete(species.abilities.H);
+ const abilities = Array.from(abilitiesSet);
const moves = new Set();
let counter: MoveCounter;
@@ -2150,7 +2265,7 @@ export class RandomGen8Teams {
!(species.id === 'shuckle' && ['stealthrock', 'stickyweb'].includes(move.id)) && (
move.category === 'Status' ||
(!types.has(move.type) && move.id !== 'judgment') ||
- (isLowBP && !move.multihit && !abilities.has('Technician'))
+ (isLowBP && !move.multihit && !abilities.includes('Technician'))
)
);
// Setup-supported moves should only be rejected under specific circumstances
@@ -2172,7 +2287,7 @@ export class RandomGen8Teams {
// Swords Dance Mew should have Brave Bird
(moves.has('swordsdance') && species.id === 'mew' && runEnforcementChecker('Flying')) ||
// Dhelmise should have Anchor Shot
- (abilities.has('Steelworker') && runEnforcementChecker('Steel')) ||
+ (abilities.includes('Steelworker') && runEnforcementChecker('Steel')) ||
// Check for miscellaneous important moves
(!isDoubles && runEnforcementChecker('recovery') && move.id !== 'stickyweb') ||
runEnforcementChecker('screens') ||
@@ -2233,78 +2348,8 @@ export class RandomGen8Teams {
}
}
- const abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a));
- Utils.sortBy(abilityData, abil => -abil.rating);
-
- if (abilityData[1]) {
- // Sort abilities by rating with an element of randomness
- if (abilityData[2] && abilityData[1].rating <= abilityData[2].rating && this.randomChance(1, 2)) {
- [abilityData[1], abilityData[2]] = [abilityData[2], abilityData[1]];
- }
- if (abilityData[0].rating <= abilityData[1].rating) {
- if (this.randomChance(1, 2)) [abilityData[0], abilityData[1]] = [abilityData[1], abilityData[0]];
- } else if (abilityData[0].rating - 0.6 <= abilityData[1].rating) {
- if (this.randomChance(2, 3)) [abilityData[0], abilityData[1]] = [abilityData[1], abilityData[0]];
- }
-
- // Start with the first abiility and work our way through, culling as we go
- ability = abilityData[0].name;
- let rejectAbility = false;
- do {
- rejectAbility = this.shouldCullAbility(
- ability, types, moves, abilities, counter, movePool, teamDetails, species, isDoubles, isNoDynamax
- );
-
- if (rejectAbility) {
- // Lopunny, and other Facade users, don't want Limber, even if other abilities are poorly rated,
- // since paralysis would arguably be good for them.
- const limberFacade = moves.has('facade') && ability === 'Limber';
-
- if (ability === abilityData[0].name && (abilityData[1].rating >= 1 || limberFacade)) {
- ability = abilityData[1].name;
- } else if (ability === abilityData[1].name && abilityData[2] && (abilityData[2].rating >= 1 || limberFacade)) {
- ability = abilityData[2].name;
- } else {
- // Default to the highest rated ability if all are rejected
- ability = abilityData[0].name;
- rejectAbility = false;
- }
- }
- } while (rejectAbility);
-
- // Hardcoded abilities for certain contexts
- if (forme === 'Copperajah' && gmax) {
- ability = 'Heavy Metal';
- } else if (abilities.has('Guts') &&
- // for Ursaring in BDSP
- !abilities.has('Quick Feet') && (
- species.id === 'gurdurr' || species.id === 'throh' ||
- moves.has('facade') || (moves.has('rest') && moves.has('sleeptalk'))
- )) {
- ability = 'Guts';
- } else if (abilities.has('Moxie') && (counter.get('Physical') > 3 || moves.has('bounce')) && !isDoubles) {
- ability = 'Moxie';
- } else if (isDoubles) {
- if (abilities.has('Competitive') && ability !== 'Shadow Tag' && ability !== 'Strong Jaw') ability = 'Competitive';
- if (abilities.has('Friend Guard')) ability = 'Friend Guard';
- if (abilities.has('Gluttony') && moves.has('recycle')) ability = 'Gluttony';
- if (abilities.has('Guts')) ability = 'Guts';
- if (abilities.has('Harvest')) ability = 'Harvest';
- if (abilities.has('Healer') && (
- abilities.has('Natural Cure') ||
- (abilities.has('Aroma Veil') && this.randomChance(1, 2))
- )) ability = 'Healer';
- if (abilities.has('Intimidate')) ability = 'Intimidate';
- if (abilities.has('Klutz') && ability === 'Limber') ability = 'Klutz';
- if (abilities.has('Magic Guard') && ability !== 'Friend Guard' && ability !== 'Unaware') ability = 'Magic Guard';
- if (abilities.has('Ripen')) ability = 'Ripen';
- if (abilities.has('Stalwart')) ability = 'Stalwart';
- if (abilities.has('Storm Drain')) ability = 'Storm Drain';
- if (abilities.has('Telepathy') && (ability === 'Pressure' || abilities.has('Analytic'))) ability = 'Telepathy';
- }
- } else {
- ability = abilityData[0].name;
- }
+ ability = this.getAbility(types, moves, abilities, counter, movePool, teamDetails, species,
+ '', '', isDoubles, isNoDynamax);
if (species.requiredItems) {
item = this.sample(species.requiredItems);
@@ -2331,9 +2376,6 @@ export class RandomGen8Teams {
if (item === 'Leftovers' && types.has('Poison')) {
item = 'Black Sludge';
}
- if (species.baseSpecies === 'Pikachu' && !gmax && this.dex.currentMod !== 'gen8bdsp') {
- forme = 'Pikachu' + this.sample(['', '-Original', '-Hoenn', '-Sinnoh', '-Unova', '-Kalos', '-Alola', '-Partner', '-World']);
- }
const level: number = this.getLevel(species, isDoubles, isNoDynamax);
@@ -2403,12 +2445,14 @@ export class RandomGen8Teams {
type: string,
pokemonToExclude: RandomTeamsTypes.RandomSet[] = [],
isMonotype = false,
- ) {
+ pokemonList: string[]
+ ): [{[k: string]: string[]}, string[]] {
const exclude = pokemonToExclude.map(p => toID(p.species));
- const pokemonPool = [];
- for (let species of this.dex.species.all()) {
- if (species.gen > this.gen || exclude.includes(species.id)) continue;
- if (this.dex.currentMod === 'gen8bdsp' && species.gen > 4) continue;
+ const pokemonPool: {[k: string]: string[]} = {};
+ const baseSpeciesPool = [];
+ for (const pokemon of pokemonList) {
+ let species = this.dex.species.get(pokemon);
+ if (exclude.includes(species.id)) continue;
if (isMonotype) {
if (!species.types.includes(type)) continue;
if (typeof species.battleOnly === 'string') {
@@ -2416,9 +2460,20 @@ export class RandomGen8Teams {
if (!species.types.includes(type)) continue;
}
}
- pokemonPool.push(species.id);
+
+ if (species.baseSpecies in pokemonPool) {
+ pokemonPool[species.baseSpecies].push(pokemon);
+ } else {
+ pokemonPool[species.baseSpecies] = [pokemon];
+ }
}
- return pokemonPool;
+ // Include base species 1x if 1-3 formes, 2x if 4-6 formes, 3x if 7+ formes
+ for (const baseSpecies of Object.keys(pokemonPool)) {
+ // Squawkabilly has 4 formes, but only 2 functionally different formes, so only include it 1x
+ const weight = (baseSpecies === 'Squawkabilly') ? 1 : Math.min(Math.ceil(pokemonPool[baseSpecies].length / 3), 3);
+ for (let i = 0; i < weight; i++) baseSpeciesPool.push(baseSpecies);
+ }
+ return [pokemonPool, baseSpeciesPool];
}
randomTeam() {
@@ -2430,6 +2485,7 @@ export class RandomGen8Teams {
// For Monotype
const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
+ const isDoubles = this.format.gameType !== 'singles';
const typePool = this.dex.types.names();
const type = this.forceMonotype || this.sample(typePool);
@@ -2439,86 +2495,49 @@ export class RandomGen8Teams {
const baseFormes: {[k: string]: number} = {};
- const tierCount: {[k: string]: number} = {};
const typeCount: {[k: string]: number} = {};
const typeComboCount: {[k: string]: number} = {};
const typeWeaknesses: {[k: string]: number} = {};
+ const typeDoubleWeaknesses: {[k: string]: number} = {};
const teamDetails: RandomTeamsTypes.TeamDetails = {};
+ let numMaxLevelPokemon = 0;
- const pokemonPool = this.getPokemonPool(type, pokemon, isMonotype);
- while (pokemonPool.length && pokemon.length < this.maxTeamSize) {
- let species = this.dex.species.get(this.sampleNoReplace(pokemonPool));
- if (!species.exists) continue;
-
- // Check if the forme has moves for random battle
- if (this.format.gameType === 'singles') {
- if (!this.randomData[species.id]?.moves) continue;
- } else {
- if (!this.randomData[species.id]?.doublesMoves) continue;
+ const pokemonList = [];
+ for (const poke of Object.keys(this.randomData)) {
+ if (isDoubles && this.randomData[poke]?.doublesMoves || !isDoubles && this.randomData[poke]?.moves) {
+ pokemonList.push(poke);
}
+ }
+ const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);
+ while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
+ const baseSpecies = this.sampleNoReplace(baseSpeciesPool);
+ let species = this.dex.species.get(this.sample(pokemonPool[baseSpecies]));
+ if (!species.exists) continue;
// Limit to one of each species (Species Clause)
if (baseFormes[species.baseSpecies]) continue;
- // Adjust rate for species with multiple sets
- // TODO: investigate automating this by searching for Pokémon with multiple sets
- switch (species.baseSpecies) {
- case 'Arceus': case 'Silvally':
- if (this.randomChance(8, 9) && !isMonotype) continue;
- break;
- case 'Aegislash': case 'Basculin': case 'Gourgeist': case 'Meloetta': case 'Rotom':
- if (this.randomChance(1, 2)) continue;
- break;
- case 'Greninja':
- if (this.gen >= 7 && this.randomChance(1, 2)) continue;
- break;
- case 'Darmanitan':
- if (species.gen === 8 && this.randomChance(1, 2)) continue;
- break;
- case 'Necrozma': case 'Calyrex':
- if (this.randomChance(2, 3)) continue;
- break;
- case 'Magearna': case 'Toxtricity': case 'Zacian': case 'Zamazenta': case 'Zarude':
- case 'Appletun': case 'Blastoise': case 'Butterfree': case 'Copperajah': case 'Grimmsnarl':
- case 'Inteleon': case 'Rillaboom': case 'Snorlax': case 'Urshifu': case 'Giratina': case 'Genesect':
- case 'Cinderace':
- if (this.gen >= 8 && this.randomChance(1, 2)) continue;
- break;
- }
-
// Illusion shouldn't be on the last slot
if (species.name === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue;
- // The sixth slot should not be very low level if a zoroark is present
- // Also Zacian/Zamazenta/Eternatus are rejected as they make dynamax malfunction, regardless of level
+ // The sixth slot should not be Zacian/Zamazenta/Eternatus if Zoroark is present,
+ // as they make dynamax malfunction, regardless of level
if (
pokemon.some(pkmn => pkmn.name === 'Zoroark') &&
pokemon.length >= (this.maxTeamSize - 1) &&
- (this.getLevel(species,
- this.format.gameType !== 'singles',
- this.dex.formats.getRuleTable(this.format).has('dynamaxclause')) < 72 &&
- !this.adjustLevel ||
- ['Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Eternatus'].includes(species.name))
+ ['Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Eternatus'].includes(species.name)
) {
continue;
}
- const tier = species.tier;
const types = species.types;
const typeCombo = types.slice().sort().join();
+ const weakToFreezeDry = (
+ this.dex.getEffectiveness('Ice', species) > 0 ||
+ (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water'))
+ );
// Dynamically scale limits for different team sizes. The default and minimum value is 1.
const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
- // Limit one Pokemon per tier, two for Monotype
- // This limitation is not applied to BD/SP team generation, because tiering for BD/SP is not yet complete,
- // meaning that most Pokémon are in OU.
- if (
- this.dex.currentMod !== 'gen8bdsp' &&
- (tierCount[tier] >= (this.forceMonotype || isMonotype ? 2 : 1) * limitFactor) &&
- !this.randomChance(1, Math.pow(5, tierCount[tier]))
- ) {
- continue;
- }
-
if (!isMonotype && !this.forceMonotype) {
let skip = false;
@@ -2531,7 +2550,7 @@ export class RandomGen8Teams {
}
if (skip) continue;
- // Limit three weak to any type
+ // Limit three weak to any type, and one double weak to any type
for (const typeName of this.dex.types.names()) {
// it's weak to the type
if (this.dex.getEffectiveness(typeName, species) > 0) {
@@ -2541,40 +2560,55 @@ export class RandomGen8Teams {
break;
}
}
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0;
+ if (typeDoubleWeaknesses[typeName] >= 1 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
}
if (skip) continue;
+
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (
+ this.dex.getEffectiveness('Fire', species) === 0 &&
+ Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length
+ ) {
+ if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0;
+ if (typeWeaknesses['Fire'] >= 3 * limitFactor) continue;
+ }
+
+ // Limit four weak to Freeze-Dry
+ if (weakToFreezeDry) {
+ if (!typeWeaknesses['Freeze-Dry']) typeWeaknesses['Freeze-Dry'] = 0;
+ if (typeWeaknesses['Freeze-Dry'] >= 4 * limitFactor) continue;
+ }
+
+ // Limit one level 100 Pokemon
+ if (
+ !this.adjustLevel && numMaxLevelPokemon >= limitFactor &&
+ (this.getLevel(species, isDoubles, this.dex.formats.getRuleTable(this.format).has('dynamaxclause')) === 100)
+ ) continue;
}
- // Limit one of any type combination, two in Monotype
- if (!this.forceMonotype && typeComboCount[typeCombo] >= (isMonotype ? 2 : 1) * limitFactor) continue;
+ // Limit three of any type combination in Monotype
+ if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue;
// The Pokemon of the Day
if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd;
const set = this.randomSet(species, teamDetails, pokemon.length === 0,
- this.format.gameType !== 'singles', this.dex.formats.getRuleTable(this.format).has('dynamaxclause'));
+ isDoubles, this.dex.formats.getRuleTable(this.format).has('dynamaxclause'));
// Okay, the set passes, add it to our team
pokemon.push(set);
- if (pokemon.length === this.maxTeamSize) {
- // Set Zoroark's level to be the same as the last Pokemon
- const illusion = teamDetails.illusion;
- if (illusion) pokemon[illusion - 1].level = pokemon[this.maxTeamSize - 1].level;
-
- // Don't bother tracking details for the last Pokemon
- break;
- }
+ // Don't bother tracking details for the last Pokemon
+ if (pokemon.length === this.maxTeamSize) break;
// Now that our Pokemon has passed all checks, we can increment our counters
baseFormes[species.baseSpecies] = 1;
- // Increment tier counter
- if (tierCount[tier]) {
- tierCount[tier]++;
- } else {
- tierCount[tier] = 1;
- }
-
// Increment type counters
for (const typeName of types) {
if (typeName in typeCount) {
@@ -2595,7 +2629,18 @@ export class RandomGen8Teams {
if (this.dex.getEffectiveness(typeName, species) > 0) {
typeWeaknesses[typeName]++;
}
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ typeDoubleWeaknesses[typeName]++;
+ }
}
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) {
+ typeWeaknesses['Fire']++;
+ }
+ if (weakToFreezeDry) typeWeaknesses['Freeze-Dry']++;
+
+ // Increment level 100 counter
+ if (set.level === 100) numMaxLevelPokemon++;
// Track what the team has
if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1;
@@ -2611,9 +2656,6 @@ export class RandomGen8Teams {
if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) {
teamDetails.screens = 1;
}
-
- // For setting Zoroark's level
- if (set.ability === 'Illusion') teamDetails.illusion = pokemon.length;
}
if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { // large teams sometimes cannot be built
throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
@@ -2685,16 +2727,30 @@ export class RandomGen8Teams {
// Build a pool of eligible sets, given the team partners
// Also keep track of sets with moves the team requires
- let effectivePool: {set: AnyObject, moveVariants?: number[]}[] = [];
+ let effectivePool: {set: AnyObject, moveVariants?: number[], item?: string, ability?: string}[] = [];
const priorityPool = [];
for (const curSet of setList) {
// if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;
- const item = this.dex.items.get(curSet.item);
- if (itemsMax[item.id] && teamData.has[item.id] >= itemsMax[item.id]) continue;
+ // reject disallowed items, specifically a second of any given choice item
+ const allowedItems: string[] = [];
+ for (const itemString of curSet.item) {
+ const item = this.dex.items.get(itemString);
+ if (itemsMax[item.id] && teamData.has[item.id] >= itemsMax[item.id]) continue;
+ allowedItems.push(itemString);
+ }
+ if (allowedItems.length === 0) continue;
+ const curSetItem = this.sample(allowedItems);
- const ability = this.dex.abilities.get(curSet.ability);
- if (teamData.weather && weatherAbilities.includes(ability.id)) continue; // reject 2+ weather setters
+ // reject 2+ weather setters
+ const allowedAbilities: string[] = [];
+ for (const abilityString of curSet.ability) {
+ const ability = this.dex.abilities.get(abilityString);
+ if (teamData.weather && weatherAbilities.includes(ability.id)) continue;
+ allowedAbilities.push(abilityString);
+ }
+ if (allowedAbilities.length === 0) continue;
+ const curSetAbility = this.sample(allowedAbilities);
let reject = false;
let hasRequiredMove = false;
@@ -2712,8 +2768,10 @@ export class RandomGen8Teams {
curSetVariants.push(variantIndex);
}
if (reject) continue;
- effectivePool.push({set: curSet, moveVariants: curSetVariants});
- if (hasRequiredMove) priorityPool.push({set: curSet, moveVariants: curSetVariants});
+
+ const fullSetSpec = {set: curSet, moveVariants: curSetVariants, item: curSetItem, ability: curSetAbility};
+ effectivePool.push(fullSetSpec);
+ if (hasRequiredMove) priorityPool.push(fullSetSpec);
}
if (priorityPool.length) effectivePool = priorityPool;
@@ -2731,8 +2789,8 @@ export class RandomGen8Teams {
}
- const item = this.sampleIfArray(setData.set.item);
- const ability = this.sampleIfArray(setData.set.ability);
+ const item = setData.item || this.sampleIfArray(setData.set.item);
+ const ability = setData.ability || this.sampleIfArray(setData.set.ability);
const nature = this.sampleIfArray(setData.set.nature);
const level = this.adjustLevel || setData.set.level || (tier === "LC" ? 5 : 100);
@@ -3030,8 +3088,6 @@ export class RandomGen8Teams {
typeCount: {}, typeComboCount: {}, baseFormes: {}, has: {}, forceResult: forceResult,
weaknesses: {}, resistances: {},
};
- const requiredMoveFamilies: string[] = [];
- const requiredMoves: {[k: string]: string} = {};
const weatherAbilitiesSet: {[k: string]: string} = {
drizzle: 'raindance',
drought: 'sunnyday',
@@ -3045,31 +3101,29 @@ export class RandomGen8Teams {
thickfat: ['Ice', 'Fire'],
levitate: ['Ground'],
};
+ const limitFactor = Math.ceil(this.maxTeamSize / 6);
+ /**
+ * Weighted random shuffle
+ * Uses the fact that for two uniform variables x1 and x2, x1^(1/w1) is larger than x2^(1/w2)
+ * with probability equal to w1/(w1+w2), which is what we want. See e.g. here https://arxiv.org/pdf/1012.0256.pdf,
+ * original paper is behind a paywall.
+ */
+ const shuffledSpecies = [];
+ for (const speciesName of pokemonPool) {
+ const sortObject = {
+ speciesName: speciesName,
+ score: Math.pow(this.prng.next(), 1 / this.randomBSSFactorySets[speciesName].usage),
+ };
+ shuffledSpecies.push(sortObject);
+ }
+ shuffledSpecies.sort((a, b) => a.score - b.score);
- while (pokemonPool.length && pokemon.length < this.maxTeamSize) {
- // Weighted random sampling
- let maxUsage = 0;
- const sets: {[k: string]: number} = {};
- for (const specie of pokemonPool) {
- if (teamData.baseFormes[this.dex.species.get(specie).baseSpecies]) continue; // Species Clause
- const usage: number = this.randomBSSFactorySets[specie].usage;
- sets[specie] = usage + maxUsage;
- maxUsage += usage;
- }
-
- const usage = this.random(1, maxUsage);
- let last = 0;
- let specie;
- for (const key of Object.keys(sets)) {
- if (usage > last && usage <= sets[key]) {
- specie = key;
- break;
- }
- last = sets[key];
- }
-
+ while (shuffledSpecies.length && pokemon.length < this.maxTeamSize) {
+ // repeated popping from weighted shuffle is equivalent to repeated weighted sampling without replacement
+ const specie = shuffledSpecies.pop()!.speciesName;
const species = this.dex.species.get(specie);
if (!species.exists) continue;
+
if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;
// Limit to one of each species (Species Clause)
@@ -3078,10 +3132,12 @@ export class RandomGen8Teams {
// Limit 2 of any type (most of the time)
const types = species.types;
let skip = false;
- for (const type of types) {
- if (teamData.typeCount[type] > 1 && this.randomChance(4, 5)) {
- skip = true;
- break;
+ if (!this.forceMonotype) {
+ for (const type of types) {
+ if (teamData.typeCount[type] >= 2 * limitFactor && this.randomChance(4, 5)) {
+ skip = true;
+ break;
+ }
}
}
if (skip) continue;
@@ -3095,7 +3151,7 @@ export class RandomGen8Teams {
// Drought and Drizzle don't count towards the type combo limit
typeCombo = set.ability;
}
- if (typeCombo in teamData.typeComboCount) continue;
+ if (!this.forceMonotype && teamData.typeComboCount[typeCombo] >= limitFactor) continue;
const itemData = this.dex.items.get(set.item);
if (teamData.has[itemData.id]) continue; // Item Clause
@@ -3111,7 +3167,11 @@ export class RandomGen8Teams {
teamData.typeCount[type] = 1;
}
}
- teamData.typeComboCount[typeCombo] = 1;
+ if (typeCombo in teamData.typeComboCount) {
+ teamData.typeComboCount[typeCombo]++;
+ } else {
+ teamData.typeComboCount[typeCombo] = 1;
+ }
teamData.baseFormes[species.baseSpecies] = 1;
@@ -3129,9 +3189,6 @@ export class RandomGen8Teams {
} else {
teamData.has[moveId] = 1;
}
- if (moveId in requiredMoves) {
- teamData.has[requiredMoves[moveId]] = 1;
- }
}
for (const typeName of this.dex.types.names()) {
@@ -3152,15 +3209,12 @@ export class RandomGen8Teams {
}
}
}
- if (pokemon.length < this.maxTeamSize) return this.randomBSSFactoryTeam(side, ++depth);
+ if (!teamData.forceResult && pokemon.length < this.maxTeamSize) return this.randomBSSFactoryTeam(side, ++depth);
- // Quality control
- if (!teamData.forceResult) {
- for (const requiredFamily of requiredMoveFamilies) {
- if (!teamData.has[requiredFamily]) return this.randomBSSFactoryTeam(side, ++depth);
- }
+ // Quality control we cannot afford for monotype
+ if (!teamData.forceResult && !this.forceMonotype) {
for (const type in teamData.weaknesses) {
- if (teamData.weaknesses[type] >= 3) return this.randomBSSFactoryTeam(side, ++depth);
+ if (teamData.weaknesses[type] >= 3 * limitFactor) return this.randomBSSFactoryTeam(side, ++depth);
}
}
diff --git a/data/mods/gen8bdsp/random-data.json b/data/random-battles/gen8bdsp/data.json
similarity index 99%
rename from data/mods/gen8bdsp/random-data.json
rename to data/random-battles/gen8bdsp/data.json
index e900fabee420..d4a11460f768 100644
--- a/data/mods/gen8bdsp/random-data.json
+++ b/data/random-battles/gen8bdsp/data.json
@@ -123,7 +123,7 @@
"moves": ["agility", "razorshell", "rockslide", "swordsdance", "xscissor"]
},
"electrode": {
- "moves": ["explosion", "lightscreen", "taunt", "thunderbolt", "voltswitch"]
+ "moves": ["explosion", "taunt", "thunderbolt", "voltswitch"]
},
"exeggutor": {
"moves": ["gigadrain", "leechseed", "psychic", "sleeppowder", "substitute"]
@@ -261,7 +261,7 @@
"moves": ["acrobatics", "leechseed", "sleeppowder", "strengthsap", "substitute"]
},
"sunflora": {
- "moves": ["energyball", "lightscreen", "sludgebomb", "synthesis"]
+ "moves": ["energyball", "leechseed", "sludgebomb", "synthesis"]
},
"quagsire": {
"moves": ["earthquake", "recover", "scald", "toxic"]
diff --git a/data/mods/gen8bdsp/random-teams.ts b/data/random-battles/gen8bdsp/teams.ts
similarity index 93%
rename from data/mods/gen8bdsp/random-teams.ts
rename to data/random-battles/gen8bdsp/teams.ts
index d6bfc0669e81..c083ff6c54d2 100644
--- a/data/mods/gen8bdsp/random-teams.ts
+++ b/data/random-battles/gen8bdsp/teams.ts
@@ -1,10 +1,10 @@
// BDSP team generation logic is currently largely shared with Swsh
import {PRNG, PRNGSeed} from '../../../sim/prng';
-import {MoveCounter, RandomGen8Teams, OldRandomBattleSpecies} from '../gen8/random-teams';
+import {MoveCounter, RandomGen8Teams, OldRandomBattleSpecies} from '../gen8/teams';
export class RandomBDSPTeams extends RandomGen8Teams {
- randomData: {[species: string]: OldRandomBattleSpecies} = require('./random-data.json');
+ randomData: {[species: string]: OldRandomBattleSpecies} = require('./data.json');
constructor(format: Format | string, prng: PRNG | PRNGSeed | null) {
super(format, prng);
@@ -133,7 +133,7 @@ export class RandomBDSPTeams extends RandomGen8Teams {
ability: string,
types: Set,
moves: Set,
- abilities: Set,
+ abilities: string[],
counter: MoveCounter,
teamDetails: RandomTeamsTypes.TeamDetails,
species: Species,
@@ -181,7 +181,7 @@ export class RandomBDSPTeams extends RandomGen8Teams {
move: Move,
types: Set,
moves: Set,
- abilities: Set,
+ abilities: string[],
counter: MoveCounter,
movePool: string[],
teamDetails: RandomTeamsTypes.TeamDetails,
@@ -213,7 +213,7 @@ export class RandomBDSPTeams extends RandomGen8Teams {
return {cull: movePool.includes('protect') || movePool.includes('wish')};
case 'fireblast':
// Special case for Togekiss, which always wants Aura Sphere
- return {cull: abilities.has('Serene Grace') && (!moves.has('trick') || counter.get('Status') > 1)};
+ return {cull: abilities.includes('Serene Grace') && (!moves.has('trick') || counter.get('Status') > 1)};
case 'firepunch':
// Special case for Darmanitan-Zen-Galar, which doesn't always want Fire Punch
return {cull: moves.has('earthquake') && movePool.includes('substitute')};
@@ -229,7 +229,7 @@ export class RandomBDSPTeams extends RandomGen8Teams {
// Milotic always wants RestTalk
if (species.id === 'milotic') return {cull: false};
if (moves.has('stealthrock') || !moves.has('rest')) return {cull: true};
- if (movePool.length > 1 && !abilities.has('Contrary')) {
+ if (movePool.length > 1 && !abilities.includes('Contrary')) {
const rest = movePool.indexOf('rest');
if (rest >= 0) this.fastPop(movePool, rest);
}
@@ -313,7 +313,7 @@ export class RandomBDSPTeams extends RandomGen8Teams {
if (
!isDoubles &&
counter.get('Status') < 2 &&
- ['Guts', 'Quick Feet', 'Speed Boost', 'Moody'].every(m => !abilities.has(m))
+ ['Guts', 'Quick Feet', 'Speed Boost', 'Moody'].every(m => !abilities.includes(m))
) return {cull: true};
if (movePool.includes('leechseed') || (movePool.includes('toxic') && !moves.has('wish'))) return {cull: true};
if (isDoubles && (
@@ -361,7 +361,7 @@ export class RandomBDSPTeams extends RandomGen8Teams {
return {cull: (
!!counter.get('speedsetup') ||
(counter.setupType && !bugSwordsDanceCase) ||
- (abilities.has('Speed Boost') && moves.has('protect')) ||
+ (abilities.includes('Speed Boost') && moves.has('protect')) ||
(isDoubles && moves.has('leechlife'))
)};
@@ -416,7 +416,7 @@ export class RandomBDSPTeams extends RandomGen8Teams {
return {cull: moves.has('closecombat') || (!types.has('Fighting') && movePool.includes('swordsdance'))};
case 'facade':
// Prefer Dynamic Punch when it can be a guaranteed-hit STAB move (mostly for Machamp)
- return {cull: moves.has('dynamicpunch') && species.types.includes('Fighting') && abilities.has('No Guard')};
+ return {cull: moves.has('dynamicpunch') && species.types.includes('Fighting') && abilities.includes('No Guard')};
case 'focusblast':
// Special cases for Blastoise and Regice; Blastoise wants Shell Smash, and Regice wants Thunderbolt
return {cull: movePool.includes('shellsmash') || hasRestTalk};
@@ -424,8 +424,8 @@ export class RandomBDSPTeams extends RandomGen8Teams {
return {
cull: moves.has('hydropump') ||
(counter.get('Physical') >= 4 && movePool.includes('uturn')) ||
- (moves.has('substitute') && !abilities.has('Contrary')),
- isSetup: abilities.has('Contrary'),
+ (moves.has('substitute') && !abilities.includes('Contrary')),
+ isSetup: abilities.includes('Contrary'),
};
case 'poisonjab':
return {cull: !types.has('Poison') && counter.get('Status') >= 2};
@@ -444,7 +444,7 @@ export class RandomBDSPTeams extends RandomGen8Teams {
case 'psyshock':
return {cull: moves.has('psychic')};
case 'bugbuzz':
- return {cull: moves.has('uturn') && !counter.setupType && !abilities.has('Tinted Lens')};
+ return {cull: moves.has('uturn') && !counter.setupType && !abilities.includes('Tinted Lens')};
case 'leechlife':
return {cull:
(isDoubles && moves.has('lunge')) ||
@@ -509,7 +509,7 @@ export class RandomBDSPTeams extends RandomGen8Teams {
species.id !== 'breloom' &&
['bulkup', 'nastyplot', 'painsplit', 'roost', 'swordsdance'].some(m => movePool.includes(m))
);
- const shayminCase = abilities.has('Serene Grace') && movePool.includes('airslash') && !moves.has('airslash');
+ const shayminCase = abilities.includes('Serene Grace') && movePool.includes('airslash') && !moves.has('airslash');
return {cull: moves.has('rest') || moveBasedCull || shayminCase};
case 'helpinghand':
// Special case for Shuckle in Doubles, which doesn't want sets with no method to harm foes
@@ -528,11 +528,13 @@ export class RandomBDSPTeams extends RandomGen8Teams {
ability: string,
types: Set,
moves: Set,
- abilities: Set,
+ abilities: string[],
counter: MoveCounter,
movePool: string[],
teamDetails: RandomTeamsTypes.TeamDetails,
species: Species,
+ preferredType: string,
+ role: RandomTeamsTypes.Role,
isDoubles: boolean,
): boolean {
if ([
@@ -547,7 +549,7 @@ export class RandomBDSPTeams extends RandomGen8Teams {
case 'Analytic':
return (moves.has('rapidspin') || species.nfe || isDoubles);
case 'Blaze':
- return (isDoubles && abilities.has('Solar Power')) || (!isDoubles && species.id === 'charizard');
+ return (isDoubles && abilities.includes('Solar Power')) || (!isDoubles && species.id === 'charizard');
case 'Chlorophyll':
return (species.baseStats.spe > 100 || !counter.get('Fire') && !moves.has('sunnyday') && !teamDetails.sun);
case 'Cloud Nine':
@@ -557,7 +559,7 @@ export class RandomBDSPTeams extends RandomGen8Teams {
case 'Compound Eyes': case 'No Guard':
return !counter.get('inaccurate');
case 'Cursed Body':
- return abilities.has('Infiltrator');
+ return abilities.includes('Infiltrator');
case 'Defiant':
return !counter.get('Physical');
case 'Download':
@@ -565,36 +567,36 @@ export class RandomBDSPTeams extends RandomGen8Teams {
case 'Early Bird':
return (types.has('Grass') && isDoubles);
case 'Flash Fire':
- return (this.dex.getEffectiveness('Fire', species) < -1 || abilities.has('Drought'));
+ return (this.dex.getEffectiveness('Fire', species) < -1 || abilities.includes('Drought'));
case 'Gluttony':
return !moves.has('bellydrum');
case 'Guts':
return (!moves.has('facade') && !moves.has('sleeptalk') && !species.nfe ||
- abilities.has('Quick Feet') && !!counter.setupType);
+ abilities.includes('Quick Feet') && !!counter.setupType);
case 'Harvest':
- return (abilities.has('Frisk') && !isDoubles);
+ return (abilities.includes('Frisk') && !isDoubles);
case 'Hustle': case 'Inner Focus':
- return (counter.get('Physical') < 2 || abilities.has('Iron Fist'));
+ return (counter.get('Physical') < 2 || abilities.includes('Iron Fist'));
case 'Infiltrator':
- return (moves.has('rest') && moves.has('sleeptalk')) || (isDoubles && abilities.has('Clear Body'));
+ return (moves.has('rest') && moves.has('sleeptalk')) || (isDoubles && abilities.includes('Clear Body'));
case 'Intimidate':
if (species.id === 'salamence' && moves.has('dragondance')) return true;
return ['bodyslam', 'bounce', 'rockclimb', 'tripleaxel'].some(m => moves.has(m));
case 'Iron Fist':
return (counter.get('ironfist') < 2 || moves.has('dynamicpunch'));
case 'Justified':
- return (isDoubles && abilities.has('Inner Focus'));
+ return (isDoubles && abilities.includes('Inner Focus'));
case 'Lightning Rod':
return (species.types.includes('Ground') || counter.setupType === 'Physical');
case 'Limber':
return species.types.includes('Electric') || moves.has('facade');
case 'Mold Breaker':
return (
- abilities.has('Adaptability') || abilities.has('Scrappy') || (abilities.has('Unburden') && !!counter.setupType) ||
- (abilities.has('Sheer Force') && !!counter.get('sheerforce'))
+ abilities.includes('Adaptability') || abilities.includes('Scrappy') || (abilities.includes('Unburden') && !!counter.setupType) ||
+ (abilities.includes('Sheer Force') && !!counter.get('sheerforce'))
);
case 'Moody':
- return !!counter.setupType && abilities.has('Simple');
+ return !!counter.setupType && abilities.includes('Simple');
case 'Moxie':
return (counter.get('Physical') < 2 || moves.has('stealthrock') || moves.has('defog'));
case 'Overgrow':
@@ -618,24 +620,26 @@ export class RandomBDSPTeams extends RandomGen8Teams {
case 'Scrappy':
return (moves.has('earthquake') && species.id === 'miltank');
case 'Sheer Force':
- return (!counter.get('sheerforce') || abilities.has('Guts'));
+ return (!counter.get('sheerforce') || abilities.includes('Guts'));
case 'Shell Armor':
return (species.id === 'omastar' && (moves.has('spikes') || moves.has('stealthrock')));
case 'Sniper':
return counter.get('Water') > 1 && !moves.has('focusenergy');
+ case 'Solar Power':
+ return (!teamDetails.sun || abilities.includes('Harvest'));
case 'Speed Boost':
return moves.has('uturn');
case 'Sturdy':
- return (moves.has('bulkup') || !!counter.get('recoil') || abilities.has('Solid Rock'));
+ return (moves.has('bulkup') || !!counter.get('recoil') || abilities.includes('Solid Rock'));
case 'Swarm':
return (!counter.get('Bug') || !!counter.get('recovery'));
case 'Swift Swim':
const neverWantsSwim = !moves.has('raindance') && [
'Intimidate', 'Rock Head', 'Water Absorb',
- ].some(m => abilities.has(m));
+ ].some(m => abilities.includes(m));
const noSwimIfNoRain = !moves.has('raindance') && [
'Cloud Nine', 'Lightning Rod', 'Intimidate', 'Rock Head', 'Sturdy', 'Water Absorb', 'Water Veil', 'Weak Armor',
- ].some(m => abilities.has(m));
+ ].some(m => abilities.includes(m));
return teamDetails.rain ? neverWantsSwim : noSwimIfNoRain;
case 'Synchronize':
return counter.get('Status') < 3;
@@ -643,12 +647,12 @@ export class RandomBDSPTeams extends RandomGen8Teams {
return (
!counter.get('technician') ||
moves.has('tailslap') ||
- abilities.has('Punk Rock')
+ abilities.includes('Punk Rock')
);
case 'Tinted Lens':
return (
// For Butterfree
- (moves.has('hurricane') && abilities.has('Compound Eyes')) ||
+ (moves.has('hurricane') && abilities.includes('Compound Eyes')) ||
(counter.get('Status') > 2 && !counter.setupType) ||
// For Yanmega
moves.has('protect')
@@ -657,9 +661,9 @@ export class RandomBDSPTeams extends RandomGen8Teams {
return species.id === 'bibarel';
case 'Unburden':
return (
- abilities.has('Prankster') ||
+ abilities.includes('Prankster') ||
// intended for Hitmonlee
- abilities.has('Reckless') ||
+ abilities.includes('Reckless') ||
!counter.setupType && !isDoubles
);
case 'Volt Absorb':
@@ -667,7 +671,7 @@ export class RandomBDSPTeams extends RandomGen8Teams {
case 'Water Absorb':
return (
moves.has('raindance') ||
- ['Drizzle', 'Strong Jaw', 'Unaware', 'Volt Absorb'].some(abil => abilities.has(abil))
+ ['Drizzle', 'Strong Jaw', 'Unaware', 'Volt Absorb'].some(abil => abilities.includes(abil))
);
case 'Weak Armor':
return (
diff --git a/data/random-battles/gen9/bss-factory-sets.json b/data/random-battles/gen9/bss-factory-sets.json
new file mode 100644
index 000000000000..98120c4b2147
--- /dev/null
+++ b/data/random-battles/gen9/bss-factory-sets.json
@@ -0,0 +1,6176 @@
+{
+ "chienpao": {
+ "weight": 10,
+ "sets": [
+ {
+ "species": "Chien-Pao",
+ "weight": 35,
+ "moves": [
+ ["Icicle Crash"],
+ ["Sucker Punch"],
+ ["Sacred Sword"],
+ ["Crunch", "Sheer Cold"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Ghost"],
+ "ability": ["Sword of Ruin"]
+ },
+ {
+ "species": "Chien-Pao",
+ "weight": 15,
+ "moves": [
+ ["Icicle Crash"],
+ ["Sucker Punch"],
+ ["Sacred Sword"],
+ ["Tera Blast"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Electric"],
+ "wantsTera": true,
+ "ability": ["Sword of Ruin"]
+ },
+ {
+ "species": "Chien-Pao",
+ "weight": 5,
+ "moves": [
+ ["Tera Blast"],
+ ["Sacred Sword", "Sheer Cold"],
+ ["Icicle Crash"],
+ ["Sucker Punch"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 140, "atk": 236, "def": 4, "spd": 12, "spe": 116},
+ "teraType": ["Electric", "Fairy", "Grass"],
+ "wantsTera": true,
+ "ability": ["Sword of Ruin"]
+ },
+ {
+ "species": "Chien-Pao",
+ "weight": 5,
+ "moves": [
+ ["Ice Spinner", "Icicle Crash"],
+ ["Tera Blast"],
+ ["Crunch"],
+ ["Sacred Sword"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Electric", "Fairy", "Grass"],
+ "wantsTera": true,
+ "ability": ["Sword of Ruin"]
+ },
+ {
+ "species": "Chien-Pao",
+ "weight": 10,
+ "moves": [
+ ["Ice Spinner", "Icicle Crash"],
+ ["Crunch", "Throat Chop"],
+ ["Ice Shard", "Sucker Punch"],
+ ["Sacred Sword"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Dark"],
+ "ability": ["Sword of Ruin"]
+ },
+ {
+ "species": "Chien-Pao",
+ "weight": 10,
+ "moves": [
+ ["Ice Spinner", "Icicle Crash"],
+ ["Tera Blast"],
+ ["Ice Shard", "Sucker Punch"],
+ ["Sacred Sword"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Electric", "Fairy", "Grass"],
+ "wantsTera": true,
+ "ability": ["Sword of Ruin"]
+ },
+ {
+ "species": "Chien-Pao",
+ "weight": 5,
+ "moves": [
+ ["Icicle Crash"],
+ ["Recover"],
+ ["Ice Shard", "Sucker Punch"],
+ ["Sacred Sword"]
+ ],
+ "item": ["Rocky Helmet"],
+ "nature": "Jolly",
+ "evs": {"hp": 252, "atk": 68, "def": 180, "spd": 4, "spe": 4},
+ "teraType": ["Fairy", "Poison"],
+ "wantsTera": true,
+ "ability": ["Sword of Ruin"]
+ },
+ {
+ "species": "Chien-Pao",
+ "weight": 15,
+ "moves": [
+ ["Swords Dance"],
+ ["Icicle Crash"],
+ ["Tera Blast"],
+ ["Ice Shard", "Sucker Punch"]
+ ],
+ "item": ["Lum Berry"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Electric"],
+ "wantsTera": true,
+ "ability": ["Sword of Ruin"]
+ }
+ ]
+ },
+ "dragonite": {
+ "weight": 10,
+ "sets": [
+ {
+ "species": "Dragonite",
+ "weight": 40,
+ "moves": [
+ ["Extreme Speed"],
+ ["Earthquake"],
+ ["Dragon Dance", "Encore"],
+ ["Roost"]
+ ],
+ "item": ["Heavy-Duty Boots", "Leftovers", "Rocky Helmet"],
+ "nature": "Adamant",
+ "evs": {"hp": 196, "atk": 204, "def": 4, "spd": 4, "spe": 100},
+ "teraType": ["Normal"],
+ "wantsTera": true,
+ "ability": ["Multiscale"]
+ },
+ {
+ "species": "Dragonite",
+ "weight": 10,
+ "moves": [
+ ["Tera Blast"],
+ ["Earthquake"],
+ ["Dragon Dance"],
+ ["Roost"]
+ ],
+ "item": ["Heavy-Duty Boots", "Leftovers", "Lum Berry", "Rocky Helmet"],
+ "nature": "Adamant",
+ "evs": {"hp": 196, "atk": 204, "def": 4, "spd": 4, "spe": 100},
+ "teraType": ["Fairy", "Fire", "Flying"],
+ "wantsTera": true,
+ "ability": ["Multiscale"]
+ },
+ {
+ "species": "Dragonite",
+ "weight": 5,
+ "moves": [
+ ["Outrage"],
+ ["Extreme Speed"],
+ ["Earthquake"],
+ ["Iron Head"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Normal", "Steel"],
+ "wantsTera": true,
+ "ability": ["Multiscale"]
+ },
+ {
+ "species": "Dragonite",
+ "weight": 15,
+ "moves": [
+ ["Outrage"],
+ ["Extreme Speed"],
+ ["Earthquake"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Flying"],
+ "wantsTera": true,
+ "ability": ["Multiscale"]
+ },
+ {
+ "species": "Dragonite",
+ "weight": 5,
+ "moves": [
+ ["Air Slash"],
+ ["Encore", "Substitute"],
+ ["Thunder Wave"],
+ ["Roost"]
+ ],
+ "item": ["Rocky Helmet"],
+ "nature": "Bold",
+ "evs": {"hp": 244, "def": 148, "spe": 116},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Poison", "Water"],
+ "wantsTera": true,
+ "ability": ["Multiscale"]
+ },
+ {
+ "species": "Dragonite",
+ "weight": 20,
+ "moves": [
+ ["Scale Shot"],
+ ["Iron Head"],
+ ["Earthquake", "Low Kick"],
+ ["Dragon Dance"]
+ ],
+ "item": ["Loaded Dice"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Multiscale"]
+ },
+ {
+ "species": "Dragonite",
+ "weight": 5,
+ "moves": [
+ ["Fire Spin"],
+ ["Earthquake", "Thunder Wave"],
+ ["Roost"],
+ ["Encore"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Careful",
+ "evs": {"hp": 244, "atk": 12, "spd": 252},
+ "teraType": ["Fairy", "Poison", "Steel"],
+ "wantsTera": true,
+ "ability": ["Multiscale"]
+ }
+ ]
+ },
+ "fluttermane": {
+ "weight": 10,
+ "sets": [
+ {
+ "species": "Flutter Mane",
+ "weight": 20,
+ "moves": [
+ ["Moonblast"],
+ ["Calm Mind", "Shadow Ball"],
+ ["Charm"],
+ ["Pain Split"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Timid",
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Water"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Flutter Mane",
+ "weight": 5,
+ "moves": [
+ ["Draining Kiss"],
+ ["Shadow Ball"],
+ ["Charm"],
+ ["Calm Mind"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Timid",
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Water"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Flutter Mane",
+ "weight": 15,
+ "moves": [
+ ["Moonblast"],
+ ["Shadow Ball"],
+ ["Mystical Fire", "Pain Split", "Substitute"],
+ ["Calm Mind"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "def": 132, "spa": 116, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Water"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Flutter Mane",
+ "weight": 5,
+ "moves": [
+ ["Moonblast"],
+ ["Shadow Ball", "Substitute"],
+ ["Tera Blast"],
+ ["Calm Mind"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "def": 132, "spa": 116, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Ground", "Water"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Flutter Mane",
+ "weight": 10,
+ "moves": [
+ ["Moonblast"],
+ ["Hex"],
+ ["Pain Split", "Taunt"],
+ ["Thunder Wave"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Bold",
+ "evs": {"hp": 228, "def": 252, "spe": 28},
+ "ivs": {"atk": 0},
+ "teraType": ["Water"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Flutter Mane",
+ "weight": 5,
+ "moves": [
+ ["Moonblast"],
+ ["Shadow Ball"],
+ ["Hyper Voice", "Power Gem", "Thunderbolt"],
+ ["Perish Song"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Modest",
+ "evs": {"hp": 20, "def": 44, "spa": 204, "spd": 4, "spe": 236},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Flutter Mane",
+ "weight": 25,
+ "moves": [
+ ["Moonblast"],
+ ["Shadow Ball"],
+ ["Hyper Voice", "Mystical Fire", "Power Gem", "Psyshock", "Thunderbolt"],
+ ["Perish Song"]
+ ],
+ "item": ["Choice Specs"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Flutter Mane",
+ "weight": 10,
+ "moves": [
+ ["Moonblast"],
+ ["Hex", "Shadow Ball"],
+ ["Thunder Wave"],
+ ["Taunt"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Normal"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Flutter Mane",
+ "weight": 2,
+ "moves": [
+ ["Moonblast"],
+ ["Shadow Ball"],
+ ["Psyshock"],
+ ["Energy Ball"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Modest",
+ "evs": {"hp": 164, "def": 28, "spa": 196, "spd": 4, "spe": 116},
+ "ivs": {"atk": 0},
+ "teraType": ["Grass"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Flutter Mane",
+ "weight": 3,
+ "moves": [
+ ["Moonblast"],
+ ["Shadow Ball"],
+ ["Psyshock"],
+ ["Mystical Fire"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Modest",
+ "evs": {"hp": 164, "def": 28, "spa": 196, "spd": 4, "spe": 116},
+ "ivs": {"atk": 0},
+ "teraType": ["Fire"],
+ "ability": ["Protosynthesis"]
+ }
+ ]
+ },
+ "urshifurapidstrike": {
+ "weight": 10,
+ "sets": [
+ {
+ "species": "Urshifu-Rapid-Strike",
+ "weight": 40,
+ "moves": [
+ ["Surging Strikes"],
+ ["Close Combat", "Drain Punch"],
+ ["Aqua Jet", "Substitute"],
+ ["Swords Dance"]
+ ],
+ "item": ["Punching Glove"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Grass", "Poison", "Water"],
+ "wantsTera": true,
+ "ability": ["Unseen Fist"]
+ },
+ {
+ "species": "Urshifu-Rapid-Strike",
+ "weight": 25,
+ "moves": [
+ ["Surging Strikes"],
+ ["Close Combat"],
+ ["U-turn"],
+ ["Ice Punch"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Water"],
+ "ability": ["Unseen Fist"]
+ },
+ {
+ "species": "Urshifu-Rapid-Strike",
+ "weight": 15,
+ "moves": [
+ ["Surging Strikes"],
+ ["Close Combat"],
+ ["U-turn"],
+ ["Aqua Jet"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Grass", "Poison", "Water"],
+ "ability": ["Unseen Fist"]
+ },
+ {
+ "species": "Urshifu-Rapid-Strike",
+ "weight": 20,
+ "moves": [
+ ["Surging Strikes"],
+ ["Close Combat"],
+ ["Aqua Jet"],
+ ["Counter", "Ice Punch"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Ghost", "Water"],
+ "ability": ["Unseen Fist"]
+ }
+ ]
+ },
+ "ogerponhearthflame": {
+ "weight": 10,
+ "sets": [
+ {
+ "species": "Ogerpon-Hearthflame",
+ "weight": 40,
+ "moves": [
+ ["Ivy Cudgel"],
+ ["Knock Off", "Play Rough"],
+ ["Encore", "Swords Dance"],
+ ["Horn Leech", "Trailblaze"]
+ ],
+ "gender": "F",
+ "item": ["Hearthflame Mask"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Fire"],
+ "ability": ["Mold Breaker"]
+ },
+ {
+ "species": "Ogerpon-Hearthflame",
+ "weight": 40,
+ "moves": [
+ ["Ivy Cudgel"],
+ ["Horn Leech"],
+ ["Swords Dance"],
+ ["Play Rough", "Substitute", "Trailblaze"]
+ ],
+ "gender": "F",
+ "item": ["Hearthflame Mask"],
+ "nature": "Jolly",
+ "evs": {"hp": 156, "atk": 36, "def": 4, "spd": 60, "spe": 252},
+ "teraType": ["Fire"],
+ "ability": ["Mold Breaker"]
+ },
+ {
+ "species": "Ogerpon-Hearthflame",
+ "weight": 20,
+ "moves": [
+ ["Ivy Cudgel"],
+ ["Substitute"],
+ ["Leech Seed"],
+ ["Encore", "Horn Leech", "Play Rough"]
+ ],
+ "item": ["Hearthflame Mask"],
+ "nature": "Jolly",
+ "evs": {"hp": 156, "atk": 36, "def": 4, "spd": 60, "spe": 252},
+ "teraType": ["Fire"],
+ "ability": ["Mold Breaker"]
+ }
+ ]
+ },
+ "ursalunabloodmoon": {
+ "weight": 10,
+ "sets": [
+ {
+ "species": "Ursaluna-Bloodmoon",
+ "weight": 15,
+ "moves": [
+ ["Blood Moon"],
+ ["Earth Power"],
+ ["Vacuum Wave"],
+ ["Body Press"]
+ ],
+ "item": ["Rocky Helmet"],
+ "nature": "Bold",
+ "evs": {"hp": 116, "def": 236, "spa": 4, "spd": 116, "spe": 36},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Poison"],
+ "ability": ["Mind's Eye"]
+ },
+ {
+ "species": "Ursaluna-Bloodmoon",
+ "weight": 25,
+ "moves": [
+ ["Blood Moon", "Hyper Voice"],
+ ["Moonlight"],
+ ["Calm Mind"],
+ ["Yawn"]
+ ],
+ "item": ["Covert Cloak", "Leftovers"],
+ "nature": "Modest",
+ "evs": {"hp": 100, "def": 4, "spa": 236, "spd": 12, "spe": 156},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Poison"],
+ "ability": ["Mind's Eye"]
+ },
+ {
+ "species": "Ursaluna-Bloodmoon",
+ "weight": 60,
+ "moves": [
+ ["Blood Moon"],
+ ["Vacuum Wave"],
+ ["Earth Power"],
+ ["Hyper Voice"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Modest",
+ "evs": {"hp": 4, "spa": 252, "spd": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Normal"],
+ "ability": ["Mind's Eye"]
+ }
+ ]
+ },
+ "ironbundle": {
+ "weight": 9,
+ "sets": [
+ {
+ "species": "Iron Bundle",
+ "weight": 10,
+ "moves": [
+ ["Flip Turn"],
+ ["Freeze-Dry"],
+ ["Hydro Pump"],
+ ["Encore"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Ghost"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Bundle",
+ "weight": 70,
+ "moves": [
+ ["Substitute"],
+ ["Encore"],
+ ["Hydro Pump"],
+ ["Freeze-Dry"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Ghost", "Steel", "Water"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Bundle",
+ "weight": 10,
+ "moves": [
+ ["Ice Beam"],
+ ["Hydro Pump"],
+ ["Freeze-Dry"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Specs"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Bundle",
+ "weight": 10,
+ "moves": [
+ ["Ice Beam"],
+ ["Hydro Pump"],
+ ["Freeze-Dry"],
+ ["Flip Turn"]
+ ],
+ "item": ["Choice Specs"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Water"],
+ "ability": ["Quark Drive"]
+ }
+ ]
+ },
+ "urshifu": {
+ "weight": 9,
+ "sets": [
+ {
+ "species": "Urshifu",
+ "weight": 55,
+ "moves": [
+ ["Swords Dance"],
+ ["Wicked Blow"],
+ ["Close Combat", "Drain Punch"],
+ ["Sucker Punch"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Dark", "Ghost"],
+ "ability": ["Unseen Fist"]
+ },
+ {
+ "species": "Urshifu",
+ "weight": 25,
+ "moves": [
+ ["Swords Dance"],
+ ["Wicked Blow"],
+ ["Close Combat", "Drain Punch"],
+ ["Sucker Punch"]
+ ],
+ "item": ["Black Glasses"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Dark", "Ghost", "Poison"],
+ "ability": ["Unseen Fist"]
+ },
+ {
+ "species": "Urshifu",
+ "weight": 5,
+ "moves": [
+ ["Counter"],
+ ["Wicked Blow"],
+ ["Close Combat", "Drain Punch"],
+ ["Sucker Punch"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Dark", "Ghost"],
+ "ability": ["Unseen Fist"]
+ },
+ {
+ "species": "Urshifu",
+ "weight": 5,
+ "moves": [
+ ["Wicked Blow"],
+ ["Close Combat", "Drain Punch"],
+ ["Sucker Punch"],
+ ["U-turn"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Dark", "Ghost", "Poison"],
+ "ability": ["Unseen Fist"]
+ },
+ {
+ "species": "Urshifu",
+ "weight": 5,
+ "moves": [
+ ["Wicked Blow"],
+ ["Close Combat", "Drain Punch"],
+ ["Sucker Punch"],
+ ["Iron Head"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Unseen Fist"]
+ },
+ {
+ "species": "Urshifu",
+ "weight": 5,
+ "moves": [
+ ["Wicked Blow"],
+ ["Close Combat"],
+ ["Sucker Punch"],
+ ["U-turn"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Dark"],
+ "ability": ["Unseen Fist"]
+ }
+ ]
+ },
+ "tinglu": {
+ "weight": 9,
+ "sets": [
+ {
+ "species": "Ting-Lu",
+ "weight": 65,
+ "moves": [
+ ["Stealth Rock"],
+ ["Ruination"],
+ ["Earthquake", "Heavy Slam"],
+ ["Whirlwind"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 244, "atk": 20, "def": 116, "spd": 124, "spe": 4},
+ "teraType": ["Fairy", "Poison", "Water"],
+ "ability": ["Vessel of Ruin"]
+ },
+ {
+ "species": "Ting-Lu",
+ "weight": 15,
+ "moves": [
+ ["Stealth Rock"],
+ ["Spikes"],
+ ["Earthquake", "Heavy Slam"],
+ ["Whirlwind"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 244, "atk": 20, "def": 116, "spd": 124, "spe": 4},
+ "teraType": ["Fairy", "Poison", "Water"],
+ "ability": ["Vessel of Ruin"]
+ },
+ {
+ "species": "Ting-Lu",
+ "weight": 5,
+ "moves": [
+ ["Earthquake"],
+ ["Heavy Slam"],
+ ["Fissure", "Stone Edge"],
+ ["Ruination"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 4, "atk": 252, "def": 4, "spd": 108, "spe": 140},
+ "teraType": ["Steel"],
+ "ability": ["Vessel of Ruin"]
+ },
+ {
+ "species": "Ting-Lu",
+ "weight": 5,
+ "moves": [
+ ["Earthquake"],
+ ["Heavy Slam"],
+ ["Tera Blast"],
+ ["Ruination"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 4, "atk": 252, "def": 4, "spd": 108, "spe": 140},
+ "teraType": ["Electric", "Fairy"],
+ "wantsTera": true,
+ "ability": ["Vessel of Ruin"]
+ },
+ {
+ "species": "Ting-Lu",
+ "weight": 10,
+ "moves": [
+ ["Earthquake"],
+ ["Heavy Slam"],
+ ["Rock Tomb"],
+ ["Ruination"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 244, "atk": 76, "def": 116, "spd": 68, "spe": 4},
+ "teraType": ["Steel"],
+ "ability": ["Vessel of Ruin"]
+ }
+ ]
+ },
+ "gholdengo": {
+ "weight": 9,
+ "sets": [
+ {
+ "species": "Gholdengo",
+ "weight": 25,
+ "moves": [
+ ["Make It Rain"],
+ ["Shadow Ball"],
+ ["Focus Blast", "Recover", "Thunderbolt"],
+ ["Trick"]
+ ],
+ "item": ["Choice Specs"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Flying", "Steel", "Water"],
+ "ability": ["Good as Gold"]
+ },
+ {
+ "species": "Gholdengo",
+ "weight": 30,
+ "moves": [
+ ["Make It Rain"],
+ ["Shadow Ball"],
+ ["Focus Blast", "Recover", "Thunderbolt"],
+ ["Trick"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Flying", "Normal", "Steel", "Water"],
+ "ability": ["Good as Gold"]
+ },
+ {
+ "species": "Gholdengo",
+ "weight": 15,
+ "moves": [
+ ["Focus Blast", "Make It Rain"],
+ ["Hex"],
+ ["Thunder Wave"],
+ ["Recover"]
+ ],
+ "item": ["Rocky Helmet"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Flying", "Water"],
+ "ability": ["Good as Gold"]
+ },
+ {
+ "species": "Gholdengo",
+ "weight": 20,
+ "moves": [
+ ["Make It Rain"],
+ ["Shadow Ball"],
+ ["Nasty Plot"],
+ ["Recover"]
+ ],
+ "item": ["Covert Cloak"],
+ "nature": "Modest",
+ "evs": {"hp": 164, "def": 156, "spa": 36, "spd": 4, "spe": 148},
+ "ivs": {"atk": 0},
+ "teraType": ["Flying"],
+ "ability": ["Good as Gold"]
+ },
+ {
+ "species": "Gholdengo",
+ "weight": 5,
+ "moves": [
+ ["Tera Blast"],
+ ["Shadow Ball"],
+ ["Nasty Plot"],
+ ["Recover"]
+ ],
+ "item": ["Covert Cloak"],
+ "nature": "Modest",
+ "evs": {"hp": 164, "def": 156, "spa": 36, "spd": 4, "spe": 148},
+ "ivs": {"atk": 0},
+ "teraType": ["Fighting", "Water"],
+ "wantsTera": true,
+ "ability": ["Good as Gold"]
+ },
+ {
+ "species": "Gholdengo",
+ "weight": 5,
+ "moves": [
+ ["Make It Rain"],
+ ["Shadow Ball"],
+ ["Nasty Plot"],
+ ["Psyshock", "Recover", "Substitute"]
+ ],
+ "item": ["Air Balloon"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Flying"],
+ "ability": ["Good as Gold"]
+ }
+ ]
+ },
+ "chiyu": {
+ "weight": 9,
+ "sets": [
+ {
+ "species": "Chi-Yu",
+ "weight": 20,
+ "moves": [
+ ["Overheat"],
+ ["Dark Pulse"],
+ ["Tera Blast"],
+ ["Flamethrower"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Modest",
+ "evs": {"hp": 116, "def": 84, "spa": 156, "spd": 4, "spe": 148},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Grass"],
+ "wantsTera": true,
+ "ability": ["Beads of Ruin"]
+ },
+ {
+ "species": "Chi-Yu",
+ "weight": 35,
+ "moves": [
+ ["Overheat"],
+ ["Lava Plume"],
+ ["Dark Pulse"],
+ ["Psychic"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Modest",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fire", "Ghost"],
+ "ability": ["Beads of Ruin"]
+ },
+ {
+ "species": "Chi-Yu",
+ "weight": 10,
+ "moves": [
+ ["Flame Charge", "Ruination"],
+ ["Overheat"],
+ ["Dark Pulse"],
+ ["Tera Blast"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Calm",
+ "evs": {"hp": 252, "def": 4, "spa": 76, "spd": 156, "spe": 20},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Ghost", "Grass", "Water"],
+ "wantsTera": true,
+ "ability": ["Beads of Ruin"]
+ },
+ {
+ "species": "Chi-Yu",
+ "weight": 5,
+ "moves": [
+ ["Lava Plume"],
+ ["Ruination"],
+ ["Taunt"],
+ ["Dark Pulse"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Ghost"],
+ "ability": ["Beads of Ruin"]
+ },
+ {
+ "species": "Chi-Yu",
+ "weight": 20,
+ "moves": [
+ ["Overheat"],
+ ["Flamethrower"],
+ ["Dark Pulse"],
+ ["Psychic"]
+ ],
+ "item": ["Choice Specs"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fire"],
+ "ability": ["Beads of Ruin"]
+ },
+ {
+ "species": "Chi-Yu",
+ "weight": 10,
+ "moves": [
+ ["Overheat"],
+ ["Flamethrower"],
+ ["Dark Pulse"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Specs"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Ghost", "Water"],
+ "wantsTera": true,
+ "ability": ["Beads of Ruin"]
+ }
+ ]
+ },
+ "garganacl": {
+ "weight": 9,
+ "sets": [
+ {
+ "species": "Garganacl",
+ "weight": 45,
+ "moves": [
+ ["Salt Cure"],
+ ["Protect"],
+ ["Recover"],
+ ["Fissure", "Stealth Rock", "Substitute"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Impish",
+ "evs": {"hp": 252, "atk": 4, "def": 252},
+ "teraType": ["Fairy", "Poison", "Water"],
+ "wantsTera": true,
+ "ability": ["Purifying Salt"]
+ },
+ {
+ "species": "Garganacl",
+ "weight": 20,
+ "moves": [
+ ["Salt Cure"],
+ ["Recover"],
+ ["Curse"],
+ ["Earthquake", "Protect", "Substitute"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Careful",
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "teraType": ["Ghost"],
+ "wantsTera": true,
+ "ability": ["Purifying Salt"]
+ },
+ {
+ "species": "Garganacl",
+ "weight": 35,
+ "moves": [
+ ["Salt Cure"],
+ ["Recover"],
+ ["Iron Defense"],
+ ["Body Press"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Careful",
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "teraType": ["Fairy", "Poison", "Water"],
+ "wantsTera": true,
+ "ability": ["Purifying Salt"]
+ }
+ ]
+ },
+ "garchomp": {
+ "weight": 8,
+ "sets": [
+ {
+ "species": "Garchomp",
+ "weight": 45,
+ "moves": [
+ ["Scale Shot"],
+ ["Earthquake"],
+ ["Iron Head", "Substitute"],
+ ["Swords Dance"]
+ ],
+ "item": ["Loaded Dice"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Rough Skin"]
+ },
+ {
+ "species": "Garchomp",
+ "weight": 25,
+ "moves": [
+ ["Stealth Rock"],
+ ["Spikes"],
+ ["Earthquake"],
+ ["Dragon Tail"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 180, "atk": 4, "def": 36, "spd": 172, "spe": 116},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Rough Skin"]
+ },
+ {
+ "species": "Garchomp",
+ "weight": 10,
+ "moves": [
+ ["Outrage", "Scale Shot"],
+ ["Earthquake"],
+ ["Rock Tomb"],
+ ["Iron Head"]
+ ],
+ "item": ["Choice Band", "Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Rough Skin"]
+ },
+ {
+ "species": "Garchomp",
+ "weight": 5,
+ "moves": [
+ ["Earthquake"],
+ ["Iron Head"],
+ ["Scale Shot"],
+ ["Dragon Tail"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Steel"],
+ "ability": ["Rough Skin"]
+ },
+ {
+ "species": "Garchomp",
+ "weight": 10,
+ "moves": [
+ ["Outrage", "Scale Shot"],
+ ["Earthquake"],
+ ["Rock Tomb"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Band", "Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fairy", "Fire"],
+ "wantsTera": true,
+ "ability": ["Rough Skin"]
+ },
+ {
+ "species": "Garchomp",
+ "weight": 5,
+ "moves": [
+ ["Earthquake"],
+ ["Tera Blast"],
+ ["Scale Shot"],
+ ["Dragon Tail"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fairy"],
+ "wantsTera": true,
+ "ability": ["Rough Skin"]
+ }
+ ]
+ },
+ "landorustherian": {
+ "weight": 8,
+ "sets": [
+ {
+ "species": "Landorus-Therian",
+ "weight": 30,
+ "moves": [
+ ["Stealth Rock"],
+ ["Earthquake"],
+ ["Rock Tomb", "Taunt"],
+ ["U-turn"]
+ ],
+ "item": ["Leftovers", "Rocky Helmet", "Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fairy", "Steel", "Water"],
+ "ability": ["Intimidate"]
+ },
+ {
+ "species": "Landorus-Therian",
+ "weight": 45,
+ "moves": [
+ ["Earthquake"],
+ ["U-turn"],
+ ["Tera Blast"],
+ ["Rock Tomb", "Stone Edge"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Flying"],
+ "wantsTera": true,
+ "ability": ["Intimidate"]
+ },
+ {
+ "species": "Landorus-Therian",
+ "weight": 15,
+ "moves": [
+ ["Earthquake"],
+ ["U-turn"],
+ ["Tera Blast"],
+ ["Rock Tomb", "Stone Edge"]
+ ],
+ "item": ["Choice Band", "Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Fairy", "Flying"],
+ "wantsTera": true,
+ "ability": ["Intimidate"]
+ },
+ {
+ "species": "Landorus-Therian",
+ "weight": 5,
+ "moves": [
+ ["Earthquake"],
+ ["U-turn"],
+ ["Fissure", "Tera Blast"],
+ ["Rock Tomb", "Smack Down"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Intimidate"]
+ },
+ {
+ "species": "Landorus-Therian",
+ "weight": 5,
+ "moves": [
+ ["Earthquake"],
+ ["Rock Tomb"],
+ ["U-turn"],
+ ["Tera Blast"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "def": 4},
+ "teraType": ["Flying", "Water"],
+ "wantsTera": true,
+ "ability": ["Intimidate"]
+ }
+ ]
+ },
+ "scizor": {
+ "weight": 8,
+ "sets": [
+ {
+ "species": "Scizor",
+ "weight": 15,
+ "moves": [
+ ["Swords Dance"],
+ ["Bullet Punch"],
+ ["Close Combat"],
+ ["Knock Off", "Tera Blast", "U-turn"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 28, "def": 204, "spd": 20, "spe": 4},
+ "teraType": ["Water"],
+ "wantsTera": true,
+ "ability": ["Technician"]
+ },
+ {
+ "species": "Scizor",
+ "weight": 20,
+ "moves": [
+ ["Swords Dance"],
+ ["Bullet Punch"],
+ ["Close Combat", "U-turn"],
+ ["Knock Off"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 28, "def": 204, "spd": 20, "spe": 4},
+ "teraType": ["Flying", "Steel"],
+ "wantsTera": true,
+ "ability": ["Technician"]
+ },
+ {
+ "species": "Scizor",
+ "weight": 50,
+ "moves": [
+ ["Bullet Punch"],
+ ["U-turn"],
+ ["Knock Off"],
+ ["Close Combat"]
+ ],
+ "item": ["Assault Vest", "Choice Band"],
+ "nature": "Adamant",
+ "evs": {"hp": 236, "atk": 244, "def": 20, "spd": 4, "spe": 4},
+ "teraType": ["Steel", "Water"],
+ "wantsTera": true,
+ "ability": ["Technician"]
+ },
+ {
+ "species": "Scizor",
+ "weight": 15,
+ "moves": [
+ ["Bullet Punch"],
+ ["U-turn"],
+ ["Knock Off", "Tera Blast"],
+ ["Close Combat"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 236, "atk": 244, "def": 20, "spd": 4, "spe": 4},
+ "teraType": ["Water"],
+ "wantsTera": true,
+ "ability": ["Technician"]
+ }
+ ]
+ },
+ "toxapex": {
+ "weight": 8,
+ "sets": [
+ {
+ "species": "Toxapex",
+ "weight": 40,
+ "moves": [
+ ["Toxic"],
+ ["Baneful Bunker", "Toxic Spikes"],
+ ["Recover"],
+ ["Haze"]
+ ],
+ "item": ["Black Sludge", "Mental Herb"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Poison"],
+ "ability": ["Regenerator"]
+ },
+ {
+ "species": "Toxapex",
+ "weight": 60,
+ "moves": [
+ ["Toxic"],
+ ["Liquidation"],
+ ["Recover"],
+ ["Haze"]
+ ],
+ "item": ["Leftovers", "Rocky Helmet"],
+ "nature": "Impish",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fairy", "Poison"],
+ "ability": ["Regenerator"]
+ }
+ ]
+ },
+ "roaringmoon": {
+ "weight": 8,
+ "sets": [
+ {
+ "species": "Roaring Moon",
+ "weight": 40,
+ "moves": [
+ ["Dragon Dance"],
+ ["Acrobatics"],
+ ["Earthquake", "Roost", "Taunt"],
+ ["Knock Off"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Jolly",
+ "evs": {"atk": 220, "def": 36, "spe": 252},
+ "teraType": ["Flying"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Roaring Moon",
+ "weight": 10,
+ "moves": [
+ ["Dragon Dance"],
+ ["Iron Head"],
+ ["Earthquake", "Roost", "Taunt"],
+ ["Knock Off"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Jolly",
+ "evs": {"atk": 220, "def": 36, "spe": 252},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Roaring Moon",
+ "weight": 5,
+ "moves": [
+ ["Jaw Lock"],
+ ["Roost"],
+ ["Taunt"],
+ ["Dragon Dance"]
+ ],
+ "item": ["Leftovers", "Shed Shell"],
+ "nature": "Impish",
+ "evs": {"hp": 244, "atk": 4, "def": 196, "spd": 36, "spe": 28},
+ "teraType": ["Fairy", "Poison"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Roaring Moon",
+ "weight": 10,
+ "moves": [
+ ["Knock Off"],
+ ["U-turn"],
+ ["Earthquake", "Scale Shot"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Band", "Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fairy", "Fire"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Roaring Moon",
+ "weight": 25,
+ "moves": [
+ ["Knock Off"],
+ ["Earthquake", "U-turn"],
+ ["Iron Head"],
+ ["Outrage"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Dark", "Steel"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Roaring Moon",
+ "weight": 10,
+ "moves": [
+ ["Dragon Dance"],
+ ["Knock Off"],
+ ["Earthquake"],
+ ["Scale Shot"]
+ ],
+ "item": ["Loaded Dice"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ }
+ ]
+ },
+ "dragapult": {
+ "weight": 8,
+ "sets": [
+ {
+ "species": "Dragapult",
+ "weight": 35,
+ "moves": [
+ ["Dragon Darts"],
+ ["U-turn"],
+ ["Sucker Punch"],
+ ["Phantom Force"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Dragon", "Steel"],
+ "ability": ["Infiltrator"]
+ },
+ {
+ "species": "Dragapult",
+ "weight": 5,
+ "moves": [
+ ["Dragon Darts"],
+ ["U-turn"],
+ ["Sucker Punch"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fairy", "Fire", "Ghost", "Steel"],
+ "wantsTera": true,
+ "ability": ["Infiltrator"]
+ },
+ {
+ "species": "Dragapult",
+ "weight": 15,
+ "moves": [
+ ["Dragon Darts"],
+ ["Baton Pass", "Tera Blast"],
+ ["Substitute"],
+ ["Dragon Dance"]
+ ],
+ "item": ["Life Orb"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Fire"],
+ "wantsTera": true,
+ "ability": ["Clear Body"]
+ },
+ {
+ "species": "Dragapult",
+ "weight": 25,
+ "moves": [
+ ["Draco Meteor"],
+ ["Hex", "Shadow Ball"],
+ ["Will-O-Wisp"],
+ ["Thunder Wave"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Timid",
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Ghost", "Normal"],
+ "ability": ["Cursed Body"]
+ },
+ {
+ "species": "Dragapult",
+ "weight": 20,
+ "moves": [
+ ["Shadow Ball"],
+ ["Draco Meteor"],
+ ["Thunderbolt"],
+ ["Flamethrower", "U-turn"]
+ ],
+ "item": ["Choice Specs"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Electric", "Fighting", "Fire", "Ghost"],
+ "ability": ["Infiltrator"]
+ }
+ ]
+ },
+ "baxcalibur": {
+ "weight": 8,
+ "sets": [
+ {
+ "species": "Baxcalibur",
+ "weight": 5,
+ "moves": [
+ ["Glaive Rush", "Scale Shot"],
+ ["Earthquake"],
+ ["Ice Shard"],
+ ["Icicle Spear", "Swords Dance"]
+ ],
+ "item": ["Focus Sash", "Life Orb"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Dragon", "Ghost"],
+ "wantsTera": true,
+ "ability": ["Thermal Exchange"]
+ },
+ {
+ "species": "Baxcalibur",
+ "weight": 75,
+ "moves": [
+ ["Ice Shard", "Scale Shot"],
+ ["Icicle Spear"],
+ ["Earthquake"],
+ ["Dragon Dance", "Swords Dance"]
+ ],
+ "item": ["Loaded Dice"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Ghost", "Ground", "Ice"],
+ "wantsTera": true,
+ "ability": ["Thermal Exchange"]
+ },
+ {
+ "species": "Baxcalibur",
+ "weight": 10,
+ "moves": [
+ ["Icicle Crash", "Icicle Spear"],
+ ["Ice Shard"],
+ ["Glaive Rush"],
+ ["Earthquake"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Ground"],
+ "wantsTera": true,
+ "ability": ["Thermal Exchange"]
+ },
+ {
+ "species": "Baxcalibur",
+ "weight": 5,
+ "moves": [
+ ["Icicle Spear"],
+ ["Ice Shard"],
+ ["Tera Blast"],
+ ["Earthquake"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Electric", "Fairy", "Fire"],
+ "wantsTera": true,
+ "ability": ["Thermal Exchange"]
+ },
+ {
+ "species": "Baxcalibur",
+ "weight": 5,
+ "moves": [
+ ["Glaive Rush", "Scale Shot"],
+ ["Earthquake"],
+ ["Ice Shard"],
+ ["Icicle Spear"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Dragon", "Ice"],
+ "wantsTera": true,
+ "ability": ["Thermal Exchange"]
+ }
+ ]
+ },
+ "ninetalesalola": {
+ "weight": 8,
+ "sets": [
+ {
+ "species": "Ninetales-Alola",
+ "weight": 80,
+ "moves": [
+ ["Aurora Veil"],
+ ["Moonblast"],
+ ["Encore"],
+ ["Blizzard", "Freeze-Dry"]
+ ],
+ "item": ["Light Clay"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "teraType": ["Fire", "Ice", "Water"],
+ "ability": ["Snow Warning"]
+ },
+ {
+ "species": "Ninetales-Alola",
+ "weight": 10,
+ "moves": [
+ ["Aurora Veil"],
+ ["Moonblast"],
+ ["Encore"],
+ ["Disable"]
+ ],
+ "item": ["Light Clay", "Rocky Helmet"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "teraType": ["Fire", "Water"],
+ "ability": ["Snow Warning"]
+ },
+ {
+ "species": "Ninetales-Alola",
+ "weight": 10,
+ "moves": [
+ ["Aurora Veil"],
+ ["Moonblast"],
+ ["Encore"],
+ ["Tera Blast"]
+ ],
+ "item": ["Light Clay"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "teraType": ["Fire", "Water"],
+ "wantsTera": true,
+ "ability": ["Snow Warning"]
+ }
+ ]
+ },
+ "ogerponcornerstone": {
+ "weight": 8,
+ "sets": [
+ {
+ "species": "Ogerpon-Cornerstone",
+ "weight": 100,
+ "moves": [
+ ["Ivy Cudgel"],
+ ["Horn Leech"],
+ ["Encore", "Knock Off"],
+ ["Quick Attack", "Rock Tomb", "Swords Dance"]
+ ],
+ "gender": "F",
+ "item": ["Cornerstone Mask"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Rock"],
+ "ability": ["Sturdy"]
+ }
+ ]
+ },
+ "ogerponwellspring": {
+ "weight": 8,
+ "sets": [
+ {
+ "species": "Ogerpon-Wellspring",
+ "weight": 60,
+ "moves": [
+ ["Ivy Cudgel"],
+ ["Horn Leech", "Leech Seed"],
+ ["Encore", "Substitute"],
+ ["Synthesis"]
+ ],
+ "gender": "F",
+ "item": ["Wellspring Mask"],
+ "nature": "Careful",
+ "evs": {"hp": 252, "atk": 4, "def": 4, "spd": 188, "spe": 60},
+ "teraType": ["Water"],
+ "ability": ["Water Absorb"]
+ },
+ {
+ "species": "Ogerpon-Wellspring",
+ "weight": 40,
+ "moves": [
+ ["Ivy Cudgel"],
+ ["Horn Leech"],
+ ["Knock Off", "Play Rough"],
+ ["Leech Seed", "Swords Dance"]
+ ],
+ "gender": "F",
+ "item": ["Wellspring Mask"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Water"],
+ "ability": ["Water Absorb"]
+ }
+ ]
+ },
+ "glimmora": {
+ "weight": 8,
+ "sets": [
+ {
+ "species": "Glimmora",
+ "weight": 30,
+ "moves": [
+ ["Power Gem"],
+ ["Energy Ball"],
+ ["Stealth Rock"],
+ ["Endure"]
+ ],
+ "item": ["Red Card"],
+ "nature": "Calm",
+ "evs": {"hp": 252, "spd": 124, "spe": 132},
+ "ivs": {"atk": 0},
+ "teraType": ["Grass"],
+ "ability": ["Toxic Debris"]
+ },
+ {
+ "species": "Glimmora",
+ "weight": 30,
+ "moves": [
+ ["Stealth Rock"],
+ ["Energy Ball", "Power Gem", "Sludge Wave"],
+ ["Earth Power", "Mud Shot"],
+ ["Mortal Spin"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "teraType": ["Flying", "Grass"],
+ "ability": ["Toxic Debris"]
+ },
+ {
+ "species": "Glimmora",
+ "weight": 5,
+ "moves": [
+ ["Mortal Spin"],
+ ["Stealth Rock", "Toxic Spikes"],
+ ["Mud Shot"],
+ ["Power Gem", "Sludge Bomb"]
+ ],
+ "item": ["Air Balloon", "Leftovers"],
+ "nature": "Bold",
+ "evs": {"hp": 244, "def": 76, "spd": 188},
+ "teraType": ["Flying", "Grass"],
+ "ability": ["Toxic Debris"]
+ },
+ {
+ "species": "Glimmora",
+ "weight": 20,
+ "moves": [
+ ["Mortal Spin", "Sludge Wave"],
+ ["Earth Power"],
+ ["Energy Ball"],
+ ["Dazzling Gleam", "Power Gem"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Modest",
+ "evs": {"hp": 252, "spa": 252, "spd": 4},
+ "teraType": ["Fairy", "Grass", "Ground"],
+ "ability": ["Toxic Debris"]
+ },
+ {
+ "species": "Glimmora",
+ "weight": 15,
+ "moves": [
+ ["Sludge Wave"],
+ ["Earth Power"],
+ ["Energy Ball"],
+ ["Dazzling Gleam", "Power Gem"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fairy", "Grass", "Ground"],
+ "ability": ["Toxic Debris"]
+ }
+ ]
+ },
+ "annihilape": {
+ "weight": 7,
+ "sets": [
+ {
+ "species": "Annihilape",
+ "weight": 35,
+ "moves": [
+ ["Drain Punch"],
+ ["Rage Fist"],
+ ["Bulk Up"],
+ ["Encore", "Taunt"]
+ ],
+ "item": ["Leftovers", "Sitrus Berry"],
+ "nature": "Jolly",
+ "evs": {"hp": 252, "def": 4, "spe": 252},
+ "teraType": ["Fire", "Poison", "Steel"],
+ "ability": ["Vital Spirit"]
+ },
+ {
+ "species": "Annihilape",
+ "weight": 25,
+ "moves": [
+ ["Stealth Rock"],
+ ["Rage Fist"],
+ ["Drain Punch"],
+ ["Final Gambit", "Rock Tomb", "Taunt"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 244, "def": 244, "spe": 20},
+ "teraType": ["Fire", "Normal", "Steel"],
+ "ability": ["Vital Spirit"]
+ },
+ {
+ "species": "Annihilape",
+ "weight": 25,
+ "moves": [
+ ["Stealth Rock"],
+ ["Rage Fist"],
+ ["Close Combat", "Drain Punch"],
+ ["Final Gambit", "Rock Tomb", "Taunt"]
+ ],
+ "item": ["Focus Sash", "Roseli Berry"],
+ "nature": "Jolly",
+ "evs": {"hp": 252, "atk": 4, "spe": 252},
+ "teraType": ["Fire", "Normal", "Steel"],
+ "ability": ["Vital Spirit"]
+ },
+ {
+ "species": "Annihilape",
+ "weight": 15,
+ "moves": [
+ ["U-turn"],
+ ["Close Combat"],
+ ["Rage Fist", "Shadow Claw"],
+ ["Final Gambit"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"hp": 252, "atk": 4, "spe": 252},
+ "teraType": ["Ghost", "Normal"],
+ "ability": ["Defiant"]
+ }
+ ]
+ },
+ "heatran": {
+ "weight": 7,
+ "sets": [
+ {
+ "species": "Heatran",
+ "weight": 35,
+ "moves": [
+ ["Magma Storm"],
+ ["Taunt"],
+ ["Protect"],
+ ["Earth Power", "Substitute", "Tera Blast"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Calm",
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Grass"],
+ "wantsTera": true,
+ "ability": ["Flash Fire"]
+ },
+ {
+ "species": "Heatran",
+ "weight": 40,
+ "moves": [
+ ["Magma Storm"],
+ ["Earth Power"],
+ ["Flash Cannon"],
+ ["Tera Blast"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Modest",
+ "evs": {"hp": 252, "def": 4, "spa": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Grass"],
+ "wantsTera": true,
+ "ability": ["Flash Fire"]
+ },
+ {
+ "species": "Heatran",
+ "weight": 25,
+ "moves": [
+ ["Magma Storm"],
+ ["Flash Cannon"],
+ ["Stealth Rock", "Tera Blast"],
+ ["Will-O-Wisp"]
+ ],
+ "item": ["Rocky Helmet", "Sitrus Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "teraType": ["Fairy", "Grass"],
+ "wantsTera": true,
+ "ability": ["Flame Body"]
+ }
+ ]
+ },
+ "breloom": {
+ "weight": 7,
+ "sets": [
+ {
+ "species": "Breloom",
+ "weight": 85,
+ "moves": [
+ ["Bullet Seed"],
+ ["Mach Punch"],
+ ["Bulldoze", "Rock Tomb"],
+ ["Spore"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Adamant",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Fighting", "Grass", "Ground"],
+ "ability": ["Technician"]
+ },
+ {
+ "species": "Breloom",
+ "weight": 15,
+ "moves": [
+ ["Bullet Seed"],
+ ["Mach Punch"],
+ ["Tera Blast"],
+ ["Spore", "Swords Dance"]
+ ],
+ "item": ["Loaded Dice"],
+ "nature": "Adamant",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Fire"],
+ "wantsTera": true,
+ "ability": ["Technician"]
+ }
+ ]
+ },
+ "cresselia": {
+ "weight": 7,
+ "sets": [
+ {
+ "species": "Cresselia",
+ "weight": 60,
+ "moves": [
+ ["Stored Power"],
+ ["Moonblast"],
+ ["Calm Mind"],
+ ["Moonlight"]
+ ],
+ "item": ["Covert Cloak", "Leftovers"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 116, "spe": 140},
+ "ivs": {"atk": 0},
+ "teraType": ["Electric", "Poison"],
+ "wantsTera": true,
+ "ability": ["Levitate"]
+ },
+ {
+ "species": "Cresselia",
+ "weight": 40,
+ "moves": [
+ ["Ice Beam", "Moonblast"],
+ ["Thunder Wave", "Trick Room"],
+ ["Moonlight"],
+ ["Lunar Dance"]
+ ],
+ "item": ["Mental Herb", "Rocky Helmet"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Steel"],
+ "ability": ["Levitate"]
+ }
+ ]
+ },
+ "dondozo": {
+ "weight": 7,
+ "sets": [
+ {
+ "species": "Dondozo",
+ "weight": 60,
+ "moves": [
+ ["Fissure"],
+ ["Heavy Slam", "Wave Crash"],
+ ["Protect", "Rest"],
+ ["Yawn"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Impish",
+ "evs": {"hp": 244, "def": 148, "spd": 116},
+ "teraType": ["Fairy", "Grass", "Steel"],
+ "ability": ["Unaware"]
+ },
+ {
+ "species": "Dondozo",
+ "weight": 20,
+ "moves": [
+ ["Fissure"],
+ ["Body Press", "Wave Crash"],
+ ["Protect", "Rest"],
+ ["Yawn"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Impish",
+ "evs": {"hp": 244, "def": 252, "spd": 12},
+ "teraType": ["Fairy", "Grass", "Steel"],
+ "ability": ["Unaware"]
+ },
+ {
+ "species": "Dondozo",
+ "weight": 10,
+ "moves": [
+ ["Avalanche", "Body Press", "Earthquake", "Fissure"],
+ ["Wave Crash"],
+ ["Rest"],
+ ["Sleep Talk", "Yawn"]
+ ],
+ "item": ["Rocky Helmet"],
+ "nature": "Impish",
+ "evs": {"hp": 244, "def": 252, "spd": 12},
+ "teraType": ["Fairy", "Grass", "Steel"],
+ "ability": ["Unaware"]
+ },
+ {
+ "species": "Dondozo",
+ "weight": 5,
+ "moves": [
+ ["Wave Crash"],
+ ["Avalanche"],
+ ["Body Press", "Earthquake", "Heavy Slam"],
+ ["Fissure"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Careful",
+ "evs": {"hp": 44, "atk": 212, "spd": 252},
+ "teraType": ["Fairy", "Grass", "Ground", "Steel"],
+ "ability": ["Unaware"]
+ },
+ {
+ "species": "Dondozo",
+ "weight": 5,
+ "moves": [
+ ["Curse"],
+ ["Rest"],
+ ["Wave Crash"],
+ ["Fissure"]
+ ],
+ "item": ["Chesto Berry"],
+ "nature": "Careful",
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "teraType": ["Fairy", "Grass", "Steel"],
+ "ability": ["Unaware"]
+ }
+ ]
+ },
+ "hippowdon": {
+ "weight": 7,
+ "sets": [
+ {
+ "species": "Hippowdon",
+ "weight": 100,
+ "moves": [
+ ["Stealth Rock"],
+ ["Yawn"],
+ ["Earthquake"],
+ ["Slack Off", "Whirlwind"]
+ ],
+ "item": ["Leftovers", "Sitrus Berry"],
+ "nature": "Careful",
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "teraType": ["Steel", "Water"],
+ "ability": ["Sand Stream"]
+ }
+ ]
+ },
+ "mimikyu": {
+ "weight": 7,
+ "sets": [
+ {
+ "species": "Mimikyu",
+ "weight": 25,
+ "moves": [
+ ["Play Rough"],
+ ["Shadow Sneak"],
+ ["Curse"],
+ ["Pain Split"]
+ ],
+ "item": ["Life Orb"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 156, "def": 92, "spd": 4, "spe": 252},
+ "teraType": ["Fairy", "Ghost"],
+ "ability": ["Disguise"]
+ },
+ {
+ "species": "Mimikyu",
+ "weight": 15,
+ "moves": [
+ ["Play Rough"],
+ ["Shadow Sneak"],
+ ["Curse"],
+ ["Trick Room"]
+ ],
+ "item": ["Life Orb"],
+ "nature": "Adamant",
+ "evs": {"hp": 36, "atk": 236, "def": 180, "spd": 4, "spe": 52},
+ "teraType": ["Fairy", "Ghost"],
+ "ability": ["Disguise"]
+ },
+ {
+ "species": "Mimikyu",
+ "weight": 25,
+ "moves": [
+ ["Play Rough"],
+ ["Shadow Sneak"],
+ ["Drain Punch", "Shadow Claw"],
+ ["Swords Dance"]
+ ],
+ "item": ["Life Orb"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 156, "def": 92, "spd": 4, "spe": 252},
+ "teraType": ["Fairy", "Ghost"],
+ "ability": ["Disguise"]
+ },
+ {
+ "species": "Mimikyu",
+ "weight": 15,
+ "moves": [
+ ["Play Rough"],
+ ["Shadow Claw"],
+ ["Will-O-Wisp"],
+ ["Trick"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Fairy", "Ghost"],
+ "ability": ["Disguise"]
+ },
+ {
+ "species": "Mimikyu",
+ "weight": 5,
+ "moves": [
+ ["Play Rough"],
+ ["Shadow Sneak"],
+ ["Pain Split", "Shadow Claw"],
+ ["Curse"]
+ ],
+ "item": ["Covert Cloak"],
+ "nature": "Jolly",
+ "evs": {"hp": 36, "atk": 220, "spe": 252},
+ "teraType": ["Fairy", "Ghost"],
+ "ability": ["Disguise"]
+ },
+ {
+ "species": "Mimikyu",
+ "weight": 5,
+ "moves": [
+ ["Play Rough"],
+ ["Shadow Sneak"],
+ ["Wood Hammer"],
+ ["Curse"]
+ ],
+ "item": ["Life Orb"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 156, "def": 92, "spd": 4, "spe": 252},
+ "teraType": ["Grass"],
+ "ability": ["Disguise"]
+ },
+ {
+ "species": "Mimikyu",
+ "weight": 5,
+ "moves": [
+ ["Play Rough"],
+ ["Curse"],
+ ["Trick Room"],
+ ["Shadow Sneak"]
+ ],
+ "item": ["Covert Cloak"],
+ "nature": "Adamant",
+ "evs": {"hp": 36, "atk": 236, "def": 180, "spd": 4, "spe": 52},
+ "teraType": ["Fairy", "Ghost"],
+ "ability": ["Disguise"]
+ },
+ {
+ "species": "Mimikyu",
+ "weight": 5,
+ "moves": [
+ ["Shadow Claw", "Shadow Sneak"],
+ ["Substitute"],
+ ["Curse"],
+ ["Pain Split"]
+ ],
+ "item": ["Figy Berry"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "def": 252, "spe": 252},
+ "teraType": ["Ghost"],
+ "ability": ["Disguise"]
+ }
+ ]
+ },
+ "rotomwash": {
+ "weight": 7,
+ "sets": [
+ {
+ "species": "Rotom-Wash",
+ "weight": 35,
+ "moves": [
+ ["Hydro Pump"],
+ ["Volt Switch"],
+ ["Trick"],
+ ["Will-O-Wisp"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Ghost", "Steel"],
+ "ability": ["Levitate"]
+ },
+ {
+ "species": "Rotom-Wash",
+ "weight": 15,
+ "moves": [
+ ["Hydro Pump"],
+ ["Thunderbolt"],
+ ["Volt Switch"],
+ ["Trick"]
+ ],
+ "item": ["Choice Specs"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Electric"],
+ "ability": ["Levitate"]
+ },
+ {
+ "species": "Rotom-Wash",
+ "weight": 45,
+ "moves": [
+ ["Hydro Pump"],
+ ["Volt Switch"],
+ ["Foul Play"],
+ ["Will-O-Wisp"]
+ ],
+ "item": ["Rocky Helmet", "Sitrus Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Ghost", "Steel"],
+ "ability": ["Levitate"]
+ },
+ {
+ "species": "Rotom-Wash",
+ "weight": 5,
+ "moves": [
+ ["Discharge", "Thunderbolt"],
+ ["Tera Blast"],
+ ["Nasty Plot"],
+ ["Substitute"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Timid",
+ "evs": {"hp": 252, "spa": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Levitate"]
+ }
+ ]
+ },
+ "basculegion": {
+ "weight": 7,
+ "sets": [
+ {
+ "species": "Basculegion",
+ "weight": 20,
+ "moves": [
+ ["Last Respects"],
+ ["Wave Crash"],
+ ["Aqua Jet", "Sleep Talk"],
+ ["Flip Turn"]
+ ],
+ "gender": "M",
+ "item": ["Choice Scarf"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "spa": 4, "spe": 252},
+ "teraType": ["Fairy", "Fighting", "Ghost", "Normal", "Water"],
+ "ability": ["Adaptability"]
+ },
+ {
+ "species": "Basculegion",
+ "weight": 10,
+ "moves": [
+ ["Last Respects"],
+ ["Wave Crash"],
+ ["Flip Turn"],
+ ["Tera Blast"]
+ ],
+ "gender": "M",
+ "item": ["Choice Scarf"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "spa": 4, "spe": 252},
+ "teraType": ["Fairy", "Fighting"],
+ "wantsTera": true,
+ "ability": ["Adaptability"]
+ },
+ {
+ "species": "Basculegion",
+ "weight": 40,
+ "moves": [
+ ["Wave Crash"],
+ ["Aqua Jet"],
+ ["Agility", "Endeavor"],
+ ["Last Respects"]
+ ],
+ "gender": "M",
+ "item": ["Focus Sash"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Ghost", "Normal", "Water"],
+ "ability": ["Adaptability"]
+ },
+ {
+ "species": "Basculegion",
+ "weight": 20,
+ "moves": [
+ ["Wave Crash"],
+ ["Aqua Jet"],
+ ["Agility", "Tera Blast"],
+ ["Last Respects"]
+ ],
+ "gender": "M",
+ "item": ["Focus Sash"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fairy"],
+ "wantsTera": true,
+ "ability": ["Adaptability"]
+ },
+ {
+ "species": "Basculegion",
+ "weight": 10,
+ "moves": [
+ ["Wave Crash"],
+ ["Aqua Jet"],
+ ["Substitute"],
+ ["Last Respects"]
+ ],
+ "gender": "M",
+ "item": ["Bright Powder"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Ghost", "Normal", "Water"],
+ "ability": ["Adaptability"]
+ }
+ ]
+ },
+ "corviknight": {
+ "weight": 6,
+ "sets": [
+ {
+ "species": "Corviknight",
+ "weight": 50,
+ "moves": [
+ ["U-turn"],
+ ["Roost"],
+ ["Body Press", "Iron Head"],
+ ["Brave Bird", "Taunt"]
+ ],
+ "item": ["Leftovers", "Rocky Helmet"],
+ "nature": "Impish",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Dragon", "Fighting", "Water"],
+ "ability": ["Mirror Armor"]
+ },
+ {
+ "species": "Corviknight",
+ "weight": 40,
+ "moves": [
+ ["Iron Defense"],
+ ["Body Press"],
+ ["Roost"],
+ ["Iron Head", "Taunt", "U-turn"]
+ ],
+ "item": ["Covert Cloak", "Rocky Helmet", "Safety Goggles", "Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Dragon", "Fighting", "Water"],
+ "ability": ["Mirror Armor"]
+ },
+ {
+ "species": "Corviknight",
+ "weight": 10,
+ "moves": [
+ ["Bulk Up"],
+ ["Taunt"],
+ ["Roost"],
+ ["Brave Bird", "Iron Head"]
+ ],
+ "item": ["Covert Cloak", "Rocky Helmet", "Safety Goggles", "Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Dragon", "Water"],
+ "ability": ["Mirror Armor"]
+ }
+ ]
+ },
+ "zapdos": {
+ "weight": 6,
+ "sets": [
+ {
+ "species": "Zapdos",
+ "weight": 75,
+ "moves": [
+ ["Volt Switch"],
+ ["Roost"],
+ ["Hurricane"],
+ ["Discharge"]
+ ],
+ "item": ["Heavy-Duty Boots", "Rocky Helmet", "Sitrus Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Steel", "Water"],
+ "ability": ["Static"]
+ },
+ {
+ "species": "Zapdos",
+ "weight": 10,
+ "moves": [
+ ["Volt Switch"],
+ ["Roost"],
+ ["Hurricane"],
+ ["Tera Blast"]
+ ],
+ "item": ["Heavy-Duty Boots", "Rocky Helmet", "Sitrus Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Ice"],
+ "wantsTera": true,
+ "ability": ["Static"]
+ },
+ {
+ "species": "Zapdos",
+ "weight": 10,
+ "moves": [
+ ["Thunderbolt"],
+ ["Hurricane"],
+ ["Volt Switch"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Timid",
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Ice"],
+ "wantsTera": true,
+ "ability": ["Static"]
+ },
+ {
+ "species": "Zapdos",
+ "weight": 5,
+ "moves": [
+ ["Thunderbolt"],
+ ["Hurricane"],
+ ["Volt Switch"],
+ ["Heat Wave"]
+ ],
+ "item": ["Choice Scarf", "Choice Specs"],
+ "nature": "Timid",
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Electric"],
+ "ability": ["Static"]
+ }
+ ]
+ },
+ "ursaluna": {
+ "weight": 6,
+ "sets": [
+ {
+ "species": "Ursaluna",
+ "weight": 85,
+ "moves": [
+ ["Facade"],
+ ["Earthquake"],
+ ["Trailblaze"],
+ ["Swords Dance"]
+ ],
+ "item": ["Flame Orb"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Grass", "Normal", "Water"],
+ "ability": ["Guts"]
+ },
+ {
+ "species": "Ursaluna",
+ "weight": 15,
+ "moves": [
+ ["Earthquake"],
+ ["Avalanche"],
+ ["Yawn"],
+ ["Protect"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Impish",
+ "evs": {"hp": 156, "def": 252, "spd": 100},
+ "teraType": ["Fairy", "Water"],
+ "ability": ["Bulletproof"]
+ }
+ ]
+ },
+ "goodrahisui": {
+ "weight": 6,
+ "sets": [
+ {
+ "species": "Goodra-Hisui",
+ "weight": 60,
+ "moves": [
+ ["Flash Cannon", "Heavy Slam"],
+ ["Draco Meteor", "Ice Beam"],
+ ["Acid Spray", "Flamethrower", "Thunderbolt"],
+ ["Earthquake"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Quiet",
+ "evs": {"hp": 252, "spa": 252, "spd": 4},
+ "teraType": ["Fairy", "Flying", "Water"],
+ "ability": ["Sap Sipper"]
+ },
+ {
+ "species": "Goodra-Hisui",
+ "weight": 40,
+ "moves": [
+ ["Acid Armor"],
+ ["Body Press"],
+ ["Heavy Slam"],
+ ["Draco Meteor", "Ice Beam", "Protect"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Careful",
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "teraType": ["Fairy", "Flying"],
+ "ability": ["Shell Armor"]
+ }
+ ]
+ },
+ "magnezone": {
+ "weight": 6,
+ "sets": [
+ {
+ "species": "Magnezone",
+ "weight": 70,
+ "moves": [
+ ["Thunderbolt"],
+ ["Flash Cannon"],
+ ["Volt Switch"],
+ ["Tera Blast"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Modest",
+ "evs": {"hp": 252, "spa": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Water"],
+ "wantsTera": true,
+ "ability": ["Analytic"]
+ },
+ {
+ "species": "Magnezone",
+ "weight": 20,
+ "moves": [
+ ["Thunderbolt"],
+ ["Flash Cannon"],
+ ["Volt Switch"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Specs"],
+ "nature": "Modest",
+ "evs": {"hp": 252, "spa": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Water"],
+ "wantsTera": true,
+ "ability": ["Sturdy"]
+ },
+ {
+ "species": "Magnezone",
+ "weight": 10,
+ "moves": [
+ ["Thunderbolt"],
+ ["Flash Cannon", "Steel Beam"],
+ ["Volt Switch"],
+ ["Mirror Coat"]
+ ],
+ "item": ["Custap Berry"],
+ "nature": "Modest",
+ "evs": {"hp": 252, "spa": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Flying", "Water"],
+ "wantsTera": true,
+ "ability": ["Sturdy"]
+ }
+ ]
+ },
+ "ogerpon": {
+ "weight": 6,
+ "sets": [
+ {
+ "species": "Ogerpon",
+ "weight": 100,
+ "moves": [
+ ["Ivy Cudgel"],
+ ["U-turn"],
+ ["Play Rough"],
+ ["Knock Off", "Stomping Tantrum"]
+ ],
+ "item": ["Choice Band", "Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Grass"],
+ "ability": ["Defiant"]
+ }
+ ]
+ },
+ "gliscor": {
+ "weight": 6,
+ "sets": [
+ {
+ "species": "Gliscor",
+ "weight": 100,
+ "moves": [
+ ["Substitute"],
+ ["Toxic"],
+ ["Protect"],
+ ["Earthquake"]
+ ],
+ "item": ["Toxic Orb"],
+ "nature": "Impish",
+ "evs": {"hp": 244, "def": 108, "spe": 156},
+ "teraType": ["Water"],
+ "wantsTera": true,
+ "ability": ["Poison Heal"]
+ }
+ ]
+ },
+ "ironmoth": {
+ "weight": 6,
+ "sets": [
+ {
+ "species": "Iron Moth",
+ "weight": 20,
+ "moves": [
+ ["Fiery Dance"],
+ ["Sludge Wave"],
+ ["Energy Ball"],
+ ["Dazzling Gleam", "Overheat", "Psychic"]
+ ],
+ "item": ["Assault Vest", "Booster Energy", "Choice Specs"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "teraType": ["Fairy", "Fire", "Grass", "Water"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Moth",
+ "weight": 20,
+ "moves": [
+ ["Fiery Dance"],
+ ["Sludge Wave"],
+ ["Energy Ball"],
+ ["Dazzling Gleam", "Overheat", "Psychic", "Tera Blast"]
+ ],
+ "item": ["Assault Vest", "Booster Energy", "Choice Specs"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "teraType": ["Fairy", "Water"],
+ "wantsTera": true,
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Moth",
+ "weight": 20,
+ "moves": [
+ ["Toxic Spikes"],
+ ["Fiery Dance"],
+ ["Morning Sun"],
+ ["Sludge Wave", "Tera Blast", "Whirlwind"]
+ ],
+ "item": ["Booster Energy", "Covert Cloak", "Passho Berry", "Sitrus Berry"],
+ "nature": "Timid",
+ "evs": {"hp": 244, "def": 52, "spa": 4, "spd": 12, "spe": 196},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Grass", "Water"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Moth",
+ "weight": 10,
+ "moves": [
+ ["Toxic Spikes"],
+ ["Fiery Dance"],
+ ["Morning Sun"],
+ ["Whirlwind"]
+ ],
+ "item": ["Black Sludge", "Heavy-Duty Boots"],
+ "nature": "Calm",
+ "evs": {"hp": 196, "spd": 132, "spe": 180},
+ "ivs": {"atk": 0},
+ "teraType": ["Poison"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Moth",
+ "weight": 10,
+ "moves": [
+ ["Toxic Spikes"],
+ ["Fiery Dance"],
+ ["Morning Sun"],
+ ["Whirlwind"]
+ ],
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "nature": "Calm",
+ "evs": {"hp": 196, "spd": 132, "spe": 180},
+ "ivs": {"atk": 0},
+ "teraType": ["Grass"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Moth",
+ "weight": 10,
+ "moves": [
+ ["Fiery Dance"],
+ ["Acid Spray", "Sludge Wave"],
+ ["Energy Ball", "Psychic"],
+ ["Dazzling Gleam", "Tera Blast"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Timid",
+ "evs": {"def": 124, "spa": 132, "spe": 252},
+ "teraType": ["Water"],
+ "wantsTera": true,
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Moth",
+ "weight": 10,
+ "moves": [
+ ["Fiery Dance"],
+ ["Acid Spray", "Sludge Wave"],
+ ["Energy Ball"],
+ ["Dazzling Gleam", "Psychic"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Timid",
+ "evs": {"def": 124, "spa": 132, "spe": 252},
+ "teraType": ["Fire", "Grass", "Poison"],
+ "ability": ["Quark Drive"]
+ }
+ ]
+ },
+ "rillaboom": {
+ "weight": 6,
+ "sets": [
+ {
+ "species": "Rillaboom",
+ "weight": 50,
+ "moves": [
+ ["Grassy Glide"],
+ ["Knock Off"],
+ ["Drum Beating", "Wood Hammer"],
+ ["Tera Blast"]
+ ],
+ "item": ["Assault Vest", "Choice Band"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Rock"],
+ "wantsTera": true,
+ "ability": ["Grassy Surge"]
+ },
+ {
+ "species": "Rillaboom",
+ "weight": 20,
+ "moves": [
+ ["Grassy Glide"],
+ ["Knock Off"],
+ ["Drum Beating", "Wood Hammer"],
+ ["High Horsepower", "U-turn"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Grass", "Poison"],
+ "ability": ["Grassy Surge"]
+ },
+ {
+ "species": "Rillaboom",
+ "weight": 10,
+ "moves": [
+ ["Grassy Glide"],
+ ["Knock Off"],
+ ["Drum Beating", "Wood Hammer"],
+ ["High Horsepower", "U-turn"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Grass"],
+ "ability": ["Grassy Surge"]
+ },
+ {
+ "species": "Rillaboom",
+ "weight": 20,
+ "moves": [
+ ["Grassy Glide"],
+ ["High Horsepower"],
+ ["Tera Blast"],
+ ["Swords Dance"]
+ ],
+ "item": ["Grassy Seed"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "def": 4},
+ "teraType": ["Fairy", "Rock"],
+ "wantsTera": true,
+ "ability": ["Grassy Surge"]
+ }
+ ]
+ },
+ "sneasler": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Sneasler",
+ "weight": 30,
+ "moves": [
+ ["Dire Claw"],
+ ["Close Combat"],
+ ["Fake Out"],
+ ["Toxic Spikes"]
+ ],
+ "item": ["Air Balloon", "Focus Sash", "Normal Gem", "Red Card", "Sitrus Berry"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fighting", "Flying"],
+ "ability": ["Unburden"]
+ },
+ {
+ "species": "Sneasler",
+ "weight": 10,
+ "moves": [
+ ["Dire Claw"],
+ ["Close Combat"],
+ ["Fake Out"],
+ ["Toxic Spikes"]
+ ],
+ "item": ["Air Balloon", "Focus Sash", "Sitrus Berry"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fighting", "Flying"],
+ "ability": ["Poison Touch"]
+ },
+ {
+ "species": "Sneasler",
+ "weight": 60,
+ "moves": [
+ ["Dire Claw"],
+ ["Close Combat"],
+ ["Shadow Claw"],
+ ["Toxic Spikes"]
+ ],
+ "item": ["Air Balloon", "Focus Sash", "Red Card", "Sitrus Berry"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Ghost"],
+ "ability": ["Unburden"]
+ }
+ ]
+ },
+ "clodsire": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Clodsire",
+ "weight": 50,
+ "moves": [
+ ["Earthquake"],
+ ["Toxic", "Yawn"],
+ ["Counter", "Haze", "Stealth Rock"],
+ ["Recover"]
+ ],
+ "item": ["Leftovers", "Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 156, "def": 252, "spd": 100},
+ "teraType": ["Dark", "Electric", "Fire", "Water"],
+ "ability": ["Water Absorb"]
+ },
+ {
+ "species": "Clodsire",
+ "weight": 50,
+ "moves": [
+ ["Earthquake"],
+ ["Toxic", "Yawn"],
+ ["Counter", "Haze", "Stealth Rock"],
+ ["Recover"]
+ ],
+ "item": ["Leftovers", "Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 156, "def": 252, "spd": 100},
+ "teraType": ["Dark", "Electric", "Fire", "Water"],
+ "ability": ["Unaware"]
+ }
+ ]
+ },
+ "meowscarada": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Meowscarada",
+ "weight": 25,
+ "moves": [
+ ["Flower Trick"],
+ ["Knock Off"],
+ ["Trick", "U-turn"],
+ ["Low Kick", "Play Rough", "Sucker Punch"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Dark", "Ghost", "Grass"],
+ "ability": ["Protean"]
+ },
+ {
+ "species": "Meowscarada",
+ "weight": 10,
+ "moves": [
+ ["Flower Trick"],
+ ["Knock Off"],
+ ["Trick", "U-turn"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Rock"],
+ "wantsTera": true,
+ "ability": ["Protean"]
+ },
+ {
+ "species": "Meowscarada",
+ "weight": 30,
+ "moves": [
+ ["Flower Trick"],
+ ["Knock Off"],
+ ["Sucker Punch", "Taunt"],
+ ["Toxic Spikes"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Ghost", "Grass"],
+ "ability": ["Overgrow"]
+ },
+ {
+ "species": "Meowscarada",
+ "weight": 20,
+ "moves": [
+ ["Flower Trick"],
+ ["Knock Off"],
+ ["Tera Blast"],
+ ["Sucker Punch", "Toxic Spikes"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Rock"],
+ "wantsTera": true,
+ "ability": ["Overgrow"]
+ },
+ {
+ "species": "Meowscarada",
+ "weight": 10,
+ "moves": [
+ ["Flower Trick"],
+ ["Knock Off"],
+ ["Trick", "U-turn"],
+ ["Sucker Punch"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Ghost", "Grass"],
+ "ability": ["Protean"]
+ },
+ {
+ "species": "Meowscarada",
+ "weight": 5,
+ "moves": [
+ ["Flower Trick"],
+ ["Knock Off"],
+ ["Sucker Punch", "Trick", "U-turn"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Rock"],
+ "wantsTera": true,
+ "ability": ["Protean"]
+ }
+ ]
+ },
+ "azumarill": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Azumarill",
+ "weight": 45,
+ "moves": [
+ ["Aqua Jet"],
+ ["Play Rough"],
+ ["Liquidation"],
+ ["Superpower"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Fairy", "Water"],
+ "ability": ["Huge Power"]
+ },
+ {
+ "species": "Azumarill",
+ "weight": 10,
+ "moves": [
+ ["Aqua Jet"],
+ ["Play Rough"],
+ ["Liquidation"],
+ ["Tera Blast"]
+ ],
+ "item": ["Assault Vest", "Choice Band"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Electric", "Fairy", "Fire", "Grass"],
+ "wantsTera": true,
+ "ability": ["Huge Power"]
+ },
+ {
+ "species": "Azumarill",
+ "weight": 25,
+ "moves": [
+ ["Belly Drum"],
+ ["Aqua Jet"],
+ ["Play Rough"],
+ ["Encore", "Liquidation"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Adamant",
+ "evs": {"hp": 244, "atk": 252, "def": 12},
+ "teraType": ["Water"],
+ "ability": ["Huge Power"]
+ },
+ {
+ "species": "Azumarill",
+ "weight": 10,
+ "moves": [
+ ["Belly Drum"],
+ ["Aqua Jet"],
+ ["Play Rough"],
+ ["Bulldoze"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Adamant",
+ "evs": {"hp": 244, "atk": 252, "def": 12},
+ "teraType": ["Steel"],
+ "ability": ["Huge Power"]
+ },
+ {
+ "species": "Azumarill",
+ "weight": 5,
+ "moves": [
+ ["Belly Drum"],
+ ["Aqua Jet"],
+ ["Play Rough"],
+ ["Tera Blast"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Adamant",
+ "evs": {"hp": 244, "atk": 252, "def": 12},
+ "teraType": ["Fire"],
+ "wantsTera": true,
+ "ability": ["Huge Power"]
+ },
+ {
+ "species": "Azumarill",
+ "weight": 5,
+ "moves": [
+ ["Substitute"],
+ ["Encore"],
+ ["Play Rough"],
+ ["Aqua Jet", "Liquidation"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "def": 4},
+ "teraType": ["Water"],
+ "ability": ["Huge Power"]
+ }
+ ]
+ },
+ "ironvaliant": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Iron Valiant",
+ "weight": 35,
+ "moves": [
+ ["Spirit Break"],
+ ["Encore", "Reflect"],
+ ["Close Combat"],
+ ["Destiny Bond", "Knock Off"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Jolly",
+ "evs": {"hp": 92, "atk": 204, "def": 4, "spd": 4, "spe": 204},
+ "teraType": ["Ghost", "Steel"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Valiant",
+ "weight": 25,
+ "moves": [
+ ["Moonblast"],
+ ["Encore", "Shadow Ball", "Shadow Sneak"],
+ ["Aura Sphere", "Close Combat"],
+ ["Destiny Bond"]
+ ],
+ "item": ["Booster Energy", "Focus Sash"],
+ "nature": "Naive",
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "teraType": ["Fairy", "Ghost", "Steel"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Valiant",
+ "weight": 20,
+ "moves": [
+ ["Moonblast"],
+ ["Close Combat"],
+ ["Encore", "Shadow Ball"],
+ ["Psychic", "Psyshock", "Thunderbolt"]
+ ],
+ "item": ["Booster Energy", "Life Orb"],
+ "nature": "Naive",
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "teraType": ["Electric", "Fairy", "Ghost", "Steel"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Valiant",
+ "weight": 20,
+ "moves": [
+ ["Swords Dance"],
+ ["Close Combat", "Encore"],
+ ["Spirit Break"],
+ ["Knock Off", "Shadow Sneak"]
+ ],
+ "item": ["Booster Energy", "Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Fairy", "Ghost", "Steel"],
+ "ability": ["Quark Drive"]
+ }
+ ]
+ },
+ "kingambit": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Kingambit",
+ "weight": 25,
+ "moves": [
+ ["Kowtow Cleave"],
+ ["Sucker Punch"],
+ ["Iron Head"],
+ ["Guillotine"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Dark", "Flying"],
+ "ability": ["Defiant"]
+ },
+ {
+ "species": "Kingambit",
+ "weight": 20,
+ "moves": [
+ ["Kowtow Cleave"],
+ ["Sucker Punch"],
+ ["Iron Head"],
+ ["Guillotine"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Dark", "Flying"],
+ "ability": ["Supreme Overlord"]
+ },
+ {
+ "species": "Kingambit",
+ "weight": 10,
+ "moves": [
+ ["Kowtow Cleave"],
+ ["Guillotine", "Sucker Punch"],
+ ["Iron Head"],
+ ["Tera Blast"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Fairy"],
+ "wantsTera": true,
+ "ability": ["Defiant"]
+ },
+ {
+ "species": "Kingambit",
+ "weight": 10,
+ "moves": [
+ ["Kowtow Cleave"],
+ ["Guillotine", "Sucker Punch"],
+ ["Iron Head"],
+ ["Tera Blast"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Fairy"],
+ "wantsTera": true,
+ "ability": ["Supreme Overlord"]
+ },
+ {
+ "species": "Kingambit",
+ "weight": 15,
+ "moves": [
+ ["Kowtow Cleave"],
+ ["Sucker Punch"],
+ ["Iron Head"],
+ ["Swords Dance"]
+ ],
+ "item": ["Black Glasses", "Sitrus Berry"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Dark", "Flying"],
+ "ability": ["Supreme Overlord"]
+ },
+ {
+ "species": "Kingambit",
+ "weight": 10,
+ "moves": [
+ ["Kowtow Cleave"],
+ ["Sucker Punch"],
+ ["Iron Head"],
+ ["Swords Dance"]
+ ],
+ "item": ["Black Glasses", "Sitrus Berry"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Dark", "Flying"],
+ "ability": ["Defiant"]
+ },
+ {
+ "species": "Kingambit",
+ "weight": 5,
+ "moves": [
+ ["Stealth Rock"],
+ ["Kowtow Cleave"],
+ ["Guillotine", "Iron Head"],
+ ["Sucker Punch", "Thunder Wave"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Dark", "Fairy", "Flying"],
+ "ability": ["Defiant", "Supreme Overlord"]
+ },
+ {
+ "species": "Kingambit",
+ "weight": 5,
+ "moves": [
+ ["Stealth Rock"],
+ ["Kowtow Cleave"],
+ ["Guillotine", "Iron Head"],
+ ["Sucker Punch", "Thunder Wave"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Adamant",
+ "evs": {"hp": 244, "atk": 252, "spd": 12},
+ "teraType": ["Dark", "Fairy", "Flying"],
+ "ability": ["Defiant", "Supreme Overlord"]
+ }
+ ]
+ },
+ "volcarona": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Volcarona",
+ "weight": 55,
+ "moves": [
+ ["Quiver Dance"],
+ ["Fiery Dance"],
+ ["Morning Sun"],
+ ["Giga Drain", "Substitute", "Will-O-Wisp"]
+ ],
+ "item": ["Heavy-Duty Boots", "Sitrus Berry"],
+ "nature": "Timid",
+ "evs": {"hp": 244, "def": 204, "spa": 12, "spd": 4, "spe": 44},
+ "teraType": ["Fairy", "Grass"],
+ "wantsTera": true,
+ "ability": ["Flame Body"]
+ },
+ {
+ "species": "Volcarona",
+ "weight": 25,
+ "moves": [
+ ["Quiver Dance"],
+ ["Fiery Dance"],
+ ["Morning Sun"],
+ ["Tera Blast"]
+ ],
+ "item": ["Heavy-Duty Boots", "Sitrus Berry"],
+ "nature": "Timid",
+ "evs": {"hp": 244, "def": 204, "spa": 12, "spd": 4, "spe": 44},
+ "teraType": ["Water"],
+ "wantsTera": true,
+ "ability": ["Flame Body"]
+ },
+ {
+ "species": "Volcarona",
+ "weight": 20,
+ "moves": [
+ ["Quiver Dance"],
+ ["Fiery Dance"],
+ ["Bug Buzz", "Giga Drain", "Psychic"],
+ ["Tera Blast"]
+ ],
+ "item": ["Heavy-Duty Boots", "Lum Berry", "Sitrus Berry"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Rock", "Water"],
+ "wantsTera": true,
+ "ability": ["Flame Body"]
+ }
+ ]
+ },
+ "wochien": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Wo-Chien",
+ "weight": 90,
+ "moves": [
+ ["Leech Seed"],
+ ["Protect"],
+ ["Dark Pulse", "Foul Play", "Knock Off"],
+ ["Giga Drain", "Ruination", "Substitute", "Taunt"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fairy", "Fire", "Poison", "Water"],
+ "wantsTera": true,
+ "ability": ["Tablets of Ruin"]
+ },
+ {
+ "species": "Wo-Chien",
+ "weight": 10,
+ "moves": [
+ ["Leech Seed"],
+ ["Protect"],
+ ["Tera Blast"],
+ ["Giga Drain", "Ruination", "Substitute", "Taunt"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fire"],
+ "wantsTera": true,
+ "ability": ["Tablets of Ruin"]
+ }
+ ]
+ },
+ "empoleon": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Empoleon",
+ "weight": 100,
+ "moves": [
+ ["Stealth Rock"],
+ ["Roar", "Yawn"],
+ ["Flash Cannon", "Ice Beam"],
+ ["Flip Turn", "Roost", "Surf"]
+ ],
+ "item": ["Air Balloon", "Leftovers", "Sitrus Berry"],
+ "nature": "Calm",
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "teraType": ["Fairy", "Flying", "Grass"],
+ "ability": ["Competitive"]
+ }
+ ]
+ },
+ "kommoo": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Kommo-o",
+ "weight": 50,
+ "moves": [
+ ["Clangorous Soul"],
+ ["Clanging Scales"],
+ ["Aura Sphere", "Vacuum Wave"],
+ ["Flash Cannon"]
+ ],
+ "item": ["Throat Spray"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Bulletproof"]
+ },
+ {
+ "species": "Kommo-o",
+ "weight": 50,
+ "moves": [
+ ["Clangorous Soul"],
+ ["Drain Punch"],
+ ["Iron Head"],
+ ["Earthquake", "Substitute"]
+ ],
+ "item": ["Leftovers", "Sitrus Berry"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Bulletproof"]
+ }
+ ]
+ },
+ "sinistcha": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Sinistcha",
+ "weight": 100,
+ "moves": [
+ ["Strength Sap"],
+ ["Matcha Gotcha"],
+ ["Hex", "Shadow Ball"],
+ ["Calm Mind", "Scald"]
+ ],
+ "item": ["Covert Cloak", "Leftovers", "Rocky Helmet"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Normal", "Water"],
+ "wantsTera": true,
+ "ability": ["Heatproof"]
+ }
+ ]
+ },
+ "vikavolt": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Vikavolt",
+ "weight": 100,
+ "moves": [
+ ["Discharge", "Thunderbolt", "Thunder Wave", "Volt Switch"],
+ ["Bug Buzz"],
+ ["Sticky Web"],
+ ["Guillotine"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Modest",
+ "evs": {"hp": 244, "def": 212, "spd": 52},
+ "ivs": {"atk": 0},
+ "teraType": ["Steel"],
+ "ability": ["Levitate"]
+ }
+ ]
+ },
+ "skeledirge": {
+ "weight": 5,
+ "sets": [
+ {
+ "species": "Skeledirge",
+ "weight": 30,
+ "moves": [
+ ["Torch Song"],
+ ["Slack Off"],
+ ["Will-O-Wisp", "Yawn"],
+ ["Earth Power", "Hex", "Shadow Ball", "Tera Blast"]
+ ],
+ "item": ["Covert Cloak", "Heavy-Duty Boots", "Leftovers", "Sitrus Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fairy", "Water"],
+ "wantsTera": true,
+ "ability": ["Unaware"]
+ },
+ {
+ "species": "Skeledirge",
+ "weight": 60,
+ "moves": [
+ ["Torch Song"],
+ ["Slack Off"],
+ ["Will-O-Wisp", "Yawn"],
+ ["Earth Power", "Hex", "Shadow Ball"]
+ ],
+ "item": ["Covert Cloak", "Heavy-Duty Boots", "Leftovers", "Sitrus Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fairy", "Normal"],
+ "ability": ["Unaware"]
+ },
+ {
+ "species": "Skeledirge",
+ "weight": 5,
+ "moves": [
+ ["Sing"],
+ ["Torch Song"],
+ ["Slack Off"],
+ ["Earth Power", "Shadow Ball", "Tera Blast"]
+ ],
+ "item": ["Blunder Policy"],
+ "nature": "Modest",
+ "evs": {"hp": 204, "def": 4, "spa": 132, "spd": 4, "spe": 164},
+ "teraType": ["Fairy", "Water"],
+ "wantsTera": true,
+ "ability": ["Unaware"]
+ },
+ {
+ "species": "Skeledirge",
+ "weight": 5,
+ "moves": [
+ ["Sing"],
+ ["Torch Song"],
+ ["Slack Off"],
+ ["Earth Power", "Shadow Ball"]
+ ],
+ "item": ["Blunder Policy"],
+ "nature": "Modest",
+ "evs": {"hp": 204, "def": 4, "spa": 132, "spd": 4, "spe": 164},
+ "teraType": ["Fire"],
+ "ability": ["Unaware"]
+ }
+ ]
+ },
+ "blissey": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Blissey",
+ "weight": 10,
+ "moves": [
+ ["Soft-Boiled"],
+ ["Flamethrower"],
+ ["Ice Beam"],
+ ["Thunderbolt"]
+ ],
+ "item": ["Expert Belt"],
+ "nature": "Bold",
+ "evs": {"hp": 4, "def": 252, "spa": 252},
+ "teraType": ["Dark", "Fire"],
+ "ability": ["Natural Cure"]
+ },
+ {
+ "species": "Blissey",
+ "weight": 13,
+ "moves": [
+ ["Calm Mind"],
+ ["Soft-Boiled"],
+ ["Shadow Ball"],
+ ["Flamethrower"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Calm",
+ "evs": {"hp": 4, "def": 252, "spd": 252},
+ "teraType": ["Dark", "Fire", "Ghost"],
+ "ability": ["Natural Cure"]
+ },
+ {
+ "species": "Blissey",
+ "weight": 13,
+ "moves": [
+ ["Calm Mind"],
+ ["Soft-Boiled"],
+ ["Shadow Ball"],
+ ["Stealth Rock"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Calm",
+ "evs": {"hp": 4, "def": 252, "spd": 252},
+ "teraType": ["Dark", "Ghost"],
+ "ability": ["Natural Cure"]
+ },
+ {
+ "species": "Blissey",
+ "weight": 14,
+ "moves": [
+ ["Calm Mind"],
+ ["Soft-Boiled"],
+ ["Shadow Ball"],
+ ["Tera Blast"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Calm",
+ "evs": {"hp": 4, "def": 252, "spd": 252},
+ "teraType": ["Fighting", "Fire"],
+ "wantsTera": true,
+ "ability": ["Natural Cure"]
+ },
+ {
+ "species": "Blissey",
+ "weight": 50,
+ "moves": [
+ ["Calm Mind"],
+ ["Soft-Boiled"],
+ ["Flamethrower", "Shadow Ball"],
+ ["Fling"]
+ ],
+ "item": ["Flame Orb", "Poison Barb"],
+ "nature": "Calm",
+ "evs": {"hp": 4, "def": 252, "spd": 252},
+ "teraType": ["Dark", "Fire"],
+ "ability": ["Natural Cure"]
+ }
+ ]
+ },
+ "ceruledge": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Ceruledge",
+ "weight": 25,
+ "moves": [
+ ["Bitter Blade"],
+ ["Bulk Up"],
+ ["Taunt"],
+ ["Flame Charge", "Shadow Sneak", "Tera Blast", "Will-O-Wisp"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Impish",
+ "evs": {"hp": 252, "atk": 4, "def": 252},
+ "teraType": ["Fairy", "Grass"],
+ "ability": ["Flash Fire"]
+ },
+ {
+ "species": "Ceruledge",
+ "weight": 65,
+ "moves": [
+ ["Bitter Blade"],
+ ["Close Combat", "Poltergeist"],
+ ["Shadow Sneak"],
+ ["Destiny Bond", "Swords Dance"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fighting", "Fire", "Normal"],
+ "ability": ["Weak Armor"]
+ },
+ {
+ "species": "Ceruledge",
+ "weight": 10,
+ "moves": [
+ ["Bitter Blade"],
+ ["Flare Blitz"],
+ ["Shadow Sneak"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Adamant",
+ "evs": {"hp": 100, "atk": 252, "def": 156},
+ "teraType": ["Fairy"],
+ "wantsTera": true,
+ "ability": ["Weak Armor"]
+ }
+ ]
+ },
+ "chansey": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Chansey",
+ "weight": 70,
+ "moves": [
+ ["Seismic Toss"],
+ ["Shadow Ball"],
+ ["Calm Mind"],
+ ["Soft-Boiled"]
+ ],
+ "item": ["Eviolite"],
+ "nature": "Bold",
+ "evs": {"hp": 12, "def": 252, "spd": 244},
+ "ivs": {"atk": 0},
+ "teraType": ["Dark", "Ghost"],
+ "ability": ["Natural Cure"]
+ },
+ {
+ "species": "Chansey",
+ "weight": 30,
+ "moves": [
+ ["Seismic Toss"],
+ ["Stealth Rock"],
+ ["Thunder Wave"],
+ ["Soft-Boiled"]
+ ],
+ "item": ["Eviolite"],
+ "nature": "Bold",
+ "evs": {"hp": 12, "def": 252, "spd": 244},
+ "ivs": {"atk": 0},
+ "teraType": ["Dark", "Ghost"],
+ "ability": ["Natural Cure"]
+ }
+ ]
+ },
+ "espathra": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Espathra",
+ "weight": 35,
+ "moves": [
+ ["Calm Mind"],
+ ["Stored Power"],
+ ["Tera Blast"],
+ ["Protect", "Roost", "Substitute"]
+ ],
+ "item": ["Leftovers", "Lum Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 244, "def": 252, "spe": 12},
+ "teraType": ["Fighting", "Fire"],
+ "wantsTera": true,
+ "ability": ["Speed Boost"]
+ },
+ {
+ "species": "Espathra",
+ "weight": 20,
+ "moves": [
+ ["Calm Mind"],
+ ["Stored Power"],
+ ["Dazzling Gleam"],
+ ["Protect", "Roost", "Substitute"]
+ ],
+ "item": ["Leftovers", "Lum Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 244, "def": 252, "spe": 12},
+ "teraType": ["Fairy", "Water"],
+ "ability": ["Speed Boost"]
+ },
+ {
+ "species": "Espathra",
+ "weight": 30,
+ "moves": [
+ ["Lumina Crash"],
+ ["Baton Pass"],
+ ["Dazzling Gleam", "Protect", "Reflect"],
+ ["Calm Mind", "Substitute"]
+ ],
+ "item": ["Focus Sash", "Leftovers", "Sitrus Berry"],
+ "nature": "Timid",
+ "evs": {"hp": 252, "def": 4, "spe": 252},
+ "teraType": ["Ghost", "Normal", "Water"],
+ "ability": ["Speed Boost"]
+ },
+ {
+ "species": "Espathra",
+ "weight": 10,
+ "moves": [
+ ["Lumina Crash"],
+ ["Energy Ball"],
+ ["Shadow Ball"],
+ ["Baton Pass", "Hypnosis"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Ghost", "Grass", "Normal"],
+ "ability": ["Speed Boost"]
+ },
+ {
+ "species": "Espathra",
+ "weight": 5,
+ "moves": [
+ ["Light Screen"],
+ ["Reflect"],
+ ["Lumina Crash", "Protect"],
+ ["Baton Pass"]
+ ],
+ "item": ["Light Clay"],
+ "nature": "Timid",
+ "evs": {"hp": 252, "spa": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy"],
+ "ability": ["Speed Boost"]
+ }
+ ]
+ },
+ "grimmsnarl": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Grimmsnarl",
+ "weight": 90,
+ "moves": [
+ ["Reflect"],
+ ["Light Screen"],
+ ["Taunt", "Thunder Wave"],
+ ["Parting Shot", "Spirit Break"]
+ ],
+ "item": ["Light Clay"],
+ "nature": "Careful",
+ "evs": {"hp": 248, "def": 8, "spd": 252},
+ "teraType": ["Poison", "Steel"],
+ "ability": ["Prankster"]
+ },
+ {
+ "species": "Grimmsnarl",
+ "weight": 10,
+ "moves": [
+ ["Play Rough", "Spirit Break"],
+ ["Crunch", "Sucker Punch"],
+ ["Hammer Arm", "Low Kick", "Taunt"],
+ ["Thunder Wave"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Dark", "Fairy", "Ghost"],
+ "ability": ["Prankster"]
+ }
+ ]
+ },
+ "ironhands": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Iron Hands",
+ "weight": 70,
+ "moves": [
+ ["Drain Punch"],
+ ["Thunder Punch", "Wild Charge"],
+ ["Earthquake", "Heavy Slam", "Ice Punch"],
+ ["Fake Out", "Volt Switch"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "spd": 204, "spe": 52},
+ "teraType": ["Fairy", "Grass", "Ground", "Water"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Hands",
+ "weight": 30,
+ "moves": [
+ ["Drain Punch"],
+ ["Thunder Punch"],
+ ["Substitute"],
+ ["Swords Dance"]
+ ],
+ "item": ["Leftovers", "Punching Glove"],
+ "nature": "Impish",
+ "evs": {"hp": 92, "atk": 12, "def": 172, "spd": 212, "spe": 20},
+ "teraType": ["Fairy", "Grass", "Water"],
+ "ability": ["Quark Drive"]
+ }
+ ]
+ },
+ "hydreigon": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Hydreigon",
+ "weight": 45,
+ "moves": [
+ ["Dark Pulse"],
+ ["Draco Meteor"],
+ ["Flash Cannon"],
+ ["Fire Blast", "Flamethrower", "U-turn"]
+ ],
+ "item": ["Choice Scarf", "Choice Specs"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Levitate"]
+ },
+ {
+ "species": "Hydreigon",
+ "weight": 25,
+ "moves": [
+ ["Dark Pulse"],
+ ["Draco Meteor"],
+ ["Flash Cannon", "U-turn"],
+ ["Fire Blast", "Flamethrower"]
+ ],
+ "item": ["Choice Specs"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fire", "Poison"],
+ "wantsTera": true,
+ "ability": ["Levitate"]
+ },
+ {
+ "species": "Hydreigon",
+ "weight": 10,
+ "moves": [
+ ["Stealth Rock"],
+ ["Dark Pulse"],
+ ["Taunt"],
+ ["Draco Meteor", "Flash Cannon", "Thunder Wave"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Poison", "Steel"],
+ "wantsTera": true,
+ "ability": ["Levitate"]
+ },
+ {
+ "species": "Hydreigon",
+ "weight": 20,
+ "moves": [
+ ["Dark Pulse"],
+ ["Flash Cannon"],
+ ["Nasty Plot"],
+ ["Draco Meteor", "Earth Power", "Flamethrower", "Substitute", "Taunt"]
+ ],
+ "item": ["Leftovers", "Life Orb"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Levitate"]
+ }
+ ]
+ },
+ "kleavor": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Kleavor",
+ "weight": 28,
+ "moves": [
+ ["Stone Axe"],
+ ["Night Slash"],
+ ["Feint", "Trailblaze"],
+ ["Close Combat", "U-turn", "X-Scissor"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Grass", "Water"],
+ "ability": ["Sharpness"]
+ },
+ {
+ "species": "Kleavor",
+ "weight": 27,
+ "moves": [
+ ["Stone Axe"],
+ ["Night Slash"],
+ ["Feint", "Trailblaze"],
+ ["U-turn", "X-Scissor"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Bug", "Grass", "Water"],
+ "ability": ["Sharpness"]
+ },
+ {
+ "species": "Kleavor",
+ "weight": 5,
+ "moves": [
+ ["Stone Axe"],
+ ["Night Slash"],
+ ["Feint", "Trailblaze"],
+ ["Close Combat", "U-turn", "X-Scissor"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 140, "atk": 52, "def": 4, "spd": 244, "spe": 68},
+ "teraType": ["Grass", "Water"],
+ "ability": ["Sharpness"]
+ },
+ {
+ "species": "Kleavor",
+ "weight": 5,
+ "moves": [
+ ["Stone Axe"],
+ ["Night Slash"],
+ ["Feint", "Trailblaze"],
+ ["U-turn", "X-Scissor"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 140, "atk": 52, "def": 4, "spd": 244, "spe": 68},
+ "teraType": ["Bug", "Grass", "Water"],
+ "ability": ["Sharpness"]
+ },
+ {
+ "species": "Kleavor",
+ "weight": 18,
+ "moves": [
+ ["Stone Axe"],
+ ["U-turn"],
+ ["Night Slash"],
+ ["Close Combat", "X-Scissor"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Grass"],
+ "ability": ["Sharpness"]
+ },
+ {
+ "species": "Kleavor",
+ "weight": 17,
+ "moves": [
+ ["Stone Axe"],
+ ["U-turn"],
+ ["Night Slash"],
+ ["X-Scissor"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Bug", "Grass"],
+ "ability": ["Sharpness"]
+ }
+ ]
+ },
+ "screamtail": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Scream Tail",
+ "weight": 80,
+ "moves": [
+ ["Stealth Rock"],
+ ["Thunder Wave", "Trick Room"],
+ ["Encore", "Perish Song", "Roar"],
+ ["Misty Explosion"]
+ ],
+ "item": ["Booster Energy", "Mental Herb", "Sitrus Berry"],
+ "nature": "Calm",
+ "evs": {"hp": 180, "spd": 156, "spe": 172},
+ "teraType": ["Normal"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Scream Tail",
+ "weight": 10,
+ "moves": [
+ ["Reflect"],
+ ["Light Screen"],
+ ["Encore"],
+ ["Dazzling Gleam", "Misty Explosion", "Perish Song", "Stealth Rock"]
+ ],
+ "item": ["Light Clay", "Mental Herb"],
+ "nature": "Timid",
+ "evs": {"hp": 252, "spd": 4, "spe": 252},
+ "teraType": ["Normal"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Scream Tail",
+ "weight": 5,
+ "moves": [
+ ["Baton Pass"],
+ ["Bulk Up", "Calm Mind"],
+ ["Encore"],
+ ["Dazzling Gleam", "Play Rough", "Substitute"]
+ ],
+ "item": ["Mental Herb", "Sitrus Berry"],
+ "nature": "Careful",
+ "evs": {"hp": 220, "def": 220, "spd": 68},
+ "teraType": ["Normal"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Scream Tail",
+ "weight": 5,
+ "moves": [
+ ["Baton Pass"],
+ ["Bulk Up", "Calm Mind"],
+ ["Sing"],
+ ["Play Rough", "Substitute"]
+ ],
+ "item": ["Blunder Policy"],
+ "nature": "Careful",
+ "evs": {"hp": 220, "def": 220, "spd": 68},
+ "teraType": ["Normal"],
+ "ability": ["Protosynthesis"]
+ }
+ ]
+ },
+ "milotic": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Milotic",
+ "weight": 67,
+ "moves": [
+ ["Scald"],
+ ["Recover"],
+ ["Haze", "Mirror Coat"],
+ ["Draining Kiss", "Ice Beam"]
+ ],
+ "item": ["Flame Orb"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Fire"],
+ "ability": ["Marvel Scale"]
+ },
+ {
+ "species": "Milotic",
+ "weight": 33,
+ "moves": [
+ ["Scald"],
+ ["Recover"],
+ ["Haze", "Mirror Coat"],
+ ["Flip Turn"]
+ ],
+ "item": ["Flame Orb"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fairy", "Fire"],
+ "ability": ["Marvel Scale"]
+ }
+ ]
+ },
+ "okidogi": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Okidogi",
+ "weight": 15,
+ "moves": [
+ ["Bulk Up"],
+ ["Drain Punch"],
+ ["Knock Off"],
+ ["Poison Jab"]
+ ],
+ "item": ["Black Sludge", "Rocky Helmet"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 156, "spe": 100},
+ "teraType": ["Poison"],
+ "ability": ["Toxic Chain"]
+ },
+ {
+ "species": "Okidogi",
+ "weight": 25,
+ "moves": [
+ ["Bulk Up"],
+ ["Drain Punch"],
+ ["Knock Off"],
+ ["Ice Punch", "Poison Jab", "Substitute", "Taunt"]
+ ],
+ "item": ["Leftovers", "Rocky Helmet"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 156, "spe": 100},
+ "teraType": ["Flying", "Water"],
+ "ability": ["Toxic Chain"]
+ },
+ {
+ "species": "Okidogi",
+ "weight": 35,
+ "moves": [
+ ["Bulk Up"],
+ ["Drain Punch"],
+ ["Knock Off"],
+ ["Ice Punch", "Poison Jab", "Substitute", "Taunt"]
+ ],
+ "item": ["Black Sludge", "Leftovers", "Rocky Helmet"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 156, "spe": 100},
+ "teraType": ["Flying", "Poison", "Water"],
+ "ability": ["Guard Dog"]
+ },
+ {
+ "species": "Okidogi",
+ "weight": 15,
+ "moves": [
+ ["Drain Punch"],
+ ["Knock Off"],
+ ["Poison Fang", "Poison Jab"],
+ ["Ice Punch"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Flying", "Poison", "Water"],
+ "ability": ["Guard Dog"]
+ },
+ {
+ "species": "Okidogi",
+ "weight": 10,
+ "moves": [
+ ["Drain Punch"],
+ ["Knock Off"],
+ ["Poison Fang", "Poison Jab"],
+ ["Ice Punch"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Flying", "Poison", "Water"],
+ "ability": ["Toxic Chain"]
+ }
+ ]
+ },
+ "arcaninehisui": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Arcanine-Hisui",
+ "weight": 45,
+ "moves": [
+ ["Head Smash"],
+ ["Flare Blitz"],
+ ["Extreme Speed"],
+ ["Stealth Rock", "Tera Blast"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Grass"],
+ "wantsTera": true,
+ "ability": ["Rock Head"]
+ },
+ {
+ "species": "Arcanine-Hisui",
+ "weight": 50,
+ "moves": [
+ ["Head Smash"],
+ ["Flare Blitz"],
+ ["Extreme Speed"],
+ ["Flame Charge", "Stealth Rock", "Wild Charge"]
+ ],
+ "item": ["Choice Band", "Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Normal", "Rock"],
+ "wantsTera": true,
+ "ability": ["Rock Head"]
+ },
+ {
+ "species": "Arcanine-Hisui",
+ "weight": 5,
+ "moves": [
+ ["Rock Blast"],
+ ["Flare Blitz"],
+ ["Extreme Speed"],
+ ["Tera Blast"]
+ ],
+ "item": ["Loaded Dice"],
+ "nature": "Adamant",
+ "evs": {"hp": 212, "atk": 252, "def": 4, "spd": 4, "spe": 36},
+ "teraType": ["Fairy"],
+ "wantsTera": true,
+ "ability": ["Intimidate"]
+ }
+ ]
+ },
+ "snorlax": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Snorlax",
+ "weight": 60,
+ "moves": [
+ ["Heavy Slam"],
+ ["Earthquake", "Fissure"],
+ ["Body Slam", "Protect"],
+ ["Yawn"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Careful",
+ "evs": {"hp": 252, "def": 92, "spd": 164},
+ "teraType": ["Fairy", "Ghost"],
+ "ability": ["Thick Fat"]
+ },
+ {
+ "species": "Snorlax",
+ "weight": 20,
+ "moves": [
+ ["Heavy Slam"],
+ ["Earthquake", "Heat Crash"],
+ ["Body Slam", "Double-Edge"],
+ ["Fissure"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "def": 252, "spd": 4},
+ "teraType": ["Ghost", "Steel"],
+ "ability": ["Thick Fat"]
+ },
+ {
+ "species": "Snorlax",
+ "weight": 20,
+ "moves": [
+ ["Heavy Slam"],
+ ["Earthquake", "Heat Crash"],
+ ["Body Slam", "Double-Edge"],
+ ["Fissure", "Tera Blast"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "def": 252, "spd": 4},
+ "teraType": ["Fairy"],
+ "ability": ["Thick Fat"]
+ }
+ ]
+ },
+ "alomomola": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Alomomola",
+ "weight": 100,
+ "moves": [
+ ["Scald"],
+ ["Flip Turn"],
+ ["Mirror Coat"],
+ ["Icy Wind"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Sassy",
+ "evs": {"hp": 4, "def": 252, "spd": 252},
+ "teraType": ["Poison"],
+ "ability": ["Regenerator"]
+ }
+ ]
+ },
+ "umbreon": {
+ "weight": 4,
+ "sets": [
+ {
+ "species": "Umbreon",
+ "weight": 100,
+ "moves": [
+ ["Foul Play"],
+ ["Protect"],
+ ["Wish"],
+ ["Yawn"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fairy", "Poison"],
+ "ability": ["Inner Focus"]
+ }
+ ]
+ },
+ "cloyster": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Cloyster",
+ "weight": 60,
+ "moves": [
+ ["Shell Smash"],
+ ["Icicle Spear"],
+ ["Drill Run", "Ice Shard", "Tera Blast"],
+ ["Rock Blast"]
+ ],
+ "item": ["Focus Sash", "King's Rock"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Ghost"],
+ "ability": ["Skill Link"]
+ },
+ {
+ "species": "Cloyster",
+ "weight": 15,
+ "moves": [
+ ["Shell Smash"],
+ ["Icicle Spear"],
+ ["Tera Blast"],
+ ["Rock Blast"]
+ ],
+ "item": ["Focus Sash", "Life Orb", "Lum Berry"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Electric"],
+ "wantsTera": true,
+ "ability": ["Skill Link"]
+ },
+ {
+ "species": "Cloyster",
+ "weight": 25,
+ "moves": [
+ ["Shell Smash"],
+ ["Icicle Spear"],
+ ["Drill Run", "Ice Shard"],
+ ["Rock Blast"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Adamant",
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "teraType": ["Ice"],
+ "ability": ["Skill Link"]
+ }
+ ]
+ },
+ "tinkaton": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Tinkaton",
+ "weight": 100,
+ "moves": [
+ ["Gigaton Hammer", "Knock Off"],
+ ["Encore"],
+ ["Stealth Rock"],
+ ["Thunder Wave"]
+ ],
+ "item": ["Air Balloon"],
+ "nature": "Careful",
+ "evs": {"hp": 244, "atk": 4, "def": 164, "spd": 20, "spe": 76},
+ "teraType": ["Flying", "Ground", "Water"],
+ "ability": ["Mold Breaker"]
+ }
+ ]
+ },
+ "fezandipiti": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Fezandipiti",
+ "weight": 50,
+ "moves": [
+ ["Calm Mind", "Charm", "Heat Wave", "Tailwind", "Taunt"],
+ ["Moonblast"],
+ ["Roost"],
+ ["U-turn"]
+ ],
+ "item": ["Covert Cloak", "Leftovers", "Sitrus Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 220, "spe": 36},
+ "teraType": ["Flying", "Water"],
+ "ability": ["Toxic Chain"]
+ },
+ {
+ "species": "Fezandipiti",
+ "weight": 50,
+ "moves": [
+ ["Roost"],
+ ["Taunt", "Toxic"],
+ ["U-turn"],
+ ["Play Rough"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Careful",
+ "evs": {"hp": 252, "spd": 220, "spe": 36},
+ "teraType": ["Flying", "Water"],
+ "ability": ["Toxic Chain"]
+ }
+ ]
+ },
+ "pelipper": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Pelipper",
+ "weight": 100,
+ "moves": [
+ ["U-turn"],
+ ["Hydro Pump"],
+ ["Ice Beam"],
+ ["Hurricane"]
+ ],
+ "item": ["Choice Specs"],
+ "nature": "Modest",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Flying", "Grass", "Ground", "Steel", "Water"],
+ "ability": ["Drizzle"]
+ }
+ ]
+},
+ "rotomheat": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Rotom-Heat",
+ "weight": 20,
+ "moves": [
+ ["Volt Switch"],
+ ["Overheat"],
+ ["Trick"],
+ ["Thunderbolt"]
+ ],
+ "item": ["Choice Scarf", "Choice Specs"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Electric"],
+ "ability": ["Levitate"]
+ },
+ {
+ "species": "Rotom-Heat",
+ "weight": 20,
+ "moves": [
+ ["Volt Switch"],
+ ["Overheat"],
+ ["Trick"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Scarf", "Choice Specs"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fairy"],
+ "wantsTera": true,
+ "ability": ["Levitate"]
+ },
+ {
+ "species": "Rotom-Heat",
+ "weight": 60,
+ "moves": [
+ ["Volt Switch"],
+ ["Foul Play"],
+ ["Overheat"],
+ ["Thunder Wave", "Will-O-Wisp"]
+ ],
+ "item": ["Rocky Helmet", "Sitrus Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fairy", "Ghost", "Steel"],
+ "ability": ["Levitate"]
+ }
+ ]
+ },
+ "taurospaldeablaze": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Tauros-Paldea-Blaze",
+ "weight": 50,
+ "moves": [
+ ["Raging Bull"],
+ ["Body Press"],
+ ["Will-O-Wisp"],
+ ["Bulk Up", "Earthquake", "Rock Tomb"]
+ ],
+ "item": ["Rocky Helmet", "Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fairy"],
+ "ability": ["Intimidate"]
+ },
+ {
+ "species": "Tauros-Paldea-Blaze",
+ "weight": 50,
+ "moves": [
+ ["Close Combat"],
+ ["Flare Blitz", "Raging Bull"],
+ ["Flame Charge", "Rock Tomb"],
+ ["Bulk Up", "Earthquake", "Tera Blast"]
+ ],
+ "item": ["Eject Pack"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Fairy", "Grass"],
+ "wantsTera": true,
+ "ability": ["Intimidate"]
+ }
+ ]
+ },
+ "torkoal": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Torkoal",
+ "weight": 100,
+ "moves": [
+ ["Overheat"],
+ ["Yawn"],
+ ["Stealth Rock"],
+ ["Body Press", "Clear Smog", "Fissure", "Solar Beam"]
+ ],
+ "item": ["Eject Pack"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fire", "Grass"],
+ "ability": ["Drought"]
+ }
+ ]
+ },
+ "amoonguss": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Amoonguss",
+ "weight": 45,
+ "moves": [
+ ["Spore"],
+ ["Leaf Storm"],
+ ["Foul Play"],
+ ["Clear Smog", "Sludge Bomb"]
+ ],
+ "item": ["Eject Pack"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 156, "spd": 100},
+ "ivs": {"atk": 0},
+ "teraType": ["Water"],
+ "ability": ["Regenerator"]
+ },
+ {
+ "species": "Amoonguss",
+ "weight": 35,
+ "moves": [
+ ["Spore"],
+ ["Clear Smog", "Giga Drain", "Sludge Bomb"],
+ ["Foul Play", "Stomping Tantrum"],
+ ["Synthesis"]
+ ],
+ "item": ["Leftovers", "Rocky Helmet"],
+ "nature": "Relaxed",
+ "evs": {"hp": 252, "def": 156, "spd": 100},
+ "teraType": ["Fairy", "Water"],
+ "ability": ["Regenerator"]
+ },
+ {
+ "species": "Amoonguss",
+ "weight": 20,
+ "moves": [
+ ["Spore"],
+ ["Clear Smog", "Giga Drain", "Sludge Bomb"],
+ ["Foul Play", "Stomping Tantrum"],
+ ["Synthesis"]
+ ],
+ "item": ["Black Sludge"],
+ "nature": "Relaxed",
+ "evs": {"hp": 252, "def": 156, "spd": 100},
+ "teraType": ["Poison"],
+ "ability": ["Regenerator"]
+ }
+ ]
+ },
+ "greattusk": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Great Tusk",
+ "weight": 45,
+ "moves": [
+ ["Close Combat"],
+ ["Earthquake", "Headlong Rush"],
+ ["Ice Spinner"],
+ ["Knock Off", "Rapid Spin", "Stealth Rock"]
+ ],
+ "item": ["Booster Energy", "Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Ground", "Steel", "Water"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Great Tusk",
+ "weight": 15,
+ "moves": [
+ ["Close Combat"],
+ ["Earthquake", "Headlong Rush"],
+ ["Ice Spinner"],
+ ["Knock Off", "Rapid Spin"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Ground", "Steel", "Water"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Great Tusk",
+ "weight": 25,
+ "moves": [
+ ["Bulk Up"],
+ ["Earthquake"],
+ ["Ice Spinner"],
+ ["Substitute", "Taunt"]
+ ],
+ "item": ["Booster Energy", "Leftovers"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "spd": 252, "spe": 252},
+ "teraType": ["Steel", "Water"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Great Tusk",
+ "weight": 15,
+ "moves": [
+ ["Close Combat"],
+ ["Earthquake", "Headlong Rush"],
+ ["Ice Spinner"],
+ ["Knock Off"]
+ ],
+ "item": ["Choice Band", "Choice Scarf"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fighting", "Ground", "Steel"],
+ "ability": ["Protosynthesis"]
+ }
+ ]
+ },
+ "thundurustherian": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Thundurus-Therian",
+ "weight": 45,
+ "moves": [
+ ["Volt Switch"],
+ ["Thunderbolt"],
+ ["Tera Blast"],
+ ["Focus Blast", "Grass Knot", "Sludge Bomb"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Flying", "Ice"],
+ "wantsTera": true,
+ "ability": ["Volt Absorb"]
+ },
+ {
+ "species": "Thundurus-Therian",
+ "weight": 45,
+ "moves": [
+ ["Volt Switch"],
+ ["Thunderbolt"],
+ ["Tera Blast"],
+ ["Focus Blast", "Grass Knot", "Sludge Bomb"]
+ ],
+ "item": ["Assault Vest", "Choice Specs"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Flying", "Ice", "Water"],
+ "wantsTera": true,
+ "ability": ["Volt Absorb"]
+ },
+ {
+ "species": "Thundurus-Therian",
+ "weight": 10,
+ "moves": [
+ ["Nasty Plot"],
+ ["Thunderbolt"],
+ ["Grass Knot", "Substitute"],
+ ["Tera Blast"]
+ ],
+ "item": ["Life Orb", "Sitrus Berry"],
+ "nature": "Timid",
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Flying", "Ice", "Water"],
+ "wantsTera": true,
+ "ability": ["Volt Absorb"]
+ }
+ ]
+ },
+ "arcanine": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Arcanine",
+ "weight": 50,
+ "moves": [
+ ["Flare Blitz"],
+ ["Morning Sun"],
+ ["Will-O-Wisp"],
+ ["Extreme Speed"]
+ ],
+ "item": ["Heavy-Duty Boots", "Leftovers", "Rocky Helmet"],
+ "nature": "Impish",
+ "evs": {"hp": 236, "def": 212, "spe": 60},
+ "teraType": ["Normal"],
+ "ability": ["Intimidate"]
+ },
+ {
+ "species": "Arcanine",
+ "weight": 50,
+ "moves": [
+ ["Flare Blitz", "Roar"],
+ ["Morning Sun"],
+ ["Will-O-Wisp"],
+ ["Bulldoze", "Extreme Speed", "Snarl"]
+ ],
+ "item": ["Heavy-Duty Boots", "Leftovers", "Rocky Helmet"],
+ "nature": "Impish",
+ "evs": {"hp": 236, "def": 212, "spe": 60},
+ "teraType": ["Fairy", "Grass"],
+ "ability": ["Intimidate"]
+ }
+ ]
+ },
+ "gyarados": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Gyarados",
+ "weight": 50,
+ "moves": [
+ ["Taunt"],
+ ["Iron Head", "Waterfall"],
+ ["Earthquake"],
+ ["Thunder Wave"]
+ ],
+ "item": ["Rocky Helmet"],
+ "nature": "Impish",
+ "evs": {"hp": 228, "atk": 4, "def": 220, "spd": 4, "spe": 52},
+ "teraType": ["Ground"],
+ "ability": ["Intimidate"]
+ },
+ {
+ "species": "Gyarados",
+ "weight": 50,
+ "moves": [
+ ["Taunt"],
+ ["Iron Head", "Waterfall"],
+ ["Earthquake", "Ice Fang"],
+ ["Thunder Wave"]
+ ],
+ "item": ["Rocky Helmet"],
+ "nature": "Impish",
+ "evs": {"hp": 228, "atk": 4, "def": 220, "spd": 4, "spe": 52},
+ "teraType": ["Steel"],
+ "ability": ["Intimidate"]
+ }
+ ]
+ },
+ "pawmot": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Pawmot",
+ "weight": 33,
+ "moves": [
+ ["Double Shock"],
+ ["Close Combat"],
+ ["Ice Punch", "Mach Punch", "Nuzzle"],
+ ["Encore", "Revival Blessing"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Electric"],
+ "ability": ["Iron Fist"]
+ },
+ {
+ "species": "Pawmot",
+ "weight": 33,
+ "moves": [
+ ["Double Shock"],
+ ["Close Combat"],
+ ["Ice Punch", "Mach Punch", "Nuzzle"],
+ ["Encore", "Revival Blessing"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Electric"],
+ "ability": ["Volt Absorb"]
+ },
+ {
+ "species": "Pawmot",
+ "weight": 33,
+ "moves": [
+ ["Double Shock"],
+ ["Close Combat"],
+ ["Ice Punch", "Mach Punch", "Nuzzle"],
+ ["Encore", "Revival Blessing"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Electric"],
+ "ability": ["Natural Cure"]
+ }
+ ]
+ },
+ "zoroarkhisui": {
+ "weight": 3,
+ "sets": [
+ {
+ "species": "Zoroark-Hisui",
+ "weight": 60,
+ "moves": [
+ ["Bitter Malice"],
+ ["Will-O-Wisp"],
+ ["Shadow Sneak"],
+ ["Curse", "Tera Blast"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Timid",
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "teraType": ["Fairy", "Fighting"],
+ "wantsTera": true,
+ "ability": ["Illusion"]
+ },
+ {
+ "species": "Zoroark-Hisui",
+ "weight": 40,
+ "moves": [
+ ["Bitter Malice"],
+ ["Curse"],
+ ["Will-O-Wisp"],
+ ["Trick"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Timid",
+ "evs": {"hp": 252, "spa": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Ghost"],
+ "ability": ["Illusion"]
+ }
+ ]
+ },
+ "drifblim": {
+ "weight": 2,
+ "sets": [
+ {
+ "species": "Drifblim",
+ "weight": 100,
+ "moves": [
+ ["Minimize"],
+ ["Substitute"],
+ ["Baton Pass"],
+ ["Air Slash", "Shadow Ball", "Stockpile", "Strength Sap", "Will-O-Wisp"]
+ ],
+ "item": ["Kee Berry", "Sitrus Berry"],
+ "nature": "Timid",
+ "evs": {"def": 164, "spd": 92, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Dark", "Normal", "Water"],
+ "ability": ["Unburden"]
+ }
+ ]
+ },
+ "hatterene": {
+ "weight": 2,
+ "sets": [
+ {
+ "species": "Hatterene",
+ "weight": 30,
+ "moves": [
+ ["Draining Kiss"],
+ ["Psyshock"],
+ ["Calm Mind"],
+ ["Baton Pass", "Mystical Fire", "Trick Room"]
+ ],
+ "item": ["Sitrus Berry", "Wiki Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 244, "def": 252, "spa": 12},
+ "ivs": {"atk": 0},
+ "teraType": ["Fire", "Normal", "Water"],
+ "ability": ["Magic Bounce"]
+ },
+ {
+ "species": "Hatterene",
+ "weight": 35,
+ "moves": [
+ ["Dazzling Gleam", "Draining Kiss"],
+ ["Psyshock"],
+ ["Calm Mind", "Healing Wish"],
+ ["Trick Room"]
+ ],
+ "item": ["Sitrus Berry", "Wiki Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 244, "def": 252, "spa": 12},
+ "ivs": {"atk": 0},
+ "teraType": ["Normal", "Water"],
+ "ability": ["Magic Bounce"]
+ },
+ {
+ "species": "Hatterene",
+ "weight": 35,
+ "moves": [
+ ["Dazzling Gleam"],
+ ["Psyshock"],
+ ["Calm Mind", "Healing Wish"],
+ ["Trick Room"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Quiet",
+ "evs": {"hp": 252, "def": 4, "spa": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Normal", "Water"],
+ "ability": ["Magic Bounce"]
+ }
+ ]
+ },
+ "orthworm": {
+ "weight": 2,
+ "sets": [
+ {
+ "species": "Orthworm",
+ "weight": 60,
+ "moves": [
+ ["Iron Defense"],
+ ["Body Press"],
+ ["Iron Head", "Stealth Rock"],
+ ["Shed Tail"]
+ ],
+ "item": ["Rocky Helmet", "Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fairy", "Ghost", "Poison"],
+ "ability": ["Earth Eater"]
+ },
+ {
+ "species": "Orthworm",
+ "weight": 40,
+ "moves": [
+ ["Iron Defense"],
+ ["Body Press"],
+ ["Iron Head", "Stealth Rock"],
+ ["Rest"]
+ ],
+ "item": ["Chesto Berry", "Rocky Helmet"],
+ "nature": "Impish",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fairy", "Ghost", "Poison"],
+ "ability": ["Earth Eater"]
+ }
+ ]
+ },
+ "sandyshocks": {
+ "weight": 2,
+ "sets": [
+ {
+ "species": "Sandy Shocks",
+ "weight": 10,
+ "moves": [
+ ["Stealth Rock"],
+ ["Thunderbolt"],
+ ["Earth Power"],
+ ["Mirror Coat", "Thunder Wave"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "teraType": ["Electric", "Ground"],
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Sandy Shocks",
+ "weight": 10,
+ "moves": [
+ ["Mirror Coat", "Stealth Rock"],
+ ["Thunderbolt"],
+ ["Earth Power"],
+ ["Tera Blast"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "teraType": ["Ice"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Sandy Shocks",
+ "weight": 60,
+ "moves": [
+ ["Thunderbolt"],
+ ["Earth Power"],
+ ["Tera Blast"],
+ ["Flash Cannon", "Stealth Rock"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Timid",
+ "evs": {"hp": 52, "spa": 204, "spe": 252},
+ "teraType": ["Fairy", "Ice"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Sandy Shocks",
+ "weight": 10,
+ "moves": [
+ ["Thunderbolt"],
+ ["Volt Switch"],
+ ["Earth Power"],
+ ["Tera Blast"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "teraType": ["Fairy", "Ice"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Sandy Shocks",
+ "weight": 10,
+ "moves": [
+ ["Mirror Coat", "Thunderbolt"],
+ ["Volt Switch"],
+ ["Earth Power"],
+ ["Tera Blast"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "teraType": ["Fairy", "Ice"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ }
+ ]
+ },
+ "greninja": {
+ "weight": 2,
+ "sets": [
+ {
+ "species": "Greninja",
+ "weight": 50,
+ "moves": [
+ ["Ice Beam"],
+ ["Dark Pulse", "Grass Knot"],
+ ["Water Shuriken"],
+ ["Counter", "Toxic Spikes"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Ghost", "Water"],
+ "ability": ["Protean"]
+ },
+ {
+ "species": "Greninja",
+ "weight": 50,
+ "moves": [
+ ["Ice Beam"],
+ ["Dark Pulse", "Grass Knot"],
+ ["Water Shuriken"],
+ ["Counter", "Toxic Spikes"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Ghost", "Water"],
+ "ability": ["Torrent"]
+ }
+ ]
+ },
+ "palafin": {
+ "weight": 2,
+ "sets": [
+ {
+ "species": "Palafin",
+ "weight": 40,
+ "moves": [
+ ["Jet Punch"],
+ ["Wave Crash"],
+ ["Flip Turn"],
+ ["Close Combat", "Drain Punch", "Ice Punch"]
+ ],
+ "item": ["Choice Band"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Water"],
+ "ability": ["Zero to Hero"]
+ },
+ {
+ "species": "Palafin",
+ "weight": 30,
+ "moves": [
+ ["Jet Punch"],
+ ["Wave Crash"],
+ ["Flip Turn"],
+ ["Close Combat", "Drain Punch"]
+ ],
+ "item": ["Assault Vest", "Choice Scarf", "Mystic Water"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Fighting", "Water"],
+ "ability": ["Zero to Hero"]
+ },
+ {
+ "species": "Palafin",
+ "weight": 20,
+ "moves": [
+ ["Bulk Up"],
+ ["Jet Punch"],
+ ["Drain Punch"],
+ ["Substitute", "Taunt"]
+ ],
+ "item": ["Leftovers", "Punching Glove"],
+ "nature": "Jolly",
+ "evs": {"hp": 252, "def": 4, "spe": 252},
+ "teraType": ["Fighting", "Water"],
+ "ability": ["Zero to Hero"]
+ },
+ {
+ "species": "Palafin",
+ "weight": 10,
+ "moves": [
+ ["Bulk Up"],
+ ["Jet Punch"],
+ ["Tera Blast"],
+ ["Substitute", "Taunt"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Jolly",
+ "evs": {"hp": 252, "def": 4, "spe": 252},
+ "teraType": ["Fairy"],
+ "wantsTera": true,
+ "ability": ["Zero to Hero"]
+ }
+ ]
+ },
+ "regieleki": {
+ "weight": 2,
+ "sets": [
+ {
+ "species": "Regieleki",
+ "weight": 25,
+ "moves": [
+ ["Thunderbolt"],
+ ["Tera Blast"],
+ ["Extreme Speed"],
+ ["Thunder Wave", "Volt Switch", "Wild Charge"]
+ ],
+ "item": ["Focus Sash", "Life Orb"],
+ "nature": "Hasty",
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "teraType": ["Ice"],
+ "wantsTera": true,
+ "ability": ["Transistor"]
+ },
+ {
+ "species": "Regieleki",
+ "weight": 20,
+ "moves": [
+ ["Thunderbolt"],
+ ["Volt Switch"],
+ ["Extreme Speed"],
+ ["Wild Charge"]
+ ],
+ "item": ["Life Orb"],
+ "nature": "Hasty",
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "teraType": ["Electric"],
+ "ability": ["Transistor"]
+ },
+ {
+ "species": "Regieleki",
+ "weight": 25,
+ "moves": [
+ ["Thunderbolt"],
+ ["Tera Blast"],
+ ["Volt Switch"],
+ ["Extreme Speed", "Thunder Cage"]
+ ],
+ "item": ["Choice Specs"],
+ "nature": "Timid",
+ "evs": {"hp": 4, "spa": 252, "spe": 252},
+ "teraType": ["Ice"],
+ "wantsTera": true,
+ "ability": ["Transistor"]
+ },
+ {
+ "species": "Regieleki",
+ "weight": 15,
+ "moves": [
+ ["Thunderbolt", "Thunder Cage"],
+ ["Reflect"],
+ ["Light Screen"],
+ ["Tera Blast"]
+ ],
+ "item": ["Light Clay"],
+ "nature": "Timid",
+ "evs": {"hp": 252, "spa": 4, "spe": 252},
+ "teraType": ["Ice"],
+ "wantsTera": true,
+ "ability": ["Transistor"]
+ },
+ {
+ "species": "Regieleki",
+ "weight": 15,
+ "moves": [
+ ["Thunderbolt", "Thunder Cage"],
+ ["Reflect"],
+ ["Light Screen"],
+ ["Explosion", "Thunder Wave"]
+ ],
+ "item": ["Light Clay"],
+ "nature": "Timid",
+ "evs": {"hp": 252, "spa": 4, "spe": 252},
+ "teraType": ["Ghost", "Normal"],
+ "ability": ["Transistor"]
+ }
+ ]
+ },
+ "avalugg": {
+ "weight": 2,
+ "sets": [
+ {
+ "species": "Avalugg",
+ "weight": 100,
+ "moves": [
+ ["Iron Defense"],
+ ["Body Press"],
+ ["Recover"],
+ ["Avalanche", "Icicle Crash"]
+ ],
+ "item": ["Heavy-Duty Boots", "Rocky Helmet"],
+ "nature": "Impish",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Fighting"],
+ "wantsTera": true,
+ "ability": ["Sturdy"]
+ }
+ ]
+ },
+ "landorus": {
+ "weight": 2,
+ "sets": [
+ {
+ "species": "Landorus",
+ "weight": 45,
+ "moves": [
+ ["Earth Power"],
+ ["Sludge Bomb"],
+ ["Focus Blast", "Psychic"],
+ ["Nasty Plot", "Substitute"]
+ ],
+ "item": ["Life Orb"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Poison", "Steel", "Water"],
+ "wantsTera": true,
+ "ability": ["Sheer Force"]
+ },
+ {
+ "species": "Landorus",
+ "weight": 55,
+ "moves": [
+ ["Earth Power"],
+ ["Sludge Bomb"],
+ ["Focus Blast", "Nasty Plot", "Substitute"],
+ ["Tera Blast"]
+ ],
+ "item": ["Life Orb"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Flying", "Ice"],
+ "wantsTera": true,
+ "ability": ["Sheer Force"]
+ }
+ ]
+ },
+ "quaquaval": {
+ "weight": 2,
+ "sets": [
+ {
+ "species": "Quaquaval",
+ "weight": 65,
+ "moves": [
+ ["Aqua Step"],
+ ["Close Combat"],
+ ["Aqua Jet"],
+ ["Encore", "Ice Spinner", "Swords Dance"]
+ ],
+ "item": ["Focus Sash", "Mystic Water"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Steel", "Water"],
+ "ability": ["Moxie"]
+ },
+ {
+ "species": "Quaquaval",
+ "weight": 10,
+ "moves": [
+ ["Aqua Step"],
+ ["Close Combat"],
+ ["Aqua Jet"],
+ ["Tera Blast"]
+ ],
+ "item": ["Focus Sash", "Mystic Water"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Electric", "Steel"],
+ "wantsTera": true,
+ "ability": ["Moxie"]
+ },
+ {
+ "species": "Quaquaval",
+ "weight": 25,
+ "moves": [
+ ["Aqua Step"],
+ ["Roost"],
+ ["Bulk Up"],
+ ["Encore", "Substitute", "Taunt"]
+ ],
+ "item": ["Covert Cloak", "Leftovers", "Rocky Helmet"],
+ "nature": "Jolly",
+ "evs": {"hp": 252, "spd": 156, "spe": 100},
+ "teraType": ["Steel"],
+ "ability": ["Moxie"]
+ }
+ ]
+ },
+ "articuno": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Articuno",
+ "weight": 100,
+ "moves": [
+ ["Substitute"],
+ ["Freeze-Dry", "Protect"],
+ ["Roost"],
+ ["Sheer Cold"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Bold",
+ "evs": {"hp": 220, "def": 228, "spe": 60},
+ "ivs": {"atk": 0},
+ "teraType": ["Ghost", "Steel"],
+ "ability": ["Pressure"]
+ }
+ ]
+ },
+ "haxorus": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Haxorus",
+ "weight": 65,
+ "moves": [
+ ["Dragon Dance"],
+ ["Iron Head"],
+ ["Outrage"],
+ ["Earthquake"]
+ ],
+ "item": ["Focus Sash", "Life Orb", "Lum Berry"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Mold Breaker"]
+ },
+ {
+ "species": "Haxorus",
+ "weight": 10,
+ "moves": [
+ ["Dragon Dance"],
+ ["Tera Blast"],
+ ["Outrage"],
+ ["Earthquake"]
+ ],
+ "item": ["Focus Sash", "Life Orb", "Lum Berry"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Electric"],
+ "wantsTera": true,
+ "ability": ["Mold Breaker"]
+ },
+ {
+ "species": "Haxorus",
+ "weight": 25,
+ "moves": [
+ ["Scale Shot"],
+ ["Iron Head"],
+ ["Earthquake"],
+ ["Dragon Dance", "Swords Dance"]
+ ],
+ "item": ["Loaded Dice"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Steel"],
+ "wantsTera": true,
+ "ability": ["Mold Breaker"]
+ }
+ ]
+ },
+ "lucario": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Lucario",
+ "weight": 80,
+ "moves": [
+ ["Extreme Speed"],
+ ["Close Combat"],
+ ["Bullet Punch"],
+ ["Counter", "Earthquake", "Swords Dance"]
+ ],
+ "item": ["Focus Sash", "Life Orb"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Normal", "Steel"],
+ "ability": ["Inner Focus"]
+ },
+ {
+ "species": "Lucario",
+ "weight": 20,
+ "moves": [
+ ["Vacuum Wave"],
+ ["Aura Sphere"],
+ ["Steel Beam"],
+ ["Dark Pulse"]
+ ],
+ "item": ["Focus Sash", "Life Orb"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "teraType": ["Dark", "Fighting", "Steel"],
+ "ability": ["Inner Focus"]
+ }
+ ]
+ },
+ "mesprit": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Mesprit",
+ "weight": 100,
+ "moves": [
+ ["Dazzling Gleam"],
+ ["Trick Room"],
+ ["Healing Wish"],
+ ["Encore"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy"],
+ "ability": ["Levitate"]
+ }
+ ]
+ },
+ "moltresgalar": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Moltres-Galar",
+ "weight": 100,
+ "moves": [
+ ["Fiery Wrath"],
+ ["Air Slash", "Hurricane"],
+ ["Nasty Plot"],
+ ["Agility"]
+ ],
+ "item": ["Sitrus Berry", "Weakness Policy"],
+ "nature": "Timid",
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Dark", "Flying", "Steel"],
+ "ability": ["Berserk"]
+ }
+ ]
+ },
+ "sableye": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Sableye",
+ "weight": 30,
+ "moves": [
+ ["Foul Play", "Knock Off"],
+ ["Encore"],
+ ["Disable", "Metal Burst"],
+ ["Thunder Wave", "Will-O-Wisp"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Poison", "Steel"],
+ "ability": ["Prankster"]
+ },
+ {
+ "species": "Sableye",
+ "weight": 30,
+ "moves": [
+ ["Substitute"],
+ ["Encore"],
+ ["Disable"],
+ ["Night Shade"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Poison", "Steel"],
+ "ability": ["Prankster"]
+ },
+ {
+ "species": "Sableye",
+ "weight": 20,
+ "moves": [
+ ["Reflect"],
+ ["Light Screen"],
+ ["Encore", "Taunt", "Will-O-Wisp"],
+ ["Foul Play"]
+ ],
+ "item": ["Light Clay"],
+ "nature": "Bold",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Poison", "Steel"],
+ "ability": ["Prankster"]
+ },
+ {
+ "species": "Sableye",
+ "weight": 20,
+ "moves": [
+ ["Reflect"],
+ ["Light Screen"],
+ ["Encore", "Taunt", "Will-O-Wisp"],
+ ["Knock Off"]
+ ],
+ "item": ["Light Clay"],
+ "nature": "Impish",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "teraType": ["Poison", "Steel"],
+ "ability": ["Prankster"]
+ }
+ ]
+ },
+ "uxie": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Uxie",
+ "weight": 100,
+ "moves": [
+ ["U-turn"],
+ ["Yawn"],
+ ["Encore"],
+ ["Stealth Rock"]
+ ],
+ "item": ["Sitrus Berry"],
+ "nature": "Impish",
+ "evs": {"hp": 244, "def": 252, "spd": 12},
+ "teraType": ["Fairy"],
+ "ability": ["Levitate"]
+ }
+ ]
+ },
+ "brutebonnet": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Brute Bonnet",
+ "weight": 85,
+ "moves": [
+ ["Spore"],
+ ["Trailblaze"],
+ ["Crunch", "Tera Blast"],
+ ["Substitute"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Jolly",
+ "evs": {"hp": 52, "atk": 204, "spe": 252},
+ "teraType": ["Fire", "Water"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ },
+ {
+ "species": "Brute Bonnet",
+ "weight": 15,
+ "moves": [
+ ["Spore"],
+ ["Sucker Punch"],
+ ["Bullet Seed"],
+ ["Substitute", "Tera Blast"]
+ ],
+ "item": ["Loaded Dice"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Fire", "Water"],
+ "wantsTera": true,
+ "ability": ["Protosynthesis"]
+ }
+ ]
+ },
+ "samurotthisui": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Samurott-Hisui",
+ "weight": 70,
+ "moves": [
+ ["Ceaseless Edge"],
+ ["Aqua Cutter", "Razor Shell"],
+ ["Aqua Jet", "Sucker Punch"],
+ ["Encore", "Sacred Sword"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Dark", "Ghost", "Water"],
+ "ability": ["Sharpness"]
+ },
+ {
+ "species": "Samurott-Hisui",
+ "weight": 15,
+ "moves": [
+ ["Ceaseless Edge"],
+ ["Aqua Cutter", "Razor Shell"],
+ ["Aqua Jet", "Sucker Punch"],
+ ["Sacred Sword"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Water"],
+ "ability": ["Sharpness"]
+ },
+ {
+ "species": "Samurott-Hisui",
+ "weight": 15,
+ "moves": [
+ ["Ceaseless Edge"],
+ ["Aqua Cutter", "Razor Shell"],
+ ["Aqua Jet", "Sucker Punch"],
+ ["Tera Blast"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Fairy"],
+ "ability": ["Sharpness"]
+ }
+ ]
+ },
+ "slowkinggalar": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Slowking-Galar",
+ "weight": 60,
+ "moves": [
+ ["Flamethrower"],
+ ["Grass Knot"],
+ ["Eerie Spell", "Psychic"],
+ ["Sludge Bomb"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Modest",
+ "evs": {"hp": 252, "spa": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "teraType": ["Normal", "Poison"],
+ "ability": ["Regenerator"]
+ },
+ {
+ "species": "Slowking-Galar",
+ "weight": 40,
+ "moves": [
+ ["Eerie Spell", "Sludge Bomb"],
+ ["Toxic", "Yawn"],
+ ["Slack Off", "Trick Room"],
+ ["Chilly Reception"]
+ ],
+ "item": ["Black Sludge"],
+ "nature": "Relaxed",
+ "evs": {"hp": 244, "def": 252, "spd": 12},
+ "ivs": {"atk": 0},
+ "teraType": ["Poison"],
+ "ability": ["Regenerator"]
+ }
+ ]
+ },
+ "basculegionf": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Basculegion-F",
+ "weight": 70,
+ "moves": [
+ ["Shadow Ball"],
+ ["Aqua Jet"],
+ ["Hydro Pump", "Surf"],
+ ["Endeavor"]
+ ],
+ "gender": "F",
+ "item": ["Focus Sash"],
+ "nature": "Rash",
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "teraType": ["Water"],
+ "ability": ["Adaptability"]
+ },
+ {
+ "species": "Basculegion-F",
+ "weight": 30,
+ "moves": [
+ ["Shadow Ball"],
+ ["Aqua Jet"],
+ ["Hydro Pump", "Surf"],
+ ["Endeavor", "Tera Blast"]
+ ],
+ "gender": "F",
+ "item": ["Focus Sash"],
+ "nature": "Rash",
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "teraType": ["Fairy"],
+ "wantsTera": true,
+ "ability": ["Adaptability"]
+ }
+ ]
+ },
+ "irontreads": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Iron Treads",
+ "weight": 15,
+ "moves": [
+ ["Earthquake"],
+ ["Heavy Slam", "Iron Head"],
+ ["Ice Spinner", "Rapid Spin", "Volt Switch"],
+ ["Knock Off"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Jolly",
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "teraType": ["Fairy", "Flying", "Grass", "Water"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Treads",
+ "weight": 60,
+ "moves": [
+ ["Earthquake", "Endeavor"],
+ ["Iron Head"],
+ ["Rapid Spin", "Stealth Rock", "Substitute"],
+ ["Ice Spinner", "Knock Off"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Fairy", "Grass", "Ground", "Water"],
+ "ability": ["Quark Drive"]
+ },
+ {
+ "species": "Iron Treads",
+ "weight": 25,
+ "moves": [
+ ["Earthquake", "Endeavor"],
+ ["Iron Head"],
+ ["Rapid Spin", "Stealth Rock", "Substitute"],
+ ["Tera Blast"]
+ ],
+ "item": ["Booster Energy"],
+ "nature": "Jolly",
+ "evs": {"hp": 4, "atk": 252, "spe": 252},
+ "teraType": ["Fairy", "Grass", "Water"],
+ "wantsTera": true,
+ "ability": ["Quark Drive"]
+ }
+ ]
+ },
+ "overqwil": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Overqwil",
+ "weight": 60,
+ "moves": [
+ ["Crunch"],
+ ["Barb Barrage", "Toxic"],
+ ["Minimize"],
+ ["Substitute"]
+ ],
+ "item": ["Leftovers"],
+ "nature": "Jolly",
+ "evs": {"hp": 252, "spd": 4, "spe": 252},
+ "teraType": ["Dark", "Water"],
+ "ability": ["Poison Point"]
+ },
+ {
+ "species": "Overqwil",
+ "weight": 40,
+ "moves": [
+ ["Crunch"],
+ ["Barb Barrage", "Toxic"],
+ ["Minimize"],
+ ["Substitute"]
+ ],
+ "item": ["Black Sludge"],
+ "nature": "Jolly",
+ "evs": {"hp": 252, "spd": 4, "spe": 252},
+ "teraType": ["Poison"],
+ "ability": ["Poison Point"]
+ }
+ ]
+ },
+ "spectrier": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Spectrier",
+ "weight": 100,
+ "moves": [
+ ["Shadow Ball"],
+ ["Draining Kiss"],
+ ["Will-O-Wisp"],
+ ["Calm Mind"]
+ ],
+ "item": ["Leftovers", "Sitrus Berry"],
+ "nature": "Timid",
+ "evs": {"hp": 252, "spa": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy"],
+ "wantsTera": true,
+ "ability": ["Grim Neigh"]
+ }
+ ]
+ },
+ "maushold": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Maushold",
+ "weight": 100,
+ "moves": [
+ ["Population Bomb"],
+ ["Bite", "Mud Shot"],
+ ["Encore"],
+ ["Thunder Wave", "Tidy Up"]
+ ],
+ "item": ["King's Rock", "Wide Lens"],
+ "nature": "Jolly",
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "teraType": ["Ghost", "Normal", "Poison"],
+ "ability": ["Technician"]
+ }
+ ]
+ },
+ "polteageist": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Polteageist",
+ "weight": 50,
+ "moves": [
+ ["Shell Smash"],
+ ["Strength Sap"],
+ ["Stored Power"],
+ ["Tera Blast"]
+ ],
+ "item": ["Focus Sash"],
+ "nature": "Bold",
+ "evs": {"hp": 108, "def": 196, "spe": 204},
+ "ivs": {"atk": 0},
+ "teraType": ["Fighting", "Water"],
+ "wantsTera": true,
+ "ability": ["Weak Armor"]
+ },
+ {
+ "species": "Polteageist",
+ "weight": 50,
+ "moves": [
+ ["Shell Smash"],
+ ["Strength Sap"],
+ ["Stored Power"],
+ ["Tera Blast"]
+ ],
+ "item": ["Focus Sash", "White Herb"],
+ "nature": "Bold",
+ "evs": {"hp": 108, "def": 196, "spe": 204},
+ "ivs": {"atk": 0},
+ "teraType": ["Fighting", "Water"],
+ "wantsTera": true,
+ "ability": ["Cursed Body"]
+ }
+ ]
+ },
+ "taurospaldeaaqua": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Tauros-Paldea-Aqua",
+ "weight": 100,
+ "moves": [
+ ["Wave Crash"],
+ ["Close Combat"],
+ ["Aqua Jet", "Trailblaze"],
+ ["Endeavor"]
+ ],
+ "item": ["Rocky Helmet"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 4, "def": 108, "spd": 4, "spe": 140},
+ "teraType": ["Steel", "Water"],
+ "ability": ["Intimidate"]
+ }
+ ]
+ },
+ "forretress": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Forretress",
+ "weight": 50,
+ "moves": [
+ ["Body Press"],
+ ["Volt Switch"],
+ ["Stealth Rock"],
+ ["Toxic Spikes"]
+ ],
+ "item": ["Rocky Helmet"],
+ "nature": "Relaxed",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0, "spe": 0},
+ "teraType": ["Fighting", "Water"],
+ "ability": ["Sturdy"]
+ },
+ {
+ "species": "Forretress",
+ "weight": 50,
+ "moves": [
+ ["Body Press"],
+ ["Volt Switch"],
+ ["Stealth Rock"],
+ ["Gyro Ball"]
+ ],
+ "item": ["Rocky Helmet"],
+ "nature": "Relaxed",
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"spe": 0},
+ "teraType": ["Fighting", "Water"],
+ "ability": ["Sturdy"]
+ }
+ ]
+ },
+ "glastrier": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Glastrier",
+ "weight": 80,
+ "moves": [
+ ["Icicle Crash"],
+ ["Heavy Slam"],
+ ["Tera Blast"],
+ ["Close Combat", "High Horsepower"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Electric", "Water"],
+ "wantsTera": true,
+ "ability": ["Chilling Neigh"]
+ },
+ {
+ "species": "Glastrier",
+ "weight": 20,
+ "moves": [
+ ["Icicle Crash"],
+ ["Heavy Slam"],
+ ["Close Combat"],
+ ["High Horsepower"]
+ ],
+ "item": ["Assault Vest"],
+ "nature": "Adamant",
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "teraType": ["Ghost"],
+ "wantsTera": true,
+ "ability": ["Chilling Neigh"]
+ }
+ ]
+ },
+ "gothitelle": {
+ "weight": 1,
+ "sets": [
+ {
+ "species": "Gothitelle",
+ "weight": 65,
+ "moves": [
+ ["Trick"],
+ ["Calm Mind"],
+ ["Rest"],
+ ["Stored Power", "Tera Blast"]
+ ],
+ "item": ["Choice Scarf"],
+ "nature": "Bold",
+ "evs": {"hp": 236, "def": 196, "spa": 4, "spd": 4, "spe": 68},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy", "Flying"],
+ "ability": ["Shadow Tag"]
+ },
+ {
+ "species": "Gothitelle",
+ "weight": 35,
+ "moves": [
+ ["Charm"],
+ ["Calm Mind"],
+ ["Rest"],
+ ["Stored Power", "Tera Blast"]
+ ],
+ "item": ["Covert Cloak", "Leftovers"],
+ "nature": "Bold",
+ "evs": {"hp": 236, "def": 196, "spa": 4, "spd": 4, "spe": 68},
+ "ivs": {"atk": 0},
+ "teraType": ["Fairy"],
+ "wantsTera": true,
+ "ability": ["Shadow Tag"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen9/doubles-sets.json b/data/random-battles/gen9/doubles-sets.json
new file mode 100644
index 000000000000..065ae839fc4b
--- /dev/null
+++ b/data/random-battles/gen9/doubles-sets.json
@@ -0,0 +1,6950 @@
+{
+ "venusaur": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Earth Power", "Giga Drain", "Knock Off", "Leaf Storm", "Protect", "Sludge Bomb"],
+ "abilities": ["Chlorophyll", "Overgrow"],
+ "teraTypes": ["Dark", "Water"]
+ }
+ ]
+ },
+ "charizard": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Heat Wave", "Hurricane", "Protect", "Scorching Sands", "Will-O-Wisp"],
+ "abilities": ["Blaze", "Solar Power"],
+ "teraTypes": ["Dragon", "Fire", "Ground"]
+ }
+ ]
+ },
+ "blastoise": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Fake Out", "Flip Turn", "Icy Wind", "Life Dew", "Wave Crash", "Yawn"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Dragon", "Grass"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Dragon Pulse", "Muddy Water", "Protect", "Shell Smash"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Dragon", "Water"]
+ }
+ ]
+ },
+ "arbok": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Coil", "Gunk Shot", "Knock Off", "Protect", "Stomping Tantrum"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Ground"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Dragon Tail", "Glare", "Gunk Shot", "Knock Off", "Toxic Spikes"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "pikachu": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Fake Out", "Grass Knot", "Knock Off", "Protect", "Volt Tackle"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Electric", "Grass"]
+ }
+ ]
+ },
+ "raichu": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Fake Out", "Grass Knot", "Knock Off", "Nuzzle", "Thunderbolt"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Electric", "Grass"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Nasty Plot", "Protect", "Tera Blast", "Thunderbolt"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "raichualola": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Alluring Voice", "Focus Blast", "Grass Knot", "Psychic", "Psyshock", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Surge Surfer"],
+ "teraTypes": ["Electric", "Fairy", "Fighting", "Grass"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Nasty Plot", "Protect", "Psychic", "Psyshock", "Thunderbolt"],
+ "abilities": ["Surge Surfer"],
+ "teraTypes": ["Dark", "Electric", "Flying"]
+ }
+ ]
+ },
+ "sandslash": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Gunk Shot", "High Horsepower", "Knock Off", "Protect", "Rapid Spin", "Stone Edge", "Swords Dance"],
+ "abilities": ["Sand Rush"],
+ "teraTypes": ["Poison", "Rock"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["High Horsepower", "Knock Off", "Rapid Spin", "Rock Slide", "Super Fang"],
+ "abilities": ["Sand Rush"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "sandslashalola": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Drill Run", "Ice Shard", "Iron Head", "Knock Off", "Triple Axel"],
+ "abilities": ["Slush Rush"],
+ "teraTypes": ["Flying", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Drill Run", "Ice Shard", "Iron Head", "Triple Axel"],
+ "abilities": ["Slush Rush"],
+ "teraTypes": ["Flying", "Water"]
+ }
+ ]
+ },
+ "clefairy": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Follow Me", "Heal Pulse", "Helping Hand", "Life Dew", "Moonblast"],
+ "abilities": ["Friend Guard"],
+ "teraTypes": ["Fire", "Steel", "Water"]
+ }
+ ]
+ },
+ "clefable": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Heal Pulse", "Icy Wind", "Knock Off", "Life Dew", "Moonblast", "Thunder Wave"],
+ "abilities": ["Magic Guard", "Unaware"],
+ "teraTypes": ["Fire", "Steel", "Water"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Fire Blast", "Follow Me", "Heal Pulse", "Helping Hand", "Life Dew", "Moonblast"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Fire", "Steel", "Water"]
+ }
+ ]
+ },
+ "ninetales": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Flamethrower", "Heat Wave", "Overheat", "Protect", "Scorching Sands", "Solar Beam"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Fire", "Grass"]
+ }
+ ]
+ },
+ "ninetalesalola": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Aurora Veil", "Blizzard", "Moonblast", "Protect"],
+ "abilities": ["Snow Warning"],
+ "teraTypes": ["Ice", "Steel", "Water"]
+ }
+ ]
+ },
+ "wigglytuff": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Dazzling Gleam", "Disable", "Encore", "Fire Blast", "Heal Pulse", "Helping Hand", "Icy Wind", "Thunder Wave"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Fire", "Steel"]
+ }
+ ]
+ },
+ "vileplume": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Pollen Puff", "Sludge Bomb", "Strength Sap", "Stun Spore"],
+ "abilities": ["Effect Spore"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "venomoth": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Bug Buzz", "Protect", "Quiver Dance", "Sleep Powder", "Sludge Bomb"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Bug", "Steel", "Water"]
+ }
+ ]
+ },
+ "dugtrio": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Helping Hand", "Protect", "Rock Slide", "Stomping Tantrum", "Sucker Punch"],
+ "abilities": ["Arena Trap"],
+ "teraTypes": ["Fire", "Ghost", "Ground"]
+ }
+ ]
+ },
+ "dugtrioalola": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Iron Head", "Protect", "Rock Slide", "Stomping Tantrum", "Sucker Punch"],
+ "abilities": ["Sand Force", "Tangling Hair"],
+ "teraTypes": ["Fire", "Steel", "Water"]
+ }
+ ]
+ },
+ "persian": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Double-Edge", "Fake Out", "Helping Hand", "Icy Wind", "Knock Off", "Taunt", "U-turn"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Ghost", "Normal"]
+ }
+ ]
+ },
+ "persianalola": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Fake Out", "Foul Play", "Helping Hand", "Icy Wind", "Knock Off", "Parting Shot", "Snarl", "Taunt", "Thunder Wave"],
+ "abilities": ["Fur Coat"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "golduck": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Encore", "Grass Knot", "Hydro Pump", "Ice Beam", "Icy Wind", "Protect", "Psyshock"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "teraTypes": ["Grass", "Water"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Grass Knot", "Hydro Pump", "Ice Beam", "Protect", "Psyshock"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "annihilape": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Bulk Up", "Drain Punch", "Protect", "Rage Fist"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Fire", "Steel", "Water"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Close Combat", "Final Gambit", "Rage Fist", "U-turn"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "arcanine": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Howl", "Morning Sun", "Snarl", "Will-O-Wisp"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fighting", "Normal", "Steel", "Water"]
+ }
+ ]
+ },
+ "arcaninehisui": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Extreme Speed", "Flare Blitz", "Rock Slide", "Stone Edge"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Normal", "Rock"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Flare Blitz", "Morning Sun", "Protect", "Rock Slide", "Will-O-Wisp"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fairy", "Grass"]
+ }
+ ]
+ },
+ "poliwrath": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Circle Throw", "Close Combat", "Coaching", "Icy Wind", "Knock Off", "Liquidation"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Dragon", "Fire", "Ground", "Steel"]
+ }
+ ]
+ },
+ "victreebel": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Knock Off", "Power Whip", "Protect", "Sludge Bomb", "Sucker Punch"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Dark", "Grass"]
+ }
+ ]
+ },
+ "tentacruel": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Acid Spray", "Hydro Pump", "Icy Wind", "Knock Off", "Muddy Water", "Sludge Bomb", "Toxic Spikes"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "golem": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Fire Punch", "High Horsepower", "Rock Slide", "Stone Edge"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "golemalola": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Double-Edge", "High Horsepower", "Protect", "Rock Slide", "Thunder Wave"],
+ "abilities": ["Galvanize"],
+ "teraTypes": ["Grass", "Ground"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Double-Edge", "Explosion", "High Horsepower", "Rock Slide"],
+ "abilities": ["Galvanize"],
+ "teraTypes": ["Grass", "Ground"]
+ }
+ ]
+ },
+ "slowbro": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Fire Blast", "Heal Pulse", "Helping Hand", "Psyshock", "Scald", "Trick Room"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Grass"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Fire Blast", "Hydro Pump", "Ice Beam", "Psyshock", "Scald", "Trick Room"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Fire", "Water"]
+ }
+ ]
+ },
+ "slowbrogalar": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Fire Blast", "Psychic", "Shell Side Arm", "Trick Room"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Fire", "Poison"]
+ }
+ ]
+ },
+ "dodrio": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Brave Bird", "Double-Edge", "Drill Run", "Knock Off", "Quick Attack"],
+ "abilities": ["Early Bird"],
+ "teraTypes": ["Ground", "Normal"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Brave Bird", "Drill Run", "Protect", "Quick Attack", "Swords Dance"],
+ "abilities": ["Early Bird"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "dewgong": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Fake Out", "Hydro Pump", "Icy Wind"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "muk": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Drain Punch", "Gunk Shot", "Haze", "Helping Hand", "Ice Punch", "Knock Off", "Poison Gas", "Poison Jab", "Shadow Sneak"],
+ "abilities": ["Poison Touch"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "mukalola": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Drain Punch", "Gunk Shot", "Helping Hand", "Ice Punch", "Knock Off", "Poison Jab", "Protect", "Snarl"],
+ "abilities": ["Poison Touch"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "cloyster": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Hydro Pump", "Icicle Spear", "Protect", "Rock Blast", "Shell Smash"],
+ "abilities": ["Skill Link"],
+ "teraTypes": ["Fire", "Ice", "Rock", "Water"]
+ }
+ ]
+ },
+ "gengar": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Encore", "Protect", "Shadow Ball", "Sludge Bomb"],
+ "abilities": ["Cursed Body"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Focus Blast", "Protect", "Shadow Ball", "Sludge Bomb", "Trick"],
+ "abilities": ["Cursed Body"],
+ "teraTypes": ["Fighting", "Ghost"]
+ }
+ ]
+ },
+ "hypno": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Helping Hand", "Knock Off", "Low Sweep", "Poison Gas", "Psychic"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "electrode": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Electroweb", "Foul Play", "Helping Hand", "Taunt", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Aftermath", "Soundproof", "Static"],
+ "teraTypes": ["Flying"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Protect", "Tera Blast", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Aftermath", "Soundproof", "Static"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "electrodehisui": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Electroweb", "Energy Ball", "Leaf Storm", "Taunt", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Aftermath", "Soundproof", "Static"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Foul Play", "Leaf Storm", "Protect", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Aftermath", "Soundproof", "Static"],
+ "teraTypes": ["Dark", "Electric", "Grass", "Steel"]
+ }
+ ]
+ },
+ "exeggutor": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Energy Ball", "Leaf Storm", "Protect", "Psychic", "Trick Room"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Fire", "Poison", "Steel"]
+ }
+ ]
+ },
+ "exeggutoralola": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Draco Meteor", "Flamethrower", "Protect", "Trick Room", "Wood Hammer"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "hitmonlee": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Close Combat", "Fake Out", "Knock Off", "Poison Jab", "Protect"],
+ "abilities": ["Unburden"],
+ "teraTypes": ["Dark", "Poison"]
+ }
+ ]
+ },
+ "hitmonchan": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Close Combat", "Coaching", "Fake Out", "Knock Off", "Poison Jab"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Dark", "Poison"]
+ }
+ ]
+ },
+ "weezing": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Clear Smog", "Fire Blast", "Gunk Shot", "Poison Gas", "Protect", "Taunt", "Will-O-Wisp"],
+ "abilities": ["Levitate", "Neutralizing Gas"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "weezinggalar": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Fire Blast", "Gunk Shot", "Haze", "Poison Gas", "Protect", "Strange Steam", "Taunt", "Will-O-Wisp"],
+ "abilities": ["Levitate", "Neutralizing Gas"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "rhydon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Helping Hand", "High Horsepower", "Protect", "Rock Slide", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Flying", "Grass", "Water"]
+ }
+ ]
+ },
+ "scyther": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Bug Bite", "Dual Wingbeat", "Protect", "Tailwind"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Flying", "Steel"]
+ }
+ ]
+ },
+ "electabuzz": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Electroweb", "Follow Me", "Knock Off", "Protect", "Thunderbolt"],
+ "abilities": ["Static"],
+ "teraTypes": ["Flying", "Grass"]
+ }
+ ]
+ },
+ "magmar": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Follow Me", "Heat Wave", "Knock Off", "Protect", "Will-O-Wisp"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "tauros": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Close Combat", "Double-Edge", "High Horsepower", "Lash Out", "Stone Edge", "Throat Chop"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fighting", "Normal"]
+ }
+ ]
+ },
+ "taurospaldeacombat": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Bulk Up", "Protect", "Raging Bull", "Stone Edge"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "High Horsepower", "Iron Head", "Rock Slide", "Stone Edge", "Throat Chop"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Fighting", "Steel"]
+ }
+ ]
+ },
+ "taurospaldeablaze": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Bulk Up", "Close Combat", "Protect", "Raging Bull", "Will-O-Wisp"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fighting", "Fire", "Water"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "Flare Blitz", "Rock Slide", "Stone Edge", "Wild Charge"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fighting", "Fire", "Water"]
+ }
+ ]
+ },
+ "taurospaldeaaqua": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Aqua Jet", "Bulk Up", "Close Combat", "Liquidation", "Protect"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fire", "Steel", "Water"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Aqua Jet", "Close Combat", "Wave Crash", "Wild Charge", "Zen Headbutt"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fire", "Steel", "Water"]
+ }
+ ]
+ },
+ "gyarados": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Protect", "Temper Flare", "Waterfall"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Dragon Dance", "Protect", "Tera Blast", "Waterfall"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Flying"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Helping Hand", "Icy Wind", "Taunt", "Thunder Wave", "Waterfall"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Ground", "Water"]
+ }
+ ]
+ },
+ "lapras": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Freeze-Dry", "Icy Wind", "Life Dew", "Muddy Water", "Protect"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "ditto": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Transform"],
+ "abilities": ["Imposter"],
+ "teraTypes": ["Bug", "Dark", "Dragon", "Electric", "Fairy", "Fighting", "Fire", "Flying", "Ghost", "Grass", "Ground", "Ice", "Normal", "Poison", "Psychic", "Rock", "Steel", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Transform"],
+ "abilities": ["Imposter"],
+ "teraTypes": ["Bug", "Dark", "Dragon", "Electric", "Fairy", "Fighting", "Fire", "Flying", "Ghost", "Grass", "Ground", "Ice", "Normal", "Poison", "Psychic", "Rock", "Steel", "Water"]
+ }
+ ]
+ },
+ "vaporeon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Helping Hand", "Icy Wind", "Muddy Water", "Protect", "Scald", "Wish", "Yawn"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Dragon", "Fire", "Ground"]
+ }
+ ]
+ },
+ "jolteon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Alluring Voice", "Helping Hand", "Protect", "Thunder Wave", "Thunderbolt"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Calm Mind", "Protect", "Tera Blast", "Thunderbolt"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "flareon": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Facade", "Flare Blitz", "Protect", "Quick Attack"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "snorlax": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Crunch", "Double-Edge", "Hammer Arm", "Heat Crash", "High Horsepower"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fire", "Ghost", "Ground"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Body Slam", "Encore", "Helping Hand", "High Horsepower", "Icy Wind", "Recycle", "Yawn"],
+ "abilities": ["Gluttony"],
+ "teraTypes": ["Ghost", "Ground"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Body Slam", "Crunch", "Curse", "High Horsepower", "Protect", "Recycle"],
+ "abilities": ["Gluttony"],
+ "teraTypes": ["Ground", "Poison"]
+ }
+ ]
+ },
+ "articuno": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Brave Bird", "Freeze-Dry", "Ice Beam", "Icy Wind", "Protect", "Roost", "Tailwind"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "articunogalar": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Freezing Glare", "Hurricane", "Protect", "Recover", "Tailwind"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Flying", "Ground", "Steel"]
+ }
+ ]
+ },
+ "zapdos": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Hurricane", "Protect", "Roost", "Tailwind", "Thunderbolt"],
+ "abilities": ["Static"],
+ "teraTypes": ["Electric", "Steel"]
+ },
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Heat Wave", "Hurricane", "Protect", "Tailwind", "Thunderbolt"],
+ "abilities": ["Static"],
+ "teraTypes": ["Electric", "Fire"]
+ }
+ ]
+ },
+ "zapdosgalar": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Brave Bird", "Close Combat", "Knock Off", "Protect", "Tailwind", "Thunderous Kick", "U-turn"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "moltres": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Brave Bird", "Fire Blast", "Heat Wave", "Protect", "Scorching Sands", "Tailwind"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Fire", "Ground"]
+ }
+ ]
+ },
+ "moltresgalar": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Fiery Wrath", "Hurricane", "Nasty Plot", "Protect", "Tailwind"],
+ "abilities": ["Berserk"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "dragonite": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Dragon Claw", "Extreme Speed", "Fire Punch", "Iron Head", "Low Kick", "Stomping Tantrum"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Draco Meteor", "Fire Punch", "Low Kick", "Tailwind", "Tera Blast"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Flying"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Fire Blast", "Protect", "Scale Shot", "Tailwind"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "mewtwo": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Aura Sphere", "Dark Pulse", "Fire Blast", "Protect", "Psystrike"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Dark", "Fighting", "Fire", "Psychic"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Aura Sphere", "Nasty Plot", "Psystrike", "Recover"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "mew": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Coaching", "Encore", "Pollen Puff", "Tailwind", "Thunder Wave", "Will-O-Wisp"],
+ "abilities": ["Synchronize"],
+ "teraTypes": ["Fairy", "Steel"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Baton Pass", "Fire Blast", "Nasty Plot", "Pollen Puff", "Psychic"],
+ "abilities": ["Synchronize"],
+ "teraTypes": ["Fairy", "Steel"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Coaching", "Imprison", "Pollen Puff", "Transform"],
+ "abilities": ["Synchronize"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "meganium": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Encore", "Energy Ball", "Heal Pulse", "Knock Off", "Leech Seed"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Poison", "Steel", "Water"]
+ }
+ ]
+ },
+ "typhlosion": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Eruption", "Fire Blast", "Heat Wave", "Scorching Sands"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "typhlosionhisui": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Eruption", "Focus Blast", "Heat Wave", "Shadow Ball"],
+ "abilities": ["Blaze", "Frisk"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "feraligatr": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dragon Dance", "Ice Punch", "Liquidation", "Protect"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Fire", "Water"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Aqua Jet", "Ice Punch", "Liquidation", "Swords Dance"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Dragon", "Water"]
+ }
+ ]
+ },
+ "furret": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Double-Edge", "Knock Off", "Protect", "Tidy Up"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Body Slam", "Follow Me", "Helping Hand", "Knock Off", "Protect", "U-turn"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "noctowl": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Hurricane", "Hyper Voice", "Protect", "Tailwind"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "ariados": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Megahorn", "Protect", "Rage Powder", "Sticky Web"],
+ "abilities": ["Insomnia", "Swarm"],
+ "teraTypes": ["Dark", "Steel", "Water"]
+ }
+ ]
+ },
+ "lanturn": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Electroweb", "Protect", "Scald", "Thunderbolt"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Electroweb", "Ice Beam", "Scald", "Volt Switch"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "ampharos": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Dragon Tail", "Electroweb", "Focus Blast", "Helping Hand", "Thunder Wave", "Thunderbolt"],
+ "abilities": ["Static"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "bellossom": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Baton Pass", "Giga Drain", "Protect", "Quiver Dance", "Strength Sap"],
+ "abilities": ["Healer"],
+ "teraTypes": ["Poison", "Water"]
+ }
+ ]
+ },
+ "azumarill": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Aqua Jet", "Ice Spinner", "Knock Off", "Liquidation", "Play Rough", "Superpower"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "sudowoodo": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Head Smash", "High Horsepower", "Protect", "Sucker Punch", "Wood Hammer"],
+ "abilities": ["Rock Head"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "politoed": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Hydro Pump", "Ice Beam", "Muddy Water", "Weather Ball"],
+ "abilities": ["Drizzle"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Helping Hand", "Hypnosis", "Icy Wind", "Muddy Water"],
+ "abilities": ["Drizzle"],
+ "teraTypes": ["Grass", "Steel"]
+ }
+ ]
+ },
+ "jumpluff": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Acrobatics", "Encore", "Pollen Puff", "Rage Powder", "Sleep Powder", "Strength Sap", "Tailwind"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "sunflora": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dazzling Gleam", "Earth Power", "Leaf Storm", "Protect", "Sludge Bomb"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fairy", "Ground", "Poison"]
+ }
+ ]
+ },
+ "quagsire": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Helping Hand", "High Horsepower", "Icy Wind", "Liquidation", "Recover", "Yawn"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Fire", "Poison", "Steel"]
+ }
+ ]
+ },
+ "clodsire": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Gunk Shot", "Helping Hand", "High Horsepower", "Recover", "Toxic Spikes"],
+ "abilities": ["Unaware", "Water Absorb"],
+ "teraTypes": ["Flying", "Ground", "Steel"]
+ }
+ ]
+ },
+ "espeon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Alluring Voice", "Dazzling Gleam", "Protect", "Psychic", "Shadow Ball"],
+ "abilities": ["Magic Bounce"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "umbreon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Foul Play", "Helping Hand", "Moonlight", "Snarl", "Thunder Wave"],
+ "abilities": ["Synchronize"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "murkrow": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Brave Bird", "Haze", "Protect", "Tailwind", "Taunt"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Ghost", "Steel"]
+ }
+ ]
+ },
+ "slowking": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Fire Blast", "Heal Pulse", "Helping Hand", "Psyshock", "Scald", "Trick Room"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Grass", "Steel"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Fire Blast", "Hydro Pump", "Ice Beam", "Psyshock", "Scald", "Trick Room"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fire", "Water"]
+ }
+ ]
+ },
+ "slowkinggalar": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Fire Blast", "Protect", "Psyshock", "Sludge Bomb", "Trick Room"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Poison"]
+ }
+ ]
+ },
+ "forretress": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Body Press", "Explosion", "Iron Head", "Lunge"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Fighting", "Fire"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Iron Head", "Rest", "Thunder Wave"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Fighting", "Fire"]
+ }
+ ]
+ },
+ "granbull": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Close Combat", "Play Rough", "Stomping Tantrum", "Super Fang"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "qwilfish": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Flip Turn", "Gunk Shot", "Icy Wind", "Taunt", "Thunder Wave", "Toxic Spikes"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "qwilfishhisui": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Crunch", "Gunk Shot", "Icy Wind", "Throat Chop", "Toxic Spikes"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "overqwil": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Crunch", "Gunk Shot", "Liquidation", "Protect", "Swords Dance", "Throat Chop"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Flying", "Poison", "Water"]
+ }
+ ]
+ },
+ "scizor": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Bullet Punch", "Close Combat", "Tailwind", "U-turn"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Fire", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Bug Bite", "Bullet Punch", "Close Combat", "Protect", "Swords Dance"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Bug Bite", "Bullet Punch", "Close Combat", "Knock Off"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Fighting", "Steel", "Water"]
+ }
+ ]
+ },
+ "heracross": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "Facade", "Knock Off", "Protect"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Close Combat", "Knock Off", "Megahorn", "Rock Slide"],
+ "abilities": ["Moxie"],
+ "teraTypes": ["Bug", "Fighting", "Rock"]
+ }
+ ]
+ },
+ "magcargo": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Heat Wave", "Power Gem", "Protect", "Shell Smash"],
+ "abilities": ["Weak Armor"],
+ "teraTypes": ["Fairy", "Fire", "Grass"]
+ }
+ ]
+ },
+ "delibird": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Brave Bird", "Fake Out", "Helping Hand", "Icy Wind", "Tailwind"],
+ "abilities": ["Insomnia", "Vital Spirit"],
+ "teraTypes": ["Ground", "Steel"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Brave Bird", "Drill Run", "Foul Play", "Ice Shard", "Ice Spinner"],
+ "abilities": ["Hustle"],
+ "teraTypes": ["Dark", "Flying", "Ground", "Ice"]
+ }
+ ]
+ },
+ "skarmory": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Body Press", "Brave Bird", "Iron Defense", "Protect", "Roost", "Tailwind"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "houndoom": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Dark Pulse", "Heat Wave", "Nasty Plot", "Protect", "Sucker Punch"],
+ "abilities": ["Flash Fire", "Unnerve"],
+ "teraTypes": ["Dark", "Fire", "Ghost", "Grass"]
+ }
+ ]
+ },
+ "kingdra": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Draco Meteor", "Muddy Water", "Protect", "Rain Dance"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Draco Meteor", "Protect", "Rain Dance", "Wave Crash"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "donphan": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["High Horsepower", "Ice Shard", "Knock Off", "Rapid Spin", "Stone Edge"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Dragon", "Water"]
+ }
+ ]
+ },
+ "porygon2": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Ice Beam", "Recover", "Thunderbolt", "Trick Room"],
+ "abilities": ["Download"],
+ "teraTypes": ["Electric", "Ghost"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Icy Wind", "Recover", "Thunderbolt", "Tri Attack"],
+ "abilities": ["Download"],
+ "teraTypes": ["Electric", "Ghost"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Recover", "Shadow Ball", "Tera Blast", "Trick Room"],
+ "abilities": ["Download"],
+ "teraTypes": ["Fairy", "Fighting"]
+ }
+ ]
+ },
+ "smeargle": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Baton Pass", "No Retreat", "Population Bomb", "Spiky Shield"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Decorate", "Fake Out", "Follow Me", "Tailwind"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "hitmontop": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Close Combat", "Coaching", "Fake Out", "Helping Hand", "Sucker Punch", "Triple Axel", "Wide Guard"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "blissey": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Heal Pulse", "Helping Hand", "Hyper Voice", "Protect", "Seismic Toss", "Soft-Boiled", "Thunder Wave"],
+ "abilities": ["Healer"],
+ "teraTypes": ["Fairy", "Ghost", "Poison"]
+ }
+ ]
+ },
+ "raikou": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Calm Mind", "Protect", "Scald", "Shadow Ball", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Electroweb", "Protect", "Scald", "Snarl", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "entei": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Extreme Speed", "Flare Blitz", "Sacred Fire", "Stomping Tantrum"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "suicune": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Ice Beam", "Protect", "Scald", "Snarl", "Tailwind"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Dragon", "Grass"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Calm Mind", "Ice Beam", "Protect", "Scald"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Dragon", "Grass"]
+ }
+ ]
+ },
+ "tyranitar": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Dragon Dance", "High Horsepower", "Knock Off", "Protect", "Rock Slide", "Stone Edge"],
+ "abilities": ["Sand Stream"],
+ "teraTypes": ["Ghost", "Rock", "Steel"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Fire Blast", "High Horsepower", "Icy Wind", "Knock Off", "Protect", "Rock Slide", "Stone Edge", "Thunder Wave"],
+ "abilities": ["Sand Stream"],
+ "teraTypes": ["Flying", "Steel"]
+ }
+ ]
+ },
+ "lugia": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Aeroblast", "Calm Mind", "Earth Power", "Recover"],
+ "abilities": ["Multiscale"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "hooh": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Brave Bird", "Earth Power", "Protect", "Recover", "Sacred Fire", "Tailwind"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "sceptile": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Focus Blast", "Leaf Storm", "Protect", "Shed Tail"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Breaking Swipe", "Focus Blast", "Leaf Storm", "Protect"],
+ "abilities": ["Unburden"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "blaziken": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Close Combat", "Knock Off", "Overheat", "Protect", "Stone Edge"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Stellar"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "Heat Wave", "Protect", "Vacuum Wave"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "swampert": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Flip Turn", "High Horsepower", "Ice Beam", "Icy Wind", "Knock Off", "Muddy Water"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Fire", "Steel"]
+ }
+ ]
+ },
+ "mightyena": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Crunch", "Howl", "Play Rough", "Sucker Punch", "Throat Chop"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Fairy"]
+ }
+ ]
+ },
+ "ludicolo": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Energy Ball", "Muddy Water", "Protect", "Rain Dance"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Fake Out", "Hydro Pump", "Ice Beam", "Icy Wind", "Leaf Storm"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "shiftry": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Fake Out", "Knock Off", "Leaf Blade", "Tailwind"],
+ "abilities": ["Wind Rider"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Knock Off", "Leaf Blade", "Protect", "Tailwind"],
+ "abilities": ["Wind Rider"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "pelipper": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Hurricane", "Hydro Pump", "Muddy Water", "Protect", "Tailwind", "Wide Guard"],
+ "abilities": ["Drizzle"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "gardevoir": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Dazzling Gleam", "Moonblast", "Mystical Fire", "Psychic", "Psyshock", "Trick"],
+ "abilities": ["Trace"],
+ "teraTypes": ["Fairy", "Fire", "Steel"]
+ }
+ ]
+ },
+ "masquerain": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Baton Pass", "Bug Buzz", "Hurricane", "Hydro Pump", "Quiver Dance"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Bug Buzz", "Hurricane", "Protect", "Tailwind"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "breloom": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Bullet Seed", "Close Combat", "Mach Punch", "Protect", "Rock Tomb", "Spore"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "vigoroth": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["After You", "Double-Edge", "Encore", "Icy Wind", "Knock Off", "Slack Off", "Thunder Wave"],
+ "abilities": ["Vital Spirit"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "slaking": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Double-Edge", "Giga Impact", "High Horsepower", "Knock Off"],
+ "abilities": ["Truant"],
+ "teraTypes": ["Ghost", "Normal"]
+ }
+ ]
+ },
+ "hariyama": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Bullet Punch", "Close Combat", "Facade", "Fake Out", "Headlong Rush", "Knock Off"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Bullet Punch", "Close Combat", "Fake Out", "Feint", "Heavy Slam", "Knock Off"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "sableye": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Disable", "Encore", "Fake Out", "Foul Play", "Knock Off", "Quash", "Recover", "Will-O-Wisp"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "medicham": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Bullet Punch", "Close Combat", "Ice Punch", "Poison Jab", "Zen Headbutt"],
+ "abilities": ["Pure Power"],
+ "teraTypes": ["Fighting", "Fire"]
+ },
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Bullet Punch", "Close Combat", "Ice Punch", "Protect", "Zen Headbutt"],
+ "abilities": ["Pure Power"],
+ "teraTypes": ["Fighting", "Fire"]
+ }
+ ]
+ },
+ "plusle": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Alluring Voice", "Nasty Plot", "Protect", "Thunderbolt"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Flying"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Nuzzle", "Super Fang", "Thunderbolt"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "minun": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Nuzzle", "Super Fang", "Thunderbolt"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "volbeat": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Lunge", "Tailwind", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "illumise": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Bug Buzz", "Encore", "Tailwind", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "swalot": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Encore", "Gunk Shot", "Helping Hand", "Knock Off", "Poison Gas", "Thunder Wave", "Toxic Spikes"],
+ "abilities": ["Gluttony"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "camerupt": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Earth Power", "Heat Wave", "Helping Hand", "Protect", "Stealth Rock"],
+ "abilities": ["Solid Rock"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "torkoal": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Body Press", "Fire Blast", "Heat Wave", "Protect", "Solar Beam", "Will-O-Wisp"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Dragon", "Grass"]
+ }
+ ]
+ },
+ "grumpig": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Dazzling Gleam", "Earth Power", "Nasty Plot", "Psychic", "Psyshock"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fairy", "Ground"]
+ }
+ ]
+ },
+ "flygon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Breaking Swipe", "Earth Power", "Protect", "Tailwind"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "cacturne": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Knock Off", "Leaf Storm", "Spiky Shield", "Sucker Punch"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Dark", "Poison"]
+ }
+ ]
+ },
+ "altaria": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Brave Bird", "Draco Meteor", "Fire Blast", "Helping Hand", "Roost", "Tailwind", "Will-O-Wisp"],
+ "abilities": ["Cloud Nine"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Brave Bird", "Protect", "Roost", "Will-O-Wisp"],
+ "abilities": ["Cloud Nine"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "zangoose": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Close Combat", "Facade", "Knock Off", "Protect", "Quick Attack"],
+ "abilities": ["Toxic Boost"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "seviper": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Flamethrower", "Glare", "Gunk Shot", "Knock Off", "Protect"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Dark", "Fire", "Poison"]
+ }
+ ]
+ },
+ "whiscash": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Helping Hand", "High Horsepower", "Icy Wind", "Muddy Water", "Protect"],
+ "abilities": ["Oblivious"],
+ "teraTypes": ["Fire", "Steel"]
+ }
+ ]
+ },
+ "crawdaunt": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Aqua Jet", "Close Combat", "Crabhammer", "Knock Off"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Aqua Jet", "Crabhammer", "Knock Off", "Protect"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "milotic": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Dragon Tail", "Icy Wind", "Protect", "Recover", "Scald"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Dragon", "Grass", "Steel"]
+ }
+ ]
+ },
+ "banette": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Gunk Shot", "Poltergeist", "Protect", "Shadow Sneak"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Ghost", "Poison"]
+ }
+ ]
+ },
+ "tropius": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Helping Hand", "Hurricane", "Leaf Storm", "Protect", "Tailwind", "Wide Guard"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "chimecho": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Heal Pulse", "Helping Hand", "Icy Wind", "Protect", "Psychic", "Snarl", "Thunder Wave"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "glalie": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Disable", "Foul Play", "Freeze-Dry", "Helping Hand", "Icy Wind", "Protect"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "luvdisc": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Charm", "Endeavor", "Hydro Pump", "Icy Wind"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "salamence": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Draco Meteor", "Dual Wingbeat", "Fire Blast", "Protect", "Tailwind"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dragon", "Fire", "Flying", "Steel"]
+ }
+ ]
+ },
+ "metagross": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Bullet Punch", "Hammer Arm", "Heavy Slam", "Knock Off", "Psychic Fangs", "Stomping Tantrum"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Dark", "Steel", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Agility", "Brick Break", "Heavy Slam", "Knock Off", "Protect", "Psychic Fangs"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "regirock": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Body Press", "Curse", "Iron Defense", "Rest", "Rock Slide", "Stone Edge"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Body Press", "Iron Defense", "Rock Slide", "Stone Edge", "Thunder Wave"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "regice": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Blizzard", "Icy Wind", "Protect", "Thunderbolt"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Electric", "Water"]
+ }
+ ]
+ },
+ "registeel": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Iron Head", "Thunder Wave"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "latias": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Draco Meteor", "Mist Ball", "Protect", "Recover", "Tailwind"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Aura Sphere", "Calm Mind", "Dragon Pulse", "Mist Ball", "Protect"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "latios": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Draco Meteor", "Luster Purge", "Protect", "Tailwind"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Aura Sphere", "Draco Meteor", "Luster Purge", "Protect", "Trick"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dragon", "Steel"]
+ }
+ ]
+ },
+ "kyogre": {
+ "level": 65,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Ice Beam", "Origin Pulse", "Thunder", "Water Spout"],
+ "abilities": ["Drizzle"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "groudon": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Heat Crash", "Precipice Blades", "Protect", "Stone Edge", "Thunder Wave"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Fire"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Heat Crash", "Precipice Blades", "Protect", "Stone Edge", "Swords Dance"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "rayquaza": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Dragon Ascent", "Dragon Dance", "Earthquake", "Extreme Speed", "Swords Dance"],
+ "abilities": ["Air Lock"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Draco Meteor", "Dragon Ascent", "Earth Power", "Fire Blast", "Protect"],
+ "abilities": ["Air Lock"],
+ "teraTypes": ["Fire", "Flying", "Ground"]
+ }
+ ]
+ },
+ "jirachi": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Iron Head", "Life Dew", "Protect", "Thunder Wave", "U-turn"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Dark", "Water"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Iron Head", "Psychic", "Thunderbolt", "Trick", "U-turn"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "deoxys": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Extreme Speed", "Knock Off", "Protect", "Psycho Boost", "Superpower"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Ghost", "Stellar"]
+ }
+ ]
+ },
+ "deoxysattack": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Extreme Speed", "Knock Off", "Protect", "Psycho Boost", "Superpower"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Ghost", "Stellar"]
+ }
+ ]
+ },
+ "deoxysdefense": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Icy Wind", "Knock Off", "Night Shade", "Spikes", "Thunder Wave"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "deoxysspeed": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Icy Wind", "Psycho Boost", "Superpower", "Taunt"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Fighting", "Ghost", "Psychic"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Psycho Boost", "Superpower", "Taunt", "Thunder Wave"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Fighting", "Psychic"]
+ }
+ ]
+ },
+ "torterra": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Headlong Rush", "Protect", "Shell Smash", "Wood Hammer"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Fire", "Ground"]
+ }
+ ]
+ },
+ "infernape": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Close Combat", "Fake Out", "Knock Off", "Overheat", "Protect"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Dark", "Fighting", "Fire"]
+ }
+ ]
+ },
+ "empoleon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Flash Cannon", "Hydro Pump", "Ice Beam", "Icy Wind", "Protect", "Yawn"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Flying", "Grass"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Flash Cannon", "Hydro Pump", "Ice Beam", "Icy Wind", "Knock Off"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Flying", "Grass"]
+ }
+ ]
+ },
+ "staraptor": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Brave Bird", "Close Combat", "Double-Edge", "Protect", "Quick Attack"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fighting", "Flying"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Brave Bird", "Close Combat", "Double-Edge", "Final Gambit"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fighting", "Flying", "Normal"]
+ }
+ ]
+ },
+ "kricketune": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Bug Bite", "Helping Hand", "Knock Off", "Sticky Web", "Taunt"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Bug", "Steel"]
+ }
+ ]
+ },
+ "luxray": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Crunch", "Play Rough", "Snarl", "Throat Chop", "Volt Switch", "Wild Charge"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Fairy", "Flying"]
+ }
+ ]
+ },
+ "rampardos": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Fire Punch", "Head Smash", "Rock Slide", "Stomping Tantrum"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Rock"]
+ }
+ ]
+ },
+ "bastiodon": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Body Press", "Foul Play", "Iron Defense", "Rest", "Wide Guard"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Fighting", "Flying"]
+ }
+ ]
+ },
+ "vespiquen": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Helping Hand", "Hurricane", "Pollen Puff", "Roost", "Toxic Spikes"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "pachirisu": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Follow Me", "Helping Hand", "Nuzzle", "Super Fang", "Thunderbolt"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying", "Water"]
+ }
+ ]
+ },
+ "floatzel": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Aqua Jet", "Crunch", "Ice Spinner", "Protect", "Wave Crash"],
+ "abilities": ["Water Veil"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "gastrodon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Clear Smog", "Earth Power", "Helping Hand", "Icy Wind", "Muddy Water", "Recover"],
+ "abilities": ["Storm Drain"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "ambipom": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Double-Edge", "Fake Out", "Knock Off", "Protect"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "drifblim": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Shadow Ball", "Strength Sap", "Tailwind", "Will-O-Wisp"],
+ "abilities": ["Unburden"],
+ "teraTypes": ["Fairy", "Ghost", "Ground"]
+ }
+ ]
+ },
+ "mismagius": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Dazzling Gleam", "Mystical Fire", "Protect", "Shadow Ball", "Taunt", "Thunderbolt", "Trick", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Fairy"]
+ }
+ ]
+ },
+ "honchkrow": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Brave Bird", "Heat Wave", "Protect", "Sucker Punch", "Tailwind"],
+ "abilities": ["Moxie"],
+ "teraTypes": ["Dark", "Fire", "Flying"]
+ }
+ ]
+ },
+ "skuntank": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Fire Blast", "Gunk Shot", "Knock Off", "Poison Gas", "Protect", "Sucker Punch", "Taunt", "Toxic Spikes"],
+ "abilities": ["Aftermath"],
+ "teraTypes": ["Dark", "Flying"]
+ }
+ ]
+ },
+ "bronzong": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Body Press", "Iron Defense", "Iron Head", "Trick Room"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Psychic Noise", "Trick Room"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "spiritomb": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Foul Play", "Helping Hand", "Icy Wind", "Shadow Sneak", "Will-O-Wisp"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Foul Play", "Snarl", "Trick Room", "Will-O-Wisp"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "garchomp": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Earthquake", "Protect", "Scale Shot", "Swords Dance"],
+ "abilities": ["Rough Skin"],
+ "teraTypes": ["Dragon", "Fire"]
+ }
+ ]
+ },
+ "lucario": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Close Combat", "Extreme Speed", "Flash Cannon", "Protect"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "Extreme Speed", "Meteor Mash", "Rock Slide"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "hippowdon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Helping Hand", "High Horsepower", "Slack Off", "Stealth Rock", "Stone Edge", "Whirlwind"],
+ "abilities": ["Sand Stream"],
+ "teraTypes": ["Dragon", "Rock", "Steel", "Water"]
+ }
+ ]
+ },
+ "toxicroak": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Close Combat", "Fake Out", "Gunk Shot", "Protect", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Dry Skin"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ }
+ ]
+ },
+ "lumineon": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Helping Hand", "Hydro Pump", "Icy Wind", "Tailwind", "Tickle"],
+ "abilities": ["Storm Drain"],
+ "teraTypes": ["Fire", "Ground"]
+ }
+ ]
+ },
+ "abomasnow": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Aurora Veil", "Blizzard", "Ice Shard", "Protect", "Wood Hammer"],
+ "abilities": ["Snow Warning"],
+ "teraTypes": ["Ice", "Water"]
+ }
+ ]
+ },
+ "weavile": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Fake Out", "Ice Shard", "Knock Off", "Low Kick", "Protect", "Triple Axel"],
+ "abilities": ["Pickpocket"],
+ "teraTypes": ["Dark", "Fighting", "Ghost", "Ice"]
+ }
+ ]
+ },
+ "sneasler": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "Dire Claw", "Fake Out", "Throat Chop", "U-turn"],
+ "abilities": ["Poison Touch"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ }
+ ]
+ },
+ "magnezone": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Body Press", "Electroweb", "Flash Cannon", "Protect", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "rhyperior": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["High Horsepower", "Protect", "Rock Polish", "Rock Slide"],
+ "abilities": ["Solid Rock"],
+ "teraTypes": ["Dragon", "Flying", "Ghost", "Ground"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Dragon Tail", "Heat Crash", "High Horsepower", "Ice Punch", "Megahorn", "Protect", "Rock Slide"],
+ "abilities": ["Solid Rock"],
+ "teraTypes": ["Dragon", "Flying", "Water"]
+ }
+ ]
+ },
+ "electivire": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Cross Chop", "Flamethrower", "Ice Punch", "Protect", "Volt Switch", "Wild Charge"],
+ "abilities": ["Motor Drive"],
+ "teraTypes": ["Flying"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Cross Chop", "Flamethrower", "Ice Punch", "Knock Off", "Volt Switch", "Wild Charge"],
+ "abilities": ["Motor Drive"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "magmortar": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Fire Blast", "Heat Wave", "Knock Off", "Protect", "Thunderbolt"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Fire", "Grass"]
+ }
+ ]
+ },
+ "yanmega": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Air Slash", "Bug Buzz", "Giga Drain", "U-turn"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Bug"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Air Slash", "Bug Buzz", "Protect", "Tera Blast"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "leafeon": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Double-Edge", "Knock Off", "Leaf Blade", "Protect", "Swords Dance", "Synthesis"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "glaceon": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Blizzard", "Freeze-Dry", "Mud Shot", "Protect"],
+ "abilities": ["Ice Body"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Blizzard", "Calm Mind", "Freeze-Dry", "Mud Shot"],
+ "abilities": ["Ice Body"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "gliscor": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Dual Wingbeat", "High Horsepower", "Knock Off", "Protect", "Tailwind", "Toxic", "Toxic Spikes"],
+ "abilities": ["Poison Heal"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Earthquake", "Facade", "Protect", "Swords Dance"],
+ "abilities": ["Poison Heal"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "mamoswine": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["High Horsepower", "Ice Shard", "Icicle Crash", "Protect"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Ground", "Ice", "Water"]
+ }
+ ]
+ },
+ "porygonz": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Shadow Ball", "Swift", "Tri Attack", "Trick"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Nasty Plot", "Protect", "Shadow Ball", "Tera Blast"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "gallade": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Leaf Blade", "Night Slash", "Protect", "Psycho Cut", "Sacred Sword", "Swords Dance"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Dark", "Fighting", "Grass"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Night Slash", "Psycho Cut", "Sacred Sword", "Trick"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Dark", "Fighting"]
+ }
+ ]
+ },
+ "probopass": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Body Press", "Flash Cannon", "Iron Defense", "Rest", "Thunder Wave"],
+ "abilities": ["Magnet Pull"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Body Press", "Iron Defense", "Power Gem", "Rest", "Thunder Wave"],
+ "abilities": ["Magnet Pull"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "dusknoir": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Leech Life", "Poltergeist", "Shadow Sneak", "Will-O-Wisp"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Leech Life", "Poltergeist", "Protect", "Trick Room"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "froslass": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Icy Wind", "Poltergeist", "Protect", "Spikes", "Taunt", "Triple Axel", "Will-O-Wisp"],
+ "abilities": ["Cursed Body"],
+ "teraTypes": ["Ghost", "Water"]
+ }
+ ]
+ },
+ "rotom": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Nasty Plot", "Protect", "Shadow Ball", "Thunderbolt", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "rotomwash": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Electroweb", "Hydro Pump", "Protect", "Thunderbolt", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "rotomheat": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Electroweb", "Overheat", "Protect", "Thunderbolt", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Steel"]
+ }
+ ]
+ },
+ "rotomfrost": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Blizzard", "Nasty Plot", "Protect", "Thunderbolt", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Ice"]
+ }
+ ]
+ },
+ "rotomfan": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Air Slash", "Electroweb", "Protect", "Thunderbolt", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Steel"]
+ }
+ ]
+ },
+ "rotommow": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Electroweb", "Leaf Storm", "Protect", "Thunderbolt", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Poison", "Steel"]
+ }
+ ]
+ },
+ "uxie": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Helping Hand", "Knock Off", "Mystical Power", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dark", "Poison", "Steel"]
+ }
+ ]
+ },
+ "mesprit": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Dazzling Gleam", "Nasty Plot", "Protect", "Psychic", "Thunderbolt"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Fairy", "Psychic"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Ice Beam", "Psychic", "Thunderbolt", "U-turn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Psychic"]
+ }
+ ]
+ },
+ "azelf": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Dazzling Gleam", "Energy Ball", "Fire Blast", "Nasty Plot", "Psychic", "Psyshock", "U-turn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fairy", "Fire"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dazzling Gleam", "Fire Blast", "Nasty Plot", "Protect", "Psychic", "Psyshock", "Thunderbolt"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Fairy", "Fire"]
+ }
+ ]
+ },
+ "dialga": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Draco Meteor", "Fire Blast", "Heavy Slam", "Protect", "Thunder Wave"],
+ "abilities": ["Telepathy"],
+ "teraTypes": ["Dragon", "Fire", "Flying", "Steel"]
+ }
+ ]
+ },
+ "dialgaorigin": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Draco Meteor", "Fire Blast", "Flash Cannon", "Protect", "Thunder Wave"],
+ "abilities": ["Telepathy"],
+ "teraTypes": ["Dragon", "Fire", "Flying"]
+ }
+ ]
+ },
+ "palkia": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Draco Meteor", "Fire Blast", "Hydro Pump", "Spacial Rend"],
+ "abilities": ["Telepathy"],
+ "teraTypes": ["Dragon", "Fire", "Steel", "Water"]
+ },
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Fire Blast", "Hydro Pump", "Protect", "Spacial Rend", "Thunder Wave"],
+ "abilities": ["Telepathy"],
+ "teraTypes": ["Dragon", "Fire", "Steel", "Water"]
+ }
+ ]
+ },
+ "palkiaorigin": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Fire Blast", "Hydro Pump", "Protect", "Spacial Rend", "Thunder Wave"],
+ "abilities": ["Telepathy"],
+ "teraTypes": ["Dragon", "Fire", "Steel", "Water"]
+ }
+ ]
+ },
+ "heatran": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Earth Power", "Magma Storm", "Protect", "Will-O-Wisp"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Fairy", "Grass"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Earth Power", "Flash Cannon", "Heat Wave", "Protect", "Tera Blast"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Grass"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Earth Power", "Flash Cannon", "Heat Wave", "Protect"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Fairy", "Grass"]
+ }
+ ]
+ },
+ "regigigas": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Body Slam", "Knock Off", "Protect", "Substitute"],
+ "abilities": ["Slow Start"],
+ "teraTypes": ["Fairy", "Ghost"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Double-Edge", "Knock Off", "Protect", "Thunder Wave"],
+ "abilities": ["Slow Start"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "giratina": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Aura Sphere", "Calm Mind", "Protect", "Shadow Ball"],
+ "abilities": ["Telepathy"],
+ "teraTypes": ["Fairy", "Fighting"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Breaking Swipe", "Icy Wind", "Rest", "Shadow Ball", "Thunder Wave", "Will-O-Wisp"],
+ "abilities": ["Telepathy"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "giratinaorigin": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Draco Meteor", "Poltergeist", "Shadow Force", "Shadow Sneak", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dragon", "Fairy", "Ghost", "Poison", "Steel"]
+ }
+ ]
+ },
+ "cresselia": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Helping Hand", "Icy Wind", "Lunar Blessing", "Psychic", "Thunder Wave"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Fire", "Poison", "Steel"]
+ }
+ ]
+ },
+ "phione": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Ice Beam", "Protect", "Scald", "Take Heart"],
+ "abilities": ["Hydration"],
+ "teraTypes": ["Dragon", "Grass", "Steel"]
+ }
+ ]
+ },
+ "manaphy": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Ice Beam", "Protect", "Scald", "Tail Glow"],
+ "abilities": ["Hydration"],
+ "teraTypes": ["Grass", "Steel", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Energy Ball", "Hydro Pump", "Ice Beam", "Protect", "Scald", "Tail Glow"],
+ "abilities": ["Hydration"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "darkrai": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dark Pulse", "Focus Blast", "Protect", "Sludge Bomb"],
+ "abilities": ["Bad Dreams"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "shaymin": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Earth Power", "Protect", "Seed Flare", "Synthesis", "Tailwind"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Grass", "Ground", "Steel"]
+ }
+ ]
+ },
+ "shayminsky": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Air Slash", "Earth Power", "Protect", "Seed Flare", "Tailwind"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Flying", "Steel", "Water"]
+ }
+ ]
+ },
+ "arceus": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Extreme Speed", "Flare Blitz", "Phantom Force", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ghost", "Normal"]
+ }
+ ]
+ },
+ "arceusbug": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Extreme Speed", "Stomping Tantrum", "Swords Dance", "X-Scissor"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "arceusdark": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Gunk Shot", "Judgment", "Recover", "Tailwind"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "arceusdragon": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover", "Sludge Bomb"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire", "Poison"]
+ }
+ ]
+ },
+ "arceuselectric": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Calm Mind", "Ice Beam", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Electric", "Ice"]
+ }
+ ]
+ },
+ "arceusfairy": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Calm Mind", "Dazzling Gleam", "Earth Power", "Fire Blast", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fairy", "Fire", "Ground"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Icy Wind", "Judgment", "Recover", "Snarl", "Tailwind", "Taunt", "Will-O-Wisp"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "arceusfighting": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Recover", "Snarl"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "arceusfire": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Extreme Speed", "Flare Blitz", "Liquidation", "Protect", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire", "Normal", "Water"]
+ }
+ ]
+ },
+ "arceusflying": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Flying", "Ground"]
+ }
+ ]
+ },
+ "arceusghost": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Brick Break", "Extreme Speed", "Phantom Force", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ghost", "Normal"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Calm Mind", "Dazzling Gleam", "Focus Blast", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fairy", "Fighting"]
+ }
+ ]
+ },
+ "arceusgrass": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Icy Wind", "Judgment", "Recover", "Snarl", "Tailwind", "Taunt", "Will-O-Wisp"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire", "Steel"]
+ }
+ ]
+ },
+ "arceusground": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Calm Mind", "Fire Blast", "Ice Beam", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ground", "Ice"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Earthquake", "Extreme Speed", "Stone Edge", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "arceusice": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover", "Thunderbolt"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Electric", "Ground"]
+ }
+ ]
+ },
+ "arceuspoison": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Extreme Speed", "Flare Blitz", "Gunk Shot", "Liquidation", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire", "Normal", "Poison"]
+ }
+ ]
+ },
+ "arceuspsychic": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Icy Wind", "Judgment", "Recover", "Snarl", "Tailwind", "Taunt", "Will-O-Wisp"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "arceusrock": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceussteel": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Icy Wind", "Judgment", "Recover", "Snarl", "Tailwind", "Taunt", "Will-O-Wisp"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "arceuswater": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Icy Wind", "Judgment", "Recover", "Snarl", "Tailwind", "Taunt", "Will-O-Wisp"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Extreme Speed", "Flare Blitz", "Liquidation", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire", "Normal"]
+ }
+ ]
+ },
+ "serperior": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dragon Pulse", "Glare", "Knock Off", "Leaf Storm", "Protect"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Dragon", "Grass"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Glare", "Leaf Storm", "Protect", "Tera Blast"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fire", "Rock"]
+ }
+ ]
+ },
+ "emboar": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Close Combat", "Flare Blitz", "Head Smash", "Knock Off", "Wild Charge"],
+ "abilities": ["Reckless"],
+ "teraTypes": ["Dark", "Electric", "Rock"]
+ }
+ ]
+ },
+ "samurott": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Aqua Jet", "Flip Turn", "Hydro Pump", "Ice Beam", "Knock Off", "Megahorn", "Sacred Sword"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Dark", "Fire", "Water"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Aqua Jet", "Knock Off", "Liquidation", "Protect", "Sacred Sword", "Swords Dance"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Dark", "Fire", "Water"]
+ }
+ ]
+ },
+ "samurotthisui": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Aqua Jet", "Ceaseless Edge", "Protect", "Razor Shell", "Sacred Sword", "Sucker Punch"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Dark", "Fire", "Water"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Ceaseless Edge", "Flip Turn", "Razor Shell", "Sacred Sword", "Sucker Punch"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Dark", "Fire", "Water"]
+ }
+ ]
+ },
+ "zebstrika": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["High Horsepower", "Overheat", "Protect", "Wild Charge"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["High Horsepower", "Overheat", "Protect", "Thunderbolt"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Flying", "Water"]
+ }
+ ]
+ },
+ "excadrill": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["High Horsepower", "Iron Head", "Rapid Spin", "Rock Slide"],
+ "abilities": ["Mold Breaker", "Sand Rush"],
+ "teraTypes": ["Flying", "Water"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["High Horsepower", "Iron Head", "Protect", "Swords Dance"],
+ "abilities": ["Mold Breaker", "Sand Rush"],
+ "teraTypes": ["Flying", "Ground", "Water"]
+ }
+ ]
+ },
+ "conkeldurr": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "Knock Off", "Mach Punch", "Protect"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Dark", "Fighting"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Drain Punch", "Ice Punch", "Knock Off", "Mach Punch"],
+ "abilities": ["Iron Fist"],
+ "teraTypes": ["Dark", "Fighting", "Steel"]
+ }
+ ]
+ },
+ "leavanny": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Knock Off", "Leaf Blade", "Pollen Puff", "Sticky Web"],
+ "abilities": ["Chlorophyll", "Swarm"],
+ "teraTypes": ["Rock", "Water"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Leaf Blade", "Lunge", "Protect", "Sticky Web"],
+ "abilities": ["Chlorophyll", "Swarm"],
+ "teraTypes": ["Rock", "Water"]
+ }
+ ]
+ },
+ "whimsicott": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Moonblast", "Stun Spore", "Tailwind"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Fire", "Ghost", "Steel"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Encore", "Moonblast", "Tailwind", "Taunt"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Fire", "Ghost", "Steel"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Encore", "Helping Hand", "Moonblast", "Tailwind"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Fire", "Ghost", "Steel"]
+ }
+ ]
+ },
+ "lilligant": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Giga Drain", "Protect", "Quiver Dance", "Tera Blast"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire", "Rock"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Alluring Voice", "Energy Ball", "Pollen Puff", "Quiver Dance", "Sleep Powder"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "lilliganthisui": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Close Combat", "Leaf Blade", "Protect", "Sleep Powder", "Victory Dance"],
+ "abilities": ["Hustle"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "basculin": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Aqua Jet", "Flip Turn", "Psychic Fangs", "Wave Crash"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Aqua Jet", "Flip Turn", "Protect", "Wave Crash"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "basculegion": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Aqua Jet", "Flip Turn", "Last Respects", "Wave Crash"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "basculegionf": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Flip Turn", "Last Respects", "Muddy Water", "Wave Crash"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "krookodile": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Gunk Shot", "High Horsepower", "Knock Off", "Protect", "Stone Edge", "Taunt"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Ground", "Poison"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Gunk Shot", "High Horsepower", "Knock Off", "Rock Slide"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Ground", "Poison"]
+ }
+ ]
+ },
+ "scrafty": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Close Combat", "Coaching", "Fake Out", "Knock Off", "Poison Jab", "Snarl"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "zoroark": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Dark Pulse", "Flamethrower", "Focus Blast", "Protect", "Sludge Bomb"],
+ "abilities": ["Illusion"],
+ "teraTypes": ["Poison"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Flamethrower", "Focus Blast", "Knock Off", "Protect", "Sludge Bomb"],
+ "abilities": ["Illusion"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "zoroarkhisui": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Bitter Malice", "Flamethrower", "Focus Blast", "Hyper Voice", "Nasty Plot", "Protect"],
+ "abilities": ["Illusion"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Bitter Malice", "Hyper Voice", "Protect", "Tera Blast"],
+ "abilities": ["Illusion"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "cinccino": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Bullet Seed", "Knock Off", "Protect", "Tail Slap", "Triple Axel"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Grass", "Ice", "Normal"]
+ }
+ ]
+ },
+ "gothitelle": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Fake Out", "Heal Pulse", "Helping Hand", "Protect", "Psychic", "Trick Room"],
+ "abilities": ["Shadow Tag"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "reuniclus": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Focus Blast", "Protect", "Psychic", "Shadow Ball", "Trick Room"],
+ "abilities": ["Magic Guard"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "swanna": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Brave Bird", "Hydro Pump", "Knock Off", "Protect", "Tailwind"],
+ "abilities": ["Hydration"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Brave Bird", "Hydro Pump", "Protect", "Tailwind"],
+ "abilities": ["Hydration"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "sawsbuck": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Double-Edge", "High Horsepower", "Horn Leech", "Protect", "Swords Dance"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "amoonguss": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Clear Smog", "Pollen Puff", "Protect", "Rage Powder", "Spore"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Pollen Puff", "Rage Powder", "Sludge Bomb", "Spore"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "alomomola": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Helping Hand", "Icy Wind", "Scald", "Wide Guard"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "galvantula": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Bug Buzz", "Protect", "Sticky Web", "Thunder", "Volt Switch"],
+ "abilities": ["Compound Eyes"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "eelektross": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Close Combat", "Electroweb", "Flamethrower", "Giga Drain", "Knock Off", "Thunderbolt", "U-turn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Poison"]
+ }
+ ]
+ },
+ "chandelure": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Energy Ball", "Heat Wave", "Protect", "Shadow Ball", "Trick"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Fire", "Grass"]
+ }
+ ]
+ },
+ "haxorus": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Close Combat", "Iron Head", "Protect", "Scale Shot", "Swords Dance"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Dragon", "Fighting", "Steel"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Close Combat", "Dragon Claw", "First Impression", "Iron Head", "Protect"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "beartic": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Aqua Jet", "Close Combat", "Icicle Crash", "Protect"],
+ "abilities": ["Slush Rush", "Swift Swim"],
+ "teraTypes": ["Fighting", "Water"]
+ }
+ ]
+ },
+ "cryogonal": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Flash Cannon", "Freeze-Dry", "Haze", "Icy Wind", "Rapid Spin", "Recover"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "mienshao": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Close Combat", "Fake Out", "Knock Off", "Triple Axel", "U-turn"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Close Combat", "Fake Out", "Knock Off", "U-turn"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "golurk": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dynamic Punch", "High Horsepower", "Poltergeist", "Protect"],
+ "abilities": ["No Guard"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Dynamic Punch", "High Horsepower", "Poltergeist", "Stone Edge"],
+ "abilities": ["No Guard"],
+ "teraTypes": ["Dragon", "Fairy", "Fighting"]
+ }
+ ]
+ },
+ "braviary": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Brave Bird", "Close Combat", "Protect", "Tailwind"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Fighting", "Flying"]
+ }
+ ]
+ },
+ "braviaryhisui": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Heat Wave", "Hurricane", "Psychic", "Tailwind"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Fire", "Psychic", "Steel"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Calm Mind", "Esper Wing", "Hurricane", "Protect"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Psychic", "Steel"]
+ }
+ ]
+ },
+ "mandibuzz": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Foul Play", "Knock Off", "Roost", "Snarl", "Tailwind", "Taunt", "Toxic", "U-turn"],
+ "abilities": ["Overcoat"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "hydreigon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dark Pulse", "Draco Meteor", "Protect", "Snarl", "Tailwind"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dragon", "Poison"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Dark Pulse", "Draco Meteor", "Heat Wave", "Protect", "Snarl"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "volcarona": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Bug Buzz", "Heat Wave", "Protect", "Quiver Dance"],
+ "abilities": ["Flame Body", "Swarm"],
+ "teraTypes": ["Fire", "Ground", "Water"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Heat Wave", "Rage Powder", "Struggle Bug", "Tailwind"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "cobalion": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Body Press", "Coaching", "Iron Head", "Thunder Wave", "Volt Switch"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Flying", "Water"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Body Press", "Iron Defense", "Iron Head", "Protect"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Flying", "Water"]
+ }
+ ]
+ },
+ "terrakion": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "High Horsepower", "Rock Slide", "Stone Edge"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Fighting", "Ghost", "Rock"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Close Combat", "High Horsepower", "Protect", "Rock Slide"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Fighting", "Ghost", "Rock"]
+ }
+ ]
+ },
+ "virizion": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Close Combat", "Coaching", "Leaf Storm", "Protect", "Stone Edge"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Fire", "Rock", "Steel"]
+ }
+ ]
+ },
+ "tornadus": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Bleakwind Storm", "Heat Wave", "Knock Off", "Protect", "Tailwind", "Taunt"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "tornadustherian": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Bleakwind Storm", "Grass Knot", "Heat Wave", "Nasty Plot", "Protect"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fire", "Flying"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Bleakwind Storm", "Focus Blast", "Grass Knot", "Heat Wave", "U-turn"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fire", "Flying"]
+ }
+ ]
+ },
+ "thundurus": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Grass Knot", "Knock Off", "Protect", "Snarl", "Taunt", "Thunder Wave", "Thunderbolt"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Acrobatics", "Grass Knot", "Knock Off", "Protect", "Snarl", "Wildbolt Storm"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Electric", "Flying", "Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Nasty Plot", "Protect", "Tera Blast", "Wildbolt Storm"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Flying", "Ice"]
+ }
+ ]
+ },
+ "thundurustherian": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Grass Knot", "Protect", "Sludge Bomb", "Volt Switch", "Wildbolt Storm"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Electric", "Poison"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Nasty Plot", "Protect", "Tera Blast", "Wildbolt Storm"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying", "Ice"]
+ }
+ ]
+ },
+ "reshiram": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Blue Flare", "Draco Meteor", "Heat Wave", "Protect", "Tailwind"],
+ "abilities": ["Turboblaze"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "zekrom": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Bolt Strike", "Dragon Claw", "Dragon Dance", "Protect"],
+ "abilities": ["Teravolt"],
+ "teraTypes": ["Dragon", "Electric", "Fire", "Grass"]
+ }
+ ]
+ },
+ "landorus": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Earth Power", "Nasty Plot", "Protect", "Psychic", "Rock Slide", "Sandsear Storm", "Sludge Bomb"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Ground", "Poison", "Psychic"]
+ }
+ ]
+ },
+ "landorustherian": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Protect", "Rock Slide", "Stomping Tantrum", "Stone Edge", "Taunt", "U-turn"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Rock Slide", "Stomping Tantrum", "Stone Edge", "Tera Blast", "U-turn"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "kyurem": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Earth Power", "Icicle Spear", "Protect", "Scale Shot"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Fairy", "Steel"]
+ },
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Draco Meteor", "Earth Power", "Glaciate", "Protect"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "kyuremwhite": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Draco Meteor", "Earth Power", "Fusion Flare", "Ice Beam", "Protect"],
+ "abilities": ["Turboblaze"],
+ "teraTypes": ["Fire"]
+ },
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Blizzard", "Earth Power", "Freeze-Dry", "Fusion Flare", "Protect"],
+ "abilities": ["Turboblaze"],
+ "teraTypes": ["Fire", "Ground"]
+ }
+ ]
+ },
+ "kyuremblack": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dragon Dance", "Fusion Bolt", "Icicle Spear", "Protect"],
+ "abilities": ["Teravolt"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "keldeoresolute": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Hydro Pump", "Muddy Water", "Secret Sword", "Vacuum Wave"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Fighting", "Steel", "Water"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Hydro Pump", "Muddy Water", "Protect", "Secret Sword", "Vacuum Wave"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Fighting", "Steel", "Water"]
+ }
+ ]
+ },
+ "meloetta": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Calm Mind", "Focus Blast", "Hyper Voice", "Protect", "Psychic", "U-turn"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Fighting", "Normal", "Psychic"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Close Combat", "Psychic", "Relic Song", "Tera Blast"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "chesnaught": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Body Press", "Coaching", "Knock Off", "Leech Seed", "Spiky Shield", "Wood Hammer"],
+ "abilities": ["Bulletproof"],
+ "teraTypes": ["Fire", "Rock", "Steel", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Leech Seed", "Spiky Shield"],
+ "abilities": ["Bulletproof"],
+ "teraTypes": ["Fire", "Rock", "Steel", "Water"]
+ }
+ ]
+ },
+ "delphox": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Fire Blast", "Heat Wave", "Nasty Plot", "Protect", "Psyshock"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "greninjabond": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dark Pulse", "Gunk Shot", "Hydro Pump", "Ice Beam", "Protect", "Taunt"],
+ "abilities": ["Battle Bond"],
+ "teraTypes": ["Dark", "Poison", "Water"]
+ }
+ ]
+ },
+ "talonflame": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Brave Bird", "Overheat", "Protect", "Tailwind", "U-turn", "Will-O-Wisp"],
+ "abilities": ["Gale Wings"],
+ "teraTypes": ["Flying", "Ground"]
+ }
+ ]
+ },
+ "vivillon": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Hurricane", "Pollen Puff", "Protect", "Sleep Powder"],
+ "abilities": ["Compound Eyes"],
+ "teraTypes": ["Flying", "Steel"]
+ }
+ ]
+ },
+ "pyroar": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Fire Blast", "Heat Wave", "Hyper Voice", "Protect", "Taunt", "Will-O-Wisp"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Fire", "Normal", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Fire Blast", "Hyper Voice", "Protect", "Tera Blast"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "florges": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Calm Mind", "Dazzling Gleam", "Moonblast", "Protect", "Synthesis"],
+ "abilities": ["Flower Veil"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "gogoat": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Double-Edge", "High Horsepower", "Horn Leech", "Leaf Storm"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Ground", "Normal"]
+ }
+ ]
+ },
+ "meowstic": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Fake Out", "Fake Tears", "Helping Hand", "Light Screen", "Psychic", "Reflect"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Dark", "Steel"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Fake Out", "Helping Hand", "Psychic", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "meowsticf": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Alluring Voice", "Dark Pulse", "Protect", "Psychic", "Thunderbolt"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Dark", "Electric", "Fairy"]
+ }
+ ]
+ },
+ "malamar": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Knock Off", "Protect", "Psycho Cut", "Superpower", "Trick Room"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "dragalge": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Draco Meteor", "Hydro Pump", "Protect", "Sludge Bomb"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "clawitzer": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "Muddy Water", "U-turn"],
+ "abilities": ["Mega Launcher"],
+ "teraTypes": ["Dark", "Dragon", "Fighting"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Aura Sphere", "Dark Pulse", "Heal Pulse", "Muddy Water", "Protect"],
+ "abilities": ["Mega Launcher"],
+ "teraTypes": ["Dark", "Fighting"]
+ }
+ ]
+ },
+ "sylveon": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Calm Mind", "Hyper Voice", "Protect", "Substitute"],
+ "abilities": ["Pixilate"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Hyper Voice", "Protect", "Quick Attack", "Tera Blast"],
+ "abilities": ["Pixilate"],
+ "teraTypes": ["Fire", "Ground"]
+ }
+ ]
+ },
+ "hawlucha": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Brave Bird", "Close Combat", "Protect", "Swords Dance"],
+ "abilities": ["Unburden"],
+ "teraTypes": ["Fighting", "Fire", "Flying"]
+ }
+ ]
+ },
+ "dedenne": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Dazzling Gleam", "Helping Hand", "Nuzzle", "Super Fang", "Thunderbolt"],
+ "abilities": ["Cheek Pouch"],
+ "teraTypes": ["Electric", "Flying"]
+ }
+ ]
+ },
+ "carbink": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Moonblast", "Trick Room"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "goodra": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Breaking Swipe", "Draco Meteor", "Fire Blast", "Power Whip", "Protect", "Scald", "Sludge Bomb", "Thunderbolt"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Electric", "Fire", "Grass", "Poison", "Water"]
+ }
+ ]
+ },
+ "goodrahisui": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Draco Meteor", "Dragon Tail", "Fire Blast", "Heavy Slam", "Hydro Pump", "Thunderbolt"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Electric", "Fire", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Acid Armor", "Body Press", "Heavy Slam", "Life Dew", "Protect"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "klefki": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Dazzling Gleam", "Foul Play", "Light Screen", "Reflect", "Spikes", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Flying", "Water"]
+ }
+ ]
+ },
+ "trevenant": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Poltergeist", "Protect", "Trick Room", "Wood Hammer"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Dark", "Water"]
+ }
+ ]
+ },
+ "avalugg": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Avalanche", "Body Press", "Protect", "Recover"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Fighting", "Poison", "Water"]
+ }
+ ]
+ },
+ "avalugghisui": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Body Press", "Icicle Spear", "Protect", "Rock Blast"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Fighting", "Flying", "Poison"]
+ }
+ ]
+ },
+ "noivern": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Draco Meteor", "Flamethrower", "Hurricane", "Protect", "Tailwind"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Dragon", "Fire", "Steel"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Draco Meteor", "Flamethrower", "Hurricane", "Protect", "Tailwind"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Dragon", "Fire", "Steel"]
+ }
+ ]
+ },
+ "diancie": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Body Press", "Diamond Storm", "Protect", "Trick Room"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Diamond Storm", "Moonblast", "Protect", "Trick Room"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Grass", "Steel"]
+ }
+ ]
+ },
+ "hoopa": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Focus Blast", "Hyperspace Hole", "Protect", "Shadow Ball", "Trick"],
+ "abilities": ["Magician"],
+ "teraTypes": ["Dark", "Fighting", "Psychic"]
+ }
+ ]
+ },
+ "hoopaunbound": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Drain Punch", "Gunk Shot", "Hyperspace Fury", "Trick", "Zen Headbutt"],
+ "abilities": ["Magician"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Focus Blast", "Gunk Shot", "Hyperspace Fury", "Protect", "Psychic", "Trick"],
+ "abilities": ["Magician"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ }
+ ]
+ },
+ "volcanion": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Earth Power", "Heat Wave", "Protect", "Sludge Bomb", "Steam Eruption"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "decidueye": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Knock Off", "Leaf Storm", "Protect", "Spirit Shackle", "Tailwind"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Dark", "Ghost", "Water"]
+ }
+ ]
+ },
+ "decidueyehisui": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Knock Off", "Leaf Blade", "Protect", "Tailwind", "Triple Arrows"],
+ "abilities": ["Scrappy"],
+ "teraTypes": ["Dark", "Fighting", "Steel"]
+ }
+ ]
+ },
+ "incineroar": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Fake Out", "Flare Blitz", "Knock Off", "Parting Shot"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "primarina": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Flip Turn", "Hydro Pump", "Hyper Voice", "Moonblast"],
+ "abilities": ["Liquid Voice"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "toucannon": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Brave Bird", "Bullet Seed", "Protect", "Tailwind"],
+ "abilities": ["Skill Link"],
+ "teraTypes": ["Grass", "Steel"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Beak Blast", "Bullet Seed", "Knock Off", "Protect"],
+ "abilities": ["Skill Link"],
+ "teraTypes": ["Grass", "Steel"]
+ }
+ ]
+ },
+ "gumshoos": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Double-Edge", "Knock Off", "Stomping Tantrum", "U-turn"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "vikavolt": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Bug Buzz", "Electroweb", "Protect", "Sticky Web", "Thunderbolt"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "crabominable": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Drain Punch", "Gunk Shot", "Ice Hammer", "Protect", "Wide Guard"],
+ "abilities": ["Iron Fist"],
+ "teraTypes": ["Fire", "Poison"]
+ }
+ ]
+ },
+ "oricorio": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Hurricane", "Protect", "Quiver Dance", "Revelation Dance", "Tailwind"],
+ "abilities": ["Dancer"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "oricoriopompom": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Hurricane", "Protect", "Quiver Dance", "Revelation Dance", "Tailwind"],
+ "abilities": ["Dancer"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "oricoriopau": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Hurricane", "Protect", "Quiver Dance", "Revelation Dance", "Tailwind"],
+ "abilities": ["Dancer"],
+ "teraTypes": ["Fighting", "Ground"]
+ }
+ ]
+ },
+ "oricoriosensu": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Hurricane", "Protect", "Quiver Dance", "Revelation Dance", "Tailwind"],
+ "abilities": ["Dancer"],
+ "teraTypes": ["Fighting", "Ground"]
+ }
+ ]
+ },
+ "ribombee": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Moonblast", "Pollen Puff", "Protect", "Tailwind"],
+ "abilities": ["Shield Dust"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Dazzling Gleam", "Moonblast", "Protect", "Quiver Dance", "Tera Blast"],
+ "abilities": ["Shield Dust"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "lycanroc": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Accelerock", "Close Combat", "Drill Run", "Protect", "Rock Slide", "Swords Dance"],
+ "abilities": ["Sand Rush"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "lycanrocmidnight": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Close Combat", "Knock Off", "Rock Slide", "Stone Edge"],
+ "abilities": ["No Guard"],
+ "teraTypes": ["Fighting", "Rock", "Water"]
+ }
+ ]
+ },
+ "lycanrocdusk": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Accelerock", "Close Combat", "Protect", "Psychic Fangs", "Rock Slide", "Swords Dance"],
+ "abilities": ["Tough Claws"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "toxapex": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Baneful Bunker", "Infestation", "Recover", "Toxic"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Grass", "Steel"]
+ }
+ ]
+ },
+ "mudsdale": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Body Press", "Heavy Slam", "High Horsepower", "Rest", "Stone Edge"],
+ "abilities": ["Stamina"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "araquanid": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Liquidation", "Lunge", "Protect", "Sticky Web", "Wide Guard"],
+ "abilities": ["Water Bubble"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Leech Life", "Liquidation", "Protect", "Sticky Web", "Wide Guard"],
+ "abilities": ["Water Bubble"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Hydro Pump", "Liquidation", "Protect", "Sticky Web", "Wide Guard"],
+ "abilities": ["Water Bubble"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "lurantis": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Leaf Blade", "Leaf Storm", "Pollen Puff", "Superpower"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Knock Off", "Leaf Blade", "Pollen Puff", "Protect", "Superpower"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Knock Off", "Leaf Storm", "Superpower", "Tera Blast"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Stellar"]
+ }
+ ]
+ },
+ "salazzle": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Encore", "Fake Out", "Fire Blast", "Heat Wave", "Incinerate", "Poison Gas", "Protect", "Sludge Bomb"],
+ "abilities": ["Corrosion"],
+ "teraTypes": ["Fire", "Flying", "Water"]
+ }
+ ]
+ },
+ "tsareena": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["High Jump Kick", "Knock Off", "Power Whip", "Rapid Spin", "Triple Axel"],
+ "abilities": ["Queenly Majesty"],
+ "teraTypes": ["Fighting", "Fire"]
+ }
+ ]
+ },
+ "comfey": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Draining Kiss", "Floral Healing", "Helping Hand", "Tailwind"],
+ "abilities": ["Triage"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "oranguru": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Hyper Voice", "Instruct", "Psyshock", "Trick Room"],
+ "abilities": ["Telepathy"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "passimian": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Close Combat", "Gunk Shot", "Knock Off", "Rock Slide", "U-turn"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Dark", "Poison"]
+ }
+ ]
+ },
+ "palossand": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Earth Power", "Protect", "Shadow Ball", "Shore Up", "Stealth Rock"],
+ "abilities": ["Water Compaction"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "minior": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Acrobatics", "Protect", "Rock Slide", "Shell Smash"],
+ "abilities": ["Shields Down"],
+ "teraTypes": ["Flying", "Rock", "Steel"]
+ }
+ ]
+ },
+ "komala": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Double-Edge", "Knock Off", "Rapid Spin", "Sucker Punch", "Superpower", "U-turn", "Wood Hammer"],
+ "abilities": ["Comatose"],
+ "teraTypes": ["Fighting", "Grass"]
+ }
+ ]
+ },
+ "mimikyu": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Play Rough", "Protect", "Shadow Claw", "Shadow Sneak", "Swords Dance"],
+ "abilities": ["Disguise"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "bruxish": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Crunch", "Protect", "Psychic Fangs", "Wave Crash"],
+ "abilities": ["Strong Jaw"],
+ "teraTypes": ["Dark", "Psychic"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Aqua Jet", "Crunch", "Flip Turn", "Ice Fang", "Psychic Fangs", "Wave Crash"],
+ "abilities": ["Strong Jaw"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "solgaleo": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Close Combat", "Flare Blitz", "Knock Off", "Psychic Fangs", "Sunsteel Strike"],
+ "abilities": ["Full Metal Body"],
+ "teraTypes": ["Dark", "Fighting", "Fire"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Close Combat", "Flame Charge", "Protect", "Sunsteel Strike"],
+ "abilities": ["Full Metal Body"],
+ "teraTypes": ["Fighting", "Fire"]
+ }
+ ]
+ },
+ "lunala": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Icy Wind", "Moongeist Beam", "Moonlight", "Tailwind", "Wide Guard", "Will-O-Wisp"],
+ "abilities": ["Shadow Shield"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Meteor Beam", "Moonblast", "Moongeist Beam", "Protect"],
+ "abilities": ["Shadow Shield"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Calm Mind", "Moonblast", "Moongeist Beam", "Protect"],
+ "abilities": ["Shadow Shield"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "necrozma": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Brick Break", "Dragon Dance", "Knock Off", "Photon Geyser"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Dark", "Fighting"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Earth Power", "Meteor Beam", "Photon Geyser", "Protect"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Dark", "Steel"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Calm Mind", "Earth Power", "Photon Geyser", "Protect"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "necrozmaduskmane": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Photon Geyser", "Protect", "Sunsteel Strike"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Dark", "Steel", "Water"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Earthquake", "Photon Geyser", "Protect", "Sunsteel Strike", "Trick Room"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Dark", "Steel", "Water"]
+ }
+ ]
+ },
+ "necrozmadawnwings": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Moongeist Beam", "Photon Geyser", "Protect", "Trick Room"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Moongeist Beam", "Photon Geyser", "Tera Blast", "Trick Room"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Fairy", "Fighting"]
+ }
+ ]
+ },
+ "kommoo": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Clanging Scales", "Clangorous Soul", "Drain Punch", "Iron Head"],
+ "abilities": ["Soundproof"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Clanging Scales", "Clangorous Soul", "Iron Head", "Protect"],
+ "abilities": ["Soundproof"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Body Press", "Iron Defense", "Protect", "Throat Chop"],
+ "abilities": ["Soundproof"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "magearna": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Dazzling Gleam", "Flash Cannon", "Fleur Cannon", "Protect", "Trick Room"],
+ "abilities": ["Soul-Heart"],
+ "teraTypes": ["Fairy", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Aura Sphere", "Dazzling Gleam", "Flash Cannon", "Fleur Cannon"],
+ "abilities": ["Soul-Heart"],
+ "teraTypes": ["Fairy", "Fighting", "Water"]
+ }
+ ]
+ },
+ "rillaboom": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Fake Out", "Grassy Glide", "High Horsepower", "Wood Hammer"],
+ "abilities": ["Grassy Surge"],
+ "teraTypes": ["Fire", "Grass", "Steel"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Fake Out", "Grassy Glide", "U-turn", "Wood Hammer"],
+ "abilities": ["Grassy Surge"],
+ "teraTypes": ["Fire", "Grass", "Steel"]
+ }
+ ]
+ },
+ "cinderace": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Court Change", "Gunk Shot", "High Jump Kick", "Protect", "Pyro Ball", "Sucker Punch", "U-turn"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Fighting", "Fire", "Poison"]
+ }
+ ]
+ },
+ "inteleon": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Hydro Pump", "Ice Beam", "Muddy Water", "Scald"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "greedent": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Double-Edge", "High Horsepower", "Knock Off", "Protect", "Swords Dance"],
+ "abilities": ["Cheek Pouch"],
+ "teraTypes": ["Fairy", "Ghost", "Ground"]
+ }
+ ]
+ },
+ "corviknight": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Brave Bird", "Iron Head", "Roost", "Tailwind", "U-turn"],
+ "abilities": ["Mirror Armor"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "drednaw": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Crunch", "Liquidation", "Rock Slide", "Shell Smash"],
+ "abilities": ["Strong Jaw"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Liquidation", "Protect", "Rock Slide", "Shell Smash"],
+ "abilities": ["Shell Armor", "Swift Swim"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "coalossal": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Fire Blast", "Heat Wave", "Incinerate", "Protect", "Rapid Spin", "Stealth Rock", "Stone Edge", "Will-O-Wisp"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "flapple": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Dragon Dance", "Dragon Rush", "Grav Apple", "Protect", "Sucker Punch"],
+ "abilities": ["Ripen"],
+ "teraTypes": ["Fire", "Grass", "Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Dragon Dance", "Grav Apple", "Protect", "Tera Blast"],
+ "abilities": ["Hustle"],
+ "teraTypes": ["Dragon", "Fire"]
+ }
+ ]
+ },
+ "appletun": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Apple Acid", "Dragon Pulse", "Leech Seed", "Protect"],
+ "abilities": ["Ripen", "Thick Fat"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "sandaconda": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Coil", "High Horsepower", "Rest", "Stone Edge"],
+ "abilities": ["Shed Skin"],
+ "teraTypes": ["Dragon", "Steel"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Glare", "High Horsepower", "Rest", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Shed Skin"],
+ "teraTypes": ["Dragon", "Steel"]
+ }
+ ]
+ },
+ "cramorant": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Brave Bird", "Protect", "Roost", "Surf", "Tailwind"],
+ "abilities": ["Gulp Missile"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "barraskewda": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "Poison Jab", "Protect", "Psychic Fangs", "Waterfall"],
+ "abilities": ["Propeller Tail"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "toxtricity": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Overdrive", "Sludge Bomb", "Snarl", "Volt Switch"],
+ "abilities": ["Punk Rock"],
+ "teraTypes": ["Dark", "Electric", "Flying"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Overdrive", "Psychic Noise", "Sludge Bomb", "Volt Switch"],
+ "abilities": ["Punk Rock"],
+ "teraTypes": ["Electric", "Flying", "Psychic"]
+ }
+ ]
+ },
+ "toxtricitylowkey": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Overdrive", "Sludge Bomb", "Snarl", "Volt Switch"],
+ "abilities": ["Punk Rock"],
+ "teraTypes": ["Dark", "Electric", "Flying"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Overdrive", "Psychic Noise", "Sludge Bomb", "Volt Switch"],
+ "abilities": ["Punk Rock"],
+ "teraTypes": ["Electric", "Flying", "Psychic"]
+ }
+ ]
+ },
+ "polteageist": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Protect", "Shadow Ball", "Shell Smash", "Tera Blast"],
+ "abilities": ["Cursed Body"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Baton Pass", "Protect", "Shadow Ball", "Shell Smash"],
+ "abilities": ["Cursed Body"],
+ "teraTypes": ["Dark", "Normal"]
+ }
+ ]
+ },
+ "hatterene": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Dazzling Gleam", "Mystical Fire", "Protect", "Psychic", "Trick Room"],
+ "abilities": ["Magic Bounce"],
+ "teraTypes": ["Fairy", "Fire", "Psychic", "Steel"]
+ }
+ ]
+ },
+ "grimmsnarl": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Fake Out", "Light Screen", "Parting Shot", "Reflect", "Spirit Break"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Fake Out", "Parting Shot", "Spirit Break", "Sucker Punch", "Taunt", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "perrserker": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Close Combat", "Fake Out", "Helping Hand", "Iron Head", "Knock Off", "U-turn"],
+ "abilities": ["Steely Spirit", "Tough Claws"],
+ "teraTypes": ["Fighting", "Steel"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Close Combat", "Iron Head", "Knock Off", "U-turn"],
+ "abilities": ["Steely Spirit", "Tough Claws"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "alcremie": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Alluring Voice", "Dazzling Gleam", "Decorate", "Encore", "Protect"],
+ "abilities": ["Aroma Veil"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "falinks": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Close Combat", "Iron Head", "Knock Off", "No Retreat", "Protect", "Rock Slide"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "pincurchin": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Electroweb", "Recover", "Thunderbolt", "Toxic Spikes"],
+ "abilities": ["Electric Surge"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "frosmoth": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Bug Buzz", "Ice Beam", "Protect", "Quiver Dance"],
+ "abilities": ["Ice Scales"],
+ "teraTypes": ["Ground", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Ice Beam", "Protect", "Quiver Dance", "Tera Blast"],
+ "abilities": ["Ice Scales"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "stonjourner": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Heat Crash", "High Horsepower", "Protect", "Rock Polish", "Stone Edge"],
+ "abilities": ["Power Spot"],
+ "teraTypes": ["Fire", "Rock"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Heat Crash", "High Horsepower", "Rock Slide", "Stone Edge"],
+ "abilities": ["Power Spot"],
+ "teraTypes": ["Fire", "Rock"]
+ }
+ ]
+ },
+ "eiscue": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Belly Drum", "Ice Spinner", "Liquidation", "Protect"],
+ "abilities": ["Ice Face"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "indeedee": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Encore", "Expanding Force", "Hyper Voice", "Protect", "Shadow Ball"],
+ "abilities": ["Psychic Surge"],
+ "teraTypes": ["Fairy", "Psychic"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Expanding Force", "Hyper Voice", "Psyshock", "Trick"],
+ "abilities": ["Psychic Surge"],
+ "teraTypes": ["Psychic"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Encore", "Expanding Force", "Protect", "Shadow Ball", "Tera Blast", "Trick"],
+ "abilities": ["Psychic Surge"],
+ "teraTypes": ["Fairy", "Fighting"]
+ }
+ ]
+ },
+ "indeedeef": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Follow Me", "Heal Pulse", "Helping Hand", "Protect", "Psychic"],
+ "abilities": ["Psychic Surge"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "morpeko": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Aura Wheel", "Electroweb", "Fake Out", "Knock Off", "Protect"],
+ "abilities": ["Hunger Switch"],
+ "teraTypes": ["Electric"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Aura Wheel", "Knock Off", "Parting Shot", "Protect", "Volt Switch"],
+ "abilities": ["Hunger Switch"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "copperajah": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["High Horsepower", "Iron Head", "Play Rough", "Protect", "Rock Slide"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Fairy", "Rock"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Heat Crash", "Heavy Slam", "High Horsepower", "Stone Edge"],
+ "abilities": ["Heavy Metal"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "duraludon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Body Press", "Draco Meteor", "Flash Cannon", "Iron Defense"],
+ "abilities": ["Stalwart"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Body Press", "Flash Cannon", "Iron Defense", "Protect", "Snarl", "Thunder Wave"],
+ "abilities": ["Stalwart"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "dragapult": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Draco Meteor", "Dragon Darts", "Fire Blast", "Protect", "Shadow Ball"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Dragon"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Dragon Claw", "Dragon Darts", "Phantom Force", "U-turn"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "zacian": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Close Combat", "Play Rough", "Protect", "Psychic Fangs", "Swords Dance"],
+ "abilities": ["Intrepid Sword"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "zaciancrowned": {
+ "level": 66,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Behemoth Blade", "Close Combat", "Play Rough", "Protect", "Swords Dance"],
+ "abilities": ["Intrepid Sword"],
+ "teraTypes": ["Fairy", "Fighting", "Fire", "Steel"]
+ }
+ ]
+ },
+ "zamazenta": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "Coaching", "Crunch", "Howl", "Iron Head", "Psychic Fangs", "Stone Edge"],
+ "abilities": ["Dauntless Shield"],
+ "teraTypes": ["Dark", "Fighting", "Steel"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Body Press", "Crunch", "Iron Defense", "Protect"],
+ "abilities": ["Dauntless Shield"],
+ "teraTypes": ["Fighting", "Fire", "Steel"]
+ }
+ ]
+ },
+ "zamazentacrowned": {
+ "level": 68,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Body Press", "Coaching", "Heavy Slam", "Iron Defense", "Protect", "Snarl", "Wide Guard"],
+ "abilities": ["Dauntless Shield"],
+ "teraTypes": ["Fighting", "Fire", "Steel"]
+ }
+ ]
+ },
+ "eternatus": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Cosmic Power", "Dynamax Cannon", "Flamethrower", "Recover"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Dynamax Cannon", "Fire Blast", "Recover", "Sludge Bomb", "Toxic Spikes"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Water"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dynamax Cannon", "Fire Blast", "Meteor Beam", "Protect"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Water"]
+ }
+ ]
+ },
+ "urshifu": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "Poison Jab", "Protect", "Sucker Punch", "Wicked Blow"],
+ "abilities": ["Unseen Fist"],
+ "teraTypes": ["Dark", "Poison"]
+ }
+ ]
+ },
+ "urshifurapidstrike": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Aqua Jet", "Close Combat", "Ice Spinner", "Protect", "Surging Strikes", "U-turn"],
+ "abilities": ["Unseen Fist"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "zarude": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Close Combat", "Jungle Healing", "Knock Off", "Power Whip", "Protect"],
+ "abilities": ["Leaf Guard"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "regieleki": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Electroweb", "Protect", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Transistor"],
+ "teraTypes": ["Electric"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Electroweb", "Protect", "Tera Blast", "Thunderbolt"],
+ "abilities": ["Transistor"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "regidrago": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Draco Meteor", "Dragon Claw", "Dragon Energy", "Earth Power"],
+ "abilities": ["Dragon's Maw"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "glastrier": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Close Combat", "Heavy Slam", "High Horsepower", "Icicle Crash", "Protect"],
+ "abilities": ["Chilling Neigh"],
+ "teraTypes": ["Fighting", "Ground", "Steel"]
+ }
+ ]
+ },
+ "spectrier": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Draining Kiss", "Nasty Plot", "Protect", "Shadow Ball"],
+ "abilities": ["Grim Neigh"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Dark Pulse", "Nasty Plot", "Protect", "Shadow Ball"],
+ "abilities": ["Grim Neigh"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Nasty Plot", "Protect", "Shadow Ball", "Tera Blast"],
+ "abilities": ["Grim Neigh"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "calyrex": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Giga Drain", "Helping Hand", "Leaf Storm", "Leech Seed", "Pollen Puff", "Psychic"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "calyrexice": {
+ "level": 65,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Glacial Lance", "High Horsepower", "Protect", "Trick Room"],
+ "abilities": ["As One (Glastrier)"],
+ "teraTypes": ["Ground", "Ice"]
+ }
+ ]
+ },
+ "calyrexshadow": {
+ "level": 62,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Astral Barrage", "Encore", "Nasty Plot", "Pollen Puff", "Protect", "Psyshock"],
+ "abilities": ["As One (Spectrier)"],
+ "teraTypes": ["Dark", "Ghost"]
+ }
+ ]
+ },
+ "wyrdeer": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Body Slam", "Double-Edge", "Earth Power", "Protect", "Psychic", "Thunder Wave", "Thunderbolt"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Double-Edge", "Earth Power", "Psychic", "Trick Room"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fairy", "Ground"]
+ }
+ ]
+ },
+ "kleavor": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Close Combat", "Protect", "Stone Axe", "Tailwind", "U-turn", "X-Scissor"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Bug", "Fighting", "Rock", "Steel"]
+ }
+ ]
+ },
+ "ursaluna": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Crunch", "Earthquake", "Facade", "Headlong Rush", "Protect"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "ursalunabloodmoon": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Blood Moon", "Earth Power", "Hyper Voice", "Protect"],
+ "abilities": ["Mind's Eye"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Blood Moon", "Earth Power", "Hyper Voice", "Vacuum Wave"],
+ "abilities": ["Mind's Eye"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "enamorus": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Play Rough", "Protect", "Superpower", "Tailwind"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Earth Power", "Protect", "Springtide Storm", "Tailwind"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Protect", "Springtide Storm", "Superpower", "Tera Blast"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Stellar"]
+ }
+ ]
+ },
+ "enamorustherian": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Earth Power", "Moonblast", "Mystical Fire", "Protect", "Springtide Storm"],
+ "abilities": ["Overcoat"],
+ "teraTypes": ["Fairy", "Ground"]
+ }
+ ]
+ },
+ "meowscarada": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Flower Trick", "Knock Off", "Sucker Punch", "Triple Axel", "U-turn"],
+ "abilities": ["Protean"],
+ "teraTypes": ["Dark", "Grass"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Flower Trick", "Knock Off", "Protect", "Sucker Punch", "Taunt"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "skeledirge": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Protect", "Shadow Ball", "Slack Off", "Torch Song"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Fairy", "Water"]
+ }
+ ]
+ },
+ "quaquaval": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Aqua Jet", "Aqua Step", "Close Combat", "Knock Off", "Protect", "Triple Axel"],
+ "abilities": ["Moxie"],
+ "teraTypes": ["Fire", "Steel", "Water"]
+ }
+ ]
+ },
+ "oinkologne": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Double-Edge", "Helping Hand", "Lash Out", "Protect", "Yawn"],
+ "abilities": ["Gluttony"],
+ "teraTypes": ["Ghost", "Normal"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Double-Edge", "High Horsepower", "Lash Out", "Play Rough"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fairy", "Ground", "Normal"]
+ }
+ ]
+ },
+ "oinkolognef": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Double-Edge", "Helping Hand", "Lash Out", "Protect", "Yawn"],
+ "abilities": ["Gluttony"],
+ "teraTypes": ["Ghost", "Normal"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Double-Edge", "High Horsepower", "Lash Out", "Play Rough"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fairy", "Ground", "Normal"]
+ }
+ ]
+ },
+ "spidops": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Circle Throw", "Knock Off", "Lunge", "Sticky Web", "String Shot", "U-turn"],
+ "abilities": ["Stakeout"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "lokix": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["First Impression", "Protect", "Sucker Punch", "U-turn"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Bug"]
+ },
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["First Impression", "Leech Life", "Protect", "Sucker Punch"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Bug"]
+ }
+ ]
+ },
+ "pawmot": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "Double Shock", "Fake Out", "Protect", "Revival Blessing"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "maushold": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Encore", "Population Bomb", "Protect", "Tidy Up"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Follow Me", "Population Bomb", "Protect", "Taunt", "Thunder Wave", "U-turn"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Ghost", "Normal"]
+ }
+ ]
+ },
+ "dachsbun": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Body Press", "Helping Hand", "Howl", "Play Rough", "Snarl", "Yawn"],
+ "abilities": ["Well-Baked Body"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "arboliva": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Earth Power", "Energy Ball", "Hyper Voice", "Pollen Puff", "Protect", "Strength Sap"],
+ "abilities": ["Seed Sower"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "squawkabilly": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Brave Bird", "Double-Edge", "Parting Shot", "Protect", "Quick Attack"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Flying", "Normal", "Steel"]
+ }
+ ]
+ },
+ "squawkabillywhite": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Brave Bird", "Double-Edge", "Parting Shot", "Protect", "Quick Attack"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Flying", "Normal", "Steel"]
+ }
+ ]
+ },
+ "squawkabillyblue": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Brave Bird", "Double-Edge", "Parting Shot", "Protect", "Quick Attack"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Flying", "Normal", "Steel"]
+ }
+ ]
+ },
+ "squawkabillyyellow": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Brave Bird", "Double-Edge", "Parting Shot", "Protect", "Quick Attack"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Flying", "Normal", "Steel"]
+ }
+ ]
+ },
+ "garganacl": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Protect", "Recover", "Salt Cure", "Stealth Rock", "Wide Guard"],
+ "abilities": ["Purifying Salt"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "armarouge": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Armor Cannon", "Aura Sphere", "Energy Ball", "Heat Wave", "Psyshock"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Fighting", "Fire", "Grass"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Heat Wave", "Protect", "Psychic", "Trick Room"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Dark", "Grass"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Heat Wave", "Meteor Beam", "Protect", "Psychic", "Psyshock"],
+ "abilities": ["Weak Armor"],
+ "teraTypes": ["Dark", "Grass"]
+ }
+ ]
+ },
+ "ceruledge": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Bitter Blade", "Poltergeist", "Protect", "Shadow Sneak", "Swords Dance"],
+ "abilities": ["Weak Armor"],
+ "teraTypes": ["Fire", "Ghost", "Grass"]
+ }
+ ]
+ },
+ "bellibolt": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Electroweb", "Muddy Water", "Slack Off", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Electromorphosis"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "kilowattrel": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Hurricane", "Protect", "Tailwind", "Thunderbolt"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Flying", "Steel"]
+ }
+ ]
+ },
+ "mabosstiff": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Crunch", "Fire Fang", "Play Rough", "Psychic Fangs", "Wild Charge"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "grafaiai": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Encore", "Gunk Shot", "Knock Off", "Parting Shot", "Protect", "Taunt"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Gunk Shot", "Knock Off", "Super Fang", "U-turn"],
+ "abilities": ["Poison Touch"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "brambleghast": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Poltergeist", "Power Whip", "Protect", "Shadow Sneak"],
+ "abilities": ["Wind Rider"],
+ "teraTypes": ["Fairy", "Ghost", "Grass", "Steel", "Water"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Disable", "Poltergeist", "Power Whip", "Protect", "Rapid Spin", "Strength Sap"],
+ "abilities": ["Wind Rider"],
+ "teraTypes": ["Fairy", "Steel", "Water"]
+ }
+ ]
+ },
+ "toedscruel": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Earth Power", "Giga Drain", "Knock Off", "Rage Powder", "Spore"],
+ "abilities": ["Mycelium Might"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "klawf": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Crabhammer", "High Horsepower", "Knock Off", "Protect", "Rock Slide"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Ground", "Water"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Crabhammer", "High Horsepower", "Knock Off", "Rock Slide"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Ground", "Water"]
+ }
+ ]
+ },
+ "scovillain": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Burning Jealousy", "Energy Ball", "Fire Blast", "Leaf Storm"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire", "Grass", "Steel"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Energy Ball", "Fire Blast", "Protect", "Rage Powder", "Will-O-Wisp"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire", "Grass", "Steel"]
+ }
+ ]
+ },
+ "rabsca": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Psychic", "Revival Blessing", "Struggle Bug", "Trick Room"],
+ "abilities": ["Synchronize"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Bug Buzz", "Psychic", "Revival Blessing", "Trick Room"],
+ "abilities": ["Synchronize"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "espathra": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Baton Pass", "Dazzling Gleam", "Lumina Crash", "Protect", "Shadow Ball"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "tinkaton": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Fake Out", "Gigaton Hammer", "Knock Off", "Play Rough", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Mold Breaker"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "wugtrio": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Aqua Jet", "Liquidation", "Stomping Tantrum", "Throat Chop"],
+ "abilities": ["Gooey"],
+ "teraTypes": ["Dark", "Ground"]
+ }
+ ]
+ },
+ "bombirdier": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Brave Bird", "Knock Off", "Rock Slide", "Sucker Punch"],
+ "abilities": ["Rocky Payload"],
+ "teraTypes": ["Rock"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Brave Bird", "Knock Off", "Protect", "Rock Slide"],
+ "abilities": ["Rocky Payload"],
+ "teraTypes": ["Rock"]
+ }
+ ]
+ },
+ "palafin": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Close Combat", "Flip Turn", "Jet Punch", "Wave Crash"],
+ "abilities": ["Zero to Hero"],
+ "teraTypes": ["Fighting", "Water"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Flip Turn", "Jet Punch", "Protect", "Wave Crash"],
+ "abilities": ["Zero to Hero"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "revavroom": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Gunk Shot", "Iron Head", "Parting Shot", "Protect"],
+ "abilities": ["Filter"],
+ "teraTypes": ["Flying", "Water"]
+ },
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Gunk Shot", "High Horsepower", "Iron Head", "Protect", "Shift Gear"],
+ "abilities": ["Filter"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "cyclizar": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Breaking Swipe", "Double-Edge", "Knock Off", "Shed Tail", "Taunt"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dragon", "Poison"]
+ },
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Double-Edge", "Draco Meteor", "Knock Off", "Shed Tail"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dragon", "Fire", "Normal", "Poison"]
+ }
+ ]
+ },
+ "orthworm": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Body Press", "Heavy Slam", "Iron Defense", "Protect"],
+ "abilities": ["Earth Eater"],
+ "teraTypes": ["Electric", "Fighting"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Body Press", "Heavy Slam", "Helping Hand", "Protect", "Shed Tail"],
+ "abilities": ["Earth Eater"],
+ "teraTypes": ["Electric", "Poison"]
+ }
+ ]
+ },
+ "glimmora": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Earth Power", "Mortal Spin", "Power Gem", "Sludge Bomb", "Spiky Shield", "Stealth Rock"],
+ "abilities": ["Toxic Debris"],
+ "teraTypes": ["Grass", "Water"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Earth Power", "Meteor Beam", "Sludge Bomb", "Spiky Shield"],
+ "abilities": ["Toxic Debris"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "houndstone": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Body Press", "Last Respects", "Shadow Sneak", "Trick"],
+ "abilities": ["Fluffy"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "flamigo": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Brave Bird", "Close Combat", "Throat Chop", "U-turn"],
+ "abilities": ["Scrappy"],
+ "teraTypes": ["Fighting", "Fire", "Flying"]
+ }
+ ]
+ },
+ "cetitan": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["High Horsepower", "Ice Shard", "Icicle Crash", "Liquidation", "Protect"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Ground", "Water"]
+ }
+ ]
+ },
+ "veluza": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Aqua Cutter", "Aqua Jet", "Night Slash", "Psycho Cut"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Dark", "Psychic", "Water"]
+ }
+ ]
+ },
+ "dondozo": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Avalanche", "Body Press", "Heavy Slam", "Wave Crash"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Dragon", "Grass", "Steel"]
+ }
+ ]
+ },
+ "tatsugiri": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Draco Meteor", "Icy Wind", "Muddy Water", "Rapid Spin"],
+ "abilities": ["Storm Drain"],
+ "teraTypes": ["Fire", "Steel"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Draco Meteor", "Muddy Water", "Nasty Plot", "Protect"],
+ "abilities": ["Storm Drain"],
+ "teraTypes": ["Dragon", "Fire", "Water"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Draco Meteor", "Hydro Pump", "Icy Wind", "Muddy Water"],
+ "abilities": ["Storm Drain"],
+ "teraTypes": ["Dragon", "Fire", "Water"]
+ }
+ ]
+ },
+ "farigiraf": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Hyper Voice", "Nasty Plot", "Protect", "Psychic", "Psyshock", "Trick Room"],
+ "abilities": ["Armor Tail"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "dudunsparce": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Earth Power", "Glare", "Hyper Drill", "Protect", "Tailwind"],
+ "abilities": ["Rattled"],
+ "teraTypes": ["Ghost", "Ground", "Normal"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Boomburst", "Earth Power", "Helping Hand", "Protect", "Tailwind"],
+ "abilities": ["Rattled"],
+ "teraTypes": ["Ghost", "Ground", "Normal"]
+ }
+ ]
+ },
+ "kingambit": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Iron Head", "Protect", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Dark", "Fire", "Flying"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Iron Head", "Kowtow Cleave", "Protect", "Sucker Punch"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Dark", "Fire", "Flying"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Iron Head", "Kowtow Cleave", "Sucker Punch", "Tera Blast"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Fairy", "Fire", "Flying"]
+ }
+ ]
+ },
+ "greattusk": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Close Combat", "Headlong Rush", "Ice Spinner", "Knock Off", "Protect", "Rapid Spin", "Rock Slide"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Fire", "Ground"]
+ }
+ ]
+ },
+ "brutebonnet": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Close Combat", "Crunch", "Protect", "Rage Powder", "Seed Bomb", "Spore", "Sucker Punch"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Dark", "Poison"]
+ }
+ ]
+ },
+ "sandyshocks": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Earth Power", "Electroweb", "Protect", "Stealth Rock", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Electric", "Grass", "Ground"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Earth Power", "Protect", "Tera Blast", "Volt Switch"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Flying", "Ice"]
+ }
+ ]
+ },
+ "screamtail": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Disable", "Encore", "Helping Hand", "Howl", "Play Rough", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "fluttermane": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dazzling Gleam", "Moonblast", "Protect", "Shadow Ball"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Dazzling Gleam", "Icy Wind", "Moonblast", "Shadow Ball"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "slitherwing": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "First Impression", "Flare Blitz", "U-turn", "Wild Charge"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Bug", "Electric", "Fighting", "Fire"]
+ }
+ ]
+ },
+ "roaringmoon": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Acrobatics", "Breaking Swipe", "Knock Off", "Protect", "Tailwind"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Flying"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Dragon Claw", "Dragon Dance", "Knock Off", "Protect"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Dark", "Fire"]
+ }
+ ]
+ },
+ "irontreads": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["High Horsepower", "Iron Head", "Knock Off", "Rapid Spin", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fire", "Ground", "Steel"]
+ }
+ ]
+ },
+ "ironmoth": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Energy Ball", "Fiery Dance", "Heat Wave", "Protect", "Sludge Wave"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fire", "Grass"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Acid Spray", "Energy Ball", "Heat Wave", "Protect"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "ironhands": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Close Combat", "Drain Punch", "Fake Out", "Ice Punch", "Volt Switch", "Wild Charge"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Electric", "Fire"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Drain Punch", "Protect", "Swords Dance", "Thunder Punch"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "ironjugulis": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Dark Pulse", "Earth Power", "Hurricane", "Protect", "Tailwind", "Taunt"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Flying", "Ground", "Steel"]
+ }
+ ]
+ },
+ "ironthorns": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Electroweb", "High Horsepower", "Protect", "Rock Slide", "Stealth Rock", "Thunder Punch", "Thunder Wave", "Volt Switch"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Flying", "Grass"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Dragon Dance", "High Horsepower", "Ice Punch", "Protect", "Rock Slide", "Wild Charge"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Grass", "Rock"]
+ }
+ ]
+ },
+ "ironbundle": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Encore", "Freeze-Dry", "Hydro Pump", "Icy Wind", "Protect"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Dragon", "Water"]
+ }
+ ]
+ },
+ "ironvaliant": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Close Combat", "Dazzling Gleam", "Encore", "Knock Off", "Moonblast", "Protect"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Dark", "Fairy", "Fighting"]
+ }
+ ]
+ },
+ "baxcalibur": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Glaive Rush", "High Horsepower", "Ice Shard", "Icicle Crash"],
+ "abilities": ["Thermal Exchange"],
+ "teraTypes": ["Dragon", "Ground"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Icicle Spear", "Protect", "Scale Shot", "Swords Dance"],
+ "abilities": ["Thermal Exchange"],
+ "teraTypes": ["Dragon", "Steel"]
+ }
+ ]
+ },
+ "gholdengo": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Dazzling Gleam", "Focus Blast", "Make It Rain", "Shadow Ball", "Thunderbolt", "Trick"],
+ "abilities": ["Good as Gold"],
+ "teraTypes": ["Fairy", "Steel"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Make It Rain", "Nasty Plot", "Protect", "Shadow Ball"],
+ "abilities": ["Good as Gold"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dazzling Gleam", "Focus Blast", "Make It Rain", "Protect", "Shadow Ball"],
+ "abilities": ["Good as Gold"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "tinglu": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Body Press", "Protect", "Ruination", "Spikes", "Stealth Rock", "Stomping Tantrum", "Throat Chop"],
+ "abilities": ["Vessel of Ruin"],
+ "teraTypes": ["Fairy", "Water"]
+ }
+ ]
+ },
+ "chienpao": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Icicle Crash", "Lash Out", "Protect", "Sucker Punch", "Throat Chop"],
+ "abilities": ["Sword of Ruin"],
+ "teraTypes": ["Dark", "Ghost"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Icicle Crash", "Protect", "Sacred Sword", "Sucker Punch"],
+ "abilities": ["Sword of Ruin"],
+ "teraTypes": ["Fighting", "Ghost"]
+ }
+ ]
+ },
+ "wochien": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Knock Off", "Leech Seed", "Pollen Puff", "Protect", "Ruination"],
+ "abilities": ["Tablets of Ruin"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "chiyu": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Dark Pulse", "Heat Wave", "Nasty Plot", "Protect"],
+ "abilities": ["Beads of Ruin"],
+ "teraTypes": ["Dark", "Fire", "Water"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Dark Pulse", "Heat Wave", "Overheat", "Snarl"],
+ "abilities": ["Beads of Ruin"],
+ "teraTypes": ["Fire", "Water"]
+ }
+ ]
+ },
+ "koraidon": {
+ "level": 66,
+ "sets": [
+ {
+ "role": "Choice Item user",
+ "movepool": ["Collision Course", "Dragon Claw", "Flare Blitz", "U-turn"],
+ "abilities": ["Orichalcum Pulse"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "miraidon": {
+ "level": 65,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Draco Meteor", "Dragon Pulse", "Electro Drift", "Overheat", "Protect", "Volt Switch"],
+ "abilities": ["Hadron Engine"],
+ "teraTypes": ["Electric"]
+ },
+ {
+ "role": "Choice Item user",
+ "movepool": ["Draco Meteor", "Electro Drift", "Overheat", "Volt Switch"],
+ "abilities": ["Hadron Engine"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "walkingwake": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Draco Meteor", "Flamethrower", "Flip Turn", "Hydro Pump", "Protect"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "ironleaves": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Close Combat", "Leaf Blade", "Protect", "Swords Dance"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting", "Fire", "Poison"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Close Combat", "Leaf Blade", "Protect", "Psyblade"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting", "Fire", "Psychic"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "Leaf Blade", "Psyblade", "Wild Charge"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting", "Fire", "Psychic"]
+ }
+ ]
+ },
+ "dipplin": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Dragon Pulse", "Pollen Puff", "Recover", "Syrup Bomb"],
+ "abilities": ["Sticky Hold"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "sinistcha": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Life Dew", "Matcha Gotcha", "Rage Powder", "Trick Room"],
+ "abilities": ["Hospitality"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Calm Mind", "Matcha Gotcha", "Protect", "Shadow Ball"],
+ "abilities": ["Hospitality"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "okidogi": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Bulk Up", "Drain Punch", "Gunk Shot", "Knock Off", "Snarl"],
+ "abilities": ["Toxic Chain"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "munkidori": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Focus Blast", "Protect", "Psyshock", "Sludge Bomb", "U-turn"],
+ "abilities": ["Toxic Chain"],
+ "teraTypes": ["Fighting", "Poison"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Fake Out", "Focus Blast", "Psyshock", "Sludge Bomb", "U-turn"],
+ "abilities": ["Toxic Chain"],
+ "teraTypes": ["Fighting", "Poison"]
+ }
+ ]
+ },
+ "fezandipiti": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Gunk Shot", "Icy Wind", "Play Rough", "Roost"],
+ "abilities": ["Toxic Chain"],
+ "teraTypes": ["Dark", "Steel", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Gunk Shot", "Icy Wind", "Play Rough", "U-turn"],
+ "abilities": ["Toxic Chain"],
+ "teraTypes": ["Dark", "Steel", "Water"]
+ }
+ ]
+ },
+ "ogerpon": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Ivy Cudgel", "Knock Off", "Spiky Shield", "Superpower", "U-turn"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Grass"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Follow Me", "Ivy Cudgel", "Knock Off", "Spiky Shield"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "ogerponwellspring": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Follow Me", "Horn Leech", "Ivy Cudgel", "Spiky Shield"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Horn Leech", "Ivy Cudgel", "Power Whip", "Spiky Shield", "Swords Dance"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "ogerponhearthflame": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Follow Me", "Horn Leech", "Ivy Cudgel", "Spiky Shield"],
+ "abilities": ["Mold Breaker"],
+ "teraTypes": ["Fire"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Horn Leech", "Ivy Cudgel", "Power Whip", "Spiky Shield", "Swords Dance"],
+ "abilities": ["Mold Breaker"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "ogerponcornerstone": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Follow Me", "Horn Leech", "Ivy Cudgel", "Spiky Shield"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Rock"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Horn Leech", "Ivy Cudgel", "Power Whip", "Spiky Shield", "Swords Dance"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Rock"]
+ }
+ ]
+ },
+ "archaludon": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dragon Pulse", "Electro Shot", "Flash Cannon", "Protect"],
+ "abilities": ["Stamina"],
+ "teraTypes": ["Fairy", "Flying"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Body Press", "Draco Meteor", "Dragon Pulse", "Flash Cannon", "Snarl"],
+ "abilities": ["Stamina"],
+ "teraTypes": ["Fairy", "Fighting", "Flying"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Aura Sphere", "Draco Meteor", "Flash Cannon", "Thunderbolt"],
+ "abilities": ["Stamina"],
+ "teraTypes": ["Dragon", "Electric", "Fairy", "Fighting", "Flying"]
+ }
+ ]
+ },
+ "hydrapple": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Fickle Beam", "Giga Drain", "Leaf Storm", "Pollen Puff", "Protect"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fire", "Steel"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Draco Meteor", "Earth Power", "Giga Drain", "Leaf Storm"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fire", "Grass", "Steel"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Earth Power", "Fickle Beam", "Giga Drain", "Leaf Storm", "Pollen Puff"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "gougingfire": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Burning Bulwark", "Dragon Claw", "Dragon Dance", "Heat Crash"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "ragingbolt": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Draco Meteor", "Protect", "Thunderbolt", "Thunderclap"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Electric", "Fairy", "Grass"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Draco Meteor", "Electroweb", "Snarl", "Thunderbolt", "Thunderclap"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Electric", "Fairy", "Grass"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Calm Mind", "Dragon Pulse", "Protect", "Thunderclap"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Electric", "Fairy", "Grass"]
+ }
+ ]
+ },
+ "ironboulder": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Close Combat", "Mighty Cleave", "Protect", "Swords Dance"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Close Combat", "Mighty Cleave", "Protect", "Zen Headbutt"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "ironcrown": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Focus Blast", "Protect", "Psychic", "Psyshock", "Tachyon Cutter"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting", "Water"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Focus Blast", "Psychic", "Psyshock", "Tachyon Cutter", "Volt Switch"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Agility", "Focus Blast", "Protect", "Psychic", "Psyshock", "Tachyon Cutter"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting", "Psychic", "Steel"]
+ }
+ ]
+ },
+ "terapagos": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Protect", "Tera Starstorm"],
+ "abilities": ["Tera Shift"],
+ "teraTypes": ["Stellar"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Dark Pulse", "Earth Power", "Tera Starstorm", "Tri Attack"],
+ "abilities": ["Tera Shift"],
+ "teraTypes": ["Stellar"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Dark Pulse", "Meteor Beam", "Protect", "Tera Starstorm"],
+ "abilities": ["Tera Shift"],
+ "teraTypes": ["Stellar"]
+ }
+ ]
+ },
+ "pecharunt": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Malignant Chain", "Nasty Plot", "Protect", "Recover", "Shadow Ball"],
+ "abilities": ["Poison Puppeteer"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Malignant Chain", "Parting Shot", "Poison Gas", "Protect", "Shadow Ball"],
+ "abilities": ["Poison Puppeteer"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen9/draft-factory-matchups.json b/data/random-battles/gen9/draft-factory-matchups.json
new file mode 100644
index 000000000000..9f803cc23a47
--- /dev/null
+++ b/data/random-battles/gen9/draft-factory-matchups.json
@@ -0,0 +1,667 @@
+{
+ "matchups": [
+ ["Rotom-Wash||Leftovers|Levitate|ThunderWave,VoltSwitch,HydroPump,Protect|Bold|168,,252,20,68,||,0,,,,|||,,,,,Electric]Clodsire||BlackSludge|WaterAbsorb|StealthRock,Recover,GunkShot,Earthquake|Careful|252,4,,,252,|||||,,,,,Poison]Tera Captain|Electrode|ChoiceSpecs|Static|Thunderbolt,TeraBlast,VoltSwitch,Explosion|Hasty|,4,,252,,252|||||,,,,,Ice]Iron Bundle||BoosterEnergy|QuarkDrive|IceBeam,FreezeDry,HydroPump,Encore|Timid|,,,252,4,252||,0,,,,|||,,,,,Ice]Meowscarada||FocusSash|Protean|FlowerTrick,TripleAxel,KnockOff,Uturn|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Archaludon|AssaultVest|Stamina|BodyPress,FlashCannon,Thunderbolt,Earthquake|Serious|140,4,152,72,140,|||||,,,,,Fairy","Quaquaval||LumBerry|Moxie|AquaStep,CloseCombat,TripleAxel,Roost|Jolly|84,252,,,,172|||S||,,,,,Water]Zapdos||Leftovers|Pressure|Hurricane,MetalSound,Substitute,Roost|Calm|248,,168,,92,||,0,,,,|S||,,,,,Electric]Greninja-Bond||SalacBerry|BattleBond|Surf,DarkPulse,IceBeam,Endure|Timid|,,,252,4,252|||S||,,,,,Water]Mamoswine||LifeOrb|ThickFat|Earthquake,FreezeDry,Trailblaze,IceShard|Naughty|,252,,24,,232|||||,,,,,Ice]Tinkaton||SitrusBerry|Pickpocket|PlayRough,KnockOff,Encore,StealthRock|Careful|248,,8,,252,|||||,,,,,Fairy]Tera Captain|Serperior|ChoiceScarf|Contrary|LeafStorm,TeraBlast,Glare,KnockOff|Modest|104,,,252,4,148|||||,,,,,Stellar"],
+ ["Uxie||WeaknessPolicy|Levitate|CalmMind,StoredPower,DrainingKiss,Yawn|Bold|248,,216,40,,4||,0,,,,|||,,,,,Psychic]Tera Captain|Zapdos|HeavyDutyBoots|Static|Roost,Uturn,LightScreen,Hurricane|Bold|248,,216,4,40,|||||,,,,,Electric]Garchomp||ChoiceBand|RoughSkin|Earthquake,PoisonJab,ScaleShot,StealthRock|Jolly|40,252,,,,216|||||,,,,,Dragon]Granbull||AssaultVest|Intimidate|PlayRough,Earthquake,SuperFang,Trailblaze|Careful|216,40,,,252,|||||,,,,,Fairy]Tera Captain|Revavroom|FocusSash|Filter|ShiftGear,TeraBlast,IronHead,GunkShot|Adamant|60,252,,,12,184|||||,,,,,Fairy]Darkrai||ChoiceSpecs|BadDreams|DarkPulse,SludgeBomb,IceBeam,Trick|Timid|120,,8,252,8,120||,0,,,,|||,,,,,Dark","Ninetales||HeatRock|Drought|Overheat,Encore,WillOWisp,HealingWish|Calm|252,,4,,252,||,0,,,,|||,,,,,Fire]Great Tusk||ProtectivePads|Protosynthesis|CloseCombat,IceSpinner,KnockOff,RapidSpin|Adamant|72,252,,,,184|||||,,,,,Ground]Tera Captain|RagingBolt|ChestoBerry|Protosynthesis|Thunderbolt,DragonPulse,Thunderclap,CalmMind|Modest|88,,,248,,172||,20,,,,|||,,,,,Normal]Walking Wake||ChoiceSpecs|Protosynthesis|HydroSteam,DracoMeteor,DragonPulse,FlipTurn|Timid|8,,,244,4,252|||||,,,,,Water]Gouging Fire||HeavyDutyBoots|Protosynthesis|HeatCrash,DragonClaw,DragonDance,MorningSun|Jolly|88,168,,,,252|||||,,,,,Fire]Tera Captain|Rhyperior|CovertCloak|SolidRock|IcePunch,Counter,Roar,StealthRock|Impish|252,,252,,4,|||||,,,,,Water"],
+ ["Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,Flamethrower,DracoMeteor,TeraBlast|Timid|12,,,244,,252||,0,,,,|||,,,,,Stellar]Weezing-Galar||BlackSludge|NeutralizingGas|DestinyBond,WillOWisp,ClearSmog,PainSplit|Calm|252,,4,,252,||,0,,,,|||,,,,,Bug]Ninetales||HeavyDutyBoots|Drought|Flamethrower,ScorchingSands,WillOWisp,HealingWish|Calm|252,,4,,252,||,0,,,,|||,,,,,Bug]Great Tusk||AssaultVest|Protosynthesis|HeadlongRush,CloseCombat,RapidSpin,IceSpinner|Jolly|,252,,,4,252|||||,,,,,Bug]Tera Captain|Alomomola|RockyHelmet|Regenerator|BodySlam,Wish,Protect,FlipTurn|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Fairy]Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,MightyCleave,CloseCombat,Earthquake|Jolly|,252,,,4,252|||||,,,,,Bug","Darkrai||ChoiceScarf|BadDreams|DarkPulse,FocusBlast,Psychic,Trick|Timid|8,,,252,,248||,0,,,,|||,,,,,Dark]Tera Captain|Braviary|HeavyDutyBoots|SheerForce|BraveBird,Uturn,Roost,CloseCombat|Impish|248,,252,,8,|||||,,,,,Normal]Slowking-Galar||ShucaBerry|Regenerator|ChillyReception,SludgeBomb,Psychic,FoulPlay|Relaxed|248,,224,,36,||,0,,,,0|||,,,,,Poison]Infernape||FocusSash|Blaze|Flamethrower,SolarBeam,CloseCombat,StealthRock|Rash|,60,,252,,196|||||,,,,,Fire]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|Synthesis,IvyCudgel,HornLeech,SwordsDance|Jolly|176,84,,,,248|||||,,,,,Water]Iron Treads||ChopleBerry|QuarkDrive|IronDefense,Earthquake,HeavySlam,RapidSpin|Adamant|176,120,,,,212|||||,,,,,Ground"],
+ ["Great Tusk||MirrorHerb|Protosynthesis|CloseCombat,HeadlongRush,IceSpinner,HeavySlam|Adamant|24,252,8,,4,220|||||,,,,,Ground]Iron Crown||ChoiceScarf|QuarkDrive|Psychic,TachyonCutter,VoltSwitch,Psyshock|Timid|16,,,252,8,232||,20,,,,|||,,,,,Steel]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,PlayRough,Substitute,Encore|Jolly|32,252,,,8,216|||||,,,,,Water]Weavile||HeavyDutyBoots|Pickpocket|KnockOff,TripleAxel,IceShard,SwordsDance|Jolly|16,252,8,,8,224|||||,,,,,Dark]Tera Captain|Diancie|HeavyDutyBoots|ClearBody|PlayRough,Endeavor,Encore,Spikes|Sassy|248,8,,,252,||,,,,,0|||,,,,,Poison]Alomomola||RockyHelmet|Regenerator|FlipTurn,Wish,Protect,LightScreen|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Water","Quaquaval||ChoiceScarf|Moxie|Uturn,HydroPump,AquaStep,CloseCombat|Jolly|148,252,,,,108|||||,,,,,Water]Weezing-Galar||RockyHelmet|Levitate|PainSplit,ToxicSpikes,Defog,StrangeSteam|Bold|248,,208,,,52||,0,,,,|||,,,,,Poison]Tera Captain|RagingBolt|ChoiceSpecs|Protosynthesis|VoltSwitch,Thunderclap,Thunderbolt,DracoMeteor|Modest|240,,,132,,136||,20,,,,|||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Uturn,KnockOff,HeatWave,BleakwindStorm|Timid|64,,,236,,208|||||,,,,,Flying]Tera Captain|Torterra|Leftovers|ShellArmor|Amnesia,IronDefense,LeechSeed,BodyPress|Careful|248,,,,176,84||,0,,,,|||,,,,,Water]Jirachi||Leftovers|SereneGrace|Wish,CosmicPower,FirePunch,StoredPower|Relaxed|248,,224,,,36|||||,,,,,Steel"],
+ ["Greninja||ChoiceScarf|Protean|Surf,DarkPulse,IceBeam,WaterShuriken|Modest|,,,252,4,252||,0,,,,|||,,,,,Water]Iron Treads||Leftovers|QuarkDrive|Earthquake,KnockOff,VoltSwitch,RapidSpin|Jolly|48,252,,,,208|||||,,,,,Ground]Weezing-Galar||BlackSludge|Levitate|StrangeSteam,WillOWisp,PainSplit,Defog|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Tera Captain|Ceruledge|FocusSash|WeakArmor|BitterBlade,IronHead,CloseCombat,SwordsDance|Adamant|248,252,,,,8|||||,,,,,Fairy]Rotom-Wash||HeavyDutyBoots|Levitate|HydroPump,VoltSwitch,WillOWisp,NastyPlot|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Lokix||ChoiceBand|TintedLens|Uturn,KnockOff,SuckerPunch,FirstImpression|Adamant|,252,,,4,252|||||,,,,,Bug","Greninja-Bond||LifeOrb|BattleBond|HydroPump,DarkPulse,IceBeam,GrassKnot|Timid|,,,252,4,252|||||,,,,,Water]Zapdos||HeavyDutyBoots|Static|Roost,Hurricane,VoltSwitch,HeatWave|Bold|248,,252,8,,||,0,,,,0|||,,,,,Electric]Slowking-Galar||ColburBerry|Regenerator|SlackOff,SludgeBomb,Flamethrower,ChillyReception|Modest|248,,,8,252,||,0,,,,|||,,,,,Poison]Urshifu||LifeOrb|UnseenFist|WickedBlow,IronHead,Uturn,CloseCombat|Jolly|40,252,,,,216|||||,,,,,Fighting]Tera Captain|Hydrapple|AssaultVest|Regenerator|FickleBeam,LeafStorm,EnergyBall,EarthPower|Modest|248,,,56,192,12||,0,,,,|||,,,,,Dragon]Forretress||RockyHelmet|Sturdy|StealthRock,BodyPress,VoltSwitch,RapidSpin|Impish|252,4,252,,,|||||,,,,,Bug"],
+ ["Iron Bundle||ChoiceSpecs|QuarkDrive|FreezeDry,HydroPump,FlipTurn,IceBeam|Timid|112,,,252,,144|||||,,,,,Ice]Tera Captain|Excadrill|ChoiceScarf|MoldBreaker|Earthquake,IronHead,RapidSpin,TeraBlast|Adamant|96,252,,,,160|||||,,,,,Grass]Hatterene||Leftovers|MagicBounce|DrainingKiss,CalmMind,Nuzzle,Psychic|Bold|252,,156,,100,|||||,,,,,Psychic]Latios||Leftovers|Levitate|LusterPurge,CalmMind,Recover,DragonPulse|Timid|252,,4,,,252||,0,,,,|||,,,,,Dragon]Moltres||Leftovers|FlameBody|WillOWisp,BraveBird,Uturn,Roost|Bold|252,,92,,164,|||||,,,,,Fire]Sudowoodo||CustapBerry|Sturdy|HeadSmash,StealthRock,IcePunch,WoodHammer|Adamant|252,252,,,4,|||||,,,,,Rock","Garchomp||HabanBerry|RoughSkin|StealthRock,DragonClaw,PoisonJab,Earthquake|Jolly|,252,,,4,252|||||,,,,,Dragon]Greninja||ChoiceSpecs|Protean|IceBeam,HydroPump,DarkPulse,Uturn|Timid|4,,,252,,252|||||,,,,,Water]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,TeraBlast,FlashCannon,MorningSun|Timid|,,124,132,,252||,0,,,,|||,,,,,Fighting]Rotom-Wash||ChoiceScarf|Levitate|Trick,VoltSwitch,HydroPump,ThunderWave|Timid|,,200,56,,252||,0,,,,|||,,,,,Electric]Hatterene||HeavyDutyBoots|MagicBounce|Psyshock,ShadowBall,GigaDrain,HealingWish|Modest|252,,4,252,,||,0,,,,|||,,,,,Psychic]Sliggoo-Hisui||Eviolite|ShellArmor|GyroBall,RockSlide,Outrage,ChillingWater|Sassy|252,,4,,252,||,,,,,0|||,,,,,Steel"],
+ ["Weavile||ChoiceBand|Pressure|IceShard,KnockOff,TripleAxel,BrickBreak|Jolly|24,252,,,,232|||||,,,,,Dark]Tera Captain|Latias|SoulDew|Levitate|DrainingKiss,Recover,DracoMeteor,CalmMind|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy]Iron Treads||ChoiceScarf|QuarkDrive|IceSpinner,Megahorn,Earthquake,RapidSpin|Adamant|,252,,,240,16|||||,,,,,Ground]Clefable||Leftovers|MagicGuard|StealthRock,Moonlight,Moonblast,FireBlast|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy]Tera Captain|Brambleghast|Leftovers|WindRider|StrengthSap,RapidSpin,SeedBomb,Spikes|Careful|252,32,,,124,100|||||,,,,,Fairy]Empoleon||Leftovers|Torrent|Roost,GrassKnot,IceBeam,Surf|Calm|252,,,,252,4||,0,,,,|||,,,,,Water","Greninja||ExpertBelt|Protean|IceBeam,SludgeWave,LowKick,HydroPump|Hasty|,96,,252,,160|||||,,,,,Water]Tera Captain|Ogerpon|YacheBerry|Defiant|IvyCudgel,RockTomb,SwordsDance,Encore|Jolly|32,252,,,,224|||||,,,,,Grass]Terapagos||Leftovers|TeraShift|Rest,BodyPress,IceBeam,RapidSpin|Bold|252,,252,4,,|||||,,,,,Stellar]Tera Captain|Diancie|Leftovers|ClearBody|Rest,SleepTalk,BodyPress,DiamondStorm|Careful|252,4,,,252,|||||,,,,,Rock]Swalot||RockyHelmet|StickyHold|PainSplit,ClearSmog,BodyPress,KnockOff|Impish|252,,252,,4,|||||,,,,,Poison]Uxie||Leftovers|Levitate|StealthRock,Encore,PainSplit,Uturn|Careful|252,,4,,252,|||||,,,,,Psychic"],
+ ["Electrode-Hisui||EjectPack|Soundproof|LeafStorm,Thunderbolt,VoltSwitch,Taunt|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Tera Captain|Hatterene|RockyHelmet|MagicBounce|CalmMind,DrainingKiss,MysticalFire,Psyshock|Bold|252,,220,36,,||,0,,,,|||,,,,,Steel]Chi-Yu||ChoiceSpecs|BeadsofRuin|Flamethrower,DarkPulse,Overheat,Memento|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|Grimmsnarl|LightClay|Prankster|Reflect,LightScreen,PartingShot,Taunt|Careful|252,4,,,252,||,0,,,,|||,,,,,Dark]Annihilape||Leftovers|Defiant|BulkUp,DrainPunch,RageFist,IcePunch|Adamant|252,68,,,188,|||||,,,,,Fighting]Gholdengo||ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,PowerGem,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel","Iron Valiant||LifeOrb|QuarkDrive|SpiritBreak,KnockOff,SwordsDance,CloseCombat|Jolly|48,252,,,,208|||||,,,,,Fairy]Tera Captain|Espathra|Leftovers|SpeedBoost|CalmMind,Roost,LuminaCrash,TeraBlast|Modest|252,,4,252,,||,0,,,,|||,,,,,Ground]Orthworm||SitrusBerry|EarthEater|ShedTail,BodyPress,Earthquake,StealthRock|Careful|248,,8,,252,|||||,,,,,Steel]Samurott-Hisui||FocusSash|Sharpness|CeaselessEdge,RazorShell,AquaJet,GrassKnot|Naive|,252,,8,,248|||||,,,,,Water]Cutiefly||FocusSash|ShieldDust|StickyWeb,Moonblast,Uturn,SkillSwap|Timid|,,,252,4,252|||||,,,,,Bug]Tera Captain|ThundurusTherian|ChoiceSpecs|VoltAbsorb|Thunderbolt,GrassKnot,SludgeWave,VoltSwitch|Timid|,,,252,8,248||,0,,,,|||,,,,,Electric"],
+ ["Tera Captain|Latias|HeavyDutyBoots|Levitate|RainDance,DragonPulse,ShadowBall,Recover|Timid|248,,,,80,180||,0,,,,|||,,,,,Fire]Weavile||ChoiceBand|Pressure|KnockOff,TripleAxel,IceShard,LowKick|Adamant|72,252,,,,184|||||,,,,,Dark]Glimmora||PowerHerb|ToxicDebris|PowerGem,EarthPower,MeteorBeam,StealthRock|Timid|,,4,252,,252||,0,,,,|||,,,,,Rock]Quaquaval||HeavyDutyBoots|Moxie|CloseCombat,KnockOff,RapidSpin,Roost|Impish|248,,192,,,68|||||,,,,,Water]Heatran||AirBalloon|FlashFire|MagmaStorm,EarthPower,Taunt,Protect|Modest|120,,,252,4,132||,0,,,,|||,,,,,Fire]Tera Captain|SinistchaMasterpiece|Leftovers|Heatproof|CalmMind,MatchaGotcha,ShadowBall,StrengthSap|Bold|240,,88,,,180||,0,,,,|||,,,,,Fairy","Samurott-Hisui||FocusSash|Sharpness|CeaselessEdge,KnockOff,RazorShell,Encore|Jolly|,252,,,4,252|||||,,,,,Stellar]Gouging Fire||LoadedDice|Protosynthesis|ScaleShot,HeatCrash,Earthquake,DragonDance|Adamant|,252,4,,,252|||||,,,,,Stellar]Torkoal||HeatRock|Drought|LavaPlume,BodyPress,StealthRock,RapidSpin|Calm|248,,,8,252,|||||,,,,,Stellar]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|Thunderclap,DracoMeteor,WeatherBall,SolarBeam|Modest|36,,84,252,4,132||,20,,,,|||,,,,,Grass]Tera Captain|Venusaur|LifeOrb|Chlorophyll|GigaDrain,WeatherBall,EarthPower,Growth|Modest|,,,252,4,252||,0,,,,|||,,,,,Fire]Gholdengo||ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,Thunderbolt,Trick|Modest|112,,20,252,4,120||,0,,,,|||,,,,,Stellar"],
+ ["Darkrai||FlameOrb|BadDreams|Psychic,DarkPulse,ThunderWave,Trick|Modest|,,108,252,,148||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|Trailblaze,IvyCudgel,SwordsDance,BrickBreak|Jolly|,252,,,104,152|||||,,,,,Water]Tornadus-Therian||ChoiceSpecs|Regenerator|Hurricane,Uturn,HeatWave,KnockOff|Mild|,4,,252,72,180|||||,,,,,Flying]Garchomp||YacheBerry|RoughSkin|BrickBreak,StealthRock,Earthquake,SwordsDance|Jolly|,252,36,,4,216|||||,,,,,Dragon]Ditto||ChoiceScarf|Imposter|Transform|Jolly|248,8,,,,252||,30,,,,|||,,,,,Normal]Tera Captain|Brambleghast|RockyHelmet|Infiltrator|Poltergeist,PowerWhip,ShadowSneak,Curse|Jolly|,252,,,4,252|||||,,,,,Fighting","Baxcalibur||ChoiceScarf|ThermalExchange|GlaiveRush,IcicleCrash,IronHead,IceShard|Adamant|,252,,,4,252|||||,,,,,Dragon]Slowking-Galar||HeavyDutyBoots|Regenerator|ChillyReception,IceBeam,SludgeBomb,FutureSight|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Substitute,Toxic,Protect,Earthquake|Impish|252,,184,,72,|||||,,,,,Dragon]Urshifu-Rapid-Strike||RindoBerry|UnseenFist|SwordsDance,AquaJet,CloseCombat,SurgingStrikes|Jolly|88,252,,,,168|||||,,,,,Fighting]Volcarona||HeavyDutyBoots|FlameBody|QuiverDance,BugBuzz,MorningSun,WillOWisp|Modest|176,,,252,,80||,0,,,,|||,,,,,Bug]Tera Captain|Klefki|Leftovers|Prankster|MagnetRise,Spikes,ThunderWave,DazzlingGleam|Calm|252,,4,,252,||,0,,,,|||,,,,,Steel"],
+ ["Archaludon||PowerHerb|Stamina|BodyPress,FlashCannon,ElectroShot,DragonPulse|Bold|4,,252,252,,||,0,,,,|||,,,,,Steel]Tera Captain|Serperior|LifeOrb|Contrary|TeraBlast,LeafStorm,Glare,Taunt|Modest|,,,252,,252||,0,,,,|||,,,,,Stellar]Urshifu-Rapid-Strike||AguavBerry|UnseenFist|SurgingStrikes,CloseCombat,DrainPunch,Waterfall|Adamant|252,252,,,,|||||,,,,,Fighting]Ting-Lu||AssaultVest|VesselofRuin|LashOut,BodyPress,Earthquake,Ruination|Sassy|252,,4,,252,|||||,,,,,Dark]Salazzle||Leftovers|Corrosion|Toxic,Disable,Protect,FireBlast|Timid|,,,252,,252||,0,,,,|||,,,,,Poison]Froslass||RockyHelmet|CursedBody|AuroraVeil,Curse,Blizzard,Snowscape|Timid|4,,252,,,252||,0,,,,|||,,,,,Ice","Palafin||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,ZenHeadbutt,WaveCrash|Adamant|,252,,,4,252|||||,,,,,Water]Corviknight||RockyHelmet|Pressure|BraveBird,Uturn,Roost,Defog|Impish|248,8,252,,,|||||,,,,,Flying]Tera Captain|Garganacl|Leftovers|PurifyingSalt|Recover,SaltCure,BodyPress,IronDefense|Impish|248,,252,,8,|||||,,,,,Ghost]Torterra||LoadedDice|Overgrow|ShellSmash,HeadlongRush,RockBlast,BulletSeed|Adamant|,252,112,,,144|||||,,,,,Grass]Tera Captain|Skeledirge|Leftovers|Unaware|TorchSong,WillOWisp,ShadowBall,SlackOff|Modest|248,,,252,,8||,0,,,,|||,,,,,Fairy]Ting-Lu||Leftovers|VesselofRuin|Taunt,StealthRock,Ruination,Earthquake|Careful|240,,,,252,16|||||,,,,,Dark"],
+ ["Ting-Lu||Leftovers|VesselofRuin|Spikes,StoneEdge,Whirlwind,Earthquake|Sassy|252,4,52,,200,|||||,,,,,Dark]Brambleghast||Leftovers|WindRider|RapidSpin,Poltergeist,PowerWhip,Substitute|Jolly|40,252,,,4,212|||||,,,,,Grass]Volcanion||ChoiceScarf|WaterAbsorb|SteamEruption,EarthPower,FireBlast,SludgeWave|Timid|44,,,252,4,208||,0,,,,|||,,,,,Fire]Skarmory||RockyHelmet|Sturdy|StealthRock,Roost,BraveBird,BodyPress|Impish|252,,252,,,|||||,,,,,Steel]Ditto||ChoiceScarf|Imposter|Transform|Impish|248,8,252,,,||,30,,,,|||,,,,,Normal]Tera Captain|IronLeaves|BoosterEnergy|QuarkDrive|ThroatChop,TeraBlast,SwordsDance,XScissor|Hasty|92,160,,4,,252|||||,,,,,Water","Arcanine-Hisui||HeavyDutyBoots|RockHead|WillOWisp,FlameCharge,HeadSmash,FlareBlitz|Jolly|,252,,,4,252|||||,,,,,Fire]Landorus||LifeOrb|SheerForce|EarthPower,NastyPlot,SludgeWave,Psychic|Timid|4,,,252,,252||,0,,,,|||,,,,,Ground]Tera Captain|Serperior|HeavyDutyBoots|Contrary|LeafStorm,TeraBlast,Synthesis,Glare|Timid|,,72,252,,184||,0,,,,|||,,,,,Fire]Grafaiai||Leftovers|Unburden|SunnyDay,KnockOff,PartingShot,Encore|Jolly|252,48,,,,208|||||,,,,,Poison]Sneasler||NormalGem|Unburden|CloseCombat,FakeOut,SwordsDance,Acrobatics|Adamant|4,252,,,,252|||||,,,,,Fighting]Spidops||FocusSash|Stakeout|StickyWeb,Uturn,SilkTrap,KnockOff|Adamant|248,252,8,,,|||||,,,,,Bug"],
+ ["Tera Captain|Clefable|Leftovers|Unaware|Moonblast,Flamethrower,CalmMind,Moonlight|Calm|252,,,4,252,||,0,,,,|||,,,,,Steel]Latios||ChoiceScarf|Levitate|DracoMeteor,Thunderbolt,LusterPurge,FlipTurn|Hasty|,,,252,4,252|||||,,,,,Dragon]Tera Captain|Toxtricity|ThroatSpray|PunkRock|Boomburst,Overdrive,Encore,ShiftGear|Modest|12,,,252,,244||,0,,,,|||,,,,,Normal]Blaziken||ExpertBelt|SpeedBoost|FlareBlitz,CloseCombat,Earthquake,SwordsDance|Adamant|80,252,,,,176|||||,,,,,Fire]Orthworm||SitrusBerry|EarthEater|HeavySlam,StealthRock,Spikes,ShedTail|Impish|252,,4,,252,|||||,,,,,Steel]Palafin||ChoiceBand|ZerotoHero|JetPunch,WaveCrash,IcePunch,FlipTurn|Adamant|252,252,,,,4|||||,,,,,Water","Quaquaval||ChoiceBand|Moxie|FlipTurn,AquaJet,AquaStep,CloseCombat|Jolly|40,,252,,,216|||||,,,,,Water]Corviknight||Leftovers|MirrorArmor|Roost,Defog,Uturn,BodyPress|Careful|252,,4,,252,|||||,,,,,Flying]Florges||Leftovers|FlowerVeil|Wish,Moonblast,EnergyBall,Protect|Calm|252,,,4,252,||,0,,,,|||,,,,,Fairy]Clodsire||BlackSludge|Unaware|ToxicSpikes,StealthRock,Recover,PoisonJab|Careful|252,4,,,252,|||||,,,,,Poison]Tera Captain|Serperior|ExpertBelt|Contrary|LeafStorm,TeraBlast,Glare,GigaDrain|Timid|24,,,252,,232||,0,,,,|||,,,,,Fairy]Chi-Yu||ChoiceScarf|BeadsofRuin|Overheat,DarkPulse,Flamethrower,Psychic|Modest|56,,4,252,,196||,0,,,,|||,,,,,Dark"],
+ ["Tera Captain|Sceptile|HeavyDutyBoots|Overgrow|ShedTail,LeechSeed,Substitute,GigaDrain|Timid|248,,,8,,252||,0,,,,|||,,,,,Steel]Kingambit||AssaultVest|SupremeOverlord|IronHead,SuckerPunch,LowKick,KowtowCleave|Adamant|252,252,,,4,|||||,,,,,Dark]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|Earthquake,Uturn,TeraBlast,HammerArm|Naive|,252,,4,,252|||||,,,,,Flying]Iron Bundle||ChoiceSpecs|QuarkDrive|FreezeDry,HydroPump,IceBeam,Uturn|Timid|,,,252,4,252|||||,,,,,Ice]Masquerain||HeavyDutyBoots|Intimidate|StickyWeb,Uturn,IceBeam,StunSpore|Timid|248,,,8,,252|||||,,,,,Bug]Urshifu||ChoiceScarf|UnseenFist|CloseCombat,Uturn,WickedBlow,IcePunch|Jolly|,252,,,4,252|||||,,,,,Fighting","Pecharunt||BlackSludge|PoisonPuppeteer|MalignantChain,PartingShot,Recover,Toxic|Calm|248,,,8,252,||,0,,,,|||,,,,,Poison]Tera Captain|Latias|ChoiceScarf|Levitate|DracoMeteor,AuraSphere,AlluringVoice,Trick|Modest|40,,,252,,216||,0,,,,|||,,,,,Fairy]Urshifu||AdrenalineOrb|UnseenFist|SwordsDance,WickedBlow,CloseCombat,SuckerPunch|Jolly|,252,,,4,252|||||,,,,,Fighting]Tera Captain|Registeel|Leftovers|ClearBody|IronDefense,BodyPress,Rest,SleepTalk|Calm|248,,8,,252,||,0,,,,|||,,,,,Fighting]Gliscor||ToxicOrb|PoisonHeal|Protect,Toxic,Earthquake,StealthRock|Impish|248,8,252,,,|||||,,,,,Ground]Alomomola||Leftovers|Regenerator|Wish,Scald,FlipTurn,Protect|Bold|248,,252,,8,|||||,,,,,Water"],
+ ["Tera Captain|Espathra|Leftovers|SpeedBoost|CalmMind,StoredPower,TeraBlast,Roost|Bold|248,,252,,,8||,0,,,,|||,,,,,Fighting]Palafin||Leftovers|ZerotoHero|JetPunch,DrainPunch,Substitute,BulkUp|Adamant|248,252,,,4,|||||,,,,,Water]Gliscor||ToxicOrb|PoisonHeal|Earthquake,KnockOff,Protect,Toxic|Impish|244,,252,,12,|||||,,,,,Ground]Passimian||ChoiceScarf|Defiant|CloseCombat,Uturn,KnockOff,GunkShot|Jolly|,252,,,4,252|||||,,,,,Fighting]Tera Captain|Garganacl|Leftovers|PurifyingSalt|Recover,SaltCure,Protect,StealthRock|Careful|248,,8,,252,|||||,,,,,Water]Ditto||ChoiceScarf|Imposter|Transform|Impish|248,8,252,,,||,30,,,,|||,,,,,Normal","Latios||SoulDew|Levitate|LusterPurge,ShadowBall,FlipTurn,DracoMeteor|Timid|40,,,252,,216|||||,,,,,Dragon]Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,Encore,HydroPump,FlipTurn|Modest|128,,,252,,128|||||,,,,,Ice]Weezing||RockyHelmet|Levitate|Taunt,Thunderbolt,Flamethrower,DestinyBond|Bold|248,,252,8,,||,0,,,,|||,,,,,Poison]Tera Captain|Excadrill|LumBerry|SandRush|Earthquake,TeraBlast,XScissor,SwordsDance|Adamant|,252,76,,,180|||||,,,,,Water]Tyranitar||SmoothRock|SandStream|DragonTail,Taunt,KnockOff,IceBeam|Sassy|248,,,8,252,|||||,,,,,Rock]Tera Captain|Eelektross|CovertCloak|Levitate|DrainPunch,Coil,TeraBlast,ThunderPunch|Impish|,108,252,,140,8|||||,,,,,Ice"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|CalmMind,ShadowBall,Moonblast,Thunderbolt|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Donphan||HeavyDutyBoots|Sturdy|RapidSpin,FireFang,StoneEdge,IceSpinner|Adamant|248,252,,,8,|||||,,,,,Ground]Gholdengo||Leftovers|GoodasGold|Recover,NastyPlot,ShadowBall,MakeItRain|Calm|252,,,,108,148||,0,,,,|||,,,,,Steel]Tera Captain|Gyarados|HeavyDutyBoots|Intimidate|DragonDance,TeraBlast,Earthquake,Waterfall|Lonely|,252,,4,,252|||||,,,,,Flying]Qwilfish-Hisui||Eviolite|Intimidate|BarbBarrage,Spikes,Haze,Crunch|Careful|252,,,,200,56|||||,,,,,Dark]Moltres||HeavyDutyBoots|FlameBody|Uturn,Flamethrower,Roost,AncientPower|Calm|252,,,,252,|||||,,,,,Fire","Talonflame||HeavyDutyBoots|FlameBody|FireBlast,AirSlash,Taunt,Uturn|Timid|,,,252,16,240|||||,,,,,Fire]Tera Captain|Gholdengo|ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,Trick,NastyPlot|Timid|,,,252,4,252||,0,,,,|||,,,,,Fighting]Latios||ChoiceScarf|Levitate|DracoMeteor,Thunderbolt,LusterPurge,FlipTurn|Timid|,,,252,4,252|||||,,,,,Dragon]Tentacruel||BlackSludge|ClearBody|KnockOff,RapidSpin,FlipTurn,MirrorCoat|Jolly|,252,80,,,176|||||,,,,,Water]Tera Captain|WoChien|Leftovers|TabletsofRuin|KnockOff,Taunt,StunSpore,TeraBlast|Bold|252,,100,156,,|||||,,,,,Flying]Landorus-Therian||PasshoBerry|Intimidate|RockSlide,Earthquake,BodySlam,BulkUp|Jolly|,252,,,8,248|||||,,,,,Ground"],
+ ["Tera Captain|Keldeo|ChoiceSpecs|Justified|Surf,FlipTurn,VacuumWave,TeraBlast|Modest|64,,,252,,192|||||,,,,,Electric]Garchomp||RockyHelmet|RoughSkin|StoneEdge,Earthquake,DragonTail,StealthRock|Jolly|248,,128,,,132|||||,,,,,Dragon]Tera Captain|Mesprit|ChilanBerry|Levitate|Psyshock,KnockOff,Encore,HealingWish|Sassy|248,,8,,252,|||||,,,,,Rock]Gholdengo||ChoiceSpecs|GoodasGold|ShadowBall,MakeItRain,DazzlingGleam,Trick|Modest|248,,8,252,,||,0,,,,|||,,,,,Steel]Weavile||ChoiceBand|Pressure|LowKick,KnockOff,IceShard,TripleAxel|Jolly|,252,,,120,136|||||,,,,,Dark]Weezing-Galar||CustapBerry|NeutralizingGas|StrangeSteam,Flamethrower,PainSplit,Endure|Calm|248,,,8,252,||,0,,,,|||,,,,,Poison","Greninja||LifeOrb|Protean|IceBeam,Extrasensory,DarkPulse,LowKick|Hasty|,4,,252,,252|||S||,,,,,Normal]Ursaluna-Bloodmoon||HeavyDutyBoots|MindsEye|BloodMoon,Moonlight,EarthPower,VacuumWave|Modest|188,,,252,,68||,0,,,,|||,,,,,Normal]Tentacruel||HeavyDutyBoots|LiquidOoze|Haze,FlipTurn,SludgeWave,Surf|Timid|112,,,,252,144|||S||,,,,,Normal]Talonflame||HeavyDutyBoots|FlameBody|TemperFlare,Roost,BraveBird,Defog|Jolly|144,,252,,,112|||||,,,,,Normal]Jirachi||ColburBerry|SereneGrace|Uturn,IronHead,FirePunch,StealthRock|Jolly|252,160,,,,96|||S||,,,,,Normal]Tera Captain|Annihilape|PunchingGlove|Defiant|Substitute,BulkUp,RageFist,DrainPunch|Jolly|80,,,,252,176|||||,,,,,Water"],
+ ["Iron Bundle||ChoiceScarf|QuarkDrive|IceBeam,HydroPump,FreezeDry,FlipTurn|Modest|,,4,252,,252|||||,,,,,Ice]Tera Captain|GreatTusk|AssaultVest|Protosynthesis|RapidSpin,PlayRough,Earthquake,KnockOff|Impish|248,8,252,,,|||||,,,,,Fairy]Clodsire||ShucaBerry|WaterAbsorb|StealthRock,Earthquake,Recover,ZenHeadbutt|Careful|248,,176,,76,8|||||,,,,,Poison]Enamorus||ChoiceSpecs|CuteCharm|Moonblast,MysticalFire,EarthPower,Psychic|Timid|16,,,252,,240||,0,,,,|||,,,,,Fairy]Kingambit||OccaBerry|SupremeOverlord|SuckerPunch,IronHead,KowtowCleave,SwordsDance|Adamant|248,116,144,,,|||||,,,,,Dark]Rotom-Heat||HeavyDutyBoots|Levitate|WillOWisp,VoltSwitch,Overheat,ThunderWave|Bold|248,,160,,100,||,0,,,,|||,,,,,Electric","Great Tusk||Leftovers|Protosynthesis|BulkUp,BodyPress,RapidSpin,Earthquake|Impish|252,,220,,,36|||||,,,,,Ground]Torkoal||HeatRock|Drought|SunnyDay,StealthRock,LavaPlume,Yawn|Bold|252,,252,4,,||,0,,,,|||,,,,,Fire]Tera Captain|WalkingWake|Leftovers|Protosynthesis|HydroSteam,KnockOff,DracoMeteor,Substitute|Timid|52,,,224,,232|||||,,,,,Water]Tera Captain|Venusaur|BlackSludge|Chlorophyll|Growth,GigaDrain,SludgeBomb,EarthPower|Timid|104,,,252,,152||,0,,,,|||,,,,,Poison]Scream Tail||Leftovers|Protosynthesis|DazzlingGleam,Protect,Wish,Encore|Timid|252,,,,192,64||,0,,,,|||,,,,,Fairy]Weezing||BlackSludge|Levitate|Taunt,WillOWisp,SludgeBomb,Flamethrower|Bold|252,,232,,,24||,0,,,,|||,,,,,Poison"],
+ ["Great Tusk||Leftovers|Protosynthesis|Earthquake,StealthRock,KnockOff,RapidSpin|Impish|48,,248,,,212|||||,,,,,Water]Mienshao||ChoiceScarf|Regenerator|KnockOff,CloseCombat,StoneEdge,Uturn|Jolly|,252,116,,,140|||||,,,,,Fighting]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|HornLeech,IvyCudgel,PlayRough,Uturn|Jolly|60,,196,,,252|||||,,,,,Water]Moltres||ChartiBerry|FlameBody|WillOWisp,Flamethrower,Roost,Roar|Bold|68,,252,,,188||,0,,,,|||,,,,,Fire]Tera Captain|IronCrown|BoosterEnergy|QuarkDrive|CalmMind,Psyshock,TachyonCutter,TeraBlast|Timid|124,,,152,,232||,20,,,,|||,,,,,Water]Tera Captain|Jolteon|AssaultVest|VoltAbsorb|VoltSwitch,AlluringVoice,TeraBlast,Discharge|Timid|32,,,252,,224||,0,,,,|||,,,,,Fighting","Latios||LifeOrb|Levitate|DracoMeteor,LusterPurge,ShadowBall,Recover|Timid|,,,252,4,252||,0,,,,|||,,,,,Dragon]Tyranitar||SmoothRock|SandStream|StealthRock,PowerGem,KnockOff,IceBeam|Quiet|248,8,,252,,|||||,,,,,Rock]Tera Captain|Excadrill|Leftovers|SandRush|SwordsDance,Earthquake,RockSlide,PoisonJab|Adamant|,252,,,84,172|||||,,,,,Ground]Talonflame||HeavyDutyBoots|FlameBody|BraveBird,Uturn,Roost,Defog|Jolly|248,132,,,,128|||||,,,,,Fire]Fezandipiti||SafetyGoggles|ToxicChain|Moonblast,GunkShot,Taunt,Roost|Relaxed|248,,216,,,44|||||,,,,,Poison]Tera Captain|Yanmega|ChoiceScarf|TintedLens|AirSlash,TeraBlast,BugBuzz,Uturn|Timid|,,4,252,,252|||||,,,,,Flying"],
+ ["Tera Captain|Annihilape|Leftovers|Defiant|RageFist,DrainPunch,BulkUp,Substitute|Jolly|,,188,,80,240|||||,,,,,Poison]Corviknight||Leftovers|Pressure|BodyPress,BraveBird,Roost,Defog|Impish|180,,120,,208,|||||,,,,,Bug]Cinderace||ChoiceScarf|Libero|PyroBall,GunkShot,HighJumpKick,Uturn|Jolly|,252,,,8,248|||||,,,,,Ice]Primarina||KeeBerry|LiquidVoice|HyperVoice,StoredPower,CalmMind,DrainingKiss|Calm|136,,224,,148,||,0,,,,|||,,,,,Stellar]Latios||ChoiceSpecs|Levitate|DracoMeteor,AuraSphere,Psychic,Trick|Timid|,,,252,32,224||,0,,,,|||,,,,,Normal]Ting-Lu||Leftovers|VesselofRuin|Earthquake,HeavySlam,StealthRock,Whirlwind|Careful|68,160,124,,156,|||||,,,,,Psychic","Darkrai||WideLens|BadDreams|DarkPulse,Hypnosis,FocusBlast,Thunder|Hasty|48,,,252,,208||,0,,,,|||,,,,,Dark]Tyranitar||SmoothRock|SandStream|KnockOff,StealthRock,FireBlast,DragonTail|Relaxed|248,,92,,168,|||||,,,,,Rock]Tera Captain|Excadrill|AirBalloon|SandRush|TeraBlast,Earthquake,IronHead,SwordsDance|Lonely|136,252,,,,120|||||,,,,,Electric]Enamorus||HeavyDutyBoots|Contrary|Tailwind,Superpower,PlayRough,ZenHeadbutt|Adamant|,252,8,,,248|||||,,,,,Fairy]Tera Captain|ElectrodeHisui|ExpertBelt|Static|Thunderbolt,FoulPlay,VoltSwitch,GrassKnot|Modest|112,,,252,4,140||,0,,,,|||,,,,,Electric]Qwilfish||RockyHelmet|PoisonPoint|ToxicSpikes,FlipTurn,AquaJet,Endure|Relaxed|252,,252,,4,||,,,,,13|||,,,,,Water"],
+ ["Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Glare,Substitute|Modest|,,,252,100,156||,0,,,,|||,,,,,Electric]Samurott-Hisui||ChoiceScarf|Sharpness|CeaselessEdge,FlipTurn,AquaJet,SacredSword|Jolly|,252,84,,,172|||||,,,,,Water]Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,MightyCleave,ZenHeadbutt,CloseCombat|Jolly|,252,4,,,252|||||,,,,,Rock]Corviknight||RockyHelmet|Pressure|Roost,Uturn,Defog,BodyPress|Impish|252,,4,,252,|||||,,,,,Flying]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,FlareBlitz,Earthquake,PsychicFangs|Adamant|,252,36,,,220|||||,,,,,Fire]Hatterene|||MagicBounce|CalmMind,Psyshock,DrainingKiss,MysticalFire|Bold|252,,252,4,,||,0,,,,|||,,,,,Psychic","Tera Captain|GreatTusk|HeavyDutyBoots|Protosynthesis|RapidSpin,BulkUp,Earthquake,TemperFlare|Jolly|144,124,,,,240|||||,,,,,Fire]Iron Bundle||ChoiceSpecs|QuarkDrive|HydroPump,FreezeDry,FlipTurn,IceBeam|Modest|,,96,252,,160|||||,,,,,Ice]Meowscarada||ChoiceBand|Protean|SuckerPunch,FlowerTrick,Uturn,KnockOff|Jolly|80,252,,,,176|||||,,,,,Grass]Corviknight||Leftovers|MirrorArmor|DrillPeck,Roost,Uturn,Defog|Careful|248,8,,,252,|||||,,,,,Flying]Ceruledge||FocusSash|WeakArmor|CloseCombat,SwordsDance,BitterBlade,ShadowSneak|Jolly|,220,36,,,252|||||,,,,,Fire]Tera Captain|BraviaryHisui|ScopeLens|TintedLens|EsperWing,VacuumWave,DazzlingGleam,CalmMind|Timid|,,,252,48,208||,0,,,,|S||,,,,,Fairy"],
+ ["Garchomp||YacheBerry|RoughSkin|ScaleShot,Earthquake,IronHead,SwordsDance|Jolly|4,252,,,,252|||||,,,,,Dragon]Tera Captain|Annihilape|ChestoBerry|Defiant|DrainPunch,RageFist,Rest,BulkUp|Careful|252,,8,,248,|||||,,,,,Water]Samurott-Hisui||ChoiceScarf|Sharpness|CeaselessEdge,RazorShell,KnockOff,SuckerPunch|Adamant|,252,4,,,252|||||,,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|HeatWave,IcyWind,SludgeBomb,Uturn|Bold|,,132,,148,228|||||,,,,,Flying]Tinkaton||AirBalloon|MoldBreaker|GigatonHammer,KnockOff,IceHammer,StealthRock|Adamant|116,208,,,,184|||||,,,,,Fairy]Tera Captain|Moltres|HeavyDutyBoots|FlameBody|Flamethrower,Uturn,WillOWisp,Roost|Calm|248,,12,,248,|||||,,,,,Poison","Garchomp||RockyHelmet|RoughSkin|Earthquake,RockTomb,Spikes,DragonClaw|Jolly|,196,60,,,252|||||,,,,,Dragon]Tera Captain|GreninjaBond|LifeOrb|BattleBond|Surf,WaterShuriken,IceBeam,GrassKnot|Timid|8,,,252,,248|||||,,,,,Water]Scream Tail||RockyHelmet|Protosynthesis|Wish,Protect,StealthRock,Encore|Timid|248,,76,,,184||,0,,,,|||,,,,,Fairy]Scizor||ProtectivePads|Technician|BulletPunch,KnockOff,Uturn,SwordsDance|Adamant|252,252,4,,,|||||,,,,,Bug]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,RapidSpin,EarthPower,DazzlingGleam|Modest|184,,4,252,,68|||||,,,,,Stellar]Tera Captain|IronThorns|AirBalloon|QuarkDrive|DragonDance,TeraBlast,ThunderPunch,StoneEdge|Jolly|112,252,,,,144||,,,30,,|||,,,,,Fairy"],
+ ["Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,Trailblaze,SwordsDance,Taunt|Jolly|76,252,,,4,176|||||,,,,,Fire]Weezing-Galar||BlackSludge|Levitate|Defog,FireBlast,StrangeSteam,PainSplit|Modest|252,,120,132,4,||,0,,,,|||,,,,,Poison]Tera Captain|Manaphy|Leftovers|Hydration|TakeHeart,AcidArmor,Scald,StoredPower|Calm|252,,,36,204,16||,0,,,,|||,,,,,Dragon]Raging Bolt||BoosterEnergy|Protosynthesis|Thunderclap,DracoMeteor,CalmMind,Thunderbolt|Modest|252,,,252,4,||,20,,,,|||,,,,,Electric]Tornadus-Therian||AssaultVest|Regenerator|Hurricane,Uturn,HeatWave,KnockOff|Timid|252,,,168,,88|||||,,,,,Flying]Mabosstiff||ChoiceScarf|Stakeout|Crunch,PlayRough,DestinyBond,PsychicFangs|Adamant|,252,,,4,252|||||,,,,,Dark","Darkrai||WiseGlasses|BadDreams|DarkPulse,IceBeam,FocusBlast,NastyPlot|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|Gholdengo|Leftovers|GoodasGold|ShadowBall,NastyPlot,ThunderWave,Recover|Calm|252,,132,,124,||,0,,,,|||,,,,,Fairy]Ting-Lu||Leftovers|VesselofRuin|Earthquake,StoneEdge,StealthRock,Whirlwind|Serious|252,,184,,72,|||||,,,,,Dark]Zapdos||HeavyDutyBoots|Static|Discharge,Hurricane,VoltSwitch,Roost|Bold|252,,252,,,||,0,,,,|||,,,,,Electric]Tsareena||YacheBerry|QueenlyMajesty|PowerWhip,TripleAxel,Endeavor,RapidSpin|Adamant|252,252,,,4,|||||,,,,,Grass]Tera Captain|Okidogi|ChoiceScarf|ToxicChain|GunkShot,CloseCombat,KnockOff,PsychicFangs|Jolly|,252,,,4,252|||||,,,,,Fighting"],
+ ["Darkrai||BlunderPolicy|BadDreams|Hypnosis,NastyPlot,DarkPulse,IceBeam|Modest|24,,,252,,232||,0,,,,|||,,,,,Dark]Slowking-Galar||ShucaBerry|Regenerator|Toxic,ChillyReception,IceBeam,SludgeBomb|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison]Iron Treads||AssaultVest|QuarkDrive|IronHead,Earthquake,RapidSpin,VoltSwitch|Adamant|252,36,,,,220|||||,,,,,Ground]Tera Captain|Shaymin|HeavyDutyBoots|NaturalCure|SeedFlare,DazzlingGleam,TeraBlast,Synthesis|Timid|252,,96,,,160||,0,,,,|||,,,,,Water]Swampert||Leftovers|Torrent|StealthRock,FlipTurn,IceBeam,Earthquake|Relaxed|252,,252,4,,|||||,,,,,Water]Hariyama||FlameOrb|Guts|DrainPunch,BulkUp,IcePunch,BulletPunch|Adamant|108,148,252,,,|||||,,,,,Fighting","Tera Captain|Magnezone|LifeOrb|MagnetPull|TeraBlast,FlashCannon,Thunderbolt,VoltSwitch|Modest|248,,,252,8,||,0,,,,|||,,,,,Ground]Kleavor||ChoiceScarf|Sharpness|StoneAxe,Uturn,DualWingbeat,XScissor|Adamant|40,252,,,,216|||||,,,,,Bug]Grafaiai||BlackSludge|Prankster|KnockOff,PartingShot,Encore,Copycat|Jolly|32,252,,,,224|||||,,,,,Poison]Toedscruel||HeavyDutyBoots|MyceliumMight|Spore,LeafStorm,EarthPower,RapidSpin|Timid|,,,252,4,252|||||,,,,,Ground]Dragonite||HeavyDutyBoots|Multiscale|ExtremeSpeed,DragonDance,Earthquake,FirePunch|Adamant|,252,,,4,252|||||,,,,,Dragon]Enamorus||LifeOrb|CuteCharm|Agility,Moonblast,EarthPower,SludgeBomb|Modest|,,,252,4,252||,0,,,,|||,,,,,Fairy"],
+ ["Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Taunt,StealthRock,Earthquake,KnockOff|Impish|248,48,144,,68,|||||,,,,,Dragon]Primarina||Leftovers|Torrent|RainDance,Substitute,Moonblast,SparklingAria|Modest|248,,,76,168,16||,0,,,,|||,,,,,Water]Gouging Fire||LumBerry|Protosynthesis|DragonDance,DragonClaw,Earthquake,FlareBlitz|Adamant|232,96,,,4,176|||||,,,,,Fire]Meowscarada||ChoiceScarf|Protean|ToxicSpikes,Uturn,KnockOff,FlowerTrick|Jolly|104,252,,,,152|||||,,,,,Grass]Slowking-Galar||HeavyDutyBoots|Regenerator|ThunderWave,ChillyReception,Flamethrower,FutureSight|Calm|248,,,,232,28||,0,,,,|||,,,,,Poison]Tera Captain|Tornadus|HeavyDutyBoots|Prankster|RainDance,NastyPlot,Hurricane,WeatherBall|Timid|136,,,60,64,248||,0,,,,|||,,,,,Water","Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|KnockOff,DracoMeteor,Flamethrower,HydroSteam|Timid|12,,,244,,252|||||,,,,,Water]Torkoal||HeatRock|Drought|StealthRock,LavaPlume,Earthquake,SunnyDay|Relaxed|248,,168,,92,||,,,,,0|||,,,,,Fire]Weezing-Galar||EjectButton|Levitate|Defog,Haze,SludgeBomb,Taunt|Impish|252,,252,,4,||,0,,,,|||,,,,,Poison]Tera Captain|Sawsbuck|ChoiceBand|Chlorophyll|DoubleEdge,BodySlam,DoubleKick,HornLeech|Adamant|20,252,,,,236|||||,,,,,Normal]Chi-Yu||ChoiceScarf|BeadsofRuin|Overheat,Flamethrower,DarkPulse,Ruination|Timid|72,,,252,,184||,0,,,,|||,,,,,Dark]Ursaluna-Bloodmoon||Leftovers|MindsEye|CalmMind,BloodMoon,EarthPower,VacuumWave|Modest|252,,80,176,,||,0,,,,|||,,,,,Ground"],
+ ["Great Tusk||BoosterEnergy|Protosynthesis|Earthquake,IceSpinner,KnockOff,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Ground]Tinkaton||Leftovers|MoldBreaker|GigatonHammer,StealthRock,PlayRough,KnockOff|Serious|248,4,,,25,|||||,,,,,Fairy]Grafaiai||BlackSludge|Prankster|Encore,PartingShot,LowKick,KnockOff|Impish|252,4,252,,,|||||,,,,,Poison]Tera Captain|Latias|Leftovers|Levitate|CalmMind,AuraSphere,StoredPower,Recover|Timid|248,,160,,,100||,0,,,,|||,,,,,Poison]Tera Captain|Umbreon|Leftovers|Synchronize|FoulPlay,Toxic,Wish,Protect|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Meowscarada||HeavyDutyBoots|Protean|BrickBreak,FlowerTrick,KnockOff,Uturn|Jolly|,252,,,4,252|||||,,,,,Grass","Tera Captain|Annihilape|Leftovers|Defiant|RageFist,DrainPunch,BulkUp,Rest|Impish|252,,252,,4,|||S||,,,,,Fairy]Tornadus-Therian||ChoiceScarf|Regenerator|AirSlash,KnockOff,HeatWave,Uturn|Timid|48,,20,252,20,168|||S||,,,,,Flying]Quaquaval||RockyHelmet|Moxie|AquaStep,RapidSpin,Roost,Uturn|Jolly|252,,144,,,112|||||,,,,,Water]Slowbro-Galar||BlackSludge|Regenerator|Flamethrower,Toxic,SlackOff,Psychic|Calm|252,,48,,208,||,0,,,,|S||,,,,,Poison]Ninetales-Alola||LightClay|SnowWarning|Blizzard,Encore,AuroraVeil,Hypnosis|Timid|112,,,252,,144||,0,,,,|S||,,,,,Ice]Beartic||LifeOrb|SlushRush|IcicleCrash,HeavySlam,CloseCombat,Earthquake|Adamant|,252,,,4,252|||S||,,,,,Ice"],
+ ["Iron Valiant||LifeOrb|QuarkDrive|Moonblast,CloseCombat,VacuumWave,Thunderbolt|Mild|,12,,252,,244|||||,,,,,Fairy]Garchomp||RockyHelmet|RoughSkin|Spikes,Earthquake,DracoMeteor,ScaleShot|Naive|248,,,76,,184|||||,,,,,Dragon]Rotom-Wash||YacheBerry|Levitate|HydroPump,VoltSwitch,PainSplit,Thunderbolt|Calm|248,,,,220,40||,0,,,,|||,,,,,Electric]Tera Captain|Ceruledge|ClearAmulet|WeakArmor|SwordsDance,BitterBlade,Poltergeist,ShadowSneak|Jolly|96,252,,,,160|||||,,,,,Steel]Tera Captain|Revavroom|ChoiceScarf|Filter|PartingShot,GunkShot,HighHorsepower,IronHead|Jolly|24,252,,,,232|||||,,,,,Electric]Uxie||SitrusBerry|Levitate|StealthRock,Encore,Uturn,Psychic|Timid|248,,68,,,192|||||,,,,,Psychic","Tera Captain|GreatTusk|MentalHerb|Protosynthesis|RapidSpin,BulkUp,HeadlongRush,IceSpinner|Careful|252,212,,,,44|||||,,,,,Poison]Overqwil||AirBalloon|Intimidate|Spikes,Agility,BarbBarrage,DestinyBond|Jolly|,76,252,,4,176|||||,,,,,Dark]Arboliva||EjectPack|SeedSower|LeafStorm,Memento,StrengthSap,EarthPower|Modest|248,,68,128,,64||,0,,,,|||,,,,,Grass]Empoleon||ChopleBerry|Competitive|KnockOff,IceBeam,FlashCannon,StealthRock|Timid|252,,4,,,252|||||,,,,,Water]Iron Bundle||LightClay|QuarkDrive|AuroraVeil,Snowscape,FreezeDry,HydroPump|Calm|252,,,,28,228||,0,,,,|||,,,,,Ice]Tera Captain|Oricorio|MirrorHerb|Dancer|QuiverDance,RevelationDance,Roost,Substitute|Bold|216,,204,,,88||,0,,,,|||,,,,,Ice"],
+ ["Tera Captain|Latias|ChoiceScarf|Levitate|DracoMeteor,MistBall,Surf,IceBeam|Modest|,,,252,,252||,0,,,,|||,,,,,Water]Tera Captain|Jolteon|LifeOrb|VoltAbsorb|CalmMind,Thunderbolt,VoltSwitch,TeraBlast|Timid|,,,252,64,192||,0,,,,|||,,,,,Ice]Enamorus||HeavyDutyBoots|Contrary|PlayRough,Superpower,IronHead,Taunt|Adamant|,252,,,64,192|||||,,,,,Fairy]Tentacruel||BlackSludge|ClearBody|Blizzard,Protect,RapidSpin,ToxicSpikes|Sassy|252,,4,,252,||,,,,,0|||,,,,,Water]Heatran||ChoiceScarf|FlashFire|Flamethrower,FlashCannon,EarthPower,DragonPulse|Modest|,,4,252,4,248||,0,,,,|||,,,,,Fire]Meowscarada||ExpertBelt|Protean|FlowerTrick,KnockOff,PlayRough,TripleAxel|Jolly|,252,,,8,248|||||,,,,,Grass","Latios||AssaultVest|Levitate|AuraSphere,DracoMeteor,IceBeam,Psyshock|Timid|,,,252,4,252||,0,,,,|||,,,,,Dragon]Greninja||ChoiceScarf|Protean|SludgeWave,Surf,DarkPulse,Uturn|Quiet|,200,,252,,56|||||,,,,,Water]Tera Captain|Torterra|WhiteHerb|ShellArmor|SeedBomb,TeraBlast,Earthquake,ShellSmash|Adamant|,252,,,4,252|||||,,,,,Ice]Tera Captain|Skeledirge|Leftovers|Unaware|SlackOff,TorchSong,EarthPower,Yawn|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Cyclizar||HeavyDutyBoots|Regenerator|RapidSpin,Uturn,KnockOff,ShedTail|Jolly|88,252,,,,168|||||,,,,,Dragon]Heracross||AssaultVest|Moxie|Trailblaze,Lunge,Earthquake,StoneEdge|Adamant|,252,,,4,252|||||,,,,,Bug"],
+ ["Palafin-Hero||Leftovers|ZerotoHero|Substitute,BulkUp,IcePunch,JetPunch|Careful|252,4,,,252,|||||,,,,,Water]Iron Treads||BoosterEnergy|QuarkDrive|StealthRock,KnockOff,RapidSpin,Earthquake|Jolly|68,252,,,,188|||||,,,,,Ground]Tera Captain|Rillaboom|LifeOrb|GrassySurge|SwordsDance,GrassyGlide,KnockOff,DrainPunch|Adamant|252,252,,,4,|||||,,,,,Poison]Grimmsnarl||LightClay|Prankster|LightScreen,Reflect,PartingShot,SpiritBreak|Careful|252,4,,,252,|||||,,,,,Dark]Tera Captain|Armarouge|LumBerry|WeakArmor|CalmMind,Psyshock,EnergyBall,ArmorCannon|Modest|212,,,252,,44||,0,,,,|||,,,,,Fairy]Tornadus-Therian||HeavyDutyBoots|Regenerator|Taunt,Uturn,KnockOff,BleakwindStorm|Timid|248,,,,96,164|||||,,,,,Flying","Hydrapple||YacheBerry|Regenerator|NastyPlot,FickleBeam,GigaDrain,Recover|Modest|244,,12,252,,||,0,,,,|S||,,,,,Grass]Darkrai||FocusSash|BadDreams|NastyPlot,DarkPulse,Hypnosis,SludgeBomb|Timid|24,,4,252,4,224||,0,,,,|S||,,,,,Dark]Tera Captain|Infernape|ChoiceScarf|IronFist|ThunderPunch,CloseCombat,KnockOff,Uturn|Jolly|16,252,,,,240|||S||,,,,,Electric]Slowking-Galar||ColburBerry|Regenerator|SludgeBomb,Flamethrower,ThunderWave,ChillyReception|Calm|252,,4,,252,||,0,,,,|S||,,,,,Poison]Forretress||RockyHelmet|Sturdy|StealthRock,RapidSpin,VoltSwitch,BodyPress|Bold|252,,252,4,,|||||,,,,,Bug]Swampert||AssaultVest|Torrent|EarthPower,SludgeWave,BrickBreak,FlipTurn|Sassy|252,,4,,252,|||S||,,,,,Water"],
+ ["Gurdurr||Eviolite|Guts|DrainPunch,MachPunch,IcePunch,KnockOff|Careful|248,8,,,252,|||||,,,,,Fighting]Darkrai||ChoiceSpecs|BadDreams|DarkPulse,IceBeam,FocusBlast,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,EnergyBall,TeraBlast,Substitute|Timid|,,,132,124,252||,0,,,,|||,,,,,Ground]Rotom-Wash||ChestoBerry|Levitate|Rest,HydroPump,VoltSwitch,WillOWisp|Bold|248,,172,,,88||,0,,,,|||,,,,,Electric]Garchomp||RockyHelmet|RoughSkin|Spikes,Earthquake,FireBlast,DracoMeteor|Timid|248,,100,,,160|||||,,,,,Dragon]Jirachi||KasibBerry|SereneGrace|IronHead,ZenHeadbutt,IcePunch,ThunderWave|Jolly|,252,80,,,176|||||,,,,,Steel","Tera Captain|Diancie|AirBalloon|ClearBody|StealthRock,Moonblast,EarthPower,DiamondStorm|Sassy|248,,,8,252,|||||,,,,,Fairy]Gliscor||ToxicOrb|PoisonHeal|Protect,IceFang,Toxic,Earthquake|Impish|248,,184,,76,|||||,,,,,Ground]Darkrai||ChoiceScarf|BadDreams|IceBeam,DarkPulse,FocusBlast,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Blastoise||HeavyDutyBoots|Torrent|IceBeam,RapidSpin,FlipTurn,Surf|Relaxed|248,,252,8,,|||||,,,,,Water]Tera Captain|Annihilape|ChoiceScarf|Defiant|RageFist,DrainPunch,CloseCombat,Uturn|Jolly|,252,4,,,252|||||,,,,,Ghost]Slowking-Galar||BlackSludge|Regenerator|ToxicSpikes,ChillyReception,SludgeWave,FutureSight|Calm|248,,,8,252,||,0,,,,|||,,,,,Poison"],
+ ["Tera Captain|Serperior|AssaultVest|Contrary|LeafStorm,TeraBlast,DragonPulse,GigaDrain|Timid|160,,,148,,200||,0,,,,|||,,,,,Stellar]Dachsbun||RockyHelmet|WellBakedBody|PlayRough,BodyPress,Wish,Roar|Impish|252,,248,,,8|||||,,,,,Fairy]Latios||LifeOrb|Levitate|DracoMeteor,LusterPurge,AuraSphere,FlipTurn|Timid|32,,,252,,224|||||,,,,,Dragon]Heatran||ChoiceScarf|FlashFire|Overheat,FlashCannon,EarthPower,StealthRock|Calm|40,,,60,252,156||,0,,,,|||,,,,,Fire]Palafin||RindoBerry|ZerotoHero|JetPunch,DrainPunch,IcePunch,BulkUp|Adamant|,252,,,40,216|||||,,,,,Water]Donphan||HeavyDutyBoots|Sturdy|Earthquake,IceShard,StealthRock,RapidSpin|Adamant|252,128,,,,128|||||,,,,,Ground","Tera Captain|Shaymin|RockyHelmet|NaturalCure|SeedFlare,EarthPower,DazzlingGleam,Rest|Timid|184,,,252,,72||,0,,,,|||,,,,,Ground]Muk||BlackSludge|PoisonTouch|PoisonJab,ToxicSpikes,Haze,DrainPunch|Careful|252,,4,,252,|||||,,,,,Poison]Tera Captain|Salamence|HeavyDutyBoots|Moxie|DragonDance,DragonClaw,Earthquake,TeraBlast|Adamant|,252,,,4,252|||||,,,,,Fairy]Tatsugiri||HeavyDutyBoots|StormDrain|NastyPlot,DracoMeteor,Surf,RapidSpin|Timid|48,,,244,,216|||||,,,,,Dragon]Great Tusk||Leftovers|Protosynthesis|Substitute,Earthquake,KnockOff,CloseCombat|Jolly|72,252,,,,184|||||,,,,,Ground]Enamorus||ChoiceScarf|CuteCharm|Moonblast,EarthPower,MysticalFire,HealingWish|Modest|40,,,216,,252||,0,,,,|||,,,,,Fairy"],
+ ["Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|KnockOff,IvyCudgel,WoodHammer,Superpower|Jolly|80,252,,,,176|||||,,,,,Fire]Cyclizar||SitrusBerry|Regenerator|ShedTail,RapidSpin,KnockOff,DragonTail|Jolly|252,,48,,,208|||||,,,,,Dragon]Tera Captain|Serperior|LumBerry|Contrary|LeafStorm,TeraBlast,Glare,Synthesis|Timid|24,,,252,,232||,0,,,,|||,,,,,Stellar]Clodsire||BlackSludge|WaterAbsorb|StealthRock,ToxicSpikes,Earthquake,StoneEdge|Careful|252,252,,,4,|||||,,,,,Poison]Kommo-o||ThroatSpray|Soundproof|ClangorousSoul,ClangingScales,AuraSphere,RockSlide|Timid|8,,,252,24,224|||||,,,,,Dragon]Clefairy||Eviolite|MagicGuard|CalmMind,Moonblast,ThunderWave,Moonlight|Calm|252,,112,,144,||,0,,,,|||,,,,,Fairy","Palafin||AssaultVest|ZerotoHero|JetPunch,IcePunch,GrassKnot,Liquidation|Hasty|64,252,,56,,136|||||,,,,,Grass]Raikou||ExpertBelt|Pressure|Thunderbolt,VoltSwitch,Extrasensory,ThunderWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Flying]Tyranitar||ChopleBerry|SandStream|Roar,StealthRock,KnockOff,ThunderWave|Careful|252,4,,,252,|||||,,,,,Ghost]Tera Captain|Chesnaught|AssaultVest|Bulletproof|PoisonJab,Earthquake,TeraBlast,RockSlide|Careful|252,4,,,252,|||||,,,,,Fire]Espeon||MirrorHerb|MagicBounce|AlluringVoice,Wish,Protect,Psyshock|Timid|248,,,4,,252||,0,,,,|||,,,,,Fairy]Reuniclus||ColburBerry|MagicGuard|AcidArmor,CalmMind,StoredPower,Recover|Bold|252,,212,44,,||,0,,,,|||,,,,,Dark"],
+ ["Clefable||Leftovers|Unaware|MistyTerrain,AlluringVoice,Flamethrower,ThunderWave|Bold|96,,228,,184,||,0,,,,|||,,,,,Fairy]Tera Captain|Latias|Leftovers|Levitate|FutureSight,IceBeam,Thunderbolt,Recover|Calm|,,,252,16,240||,0,,,,|||,,,,,Water]Quagsire||Leftovers|WaterAbsorb|Recover,Spikes,Yawn,Earthquake|Careful|252,4,,,252,|||||,,,,,Water]Chi-Yu||HeavyDutyBoots|BeadsofRuin|Substitute,Taunt,DarkPulse,Flamethrower|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Torkoal||Leftovers|Drought|StealthRock,WillOWisp,ClearSmog,WeatherBall|Calm|252,,,4,252,||,0,,,,|||,,,,,Fire]Jirachi||Leftovers|SereneGrace|IronHead,BodySlam,FirePunch,Substitute|Adamant|204,252,,,,52|||||,,,,,Steel","Iron Valiant||LifeOrb|QuarkDrive|AuraSphere,Moonblast,Psyshock,DestinyBond|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Iron Bundle||LifeOrb|QuarkDrive|IceBeam,HydroPump,FreezeDry,FlipTurn|Timid|208,,,252,,48|||||,,,,,Ice]Tera Captain|IronMoth|HeavyDutyBoots|QuarkDrive|FieryDance,SludgeWave,DazzlingGleam,EnergyBall|Timid|120,,,132,4,252||,0,,,,|||,,,,,Dark]Iron Treads||BoosterEnergy|QuarkDrive|StealthRock,Earthquake,HeavySlam,RapidSpin|Jolly|48,252,,,,208|||||,,,,,Ground]Iron Jugulis||PowerHerb|QuarkDrive|DarkPulse,EarthPower,MeteorBeam,FlashCannon|Timid|8,,,252,4,244||,0,,,,|||,,,,,Dark]Pincurchin||TerrainExtender|ElectricSurge|Discharge,ToxicSpikes,ThunderWave,Memento|Sassy|252,,,4,252,||,0,,,,|||,,,,,Electric"],
+ ["Ninetales-Alola||LightClay|SnowWarning|AuroraVeil,Blizzard,Moonblast,Charm|Timid|248,,,,8,252||,0,,,,|||,,,,,Ice]Baxcalibur||LoadedDice|ThermalExchange|DragonDance,GlaiveRush,IcicleSpear,Earthquake|Adamant|,252,4,,,252|||||,,,,,Dragon]Manaphy||Leftovers|Hydration|TailGlow,Surf,IceBeam,EnergyBall|Timid|,,4,252,,252||,0,,,,|||,,,,,Water]Cyclizar||HeavyDutyBoots|Regenerator|RapidSpin,KnockOff,ShedTail,Uturn|Timid|252,,252,,4,|||||,,,,,Dragon]Tera Captain|Pecharunt|Leftovers|PoisonPuppeteer|MalignantChain,Hex,Toxic,Recover|Modest|,,,252,252,4||,0,,,,|||,,,,,Grass]Bisharp||Eviolite|Defiant|StealthRock,NightSlash,IronHead,LowKick|Adamant|,252,,,4,252|||S||,,,,,Dark","Hydrapple||AssaultVest|Regenerator|LeafStorm,DracoMeteor,HeavySlam,FickleBeam|Sassy|248,8,,,252,|||||,,,,,Grass]Tera Captain|GreatTusk|Leftovers|Protosynthesis|StealthRock,CloseCombat,HeadlongRush,HeavySlam|Jolly|,252,,,4,252|||||,,,,,Steel]Ting-Lu||ChoiceBand|VesselofRuin|Earthquake,BodyPress,HeavySlam,ThroatChop|Careful|252,4,,,252,|||||,,,,,Dark]Kingambit||BlackGlasses|SupremeOverlord|SwordsDance,KowtowCleave,IronHead,SuckerPunch|Adamant|252,252,,,4,|||||,,,,,Dark]Alomomola||HeavyDutyBoots|Regenerator|Scald,Wish,Protect,FlipTurn|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Water]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,FlareBlitz,Outrage,MorningSun|Jolly|20,252,4,,,232|||||,,,,,Fire"],
+ ["Palafin||LumBerry|ZerotoHero|Liquidation,JetPunch,BulkUp,CloseCombat|Jolly|,252,,,4,252|||||,,,,,Water]Glimmora||ChoiceScarf|ToxicDebris|StealthRock,MortalSpin,SludgeWave,PowerGem|Modest|56,,,252,,200|||||,,,,,Rock]Tera Captain|Metagross|LumBerry|ClearBody|PsychicFangs,MeteorMash,Earthquake,Trailblaze|Adamant|20,252,,,,236|||||,,,,,Steel]Darkrai||HeavyDutyBoots|BadDreams|Psyshock,DarkPulse,NastyPlot,FocusBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|Sandaconda|Leftovers|ShedSkin|Glare,Coil,Rest,Earthquake|Careful|252,4,,,252,|||||,,,,,Steel]Zapdos||HeavyDutyBoots|Pressure|Hurricane,Thunderbolt,Roost,LightScreen|Modest|248,,,24,136,100||,0,,,,|||,,,,,Electric","Rotom-Wash||Leftovers|Levitate|ThunderWave,HydroPump,VoltSwitch,WillOWisp|Bold|252,,36,,,220||,0,,,,|||,,,,,Electric]Tera Captain|IronMoth|ChestoBerry|QuarkDrive|DazzlingGleam,SludgeWave,FieryDance,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Iron Crown||BoosterEnergy|QuarkDrive|CalmMind,TachyonCutter,FocusBlast,PsychicNoise|Timid|84,,,172,,252||,20,,,,|||,,,,,Steel]Darkrai||ChopleBerry|BadDreams|FocusBlast,DarkPulse,IceBeam,Psyshock|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Gliscor||ToxicOrb|PoisonHeal|StealthRock,Toxic,KnockOff,Earthquake|Careful|252,,,,108,148|||||,,,,,Ground]Hitmonchan||HeavyDutyBoots|IronFist|DrainPunch,IcePunch,MachPunch,RapidSpin|Adamant|248,252,,,8,|||||,,,,,Fighting"],
+ ["Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Substitute,Protect|Timid|56,,,252,,200||,0,,,,|||,,,,,Stellar]Iron Treads||BoosterEnergy|QuarkDrive|StealthRock,EarthPower,Endeavor,SteelBeam|Timid|40,,,216,,252||,0,,,,|||,,,,,Ground]Pecharunt||SafetyGoggles|PoisonPuppeteer|MalignantChain,Hex,PartingShot,Recover|Timid|252,,,24,56,176||,0,,,,|||,,,,,Poison]Urshifu-Rapid-Strike||PunchingGlove|UnseenFist|SurgingStrikes,IcePunch,Uturn,SwordsDance|Jolly|16,252,,,,240|||||,,,,,Fighting]Cyclizar||EjectPack|Regenerator|RapidSpin,ShedTail,DracoMeteor,KnockOff|Timid|92,,,200,,216|||||,,,,,Dragon]Rotom-Heat||ChoiceScarf|Levitate|VoltSwitch,Overheat,PainSplit,Trick|Timid|84,,,232,,192||,0,,,,|||,,,,,Electric","Tera Captain|Mew|LifeOrb|Synchronize|Psychic,AlluringVoice,VacuumWave,NastyPlot|Timid|24,,,252,,232||,0,,,,|||,,,,,Fighting]Tera Captain|MoltresGalar|SitrusBerry|Berserk|FieryWrath,AirSlash,NastyPlot,Agility|Modest|40,,,252,8,208||,0,,,,|||,,,,,Electric]Rotom-Heat||ChoiceScarf|Levitate|VoltSwitch,Overheat,HyperVoice,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Iron Treads||AirBalloon|QuarkDrive|Earthquake,KnockOff,RapidSpin,StealthRock|Jolly|4,252,,,,252|||||,,,,,Steel]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,AuraSphere,Psychic,CalmMind|Timid|,,24,252,,232||,0,,,,|||,,,,,Fairy]Amoonguss||RedCard|Regenerator|SludgeBomb,GigaDrain,Spore,Synthesis|Bold|252,,128,,128,||,0,,,,|||,,,,,Poison"],
+ ["Corviknight||RockyHelmet|Pressure|IronHead,Defog,Uturn,Roost|Impish|252,4,252,,,|||||,,,,,Flying]Goodra-Hisui||AssaultVest|SapSipper|IceBeam,Earthquake,FlashCannon,DracoMeteor|Sassy|252,,4,,252,|||||,,,,,Steel]Tera Captain|Clefable|Leftovers|Unaware|CosmicPower,Moonblast,Moonlight,StoredPower|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Annihilape||Leftovers|Defiant|Rest,BulkUp,RageFist,SleepTalk|Careful|252,,4,,252,|||||,,,,,Fighting]Cinderace||HeavyDutyBoots|Libero|Uturn,CourtChange,PyroBall,SuckerPunch|Adamant|72,252,,,,184|||||,,,,,Fire]Tera Captain|HoopaUnbound|ChoiceBand|Magician|IcePunch,HyperspaceFury,KnockOff,ZenHeadbutt|Adamant|252,252,,,4,|||||,,,,,Dark","Rotom-Wash||Leftovers|Levitate|WillOWisp,VoltSwitch,HydroPump,Thunderbolt|Calm|252,,4,,252,||,0,,,,|||,,,,,Electric]Pincurchin||Leftovers|ElectricSurge|Recover,Thunderbolt,ThunderWave,Spikes|Bold|252,,252,4,,||,0,,,,|||,,,,,Electric]Sceptile||HeavyDutyBoots|Overgrow|ShedTail,LeechSeed,LeafStorm,DragonPulse|Timid|252,,,4,,252||,0,,,,|||,,,,,Grass]Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,MightyCleave,CloseCombat,PsychoCut|Jolly|,252,,,4,252|||||,,,,,Rock]Gliscor||ToxicOrb|PoisonHeal|Earthquake,Toxic,KnockOff,Protect|Impish|252,4,252,,,|||||,,,,,Ground]Tera Captain|IronMoth|AirBalloon|QuarkDrive|FieryDance,SludgeWave,DazzlingGleam,Discharge|Timid|,,124,132,,252||,0,,,,|||,,,,,Fairy"],
+ ["Tera Captain|Noivern|ChoiceScarf|Infiltrator|Hurricane,Psychic,TeraBlast,Uturn|Modest|36,,16,188,16,252|||||,,,,,Ice]Iron Crown||Leftovers|QuarkDrive|Rest,SleepTalk,TachyonCutter,Psyshock|Modest|236,,56,,32,184||,20,,,,|||,,,,,Steel]Tera Captain|Zarude|Leftovers|LeafGuard|Protect,PowerWhip,Synthesis,KnockOff|Jolly|156,,16,,96,240|||||,,,,,Dark]Sandy Shocks||ChoiceScarf|Protosynthesis|VoltSwitch,EarthPower,Thunder,PowerGem|Timid|236,,80,,56,136|||||,,,,,Electric]Fezandipiti||BlackSludge|ToxicChain|PlayRough,Roost,Toxic,Protect|Jolly|212,,240,,16,40|||||,,,,,Poison]Slither Wing||ChoiceBand|Protosynthesis|Uturn,BrickBreak,Earthquake,Trailblaze|Jolly|196,,184,,16,112|||||,,,,,Bug","Palafin||ChoiceBand|ZerotoHero|WaveCrash,JetPunch,CloseCombat,FlipTurn|Adamant|4,252,,,,252|||||,,,,,Water]Zapdos||RockyHelmet|Static|WeatherBall,Hurricane,VoltSwitch,Roost|Modest|172,,,128,,208||,0,,,,|||,,,,,Electric]Archaludon||AirBalloon|Stamina|ElectroShot,BodyPress,DragonPulse,StealthRock|Timid|124,,,252,,132||,0,,,,|||,,,,,Steel]Tera Captain|Annihilape|ChoiceScarf|Defiant|Uturn,RageFist,CloseCombat,TeraBlast|Adamant|104,252,,,,152|||||,,,,,Ghost]Politoed||DampRock|Drizzle|EarthPower,Rest,Surf,Haze|Calm|252,,,,188,68||,0,,,,|||,,,,,Water]Electrode-Hisui||AirBalloon|Static|ThunderWave,VoltSwitch,LeechSeed,LeafStorm|Modest|40,,,252,,216||,0,,,,|||,,,,,Electric"],
+ ["Garchomp||RockyHelmet|RoughSkin|RockSlide,DragonTail,StealthRock,FireBlast|Naive|252,,40,,,216|||||,,,,,Dragon]Gholdengo||CovertCloak|GoodasGold|MakeItRain,ShadowBall,NastyPlot,Recover|Bold|252,,108,76,,52||,0,,,,|||,,,,,Steel]Meowscarada||ChoiceBand|Protean|FlowerTrick,TripleAxel,KnockOff,Uturn|Jolly|96,252,,,,160|||||,,,,,Grass]Tera Captain|RagingBolt|CovertCloak|Protosynthesis|Thunderclap,DragonPulse,Thunderbolt,CalmMind|Bold|64,,252,192,,||,20,,,,|||,,,,,Electric]Tera Captain|OricorioPomPom|HeavyDutyBoots|Dancer|RevelationDance,Hurricane,Substitute,QuiverDance|Modest|252,,200,,,56||,0,,,,|||,,,,,Rock]Tentacruel||BlackSludge|LiquidOoze|ToxicSpikes,RapidSpin,FlipTurn,KnockOff|Impish|252,,252,,4,|||||,,,,,Water","Urshifu-Rapid-Strike||ProtectivePads|UnseenFist|SurgingStrikes,Uturn,AquaJet,CloseCombat|Adamant|,252,,,4,252|||||,,,,,Stellar]Tera Captain|DeoxysDefense|Leftovers|Pressure|NastyPlot,HyperBeam,IceBeam,DarkPulse|Timid|48,,,252,,208||,0,,,,|||,,,,,Normal]Thundurus||HeavyDutyBoots|Prankster|RainDance,ThunderWave,Uturn,WeatherBall|Calm|252,,,4,252,|||||,,,,,Stellar]Tera Captain|Garganacl|Leftovers|PurifyingSalt|SaltCure,Recover,StealthRock,Protect|Impish|252,,152,,104,|||||,,,,,Fire]Decidueye||ColburBerry|Overgrow|Defog,ShadowBall,LeafStorm,Hurricane|Modest|252,,,176,80,||,0,,,,|||,,,,,Stellar]Skarmory||RockyHelmet|Sturdy|Roost,Tailwind,Taunt,BodyPress|Bold|252,,252,,4,||,0,,,,|||,,,,,Stellar"],
+ ["Baxcalibur||LoadedDice|ThermalExchange|IcicleSpear,ScaleShot,Earthquake,SwordsDance|Adamant|,252,4,,,252|||||,,,,,Normal]Ninetales-Alola||LightClay|SnowWarning|AuroraVeil,Encore,IceBeam,Moonblast|Timid|212,,,96,,200||,0,,,,|||,,,,,Normal]Tera Captain|Annihilape|Leftovers|Defiant|BulkUp,Taunt,DrainPunch,RageFist|Careful|212,,,,252,44|||||,,,,,Water]Excadrill||SitrusBerry|MoldBreaker|Earthquake,RockSlide,StealthRock,RapidSpin|Jolly|24,252,,,,232|||||,,,,,Normal]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,HeatWave,KnockOff,Uturn|Timid|64,,,252,88,104|||||,,,,,Normal]Alomomola||RockyHelmet|Regenerator|Scald,FlipTurn,Wish,Protect|Relaxed|252,,252,4,,|||||,,,,,Ghost","Tera Captain|Quaquaval|HeavyDutyBoots|Moxie|AquaStep,SwordsDance,IceSpinner,Roost|Jolly|164,244,,,,100|||||,,,,,Electric]Garchomp||RockyHelmet|RoughSkin|SwordsDance,StealthRock,Outrage,Earthquake|Jolly|172,140,,,,196|||||,,,,,Ice]Overqwil||SitrusBerry|Intimidate|Crunch,BarbBarrage,AquaJet,Spikes|Careful|252,,,,232,24|||||,,,,,Water]Uxie||LightClay|Levitate|LightScreen,Reflect,Uturn,ThunderWave|Serious|252,,84,,152,20|||||,,,,,Dragon]Talonflame||HeavyDutyBoots|FlameBody|Roost,BraveBird,Uturn,FlareBlitz|Jolly|248,28,,,,232|||||,,,,,Poison]Gholdengo||ChoiceScarf|GoodasGold|ShadowBall,MakeItRain,Trick,FocusBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Grass"],
+ ["Tera Captain|Latias|LifeOrb|Levitate|DracoMeteor,Earthquake,Recover,DragonDance|Naive|16,104,,252,,136|||||,,,,,Water]Annihilape||ProtectivePads|Defiant|RageFist,CloseCombat,StoneEdge,Uturn|Jolly|28,252,,,,228|||||,,,,,Fighting]Tera Captain|Kilowattrel|HeavyDutyBoots|VoltAbsorb|Hurricane,Uturn,FeatherDance,ThunderWave|Timid|252,,,96,,160|||||,,,,,Dragon]Sylveon||Leftovers|CuteCharm|Moonblast,Charm,Wish,Protect|Bold|252,,252,4,,||,0,,,,|S||,,,,,Fairy]Overqwil||ShucaBerry|Intimidate|BarbBarrage,Liquidation,Spikes,Haze|Careful|252,8,,,240,8|||S||,,,,,Dark]Terapagos||Leftovers|TeraShift|TeraStarstorm,EarthPower,RapidSpin,Toxic|Bold|252,,92,128,28,8|||||,,,,,Stellar","Palafin-Hero||Leftovers|ZerotoHero|BulkUp,JetPunch,DrainPunch,Taunt|Adamant|248,84,,,,176|||||,,,,,Water]Donphan||AguavBerry|Sturdy|StealthRock,RapidSpin,Earthquake,IceShard|Adamant|248,92,168,,,|||||,,,,,Ground]Zapdos||HeavyDutyBoots|Static|Hurricane,Roost,HeatWave,Uturn|Timid|248,,84,,,176|||||,,,,,Electric]Tinkaton||AssaultVest|OwnTempo|PlayRough,KnockOff,GigatonHammer,Endeavor|Careful|248,,92,,100,68|||||,,,,,Fairy]Lokix||HeavyDutyBoots|TintedLens|KnockOff,Uturn,FirstImpression,SuckerPunch|Adamant|16,252,,,,240|||||,,,,,Bug]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,Substitute,Synthesis,TeraBlast|Timid|24,,,252,,232||,0,,,,|||,,,,,Stellar"],
+ ["Tera Captain|Archaludon|Leftovers|Stamina|BodyPress,HeavySlam,Earthquake,DracoMeteor|Hardy|248,104,56,,96,4|||||,,,,,Fighting]Blastoise||AssaultVest|Torrent|FlipTurn,RapidSpin,BodyPress,HydroPump|Calm|248,,108,,152,||,,,,,30|||,,,,,Water]Tera Captain|Rhyperior|Leftovers|SolidRock|IcePunch,Earthquake,StoneEdge,StealthRock|Impish|248,32,132,,96,|||||,,,,,Fairy]Urshifu||ChoiceScarf|UnseenFist|WickedBlow,CloseCombat,Uturn,IronHead|Adamant|216,188,,,,104|||||,,,,,Fighting]Slowking-Galar||BlackSludge|Regenerator|SludgeBomb,ThunderWave,IceBeam,Psyshock|Calm|248,,24,72,164,||,0,,,,30|||,,,,,Poison]Zapdos||HeavyDutyBoots|Static|Hurricane,Uturn,Discharge,Roost|Timid|64,,,228,,216|||||,,,,,Electric","Darkrai||ChopleBerry|BadDreams|DarkPulse,Taunt,SludgeBomb,NastyPlot|Timid|232,,,92,,184||,0,,,,|||,,,,,Dark]Slowking-Galar||BlackSludge|Regenerator|ChillyReception,SludgeWave,FutureSight,ThunderWave|Sassy|252,,,4,252,||,0,,,,0|||,,,,,Poison]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Earthquake,Uturn,Protect,Toxic|Impish|248,,244,,,16|||||,,,,,Fairy]Tera Captain|Terrakion|LifeOrb|Justified|StoneEdge,CloseCombat,Earthquake,StealthRock|Jolly|64,252,,,,192|||||,,,,,Fairy]Blastoise||RockyHelmet|Torrent|FocusBlast,RapidSpin,FlipTurn,IceBeam|Relaxed|252,,252,4,,||,,,,,0|||,,,,,Water]Sandslash-Alola||ProtectivePads|SlushRush|KnockOff,SwordsDance,TripleAxel,Earthquake|Adamant|188,252,,,,68|||||,,,,,Ice"],
+ ["Darkrai||WideLens|BadDreams|DarkPulse,IceBeam,FocusBlast,Hypnosis|Timid|80,,,252,,176||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,WoodHammer,PlayRough,Uturn|Jolly|32,252,,,,224|||||,,,,,Water]Slowking-Galar||KasibBerry|Regenerator|SludgeWave,FireBlast,ThunderWave,ChillyReception|Calm|248,,,236,24,||,0,,,,|||,,,,,Poison]Gliscor||ToxicOrb|PoisonHeal|Earthquake,Facade,SwordsDance,Protect|Jolly|,88,,,252,168|||||,,,,,Ground]Skarmory||RockyHelmet|Sturdy|StealthRock,Spikes,BraveBird,Roost|Impish|248,,252,,,8|||||,,,,,Steel]Tera Captain|Cetitan|HeavyDutyBoots|SlushRush|IceShard,IcicleCrash,Earthquake,PlayRough|Adamant|,252,,,16,240|||||,,,,,Fairy","Tera Captain|Regidrago|ChoiceScarf|DragonsMaw|DragonEnergy,DragonPulse,DracoMeteor,EarthPower|Modest|,,,252,16,240||,0,,,,|||,,,,,Dragon]Urshifu||PunchingGlove|UnseenFist|WickedBlow,IcePunch,SuckerPunch,SwordsDance|Adamant|96,252,,,,160|||||,,,,,Fighting]Tera Captain|Gholdengo|Leftovers|GoodasGold|Recover,NastyPlot,MakeItRain,ShadowBall|Calm|248,,,,164,96||,0,,,,|||,,,,,Ground]Gastrodon||Leftovers|StormDrain|Recover,StealthRock,Earthquake,IceBeam|Sassy|248,,8,,252,|||||,,,,,Water]Tsareena||ProtectivePads|QueenlyMajesty|Synthesis,RapidSpin,TripleAxel,Uturn|Impish|248,,252,,,8|||S||,,,,,Grass]Azelf||ChoiceScarf|Levitate|Encore,ZenHeadbutt,Uturn,KnockOff|Jolly|,252,,,8,248|||||,,,,,Psychic"],
+ ["Gliscor||ToxicOrb|PoisonHeal|Toxic,Spikes,Earthquake,Protect|Impish|252,,252,,4,|||||,,,,,Stellar]Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,HydroPump,FlipTurn,Encore|Timid|136,,,252,,120|||||,,,,,Stellar]Iron Boulder||ChoiceBand|QuarkDrive|Earthquake,MightyCleave,CloseCombat,QuickAttack|Jolly|24,252,16,,,216|||||,,,,,Stellar]Tera Captain|Hydreigon|LoadedDice|Levitate|DragonDance,ScaleShot,TeraBlast,Crunch|Adamant|44,252,,,,212|||||,,,,,Electric]Tera Captain|Cetitan|HeavyDutyBoots|SheerForce|IceShard,Yawn,IcicleCrash,KnockOff|Adamant|,184,,,84,240|||||,,,,,Water]Magnezone||ChoiceScarf|Sturdy|Thunderbolt,FlashCannon,VoltSwitch,BodyPress|Modest|,,4,252,,252||,0,,,,|||,,,,,Stellar","Palafin||HeavyDutyBoots|ZerotoHero|DrainPunch,JetPunch,BulkUp,Taunt|Impish|252,4,252,,,|||||,,,,,Water]Iron Treads||FocusSash|QuarkDrive|RapidSpin,StealthRock,VoltSwitch,SteelBeam|Timid|64,,,252,,192|||||,,,,,Ground]Tera Captain|RagingBolt|LifeOrb|Protosynthesis|Thunderclap,Thunderbolt,AncientPower,TeraBlast|Timid|16,,,252,,240||,20,,,,|||,,,,,Ground]Tera Captain|EnamorusTherian|HeavyDutyBoots|Overcoat|DrainingKiss,CalmMind,EarthPower,GrassKnot|Modest|,,252,204,52,||,0,,,,|||,,,,,Steel]Roaring Moon||ChoiceScarf|Protosynthesis|Uturn,KnockOff,Outrage,IronHead|Jolly|40,252,,,,216|||||,,,,,Dragon]Mesprit||WeaknessPolicy|Levitate|CalmMind,ShadowBall,MysticalPower,SkillSwap|Relaxed|252,,236,,20,||,0,,,,|||,,,,,Psychic"],
+ ["Rotom-Wash||ChoiceScarf|Levitate|HydroPump,VoltSwitch,Trick,Protect|Calm|252,,,4,252,||,0,,,,|||,,,,,Electric]Fezandipiti||Leftovers|ToxicChain|PlayRough,Uturn,Roost,Taunt|Jolly|252,16,,,,240|||||,,,,,Poison]Garchomp||Leftovers|RoughSkin|Earthquake,StoneEdge,StealthRock,Spikes|Jolly|40,252,,,,216|||||,,,,,Dragon]Hydrapple||HeavyDutyBoots|Regenerator|GigaDrain,FickleBeam,Yawn,BodyPress|Bold|248,,252,,8,||,0,,,,|||,,,,,Grass]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,SludgeWave,Agility,TeraBlast|Modest|4,,,252,,252||,0,,,,|||,,,,,Water]Minior-Violet||WhiteHerb|ShieldsDown|StoneEdge,Acrobatics,ShellSmash,TeraBlast|Adamant|,252,,,4,252|||||,,,,,Rock","Politoed||Leftovers|Drizzle|HydroPump,IceBeam,Psychic,Encore|Modest|248,,,252,8,||,0,,,,|S||,,,,,Water]Blissey||Leftovers|NaturalCure|StealthRock,SeismicToss,ThunderWave,SoftBoiled|Bold|252,,252,,4,||,0,,,,|||,,,,,Normal]Urshifu-Rapid-Strike||ChoiceScarf|UnseenFist|SurgingStrikes,PoisonJab,CloseCombat,ThunderPunch|Jolly|,252,,,4,252|||||,,,,,Fighting]Tera Captain|Kingdra|LifeOrb|SwiftSwim|DracoMeteor,DragonDance,Outrage,Waterfall|Lonely|,176,,116,,216|||||,,,,,Steel]Tera Captain|Rhyperior|Leftovers|SolidRock|Earthquake,StoneEdge,Substitute,RockPolish|Adamant|252,252,,,4,|||||,,,,,Electric]Skarmory||RockyHelmet|Sturdy|Spikes,Roost,BodyPress,Whirlwind|Bold|252,,232,,,24||,0,,,,|S||,,,,,Steel"],
+ ["Iron Hands||ShucaBerry|QuarkDrive|SwordsDance,IcePunch,DrainPunch,HeavySlam|Adamant|248,252,,,8,|||||,,,,,Fighting]Mandibuzz||HeavyDutyBoots|Overcoat|FoulPlay,Roost,Uturn,Defog|Impish|248,,252,,8,|||||,,,,,Dark]Tera Captain|Okidogi|ChoiceScarf|GuardDog|CloseCombat,GunkShot,IcePunch,BrickBreak|Adamant|,252,,,4,252|||||,,,,,Fighting]Scizor||ChoiceBand|Technician|Uturn,BulletPunch,SleepTalk,BrickBreak|Adamant|228,252,,,,28|||||,,,,,Bug]Tera Captain|Hydreigon|ChoiceScarf|Levitate|FlashCannon,DracoMeteor,Uturn,Flamethrower|Timid|,,,252,4,252|||||,,,,,Steel]Munkidori||AssaultVest|ToxicChain|Uturn,SludgeBomb,FutureSight,FocusBlast|Timid|,,,252,4,252|||||,,,,,Poison","Garchomp||RockyHelmet|RoughSkin|SwordsDance,FireFang,Earthquake,DragonClaw|Jolly|,252,,,32,224|||||,,,,,Dragon]Cinderace||HeavyDutyBoots|Blaze|SuperFang,PyroBall,WillOWisp,Uturn|Jolly|,252,104,,,152|||||,,,,,Fire]Ninetales-Alola||LightClay|SnowWarning|AuroraVeil,Moonblast,Encore,Blizzard|Timid|,,24,252,,232||,0,,,,|||,,,,,Ice]Tera Captain|Cetitan|SitrusBerry|SlushRush|BellyDrum,IceShard,IcicleCrash,Earthquake|Jolly|96,252,,,,160|||||,,,,,Ghost]Sceptile||RockyHelmet|Overgrow|ShedTail,Endeavor,LeechSeed,LeafStorm|Timid|248,,116,,,144||,0,,,,|||,,,,,Grass]Scizor||HeavyDutyBoots|Technician|SwordsDance,BulletPunch,Uturn,DualWingbeat|Adamant|248,252,,,,8|||||,,,,,Bug"],
+ ["Tera Captain|Regidrago|LoadedDice|DragonsMaw|DragonDance,Outrage,TeraBlast,ScaleShot|Lonely|,252,,4,,252|||||,,,,,Steel]Arboliva||Leftovers|SeedSower|StrengthSap,GigaDrain,HyperVoice,Encore|Calm|248,,,8,252,||,0,,,,|||,,,,,Grass]Clodsire||BlackSludge|Unaware|GunkShot,Toxic,StealthRock,Recover|Impish|248,,252,,8,|||||,,,,,Poison]Necrozma||WeaknessPolicy|PrismArmor|TrickRoom,SwordsDance,PhotonGeyser,XScissor|Brave|248,252,,,8,|||||,,,,,Psychic]Heatran||ChoiceScarf|FlameBody|FireBlast,MagmaStorm,EarthPower,StealthRock|Timid|80,,,252,,176||,0,,,,|||,,,,,Fire]Tera Captain|IronHands|ShucaBerry|QuarkDrive|Earthquake,ThunderPunch,SwordsDance,DrainPunch|Adamant|,252,4,,252,|||||,,,,,Poison","Darkrai||LifeOrb|BadDreams|DarkPulse,Psychic,FocusBlast,SuckerPunch|Rash|112,,4,252,,140|||||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,Taunt,Synthesis|Jolly|112,252,4,,,140|||||,,,,,Water]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,AuraSphere,Psyshock,Encore|Timid|88,,,252,,168||,0,,,,|||,,,,,Fairy]Uxie||RockyHelmet|Levitate|KnockOff,Uturn,Encore,PainSplit|Impish|248,,252,,8,|||||,,,,,Psychic]Tera Captain|Sandaconda|HeavyDutyBoots|ShedSkin|Earthquake,Rest,Glare,StealthRock|Impish|252,,252,,4,|||||,,,,,Water]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,EarthPower,CalmMind,RapidSpin|Modest|52,,,252,,204|||||,,,,,Stellar"],
+ ["Kyurem||ChoiceScarf|Pressure|DracoMeteor,IceBeam,FreezeDry,EarthPower|Timid|32,,,252,,224||,0,,,,|||,,,,,Dragon]Great Tusk||Leftovers|Protosynthesis|RapidSpin,IceSpinner,StealthRock,HeadlongRush|Adamant|252,24,116,,,116|||||,,,,,Ground]Meowscarada||ProtectivePads|Protean|KnockOff,TripleAxel,FlowerTrick,ThunderPunch|Jolly|80,252,,,,176|||||,,,,,Grass]Tera Captain|Gholdengo|AirBalloon|GoodasGold|Recover,PowerGem,NastyPlot,MakeItRain|Modest|248,,228,32,,||,0,,,,|||,,,,,Fairy]Alomomola||HeavyDutyBoots|Regenerator|Wish,Protect,PlayRough,FlipTurn|Careful|252,,4,,252,|||||,,,,,Water]Tera Captain|Fezandipiti|Leftovers|ToxicChain|Roost,Toxic,Uturn,Moonblast|Calm|248,,204,,56,|||||,,,,,Dragon","Landorus-Therian||Leftovers|Intimidate|Protect,Earthquake,StealthRock,Uturn|Jolly|,252,,,4,252|||||,,,,,Ground]Moltres||HeavyDutyBoots|FlameBody|Flamethrower,Uturn,Roost,AirSlash|Calm|252,,252,,,4|||||,,,,,Fire]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,Substitute,Glare,TeraBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Stellar]Glimmora||FocusSash|ToxicDebris|Spikes,PowerGem,EarthPower,MortalSpin|Naive|,4,,252,,252|||||,,,,,Rock]Walking Wake||BoosterEnergy|Protosynthesis|HydroPump,DracoMeteor,DragonPulse,Flamethrower|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Baxcalibur||LoadedDice|ThermalExchange|DragonDance,GlaiveRush,IcicleSpear,Earthquake|Adamant|,252,,,4,252|||||,,,,,Dragon"],
+ ["Slowking-Galar||CovertCloak|Regenerator|ThunderWave,ChillyReception,SludgeBomb,Surf|Calm|252,,4,,252,||,0,,,,|S||,,,,,Poison]Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|DragonPulse,TeraBlast,Thunderclap,DracoMeteor|Modest|248,,32,40,48,140||,20,,,,|||,,,,,Water]Tera Captain|Alomomola|RockyHelmet|Regenerator|FlipTurn,Wish,Protect,PlayRough|Impish|192,,248,,68,|||S||,,,,,Fairy]Iron Treads||Leftovers|QuarkDrive|Earthquake,HeavySlam,RapidSpin,StealthRock|Jolly|40,20,,,196,252|||S||,,,,,Ground]Moltres||HeavyDutyBoots|FlameBody|Flamethrower,Uturn,Hurricane,Roost|Calm|252,,4,,252,|||||,,,,,Fire]Meowscarada||ChoiceScarf|Protean|Uturn,TripleAxel,LowKick,FoulPlay|Jolly|104,252,,,,152|||S||,,,,,Grass","Latios||Leftovers|Levitate|LusterPurge,Substitute,CalmMind,AuraSphere|Timid|32,,,252,,224||,0,,,,|||,,,,,Dragon]Tera Captain|TyphlosionHisui|ChoiceSpecs|Frisk|ShadowBall,InfernalParade,Eruption,Flamethrower|Modest|160,,,252,,96||,0,,,,|||,,,,,Ghost]Iron Treads||AssaultVest|QuarkDrive|Earthquake,IronHead,RapidSpin,VoltSwitch|Jolly|,252,,,4,252|||||,,,,,Ground]Tera Captain|Quaquaval|LumBerry|Torrent|AquaStep,SwordsDance,CloseCombat,Substitute|Adamant|104,252,,,,152|||||,,,,,Fighting]Naclstack||Eviolite|PurifyingSalt|SaltCure,Recover,Earthquake,Curse|Careful|252,4,,,252,|||||,,,,,Rock]Enamorus||LifeOrb|CuteCharm|Moonblast,RainDance,WeatherBall,CalmMind|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy"],
+ ["Garchomp||RockyHelmet|RoughSkin|StealthRock,Earthquake,Facade,DragonClaw|Adamant|248,88,52,,,120|||S||,,,,,Dragon]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,PowerWhip,Trailblaze|Jolly|32,252,,,,224|||||,,,,,Water]Scizor||DampRock|Technician|RainDance,BulletPunch,CloseCombat,Uturn|Adamant|248,152,108,,,|||||,,,,,Bug]Zapdos||LifeOrb|Static|Thunderbolt,Hurricane,WeatherBall,Roost|Modest|16,,,252,,240||,0,,,,|||,,,,,Electric]Overqwil||RockyHelmet|Intimidate|PoisonJab,Liquidation,Crunch,PainSplit|Adamant|248,120,72,,68,|||||,,,,,Dark]Tera Captain|Hariyama|SitrusBerry|Guts|BellyDrum,BulletPunch,DrainPunch,KnockOff|Adamant|120,,252,,136,|||||,,,,,Fairy","Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,Thunderbolt,AuraSphere,CloseCombat|Naive|,4,,252,,252|||||,,,,,Fairy]Samurott-Hisui||LifeOrb|Sharpness|SuckerPunch,CeaselessEdge,FlipTurn,Megahorn|Jolly|,252,4,,,252|||||,,,,,Water]Tera Captain|Latias|ChoiceSpecs|Levitate|HealingWish,DracoMeteor,Trick,Psychic|Timid|,,4,252,,252||,0,,,,|||,,,,,Poison]Iron Treads||HeavyDutyBoots|QuarkDrive|StealthRock,RapidSpin,Earthquake,KnockOff|Jolly|,68,212,,,228|||||,,,,,Ground]Rotom-Heat||Leftovers|Levitate|Overheat,VoltSwitch,PainSplit,Reflect|Modest|156,,252,100,,||,0,,,,|||,,,,,Electric]Tera Captain|Gyarados|LumBerry|Moxie|DragonDance,Waterfall,Outrage,TemperFlare|Adamant|68,188,,,,252|||||,,,,,Dragon"],
+ ["Palafin||MysticWater|ZerotoHero|JetPunch,WaveCrash,Encore,FlipTurn|Adamant|,252,,,80,176|||||,,,,,Stellar]Tera Captain|Kilowattrel|ChoiceSpecs|VoltAbsorb|Thunderbolt,AirSlash,Uturn,TeraBlast|Timid|24,,,252,,232|||||,,,,,Water]Weezing-Galar||CustapBerry|NeutralizingGas|Defog,Taunt,StrangeSteam,DestinyBond|Bold|252,,252,4,,||,0,,,,|||,,,,,Steel]Tera Captain|Latias|Leftovers|Levitate|Thunderbolt,CalmMind,Recover,StoredPower|Bold|52,,252,,,204||,0,,,,|||,,,,,Electric]Heatran||HeavyDutyBoots|FlameBody|ScorchingSands,FlashCannon,WillOWisp,Lunge|Calm|,,172,80,172,84|||||,,,,,Flying]Meowscarada||ChoiceScarf|Protean|FlowerTrick,KnockOff,PlayRough,Uturn|Adamant|212,252,,,,44|||||,,,,,Fire","Electrode-Hisui||EjectPack|Soundproof|LeafStorm,VoltSwitch,Substitute,LeechSeed|Modest|200,,64,52,,192||,0,,,,|||,,,,,Electric]Samurott-Hisui||MysticWater|Sharpness|CeaselessEdge,RazorShell,SuckerPunch,SwordsDance|Jolly|152,252,,,,104|||||,,,,,Water]Tera Captain|Annihilape|ChoiceScarf|Defiant|RageFist,CloseCombat,TeraBlast,Uturn|Hasty|24,252,,,,232|||||,,,,,Steel]Tera Captain|Delphox|ColburBerry|Magician|NastyPlot,Flamethrower,TeraBlast,Agility|Timid|136,,,252,,120||,0,,,,|||,,,,,Ghost]Glimmora||ChoiceScarf|ToxicDebris|PowerGem,SludgeWave,EarthPower,MortalSpin|Timid|72,,,252,,184|||||,,,,,Rock]Tornadus-Therian||WacanBerry|Regenerator|BleakwindStorm,FocusBlast,Taunt,Uturn|Timid|252,,,88,,168|||||,,,,,Flying"],
+ ["Great Tusk||BoosterEnergy|Protosynthesis|BulkUp,HeadlongRush,CloseCombat,IceSpinner|Jolly|252,4,,,,252|||||,,,,,Steel]Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|CalmMind,DragonPulse,Thunderbolt,Thunderclap|Modest|120,,,252,,136||,20,,,,|||,,,,,Fairy]Samurott-Hisui||FocusSash|Sharpness|CeaselessEdge,AquaCutter,AquaJet,Megahorn|Jolly|8,252,,,,248|||||,,,,,Ghost]Cinderace||AirBalloon|Libero|PyroBall,GunkShot,LowKick,Uturn|Jolly|64,252,,,,192|||||,,,,,Grass]Tinkaton||RockyHelmet|MoldBreaker|StealthRock,GigatonHammer,PlayRough,KnockOff|Jolly|248,4,80,,,176|||||,,,,,Fire]Mesprit||Leftovers|Levitate|ThunderWave,Uturn,Psyshock,DazzlingGleam|Calm|248,,,12,236,12|||||,,,,,Fairy","Urshifu||ChopleBerry|UnseenFist|CloseCombat,Trailblaze,WickedBlow,SwordsDance|Jolly|24,252,,,,232|||||,,,,,Fighting]Tera Captain|Heatran|ChoiceScarf|FlashFire|MagmaStorm,TeraBlast,EarthPower,Flamethrower|Timid|16,,,252,,240||,0,,,,|||,,,,,Grass]Tsareena||RockyHelmet|QueenlyMajesty|RapidSpin,PowerWhip,Synthesis,Uturn|Impish|252,52,116,,,88|||||,,,,,Grass]Tera Captain|Sylveon|Leftovers|Pixilate|HyperVoice,TeraBlast,CalmMind,Protect|Bold|252,,128,56,72,||,0,,,,|||,,,,,Ground]Swampert||Leftovers|Torrent|Earthquake,StealthRock,FlipTurn,Liquidation|Impish|252,88,168,,,|||||,,,,,Water]Thundurus||SitrusBerry|Defiant|SupercellSlam,Acrobatics,BulkUp,Uturn|Adamant|24,252,,,,232|||||,,,,,Electric"],
+ ["Iron Bundle||HeavyDutyBoots|QuarkDrive|IceBeam,FreezeDry,HydroPump,FlipTurn|Timid|,,,252,96,160|||||,,,,,Ice]Iron Boulder||HeavyDutyBoots|QuarkDrive|MightyCleave,CloseCombat,Earthquake,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Rock]Corviknight||OccaBerry|MirrorArmor|BraveBird,Roost,Taunt,Uturn|Careful|252,,24,,232,|||||,,,,,Flying]Tera Captain|RagingBolt|Leftovers|Protosynthesis|CalmMind,Thunderclap,RisingVoltage,DragonPulse|Modest|,,,252,240,16||,20,,,,|||,,,,,Flying]Krookodile||SalacBerry|Moxie|Earthquake,KnockOff,CloseCombat,StealthRock|Jolly|132,,,,252,124|||||,,,,,Ground]Pincurchin||TerrainExtender|ElectricSurge|Discharge,Spikes,Recover,Memento|Calm|252,,,,200,56||,0,,,,|||,,,,,Electric","Ting-Lu||SitrusBerry|VesselofRuin|Earthquake,Ruination,Whirlwind,Spikes|Sassy|252,4,,,252,|||||,,,,,Dark]Ribombee||FocusSash|ShieldDust|StickyWeb,Moonblast,Uturn,StunSpore|Timid|248,,,8,,252|||||,,,,,Bug]Walking Wake||ChoiceSpecs|Protosynthesis|FlipTurn,DracoMeteor,HydroPump,Flamethrower|Modest|24,,,252,,232|||||,,,,,Water]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|Psychic,FieryDance,EnergyBall,TeraBlast|Timid|,,124,132,,252||,0,,,,|||,,,,,Ground]Gholdengo||AbilityShield|GoodasGold|FocusBlast,Recover,MakeItRain,ShadowBall|Calm|248,,,8,252,||,0,,,,|||,,,,,Steel]Flamigo||ChoiceScarf|Scrappy|Uturn,CloseCombat,BraveBird,Liquidation|Adamant|,252,,,28,228|||||,,,,,Flying"],
+ ["Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,FlareBlitz,Earthquake,MorningSun|Adamant|,252,4,,,252|||||,,,,,Fire]Tera Captain|Gholdengo|AirBalloon|GoodasGold|NastyPlot,ShadowBall,Recover,MakeItRain|Bold|252,,196,,,60|||||,,,,,Fairy]Primarina||Leftovers|LiquidVoice|CalmMind,PsychicNoise,DrainingKiss,IceBeam|Bold|252,,252,,4,||,0,,,,|||,,,,,Water]Gliscor||ToxicOrb|PoisonHeal|Earthquake,Spikes,Protect,Toxic|Impish|244,,248,,16,|||||,,,,,Ground]Corviknight||Leftovers|Pressure|BraveBird,BodyPress,Uturn,Roost|Impish|248,,252,,8,|||||,,,,,Flying]Magnezone||ChoiceSpecs|MagnetPull|Thunderbolt,FlashCannon,BodyPress,VoltSwitch|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel","Archaludon||AssaultVest|Stamina|ElectroShot,FlashCannon,BodyPress,DarkPulse|Modest|4,,,252,252,||,0,,,,|||,,,,,Steel]Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,CloseCombat,KnockOff,SpiritBreak|Jolly|16,252,,,,240|||||,,,,,Fairy]Pelipper||DampRock|Drizzle|Surf,Roost,Uturn,KnockOff|Relaxed|248,8,252,,,||,,,,,0|||,,,,,Water]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Earthquake,ToxicSpikes,StealthRock,Protect|Adamant|252,80,,,176,|||||,,,,,Ground]Tera Captain|Basculegion|ChoiceBand|SwiftSwim|WaveCrash,AquaJet,FlipTurn,TeraBlast|Adamant|60,252,,,,196|||||,,,,,Water]Manaphy||Leftovers|Hydration|TailGlow,FlipTurn,Surf,EnergyBall|Timid|252,,,72,,184|||||,,,,,Water"],
+ ["Cyclizar||ChestoBerry|Regenerator|ShedTail,RapidSpin,Taunt,KnockOff|Jolly|252,4,,,,252|||||,,,,,Dragon]Tera Captain|ArcanineHisui|ChoiceBand|RockHead|ExtremeSpeed,HeadSmash,FlareBlitz,Crunch|Adamant|132,252,60,,64,|||S||,,,,,Normal]Tera Captain|Azumarill|ChestoBerry|HugePower|PlayRough,BellyDrum,Superpower,AquaJet|Adamant|172,252,,,,84|||||,,,,,Fighting]Goodra-Hisui||Leftovers|Gooey|HeavySlam,Earthquake,GyroBall,KnockOff|Sassy|4,,252,,252,||,,,,,0|S||,,,,,Steel]Pecharunt||BlackSludge|PoisonPuppeteer|Hex,MalignantChain,PartingShot,FoulPlay|Quiet|252,,,180,76,||,0,,,,|||,,,,,Poison]Landorus-Therian||LifeOrb|Intimidate|SwordsDance,Earthquake,Fly,Outrage|Adamant|4,252,,,,252|||||,,,,,Ground","Zoroark-Hisui||FocusSash|Illusion|WillOWisp,BitterMalice,FocusBlast,Flamethrower|Modest|4,,,252,,252||,0,,,,|S||,,,,,Normal]Tera Captain|Haxorus|Leftovers|MoldBreaker|DragonDance,IronHead,CloseCombat,Earthquake|Adamant|4,252,,,,252|||S||,,,,,Steel]Hatterene||AssaultVest|MagicBounce|DrainingKiss,MysticalFire,Psychic,Nuzzle|Bold|4,,252,252,,|||S||,,,,,Psychic]Iron Hands||AssaultVest|QuarkDrive|FakeOut,DrainPunch,IcePunch,SupercellSlam|Adamant|84,132,40,,252,|||S||,,,,,Fighting]Pecharunt||Leftovers|PoisonPuppeteer|MalignantChain,Recover,ShadowBall,PartingShot|Calm|52,,,204,252,||,0,,,,|||,,,,,Ghost]Minior||WhiteHerb|ShieldsDown|ShellSmash,Acrobatics,RockSlide,ChargeBeam|Jolly|4,252,,,,252|||S||,,,,,Electric"],
+ ["Meowscarada||HeavyDutyBoots|Protean|Uturn,ToxicSpikes,BrickBreak,KnockOff|Jolly|8,252,,,,248|||||,,,,,Grass]Gholdengo||ChoiceSpecs|GoodasGold|MakeItRain,Hex,SteelBeam,DazzlingGleam|Modest|144,,,252,,112||,0,,,,|||,,,,,Steel]Tera Captain|Mamoswine|AssaultVest|ThickFat|IcicleCrash,Earthquake,IceShard,Trailblaze|Adamant|,252,,,32,224|||||,,,,,Steel]Tera Captain|Hydreigon|AssaultVest|Levitate|Uturn,DarkPulse,Surf,DracoMeteor|Timid|252,,,8,100,148|||||,,,,,Water]Galvantula||Leftovers|Unnerve|StickyWeb,VoltSwitch,Protect,GastroAcid|Calm|248,,,,252,8||,0,,,,|||,,,,,Bug]Weezing-Galar||ShucaBerry|NeutralizingGas|StrangeSteam,ClearSmog,PainSplit,Defog|Bold|252,,164,,92,||,0,,,,|||,,,,,Poison","Grimmsnarl||LightClay|Prankster|LightScreen,Reflect,PartingShot,PlayRough|Impish|244,,204,,60,|||S||,,,,,Dark]Dragonite||RockyHelmet|Multiscale|DragonDance,Earthquake,ExtremeSpeed,IceSpinner|Jolly|4,252,,,,252|||||,,,,,Normal]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,Flamethrower,RapidSpin,CalmMind|Calm|252,,144,,,112|||||,,,,,Stellar]Gliscor||ToxicOrb|PoisonHeal|StealthRock,Toxic,KnockOff,Protect||252,,112,,,144|||S||,,,,,Steel]Gholdengo||ChoiceScarf|GoodasGold|FocusBlast,MakeItRain,ShadowBall,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Ghost]Tera Captain|GreninjaBond|ChoiceSpecs|BattleBond|DarkPulse,IceBeam,SludgeWave,Surf|Timid|,,,252,4,252|||S||,,,,,Steel"],
+ ["Rotom-Heat||LightClay|Levitate|Reflect,LightScreen,VoltSwitch,Overheat|Calm|252,,24,44,176,12||,0,,,,|||,,,,,Electric]Tera Captain|Lucario|ChoiceBand|Justified|CloseCombat,ExtremeSpeed,MeteorMash,Crunch|Adamant|40,252,,,,216|||||,,,,,Normal]Meowscarada||FocusSash|Overgrow|TripleAxel,FlowerTrick,KnockOff,Spikes|Jolly|104,252,,,,152|||||,,,,,Grass]Primarina||RockyHelmet|Torrent|Moonblast,Surf,FlipTurn,Haze|Bold|252,,252,,4,|||||,,,,,Water]Tornadus||HeavyDutyBoots|Prankster|Psychic,GrassKnot,BleakwindStorm,NastyPlot|Timid|,,8,252,,248||,0,,,,|||,,,,,Flying]Tera Captain|Latias|KeeBerry|Levitate|CalmMind,Recover,StoredPower,Thunderbolt|Timid|184,,148,,,176||,0,,,,|||,,,,,Poison","Palafin||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,WaveCrash,ZenHeadbutt|Adamant|,252,4,,,252|||S||,,,,,Water]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,SludgeWave,DazzlingGleam,EnergyBall|Timid|,,252,4,,252|||S||,,,,,Fairy]Electivire||ExpertBelt|MotorDrive|Thunderbolt,Flamethrower,FocusBlast,Earthquake|Hasty|,4,,252,,252|||S||,,,,,Electric]Donphan||Leftovers|Sturdy|Earthquake,KnockOff,RapidSpin,StealthRock|Adamant|252,24,,,148,48|||S||,,,,,Ghost]Enamorus||ChoiceScarf|Contrary|Moonblast,EarthPower,SludgeBomb,HealingWish|Timid|,,,252,4,252||,0,,,,|S||,,,,,Stellar]Tera Captain|Sinistcha|Leftovers|Heatproof|CalmMind,MatchaGotcha,ShadowBall,StrengthSap|Bold|252,,160,,,96||,0,,,,|S||,,,,,Ghost"],
+ ["Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Toxic,DualWingbeat,HighHorsepower,Protect|Impish|244,16,56,,192,|||||,,,,,Flying]Tera Captain|Talonflame|ChoiceSpecs|GaleWings|AirSlash,Tailwind,Hurricane,Flamethrower|Modest|,,,252,4,252||,0,,,,|||,,,,,Flying]Slowking-Galar||ColburBerry|Regenerator|SludgeBomb,FutureSight,IceBeam,ChillyReception|Calm|252,,92,4,160,||,0,,,,|||,,,,,Poison]Weavile||ChoiceBand|Pressure|TripleAxel,KnockOff,IceShard,LowKick|Adamant|,252,,,4,252|||||,,,,,Dark]Iron Valiant||CustapBerry|QuarkDrive|CalmMind,ShadowBall,Moonblast,Endure|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Meowstic||LightClay|Prankster|PsychicTerrain,Reflect,LightScreen,Yawn|Calm|248,,8,,252,||,0,,,,|||,,,,,Psychic","Hawlucha||ChoiceScarf|Limber|DualWingbeat,DrainPunch,StoneEdge,Uturn|Adamant|252,252,,,,4|||||,,,,,Fighting]Komala||HeavyDutyBoots|Comatose|RapidSpin,IceSpinner,RockSlide,Wish|Impish|252,,252,,4,|||||,,,,,Normal]Tera Captain|Ceruledge|LumBerry|WeakArmor|SwordsDance,Poltergeist,BitterBlade,TeraBlast|Jolly|80,252,,,,176|||||,,,,,Water]Tera Captain|Crocalor|Eviolite|Unaware|WillOWisp,Flamethrower,Roar,SlackOff|Bold|228,,252,,28,||,0,,,,|||,,,,,Poison]Excadrill||OccaBerry|MoldBreaker|StealthRock,IronHead,Earthquake,RockSlide|Jolly|252,,,,32,224|||||,,,,,Ground]Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,SpiritBreak,ShadowClaw,IcePunch|Jolly|,252,,,4,252|||||,,,,,Fairy"],
+ ["Tornadus-Therian||ChilanBerry|Regenerator|KnockOff,FocusBlast,Taunt,Uturn|Timid|232,,,132,64,80|||||,,,,,Flying]Chi-Yu||ChoiceSpecs|BeadsofRuin|DarkPulse,Overheat,LavaPlume,Psychic|Timid|8,,,252,,248||,0,,,,|||,,,,,Dark]Metagross||Leftovers|ClearBody|StealthRock,Earthquake,KnockOff,BulletPunch|Adamant|88,168,,,252,|||||,,,,,Steel]Tera Captain|Quaquaval|RockyHelmet|Moxie|Roost,AquaStep,AquaJet,FlipTurn|Jolly|88,,244,,,176|||||,,,,,Grass]Tera Captain|Gardevoir|Leftovers|Trace|CalmMind,DrainingKiss,Thunderbolt,Psyshock|Modest|184,,144,164,,16||,0,,,,|||,,,,,Electric]Sandy Shocks||BoosterEnergy|Protosynthesis|Thunderbolt,EarthPower,Spikes,VoltSwitch|Modest|132,,,200,28,148||,0,,,,|||,,,,,Electric","Alomomola||AssaultVest|Regenerator|FlipTurn,AquaJet,PlayRough,MirrorCoat|Sassy|252,,4,,252,||,,,,,0|||,,,,,Water]Tera Captain|Armarouge|FocusSash|WeakArmor|Endure,PsychicTerrain,Psychic,ArmorCannon|Modest|112,,,252,,144||,0,,,,|||,,,,,Fire]Corviknight||RockyHelmet|MirrorArmor|Uturn,Defog,Roost,BodyPress|Impish|252,,252,,4,||,,,,,0|||,,,,,Flying]Tera Captain|RagingBolt|Leftovers|Protosynthesis|CalmMind,Thunderclap,Discharge,DracoMeteor|Modest|252,,212,32,,12||,20,,,,|||,,,,,Fairy]Weavile||ChoiceBand|Pressure|TripleAxel,KnockOff,AerialAce,IceShard|Jolly|32,252,,,,224|||||,,,,,Dark]Ursaluna-Bloodmoon||Leftovers|MindsEye|BloodMoon,Moonlight,EarthPower,CalmMind|Bold|252,,252,4,,||,0,,,,|||,,,,,Ground"],
+ ["Tera Captain|LandorusTherian|Leftovers|Intimidate|Earthquake,StealthRock,Uturn,Taunt|Careful|252,8,72,,176,|||||,,,,,Water]Iron Valiant||ChoiceSpecs|QuarkDrive|Thunderbolt,DestinyBond,Moonblast,Trick|Timid|,,40,252,,216||,0,,,,|||,,,,,Fairy]Blaziken||HeavyDutyBoots|SpeedBoost|FlareBlitz,Earthquake,SwordsDance,UpperHand|Adamant|,252,,,4,252|||S||,,,,,Fire]Raichu-Alola||ChoiceSpecs|SurgeSurfer|VoltSwitch,Surf,Thunderbolt,DrainingKiss|Timid|,,,252,72,184||,0,,,,|S||,,,,,Electric]Samurott-Hisui||FocusSash|Sharpness|CeaselessEdge,AquaCutter,SuckerPunch,FlipTurn|Adamant|,252,,,4,252|||||,,,,,Water]Tera Captain|Tsareena|ChoiceScarf|QueenlyMajesty|RapidSpin,TripleAxel,PowerWhip,Uturn|Adamant|,252,,,4,252|||||,,,,,Electric","Palafin-Hero||ChoiceBand|ZerotoHero|WaveCrash,FlipTurn,IcePunch,JetPunch|Adamant|16,252,,,,240|||||,,,,,Water]Meowscarada||ExpertBelt|Protean|FlowerTrick,Uturn,TripleAxel,ThunderPunch|Jolly|56,252,,,,200|||||,,,,,Grass]Scream Tail||PetayaBerry|Protosynthesis|Wish,Protect,Psychic,DazzlingGleam|Bold|248,,252,8,,||,0,,,,|||,,,,,Fairy]Corviknight||Leftovers|Pressure|Roost,Uturn,BraveBird,Defog|Impish|248,,152,,108,|||||,,,,,Flying]Tera Captain|SandyShocks|HeavyDutyBoots|Protosynthesis|TeraBlast,Thunderbolt,Rest,SleepTalk|Bold|252,,68,188,,||,0,,,,|||,,,,,Bug]Typhlosion-Hisui||HeavyDutyBoots|Frisk|SolarBeam,Flamethrower,ShadowBall,WillOWisp|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire"],
+ ["Iron Bundle||ChoiceScarf|QuarkDrive|FlipTurn,HydroPump,FreezeDry,Encore|Timid|,,,252,4,252|||||,,,,,Ice]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|SludgeBomb,Thunderbolt,VoltSwitch,FocusBlast|Timid|,,4,252,,252||,0,,,,|S||,,,,,Flying]Gholdengo||AirBalloon|GoodasGold|MakeItRain,ShadowBall,Recover,Trick|Bold|252,,194,,,64||,0,,,,|||,,,,,Steel]Sylveon||ChoiceSpecs|Pixilate|HyperVoice,Psyshock,ShadowBall,AlluringVoice|Modest|252,,,252,4,||,0,,,,|||,,,,,Fairy]Tera Captain|OricorioPomPom|HeavyDutyBoots|Dancer|Substitute,QuiverDance,RevelationDance,AirSlash|Modest|,,,252,4,252||,0,,,,|S||,,,,,Ground]Garchomp||RockyHelmet|RoughSkin|Spikes,StealthRock,Earthquake,DragonTail|Jolly|252,,4,,,252|||||,,,,,Dragon","Annihilape||Leftovers|Defiant|BulkUp,DrainPunch,RageFist,FirePunch|Adamant|252,252,,,4,|||||,,,,,Fighting]Tera Captain|Mamoswine|LoadedDice|ThickFat|Trailblaze,IcicleSpear,RockBlast,IceShard|Jolly|,252,,,4,252|||||,,,,,Grass]Iron Valiant||FocusSash|QuarkDrive|SwordsDance,ShadowSneak,CloseCombat,SpiritBreak|Jolly|,252,,,4,252|||||,,,,,Fairy]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,IvyCudgel,HornLeech,PlayRough|Jolly|,252,,,4,252|||||,,,,,Fire]Tera Captain|Dondozo|Leftovers|Unaware|Curse,WaveCrash,Rest,SleepTalk|Impish|252,4,252,,,|||||,,,,,Grass]Weezing-Galar||BlackSludge|Levitate|Haze,StrangeSteam,WillOWisp,Defog|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison"],
+ ["Great Tusk||PasshoBerry|Protosynthesis|BulkUp,RapidSpin,BodyPress,HeadlongRush|Adamant|252,252,,,4,|||||,,,,,Ground]Palafin||Leftovers|ZerotoHero|FlipTurn,JetPunch,DrainPunch,BulkUp|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|Gholdengo|SpellTag|GoodasGold|ShadowBall,DazzlingGleam,NastyPlot,Recover|Modest|252,,,252,4,||,0,,,,|||,,,,,Fairy]Rillaboom||GrassySeed|GrassySurge|SwordsDance,Acrobatics,KnockOff,GrassyGlide|Jolly|,252,,,4,252|||||,,,,,Grass]Hydreigon||ChoiceScarf|Levitate|DarkPulse,Uturn,FlashCannon,Tailwind|Timid|,,,252,4,252|||||,,,,,Dark]Ditto||ChoiceScarf|Imposter|Transform|Serious|252,,,,,||,30,,,,|||,,,,,Normal","Palafin-Hero||AssaultVest|ZerotoHero|FlipTurn,WaveCrash,IcePunch,JetPunch|Jolly|,132,,,124,252|||||,,,,,Water]Tera Captain|Gholdengo|ShucaBerry|GoodasGold|MakeItRain,ShadowBall,Recover,ThunderWave|Bold|248,,252,8,,||,0,,,,|||,,,,,Grass]Tera Captain|Jolteon|AssaultVest|VoltAbsorb|Thunderbolt,TeraBlast,AlluringVoice,ShadowBall|Modest|,,152,224,,132||,0,,,,|||,,,,,Grass]Hydreigon||ChoiceScarf|Levitate|DracoMeteor,DarkPulse,Uturn,FireBlast|Modest|248,,12,116,,132|||||,,,,,Dark]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,PlayRough,Substitute,WoodHammer|Jolly|80,252,,,,176|||||,,,,,Fire]Weezing-Galar||RockyHelmet|Levitate|StrangeSteam,Flamethrower,PainSplit,Defog|Bold|248,,252,8,,||,0,,,,|||,,,,,Poison"],
+ ["Urshifu||ChoiceBand|UnseenFist|WickedBlow,Uturn,CloseCombat,SuckerPunch|Jolly|,252,,,4,252|||||,,,,,Fighting]Tera Captain|Cloyster|NeverMeltIce|SkillLink|IcicleSpear,ShellSmash,IceShard,RockBlast|Adamant|104,252,,,4,148|||||,,,,,Poison]Gholdengo||AirBalloon|GoodasGold|MakeItRain,ShadowBall,NastyPlot,Recover|Modest|148,,,252,,108||,0,,,,|||,,,,,Steel]Tera Captain|RagingBolt|HeavyDutyBoots|Protosynthesis|Thunderbolt,Thunderclap,DragonPulse,CalmMind|Modest|252,,,252,4,||,20,,,,|||,,,,,Dragon]Scream Tail||Leftovers|Protosynthesis|Encore,DazzlingGleam,Wish,Roar|Timid|252,,,,4,252||,0,,,,|||,,,,,Fairy]Coalossal||Leftovers|FlameBody|WillOWisp,HeatCrash,StealthRock,Reflect|Careful|252,4,,,252,|||||,,,,,Rock","Enamorus-Therian||KebiaBerry|Overcoat|DrainingKiss,IronDefense,EarthPower,CalmMind|Bold|248,,252,8,,||,0,,,,|||,,,,,Fairy]Pecharunt||RockyHelmet|PoisonPuppeteer|PartingShot,Recover,Hex,MalignantChain|Modest|252,,,236,,20||,0,,,,|||,,,,,Poison]Roaring Moon||ChoiceBand|Protosynthesis|KnockOff,Earthquake,Outrage,Uturn|Jolly|32,252,,,,224|||||,,,,,Dragon]Dewgong||RockyHelmet|ThickFat|KnockOff,FlipTurn,Haze,Encore|Impish|248,,252,,8,|||||,,,,,Water]Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|KnockOff,SwordsDance,IvyCudgel,HornLeech|Jolly|108,252,,,,148|||||,,,,,Rock]Ursaluna-Bloodmoon||Leftovers|MindsEye|CalmMind,BloodMoon,EarthPower,Moonlight|Modest|252,,172,76,,8||,0,,,,|||,,,,,Ground"],
+ ["Great Tusk||RoseliBerry|Protosynthesis|HeadlongRush,StoneEdge,StealthRock,RapidSpin|Adamant|152,,,,252,104|||||,,,,,Ground]Tera Captain|RotomFrost|AssaultVest|Levitate|Blizzard,Discharge,VoltSwitch,FoulPlay|Calm|252,,,,168,88||,0,,,,|||,,,,,Water]Skuntank||RockyHelmet|Aftermath|GunkShot,FireBlast,Taunt,Memento|Sassy|252,,76,40,140,|||||,,,,,Poison]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,Trailblaze,SwordsDance|Jolly|160,252,,,,96|||||,,,,,Water]Noivern||ChoiceScarf|Infiltrator|Hurricane,Flamethrower,Uturn,Switcheroo|Timid|,,,252,4,252|||||,,,,,Flying]Enamorus||BabiriBerry|CuteCharm|Moonblast,MysticalFire,HealingWish,CalmMind|Timid|,,128,252,,128||,0,,,,|||,,,,,Fairy","Tera Captain|Annihilape|ChoiceScarf|Defiant|TeraBlast,RageFist,CloseCombat,Uturn|Jolly|24,252,,,,232|||||,,,,,Ghost]Greninja-Bond||LoadedDice|BattleBond|Surf,DarkPulse,WaterShuriken,IceBeam|Timid|96,,,252,,160|||||,,,,,Water]Tornadus-Therian||LightBall|Regenerator|Fling,Acrobatics,BulkUp,KnockOff|Jolly|248,36,56,,,168|||||,,,,,Flying]Ting-Lu||Leftovers|VesselofRuin|Ruination,StealthRock,HeavySlam,Earthquake|Careful|252,,4,,252,|||||,,,,,Dark]Tera Captain|Comfey|ChoiceSpecs|Triage|DrainingKiss,GigaDrain,Uturn,Synthesis|Modest|252,,4,252,,|||||,,,,,Grass]Scizor||RockyHelmet|Technician|BulletPunch,KnockOff,Endure,Uturn|Impish|248,,252,,8,|||||,,,,,Bug"],
+ ["Palafin||AssaultVest|ZerotoHero|Boomburst,HydroPump,FlipTurn,Surf|Modest|64,,,192,,252|||||,,,,,Water]Zapdos||HeavyDutyBoots|Static|ThunderWave,Uturn,Roost,Thunderbolt|Bold|248,,252,,8,|||||,,,,,Electric]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Spikes,Protect,Earthquake,KnockOff|Jolly|,72,252,,,184|||||,,,,,Normal]Tinkaton||Leftovers|MoldBreaker|StealthRock,KnockOff,ThunderWave,GigatonHammer|Careful|252,,,,252,|||||,,,,,Fairy]Mismagius||ChoiceScarf|Levitate|ShadowBall,DazzlingGleam,DestinyBond,MysticalFire|Timid|144,,,128,4,232||,0,,,,|||,,,,,Ghost]Tera Captain|Tyranitar|AssaultVest|Unnerve|KnockOff,HeavySlam,IcePunch,FirePunch|Adamant|204,52,,,252,|||||,,,,,Flying","Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,Psyshock,ShadowBall,Thunderbolt|Timid|88,,,252,,168||,0,,,,|||,,,,,Fairy]Garchomp||LoadedDice|RoughSkin|Earthquake,ScaleShot,SwordsDance,Substitute|Jolly|4,252,,,,252|||||,,,,,Dragon]Golurk||PasshoBerry|NoGuard|StealthRock,Poltergeist,Earthquake,IcePunch|Adamant|252,252,,,4,|||||,,,,,Ground]Rotom-Wash||Leftovers|Levitate|VoltSwitch,HydroPump,WillOWisp,Protect|Bold|252,,120,,136,||,0,,,,|||,,,,,Electric]Scizor||HeavyDutyBoots|Technician|KnockOff,Uturn,Defog,BulletPunch|Careful|248,132,,,128,|||||,,,,,Bug]Tera Captain|Skeledirge|HeavyDutyBoots|Unaware|TorchSong,SlackOff,WillOWisp,Hex|Bold|252,,252,,4,||,0,,,,|||,,,,,Dragon"],
+ ["Tera Captain|GreatTusk|Leftovers|Protosynthesis|BulkUp,RapidSpin,CloseCombat,Earthquake|Adamant|252,4,,,,252|||||,,,,,Fairy]Tornadus-Therian||AssaultVest|Regenerator|AirSlash,KnockOff,HeatWave,Uturn|Timid|168,,,188,,152|||||,,,,,Flying]Samurott-Hisui||ChoiceScarf|Sharpness|CeaselessEdge,SuckerPunch,SacredSword,FlipTurn|Jolly|48,252,4,,,204|||||,,,,,Water]Latios||ChoiceSpecs|Levitate|Psyshock,Thunderbolt,DracoMeteor,FlipTurn|Timid|16,,,252,,240|||||,,,,,Dragon]Tinkaton||Leftovers|Pickpocket|ThunderWave,StealthRock,KnockOff,GigatonHammer|Careful|252,,,,220,36|||||,,,,,Fairy]Tera Captain|Bellibolt|RedCard|Static|Toxic,VoltSwitch,SlackOff,TeraBlast|Bold|248,,172,,80,8||,0,,,,|||,,,,,Fairy","Iron Bundle||ChoiceScarf|QuarkDrive|HydroPump,FreezeDry,Blizzard,FlipTurn|Modest|,,,252,4,252|||||,,,,,Ice]Corviknight||SitrusBerry|Pressure|AirSlash,BodyPress,Defog,Roost|Bold|248,,252,,8,||,0,,,,|||,,,,,Flying]Slowking-Galar||SitrusBerry|Regenerator|IceBeam,ToxicSpikes,SlackOff,ChillyReception|Calm|248,,8,,252,||,0,,,,|||,,,,,Poison]Tera Captain|Hydreigon|ChopleBerry|Levitate|StealthRock,DracoMeteor,Earthquake,ThunderWave|Hasty|,252,,,32,224|||||,,,,,Steel]Infernape||HeavyDutyBoots|Blaze|FlareBlitz,KnockOff,CloseCombat,SlackOff|Jolly|112,,252,,,144|||||,,,,,Fire]Tera Captain|Torterra|BabiriBerry|ShellArmor|SwordsDance,TeraBlast,Earthquake,Synthesis|Careful|248,,8,,252,|||||,,,,,Fairy"],
+ ["Iron Valiant||LifeOrb|QuarkDrive|Moonblast,Encore,IcePunch,CloseCombat|Naive|,24,,252,,232|||||,,,,,Fairy]Tera Captain|GreninjaBond|LifeOrb|BattleBond|DarkPulse,IceBeam,Extrasensory,GunkShot|Hasty|,72,,252,,184|||||,,,,,Dark]Gliscor||ToxicOrb|PoisonHeal|Earthquake,Toxic,BrickBreak,Protect|Careful|244,,44,,220,|||||,,,,,Ground]Slowking-Galar||CustapBerry|Regenerator|ChillyReception,SludgeBomb,ThunderWave,PsychicNoise|Calm|252,,4,,252,||,0,,,,|||,,,,,Poison]Tera Captain|Appletun|RockyHelmet|ThickFat|DracoMeteor,AppleAcid,Recover,DragonTail|Bold|252,,252,,4,|||S||,,,,,Fairy]Forretress||MentalHerb|Sturdy|ToxicSpikes,VoltSwitch,Spikes,RapidSpin|Sassy|252,,4,,252,|||||,,,,,Bug","Tera Captain|Serperior|ChopleBerry|Contrary|LeafStorm,TeraBlast,Synthesis,Taunt|Timid|248,,,148,,112||,0,,,,|||,,,,,Steel]Gouging Fire||BoosterEnergy|Protosynthesis|HeatCrash,DoubleEdge,DragonDance,Substitute|Adamant|56,252,156,,20,24|||||,,,,,Fire]Jirachi||EjectButton|SereneGrace|IronHead,IcePunch,FirePunch,StealthRock|Adamant|252,164,92,,,|||||,,,,,Steel]Quaquaval||HeavyDutyBoots|Moxie|WaveCrash,CloseCombat,RapidSpin,Roost|Adamant|160,164,,,,184|||||,,,,,Water]Zapdos||HeavyDutyBoots|Pressure|Discharge,Hurricane,Substitute,Roost|Calm|248,,36,,220,4||,0,,,,|S||,,,,,Electric]Grimmsnarl||LightClay|Prankster|SpiritBreak,Reflect,ThunderWave,LightScreen|Careful|248,92,,,168,|||||,,,,,Dark"],
+ ["Great Tusk||Leftovers|Protosynthesis|Earthquake,RapidSpin,TemperFlare,HeadSmash|Jolly|124,180,24,,20,160|||||,,,,,Ground]Weavile||HeavyDutyBoots|Pressure|TripleAxel,SwordsDance,KnockOff,IceShard|Jolly|12,252,,,4,240|||||,,,,,Dark]Zapdos||LightClay|Static|Hurricane,Roost,Uturn,LightScreen|Bold|140,,60,64,48,196|||||,,,,,Electric]Tinkaton||Leftovers|MoldBreaker|GigatonHammer,StealthRock,Encore,KnockOff|Careful|124,24,32,,84,244|||||,,,,,Fairy]Dragalge||HabanBerry|Adaptability|SludgeBomb,DracoMeteor,FlipTurn,ToxicSpikes|Calm|252,,44,64,148,|||||,,,,,Poison]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,Trailblaze,SwordsDance,Taunt|Adamant|124,124,40,,104,116|||||,,,,,Water","Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|DracoMeteor,CalmMind,Thunderclap,Thunderbolt|Modest|,,52,252,,204||,20,,,,|||,,,,,Water]Meowscarada||SitrusBerry|Protean|ThunderPunch,LeafStorm,BrickBreak,TripleAxel|Naughty|,252,52,,,204|||||,,,,,Grass]Bronzong||ColburBerry|Levitate|IronDefense,PsychicNoise,BodyPress,TrickRoom|Calm|252,,,4,252,||,0,,,,|||,,,,,Steel]Araquanid||CustapBerry|WaterBubble|StickyWeb,Endeavor,Lunge,Liquidation|Adamant|132,252,,,88,36|||||,,,,,Water]Tera Captain|Chandelure|ChoiceScarf|FlashFire|Flamethrower,Overheat,Psychic,ShadowBall|Modest|16,,,252,,240||,0,,,,|||,,,,,Fire]Weezing-Galar||RockyHelmet|Levitate|PlayRough,Overheat,Toxic,Defog|Impish|252,,252,,,4|||||,,,,,Poison"],
+ ["Volcarona||HeavyDutyBoots|FlameBody|QuiverDance,FieryDance,BugBuzz,MorningSun|Timid|252,,104,,,152||,0,,,,|S||,,,,,Bug]Iron Boulder||ChoiceBand|QuarkDrive|WildCharge,CloseCombat,MightyCleave,XScissor|Jolly|,252,,,4,252|||||,,,,,Rock]Iron Valiant||ChoiceScarf|QuarkDrive|Trick,Moonblast,CloseCombat,KnockOff|Naive|,252,,4,,252|||S||,,,,,Fairy]Maushold-Four||WideLens|Technician|PopulationBomb,TidyUp,Bite,Encore|Jolly|,252,,,4,252|||||,,,,,Normal]Kommo-o||ThroatSpray|Bulletproof|ClangorousSoul,Boomburst,ClangingScales,AuraSphere|Timid|,,,252,4,252||,0,,,,|||,,,,,Normal]Gliscor||ToxicOrb|PoisonHeal|Earthquake,KnockOff,Protect,Toxic|Impish|252,,180,,,76|||S||,,,,,Ground","Tera Captain|Latias|Leftovers|Levitate|CalmMind,Agility,ShadowBall,MistBall|Timid|248,,244,,,16||,0,,,,|||,,,,,Poison]Scizor||RockyHelmet|Technician|BulletPunch,DualWingbeat,Uturn,KnockOff|Adamant|200,252,,,4,52|||||,,,,,Stellar]Heatran||Leftovers|FlameBody|MagmaStorm,ScorchingSands,Protect,WillOWisp|Bold|248,,248,12,,||,0,,,,|S||,,,,,Stellar]Gliscor||ToxicOrb|PoisonHeal|Protect,Earthquake,IceFang,Spikes|Adamant|240,216,36,,,16|||S||,,,,,Stellar]Greninja-Bond||LoadedDice|BattleBond|WaterShuriken,Surf,IceBeam,Extrasensory|Timid|48,,,252,,208|||S||,,,,,Stellar]Tera Captain|Bellibolt|Leftovers|Static|TeraBlast,Discharge,VoltSwitch,SlackOff|Bold|240,,208,44,16,||,0,,,,|||,,,,,Poison"],
+ ["Tera Captain|Rillaboom|LifeOrb|GrassySurge|GrassyGlide,SwordsDance,HighHorsepower,KnockOff|Jolly|,252,,,4,252|||||,,,,,Ground]Sneasler||GrassySeed|Unburden|Acrobatics,DireClaw,CloseCombat,ShadowClaw|Adamant|,252,,,4,252|||||,,,,,Fighting]Gouging Fire||BoosterEnergy|Protosynthesis|DragonDance,Earthquake,FlareBlitz,ScaleShot|Adamant|,252,,,4,252|||||,,,,,Fire]Enamorus||ChoiceScarf|Contrary|EarthPower,Moonblast,MysticalFire,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Tera Captain|Blastoise|Leftovers|Torrent|DarkPulse,IceBeam,TeraBlast,ShellSmash|Modest|,,,252,4,252||,0,,,,|||,,,,,Ground]Skarmory||Leftovers|Sturdy|BraveBird,Whirlwind,Roost,Taunt|Impish|252,,232,,,24|||||,,,,,Steel","Tera Captain|GreatTusk|RockyHelmet|Protosynthesis|TemperFlare,Earthquake,IronHead,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Ground]Tera Captain|Hoopa|ChoiceScarf|Magician|TeraBlast,Psychic,ShadowBall,DestinyBond|Timid|,,4,252,,252||,0,,,,|||,,,,,Dragon]Latios||HeavyDutyBoots|Levitate|AirSlash,FlipTurn,Trick,Recover|Timid|128,,76,52,,252|||||,,,,,Dragon]Gholdengo||OccaBerry|GoodasGold|MakeItRain,Hex,ThunderWave,Recover|Calm|252,,156,8,92,||,0,,,,|||,,,,,Steel]Chi-Yu||ChoiceScarf|BeadsofRuin|DarkPulse,Flamethrower,Psychic,Memento|Timid|4,,,252,,252||,0,,,,|||,,,,,Dark]Toxapex||RockyHelmet|Regenerator|Haze,Toxic,Protect,Surf|Modest|252,,80,16,160,||,0,,,,|||,,,,,Poison"],
+ ["Chi-Yu||ChoiceScarf|BeadsofRuin|Flamethrower,DarkPulse,FireBlast,Psychic|Modest|,,,252,4,252|||||,,,,,Fire]Uxie||HeavyDutyBoots|Levitate|StealthRock,Psychic,Uturn,KnockOff|Timid|252,,40,,,216|||||,,,,,Dark]Tera Captain|Rhyperior|RockyHelmet|SolidRock|Earthquake,StealthRock,Avalanche,StoneEdge|Adamant|152,20,,,252,84|||||,,,,,Flying]Grafaiai||HeavyDutyBoots|PoisonTouch|Uturn,KnockOff,GunkShot,Encore|Jolly|,252,,,4,252|||||,,,,,Dark]Azumarill||AssaultVest|HugePower|Liquidation,PlayRough,AquaJet,IceSpinner|Adamant|252,152,,,104,|||||,,,,,Water]Noivern||HeavyDutyBoots|Infiltrator|Defog,SuperFang,Uturn,Roost|Timid|,,,252,4,252|||||,,,,,Fire","Zarude||ChoiceScarf|LeafGuard|KnockOff,PowerWhip,CloseCombat,Uturn|Jolly|40,252,,,,216|||||,,,,,Dark]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,SludgeWave,TeraBlast,MorningSun|Timid|124,,,132,,252||,0,,,,|||,,,,,Water]Tinkaton||OccaBerry|Pickpocket|StealthRock,ThunderWave,KnockOff,GigatonHammer|Careful|248,32,,,216,12|||||,,,,,Fairy]Great Tusk||AssaultVest|Protosynthesis|RapidSpin,KnockOff,Earthquake,IceSpinner|Adamant|,160,,,172,176|||||,,,,,Ground]Tornadus-Therian||HeavyDutyBoots|Regenerator|Taunt,KnockOff,BleakwindStorm,GrassKnot|Timid|140,,,124,48,196|||||,,,,,Flying]Tera Captain|Mesprit|RockyHelmet|Levitate|LightScreen,Reflect,Psychic,Uturn|Bold|240,,252,,,16|||||,,,,,Fairy"],
+ ["Tera Captain|Metagross|AssaultVest|ClearBody|HeavySlam,PsychicFangs,IcePunch,Explosion|Adamant|252,44,,,212,|||||,,,,,Normal]Iron Bundle||NeverMeltIce|QuarkDrive|FreezeDry,HydroPump,IceBeam,Taunt|Timid|156,,,252,4,96||,0,,,,|S||,,,,,Ice]Clefable||Leftovers|Unaware|IceBeam,Moonblast,Wish,Flamethrower||252,,252,4,,||,0,,,,|||,,,,,Fairy]Gliscor||ToxicOrb|PoisonHeal|Protect,Facade,SwordsDance,IceFang|Impish|252,4,252,,,|||S||,,,,,Ground]Tera Captain|Magnezone|ChoiceSpecs|MagnetPull|FlashCannon,Thunderbolt,SteelBeam,VoltSwitch|Modest|248,,,252,8,||,0,,,,|||,,,,,Electric]Blissey||Leftovers|NaturalCure|SeismicToss,SoftBoiled,ThunderWave,StealthRock|Calm|,,252,4,252,||,0,,,,|||,,,,,Normal","Iron Valiant||LifeOrb|QuarkDrive|CloseCombat,PoisonJab,IcePunch,ShadowSneak|Jolly|48,252,,,,208|||||,,,,,Fairy]Corviknight||ShedShell|MirrorArmor|IronHead,Uturn,Defog,Roost|Careful|252,,4,,252,|||||,,,,,Flying]Tera Captain|Serperior|ChoiceScarf|Contrary|LeafStorm,TeraBlast,KnockOff,Glare|Timid|24,,,252,,232|||||,,,,,Stellar]Arbok||BlackSludge|Intimidate|GunkShot,KnockOff,GastroAcid,ToxicSpikes|Careful|248,,8,,252,|||||,,,,,Poison]Tera Captain|Dudunsparce|Leftovers|Rattled|BodyPress,Hex,Roost,CalmMind|Bold|248,,252,,8,||,0,,,,|||,,,,,Ghost]Garchomp||Leftovers|RoughSkin|Earthquake,ScaleShot,Spikes,SwordsDance|Careful|248,,,,128,132|||||,,,,,Dragon"],
+ ["Chi-Yu||ChoiceSpecs|BeadsofRuin|DarkPulse,Flamethrower,Psychic,Overheat|Timid|,,4,252,,252||,0,,,,|||,,,,,Bug]Iron Bundle||ChoiceScarf|QuarkDrive|FreezeDry,HydroPump,Encore,Uturn|Rash|132,,,252,,124|||S||,,,,,Bug]Iron Treads||BoosterEnergy|QuarkDrive|Earthquake,IceSpinner,VoltSwitch,RapidSpin|Jolly|120,,144,,4,240|||S||,,,,,Bug]Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|IvyCudgel,HornLeech,LowKick,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Rock]Zoroark-Hisui||FocusSash|Illusion|HyperVoice,ShadowBall,KnockOff,Uturn|Timid|,,,252,48,208||,13,,,,|S||,,,,,Bug]Tera Captain|EnamorusTherian|RockyHelmet|Overcoat|DrainingKiss,MysticalFire,EarthPower,HealingWish|Bold|252,,252,,4,||,0,,,,|S||,,,,,Water","Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|SurgingStrikes,CloseCombat,Uturn,AquaJet|Adamant|80,252,4,,,172|||||,,,,,Water]Darkrai||AssaultVest|BadDreams|DarkPulse,SludgeBomb,Thunder,FocusBlast|Timid|120,,,252,,136||,0,,,,|||,,,,,Dark]Slowking-Galar||BlackSludge|Regenerator|SludgeBomb,ChillyReception,Flamethrower,FutureSight|Calm|248,,8,,252,||,0,,,,|||,,,,,Poison]Orthworm||SitrusBerry|EarthEater|ShedTail,Earthquake,IronHead,StealthRock|Impish|252,,252,,4,|||||,,,,,Steel]Tera Captain|Delphox|HeavyDutyBoots|Blaze|FocusBlast,Flamethrower,DazzlingGleam,CalmMind|Timid|32,,,252,,224||,0,,,,|||,,,,,Fairy]Zapdos||ChoiceScarf|Static|Discharge,HeatWave,Hurricane,VoltSwitch|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric"],
+ ["Tera Captain|Latias|RockyHelmet|Levitate|DragonPulse,Recover,StoredPower,CalmMind|Timid|252,,80,,,176||,0,,,,|||,,,,,Poison]Greninja-Bond||ChoiceSpecs|BattleBond|Surf,DarkPulse,WaterShuriken,Uturn|Timid|16,,,252,,240|||||,,,,,Water]Iron Treads||Leftovers|QuarkDrive|RapidSpin,HeavySlam,VoltSwitch,Endeavor|Adamant|8,160,,,252,88|||||,,,,,Ground]Gouging Fire||BoosterEnergy|Protosynthesis|MorningSun,DragonDance,FlareBlitz,Outrage|Adamant|48,252,,,,208|||||,,,,,Fire]Snorlax||CustapBerry|ThickFat|HeatCrash,HighHorsepower,BodySlam,Yawn|Careful|40,216,,,252,|||||,,,,,Normal]Tera Captain|Toxicroak|LifeOrb|DrySkin|VacuumWave,SuckerPunch,SludgeWave,NastyPlot|Timid|,4,,252,,252|||||,,,,,Fighting","Sneasler||ChoiceBand|PoisonTouch|Uturn,DireClaw,CloseCombat,GunkShot|Jolly|,252,,,4,252|||||,,,,,Fighting]Quagsire||Leftovers|Unaware|Recover,Toxic,Earthquake,Spikes|Careful|252,4,44,,208,|||||,,,,,Water]Chi-Yu||ChoiceScarf|BeadsofRuin|Overheat,DarkPulse,Flamethrower,Taunt|Modest|4,,,252,,252||,0,,,,|||,,,,,Dark]Tera Captain|Latias|SalacBerry|Levitate|CalmMind,Recover,DragonPulse,StoredPower|Timid|252,,,4,,252||,0,,,,|||,,,,,Fairy]Rillaboom||Leftovers|GrassySurge|Protect,LeechSeed,GrassyGlide,StompingTantrum|Adamant|252,252,4,,,|||||,,,,,Grass]Tera Captain|Vikavolt|CustapBerry|Levitate|StickyWeb,VoltSwitch,BugBuzz,EnergyBall|Modest|252,,,252,4,||,0,,,,|||,,,,,Electric"],
+ ["Weavile||HeavyDutyBoots|Pickpocket|SwordsDance,IceShard,KnockOff,Protect|Adamant|84,252,,,,172|||||,,,,,Dark]Heatran||ShucaBerry|FlameBody|StealthRock,EarthPower,LavaPlume,WillOWisp|Bold|248,,180,,,80||,0,,,,|||,,,,,Fire]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Substitute,DragonPulse,Thunderbolt,TeraBlast|Modest|156,,,252,,100||,20,,,,|||,,,,,Poison]Oricorio-Sensu||HeavyDutyBoots|Dancer|RevelationDance,Defog,Roost,QuiverDance|Modest|184,,,76,,248||,0,,,,|||,,,,,Ghost]Palafin-Hero||PunchingGlove|ZerotoHero|FlipTurn,DrainPunch,IcePunch,JetPunch|Adamant|,252,,,4,252|||||,,,,,Water]Tera Captain|Sylveon|Leftovers|Pixilate|Wish,Protect,HyperVoice,Psyshock|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel","Copperajah||Leftovers|HeavyMetal|Protect,KnockOff,HighHorsepower,HeavySlam|Adamant|208,44,4,,252,|||||,,,,,Steel]Garchomp||RockyHelmet|RoughSkin|StealthRock,PoisonJab,StoneEdge,Earthquake|Adamant|248,220,,,,40|||||,,,,,Dragon]Iron Valiant||FocusSash|QuarkDrive|Encore,CloseCombat,PoisonJab,SwordsDance|Adamant|,252,12,,,244|||||,,,,,Fairy]Tera Captain|Lokix|ChoiceScarf|TintedLens|TeraBlast,Uturn,LeechLife,KnockOff|Adamant|,252,20,,,236|||||,,,,,Water]Tentacruel||RockyHelmet|ClearBody|FlipTurn,ToxicSpikes,Haze,KnockOff|Impish|252,,252,,4,|||||,,,,,Water]Rotom-Heat||ChoiceScarf|Levitate|Overheat,VoltSwitch,Trick,Discharge|Modest|64,,,252,,192||,0,,,,|||,,,,,Electric"],
+ ["Tentacruel||BlackSludge|ClearBody|Haze,RapidSpin,KnockOff,GigaDrain|Timid|252,,4,,,252|||||,,,,,Water]Pecharunt||Leftovers|PoisonPuppeteer|Recover,MalignantChain,ShadowBall,PartingShot|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Tera Captain|Orthworm|SitrusBerry|EarthEater|ShedTail,StealthRock,MetalBurst,BodyPress|Calm|252,,4,,252,||,0,,,,|||,,,,,Steel]Latios||ChoiceScarf|Levitate|Trick,AuraSphere,DracoMeteor,LusterPurge|Timid|4,,,252,,252||,0,,,,|||,,,,,Dragon]Tera Captain|Landorus|LifeOrb|SheerForce|EarthPower,SludgeBomb,CalmMind,Uturn|Naive|,8,,252,,248|||||,,,,,Water]Weavile||FocusSash|Pickpocket|PoisonJab,IceShard,SwordsDance,KnockOff|Adamant|12,252,,,,244|||||,,,,,Dark","Empoleon||Leftovers|Competitive|Roost,FlipTurn,IceBeam,KnockOff|Sassy|252,,,4,252,|||||,,,,,Water]Palafin||ChoiceBand|ZerotoHero|WaveCrash,JetPunch,ZenHeadbutt,DrainPunch|Adamant|,252,,,4,252|||||,,,,,Water]Tera Captain|Latias|Leftovers|Levitate|CalmMind,Psychic,DrainingKiss,Recover|Bold|252,,252,4,,||,0,,,,|||,,,,,Steel]Mimikyu||ExpertBelt|Disguise|SwordsDance,PhantomForce,DrainPunch,ShadowSneak|Jolly|,252,68,,,188|||||,,,,,Ghost]Iron Jugulis||ChoiceScarf|QuarkDrive|DarkPulse,EarthPower,Flamethrower,Hurricane|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Glimmora||AirBalloon|Corrosion|MortalSpin,Toxic,StealthRock,EarthPower|Timid|252,,,4,,252|||||,,,,,Rock"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|SpiritBreak,ShadowClaw,CloseCombat,DestinyBond|Jolly|,252,16,,,240|||||,,,,,Fairy]Garchomp||RockyHelmet|RoughSkin|Earthquake,StealthRock,Spikes,Endure|Impish|252,4,252,,,|||||,,,,,Dragon]Rotom-Wash||SitrusBerry|Levitate|HydroPump,VoltSwitch,PainSplit,LightScreen|Bold|248,,24,,192,44||,0,,,,|||,,,,,Electric]Tera Captain|Scizor|HeavyDutyBoots|Technician|SwordsDance,BulletPunch,QuickAttack,Uturn|Adamant|216,252,,,,40|||||,,,,,Normal]Sableye||AirBalloon|Prankster|Recover,Encore,WillOWisp,KnockOff|Calm|248,,236,,24,|||||,,,,,Dark]Tera Captain|Braviary|ChoiceScarf|SheerForce|BraveBird,Uturn,CloseCombat,BodySlam|Jolly|,252,4,,,252|||||,,,,,Normal","Iron Treads||BoosterEnergy|QuarkDrive|StealthRock,RapidSpin,IceSpinner,KnockOff|Jolly|,252,,,,252|||||,,,,,Ground]Gallade||AssaultVest|Sharpness|FirePunch,SacredSword,PsychoCut,NightSlash|Jolly|,252,,,,252|||||,,,,,Psychic]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|SludgeWave,EnergyBall,FieryDance,DazzlingGleam|Timid|124,,,132,,252||,0,,,,|||,,,,,Dark]Mimikyu||LifeOrb|Disguise|SwordsDance,ShadowSneak,PlayRough,ShadowClaw|Jolly|,252,,,4,252|||||,,,,,Ghost]Azumarill||MentalHerb|HugePower|Whirlpool,PerishSong,Protect,PlayRough|Adamant|244,252,,,,12|||||,,,,,Water]Hydreigon||RockyHelmet|Levitate|DarkPulse,Flamethrower,DracoMeteor,FlashCannon|Modest|44,,,252,,212||,0,,,,|||,,,,,Dark"],
+ ["Ribombee||ChoiceScarf|ShieldDust|Moonblast,Uturn,StickyWeb,Trick|Timid|40,,,252,,216|||||,,,,,Bug]Baxcalibur||ChopleBerry|ThermalExchange|SwordsDance,IcicleCrash,IceShard,Earthquake|Adamant|248,252,,,8,|||||,,,,,Dragon]Tera Captain|LandorusTherian|LumBerry|Intimidate|Rest,Psychic,Uturn,Earthquake|Bashful|252,,128,,128,|||||,,,,,Water]Tentacruel||AssaultVest|LiquidOoze|RapidSpin,HydroPump,FlipTurn,KnockOff|Calm|248,,,,180,80|||||,,,,,Water]Slowking||HeavyDutyBoots|Regenerator|LightScreen,ChillyReception,Psychic,IceBeam|Bold|248,,252,,8,||,0,,,,|||,,,,,Water]Tera Captain|Cloyster|SalacBerry|SkillLink|ShellSmash,IcicleSpear,IceShard,DrillRun|Adamant|,252,,,192,64|||||,,,,,Ice","Tera Captain|Kilowattrel|HeavyDutyBoots|Competitive|Thunderbolt,TeraBlast,Hurricane,Uturn|Timid|,,,252,4,252|||||,,,,,Ice]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,DragonPulse,Glare|Timid|96,,,252,4,152||,0,,,,|||,,,,,Fighting]Cinderace||ChoiceScarf|Blaze|PyroBall,LowKick,Uturn,SuckerPunch|Jolly|72,252,4,,,180|||||,,,,,Fire]Empoleon||Leftovers|Torrent|Earthquake,MetalClaw,Roar,Roost|Sassy|248,,80,,180,|||||,,,,,Water]Great Tusk||Leftovers|Protosynthesis|RapidSpin,StealthRock,CloseCombat,IceSpinner|Jolly|,252,,,4,252|||||,,,,,Ground]Mandibuzz||HeavyDutyBoots|Overcoat|FoulPlay,KnockOff,Uturn,Roost|Impish|248,8,252,,,|||||,,,,,Dark"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,AuraSphere,Thunderbolt,CalmMind|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Tera Captain|Salamence|Leftovers|Moxie|TeraBlast,DragonDance,DragonClaw,DualWingbeat|Adamant|,252,4,,,252|||||,,,,,Water]Goodra-Hisui||AssaultVest|Gooey|DracoMeteor,IceBeam,FlashCannon,Flamethrower|Modest|248,,,252,,8||,0,,,,|||,,,,,Steel]Rotom-Wash||Leftovers|Levitate|VoltSwitch,HydroPump,ThunderWave,WillOWisp|Bold|248,,252,,,8||,0,,,,|||,,,,,Electric]Arcanine-Hisui||FocusSash|RockHead|StealthRock,ExtremeSpeed,FlareBlitz,HeadSmash|Jolly|,252,,,4,252|||||,,,,,Fire]Toedscruel||Leftovers|MyceliumMight|RapidSpin,Spikes,LeafStorm,Spore|Calm|252,,,4,252,|||||,,,,,Ground","Tornadus-Therian||ChoiceScarf|Regenerator|SludgeWave,KnockOff,FoulPlay,Uturn|Timid|72,,,220,,216|||||,,,,,Flying]Sandy Shocks||BoosterEnergy|Protosynthesis|Thunderbolt,StealthRock,EarthPower,VoltSwitch|Timid|,,,204,56,248||,0,,,,|||,,,,,Electric]Brambleghast||ChoiceBand|Infiltrator|PowerWhip,Poltergeist,ShadowSneak,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Grass]Latios||EjectPack|Levitate|DracoMeteor,LusterPurge,Psyshock,AuraSphere|Timid|80,,,252,,176||,0,,,,|||,,,,,Dragon]Tera Captain|UrshifuRapidStrike|ChoiceBand|UnseenFist|CloseCombat,SurgingStrikes,AquaJet,Uturn|Jolly|,252,,,56,200|||||,,,,,Steel]Tera Captain|Moltres|HeavyDutyBoots|FlameBody|Flamethrower,TeraBlast,SleepTalk,Roost|Bold|248,,228,8,,||,0,,,,|||,,,,,Poison"],
+ ["Minior||LightClay|ShieldsDown|StealthRock,PowerGem,Reflect,LightScreen|Timid|248,,,8,,252||,0,,,,|||,,,,,Rock]Skarmory||RockyHelmet|Sturdy|BodyPress,Roost,Spikes,IronDefense|Calm|252,,,,232,24||,0,,,,|||,,,,,Steel]Tera Captain|Clefable|Leftovers|Unaware|CalmMind,Substitute,Moonblast,StoredPower|Modest|252,,,252,4,||,0,,,,|||,,,,,Psychic]Latios||ChoiceSpecs|Levitate|FlipTurn,DracoMeteor,LusterPurge,Thunderbolt|Timid|,,,252,4,252|||||,,,,,Dragon]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,SwordsDance,PowerWhip,StompingTantrum|Jolly|,252,,,4,252|||||,,,,,Fire]Weezing-Galar||BlackSludge|Levitate|StrangeSteam,WillOWisp,Defog,Toxic|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison","Tera Captain|Latias|ChoiceScarf|Levitate|Trick,MistBall,Thunderbolt,ShadowBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Iron Treads||AssaultVest|QuarkDrive|RapidSpin,IronHead,VoltSwitch,KnockOff|Jolly|252,,,,208,48|||||,,,,,Ground]Tera Captain|Gyarados|HeavyDutyBoots|Intimidate|DragonDance,Waterfall,ScaleShot,Taunt|Jolly|,252,,,8,248|||||,,,,,Fire]Persian-Alola||Leftovers|FurCoat|PartingShot,Taunt,Thunderbolt,FoulPlay|Timid|116,,176,,,216||,0,,,,|||,,,,,Dark]Gastrodon-East||Leftovers|StickyHold|Recover,Surf,StealthRock,Yawn|Bold|252,,192,,64,||,0,,,,|||,,,,,Water]Infernape||ChoiceScarf|Blaze|Uturn,KnockOff,Flamethrower,Switcheroo|Mild|,124,,252,,132|||||,,,,,Fire"],
+ ["Tera Captain|Annihilape|ChestoBerry|InnerFocus|RageFist,BulkUp,DrainPunch,Rest|Jolly|248,36,,,,224|||||,,,,,Steel]Roaring Moon||ProtectivePads|Protosynthesis|KnockOff,Uturn,IronHead,DragonDance|Jolly|24,252,,,,232|||||,,,,,Dragon]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|Uturn,IvyCudgel,HornLeech,Encore|Adamant|32,252,,,,224|||||,,,,,Fire]Slowking-Galar||BlackSludge|Regenerator|SludgeBomb,Flamethrower,ThunderWave,SlackOff|Calm|252,,132,,124,||,0,,,,|||,,,,,Poison]Lanturn||Leftovers|VoltAbsorb|Scald,VoltSwitch,Protect,ThunderWave|Bold|252,,252,4,,||,0,,,,|||,,,,,Water]Corviknight||Leftovers|Pressure|Defog,Uturn,Roost,BraveBird|Impish|252,4,252,,,|||||,,,,,Flying","Tera Captain|Mamoswine|NeverMeltIce|ThickFat|IceShard,Earthquake,IcicleCrash,Trailblaze|Adamant|212,252,,,,44|||||,,,,,Ice]Jirachi||Leftovers|SereneGrace|StealthRock,Thunder,IronHead,Uturn|Jolly|252,,,,80,176|||||,,,,,Steel]Iron Valiant||CobaBerry|QuarkDrive|Encore,SwordsDance,CloseCombat,KnockOff|Jolly|48,252,,,,208|||||,,,,,Fairy]Tera Captain|Hydrapple|Leftovers|Regenerator|NastyPlot,FickleBeam,Recover,GigaDrain|Bold|252,,164,,,92||,0,,,,|||,,,,,Dragon]Talonflame||HeavyDutyBoots|FlameBody|WillOWisp,BraveBird,Roost,Taunt|Impish|248,,184,,,76|||||,,,,,Fire]Rotom-Wash||ChoiceScarf|Levitate|Trick,ShadowBall,HydroPump,VoltSwitch|Modest|,,,252,4,252||,0,,,,|||,,,,,Electric"],
+ ["Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,SwordsDance,Encore,PowerWhip|Jolly|,252,80,,,176|||||,,,,,Water]Scream Tail||Leftovers|Protosynthesis|Wish,Encore,IceBeam,StealthRock|Bold|252,,156,,100,||,0,,,,|||,,,,,Bug]Garchomp||ChoiceScarf|RoughSkin|RockSlide,Earthquake,IronHead,DragonClaw|Adamant|252,252,,,,|||||,,,,,Bug]Gholdengo||Leftovers|GoodasGold|MakeItRain,ThunderWave,Hex,Recover|Modest|252,,,252,4,||,0,,,,|||,,,,,Bug]Infernape||LifeOrb|Blaze|Flamethrower,AuraSphere,ScorchingSands,HyperBeam|Timid|64,,,252,,192||,0,,,,|||,,,,,Bug]Ditto||ChoiceScarf|Imposter|Transform|Relaxed|252,4,252,,,||,30,,,,|||,,,,,Normal","Clodsire||Leftovers|WaterAbsorb|ToxicSpikes,StealthRock,Recover,GunkShot|Impish|252,,252,,4,|||||,,,,,Poison]Tera Captain|LandorusTherian|Leftovers|Intimidate|StealthRock,Earthquake,RockSlide,Uturn|Careful|252,,4,,252,|||||,,,,,Dark]Tera Captain|ArticunoGalar|HeavyDutyBoots|Competitive|CalmMind,FreezingGlare,ShadowBall,TeraBlast|Timid|,,80,252,,176||,0,,,,|S||,,,,,Fairy]Chi-Yu||ChoiceScarf|BeadsofRuin|DarkPulse,FireBlast,Flamethrower,Psychic|Timid|4,,,252,,252||,0,,,,|||,,,,,Dark]Scizor||Leftovers|Technician|Uturn,KnockOff,BulletPunch,DualWingbeat|Adamant|248,200,60,,,|||||,,,,,Bug]Rillaboom||ChoiceBand|GrassySurge|GrassyGlide,WoodHammer,Uturn,KnockOff|Adamant|,252,,,,252|||||,,,,,Grass"],
+ ["Tera Captain|Sinistcha|Leftovers|Heatproof|IronDefense,CalmMind,MatchaGotcha,Imprison|Timid|252,,4,,,252||,0,,,,|||,,,,,Water]Copperajah||Leftovers|HeavyMetal|KnockOff,StealthRock,HeavySlam,Whirlwind|Impish|252,,252,,4,|||||,,,,,Fighting]Tera Captain|GreatTusk|ChoiceScarf|Protosynthesis|HeadlongRush,CloseCombat,Earthquake,IceSpinner|Adamant|,252,,,4,252|||||,,,,,Ground]Cyclizar|||Regenerator|KnockOff,ShedTail,Acrobatics,Outrage|Jolly|16,252,,,,240|||||,,,,,Ghost]Samurott-Hisui||FocusSash|Sharpness|CeaselessEdge,SwordsDance,AquaJet,SacredSword|Adamant|,252,,,4,252|||||,,,,,Water]Sylveon||Leftovers|Pixilate|CalmMind,HyperVoice,Wish,Protect|Bold|172,,252,,,84||,0,,,,|||,,,,,Fairy","Cinderace||ChoiceBand|Blaze|PyroBall,Uturn,GunkShot,FlareBlitz|Jolly|104,252,,,,152|||||,,,,,Fire]Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,Encore,FlipTurn|Timid|96,,,252,4,156|||||,,,,,Ice]Tera Captain|Dudunsparce|Leftovers|Rattled|CalmMind,Roost,Boomburst,Flamethrower|Timid|248,,12,,,248||,0,,,,|||,,,,,Fairy]Overqwil||RockyHelmet|Intimidate|Haze,Crunch,Toxic,Spikes|Jolly|248,,124,,,136|||||,,,,,Dark]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|SurgingStrikes,CloseCombat,Uturn,IceSpinner|Jolly|80,252,,,,176|||||,,,,,Water]Iron Treads||WeaknessPolicy|QuarkDrive|RapidSpin,IronDefense,Earthquake,StoneEdge|Adamant|,252,44,,,212|||||,,,,,Ground"],
+ ["Sneasler||ChoiceScarf|PoisonTouch|CloseCombat,DireClaw,FirePunch,Uturn|Jolly|112,252,,,,144|||||,,,,,Fighting]Tera Captain|Froslass|ColburBerry|CursedBody|Spikes,WillOWisp,Hex,IceBeam|Timid|,,32,252,,224||,0,,,,|||,,,,,Dark]Talonflame||HeavyDutyBoots|FlameBody|Overheat,Uturn,Defog,Roost|Timid|252,,,8,,248|||||,,,,,Fire]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|TeraBlast,DragonPulse,Thunderbolt,Thunderclap|Modest|252,,,252,4,||,20,,,,|||,,,,,Ice]Slowking||Leftovers|Regenerator|Psychic,HydroPump,IceBeam,ThunderWave|Calm|252,,,4,252,||,0,,,,|||,,,,,Water]Rillaboom||GrassySeed|GrassySurge|GrassyGlide,WoodHammer,KnockOff,Uturn|Adamant|28,252,,,,228|||||,,,,,Grass","Darkrai||BlunderPolicy|BadDreams|NastyPlot,Hypnosis,DarkPulse,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Scizor||ChoiceBand|Technician|DualWingbeat,BulletPunch,CloseCombat,Uturn|Adamant|252,252,4,,,|||||,,,,,Bug]Tera Captain|Volcanion|ChoiceScarf|WaterAbsorb|EarthPower,SteamEruption,TeraBlast,SludgeWave|Timid|4,,,252,,252||,0,,,,|||,,,,,Electric]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|HighHorsepower,KnockOff,Protect,ToxicSpikes|Impish|252,,128,,128,|||||,,,,,Poison]Orthworm||SitrusBerry|EarthEater|ShedTail,StealthRock,IronHead,RockBlast|Impish|252,60,196,,,|||||,,,,,Steel]Brambleghast||HeavyDutyBoots|Infiltrator|RapidSpin,Poltergeist,Protect,LeechSeed|Adamant|148,104,184,,,72|||||,,,,,Grass"],
+ ["Tera Captain|Serperior|HeavyDutyBoots|Contrary|Glare,LeechSeed,Substitute,LeafStorm|Timid|100,,252,,,156||,0,,,,|||,,,,,Water]Palafin-Hero||ThroatSpray|ZerotoHero|Agility,Boomburst,Surf,DrainingKiss|Modest|104,,,252,,152||,0,,,,|||,,,,,Stellar]Ting-Lu||PasshoBerry|VesselofRuin|Payback,Whirlwind,StealthRock,EarthPower|Sassy|252,,4,,252,|||||,,,,,Stellar]Tinkaton||OccaBerry|MoldBreaker|GigatonHammer,Bulldoze,Encore,Endeavor|Jolly|252,60,,,,196|||||,,,,,Stellar]Weezing-Galar||PayapaBerry|Levitate|Defog,WillOWisp,StrangeSteam,PainSplit|Calm|252,,40,,216,||,0,,,,|||,,,,,Stellar]Tera Captain|RotomFrost|ChoiceScarf|Levitate|VoltSwitch,ShadowBall,PainSplit,Trick|Modest|208,,,252,,48||,0,,,,|||,,,,,Water","Palafin-Hero||MysticWater|ZerotoHero|WaveCrash,JetPunch,FlipTurn,Taunt|Jolly|,252,,,4,252|||||,,,,,Water]Iron Valiant||BoosterEnergy|QuarkDrive|Disable,CloseCombat,KnockOff,ZenHeadbutt|Jolly|24,252,,,,232|||||,,,,,Fairy]Mandibuzz||HeavyDutyBoots|Overcoat|Uturn,BraveBird,Roost,Toxic|Careful|248,,8,,252,|||||,,,,,Dark]Iron Treads||Leftovers|QuarkDrive|RapidSpin,Earthquake,IronHead,Megahorn|Jolly|96,252,,,,160|||||,,,,,Ground]Rotom-Heat||ChoiceScarf|Levitate|Discharge,VoltSwitch,Overheat,Trick|Modest|252,,,132,,124||,0,,,,|||,,,,,Electric]Tera Captain|Latias|Leftovers|Levitate|CalmMind,Thunderbolt,Surf,Recover|Timid|164,,,168,,176||,0,,,,|||,,,,,Electric"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|DestinyBond,Moonblast,AuraSphere,Thunderbolt|Timid|,,,252,48,208||,0,,,,|||,,,,,Fairy]Tera Captain|Zapdos|HeavyDutyBoots|Static|Thunderbolt,VoltSwitch,TeraBlast,Roost|Timid|48,,,252,,208||,0,,,,|||,,,,,Flying]Iron Treads||Leftovers|QuarkDrive|StealthRock,RapidSpin,IronHead,Earthquake|Jolly|96,252,,,,160|||||,,,,,Ground]Samurott-Hisui||AssaultVest|Sharpness|CeaselessEdge,RazorShell,SacredSword,AquaJet|Jolly|,252,,,64,192|||||,,,,,Water]Tera Captain|SinistchaMasterpiece|LumBerry|Heatproof|CalmMind,ShadowBall,MatchaGotcha,StrengthSap|Bold|252,,228,,28,||,0,,,,|||,,,,,Poison]Deoxys-Defense||HeavyDutyBoots|Pressure|Spikes,Taunt,Recover,NightShade|Bold|252,,140,,116,||,0,,,,|||,,,,,Psychic","Greninja||ExpertBelt|Protean|Uturn,GunkShot,Surf,DarkPulse|Hasty|,100,,200,,208|||S||,,,,,Water]Heatran||Leftovers|FlameBody|MagmaStorm,Protect,FlashCannon,Taunt|Calm|252,,4,,252,||,0,,,,|S||,,,,,Fire]Amoonguss||PayapaBerry|Regenerator|SludgeBomb,GigaDrain,Spore,Toxic|Bold|252,,180,,76,||,0,,,,|S||,,,,,Grass]Tinkaton||Leftovers|MoldBreaker|StealthRock,Encore,ThunderWave,GigatonHammer|Careful|252,,116,,140,|||S||,,,,,Fairy]Tera Captain|Latias|Leftovers|Levitate|CalmMind,Psychic,Thunderbolt,Recover|Timid|252,,32,,,224||,0,,,,|S||,,,,,Electric]Great Tusk||PasshoBerry|Protosynthesis|CloseCombat,RapidSpin,KnockOff,IceSpinner|Jolly|16,252,,,,240|||S||,,,,,Ground"],
+ ["Iron Moth||BoosterEnergy|QuarkDrive|Discharge,FieryDance,Toxic,DazzlingGleam|Timid|,,,132,124,252||,0,,,,|||,,,,,Fire]Garchomp||LifeOrb|RoughSkin|ScaleShot,DracoMeteor,Earthquake,StoneEdge|Hasty|,252,,4,,252|||||,,,,,Dragon]Tera Captain|IronHands|ProtectivePads|QuarkDrive|IcePunch,DrainPunch,SwordsDance,Earthquake|Careful|248,,8,,252,|||||,,,,,Fairy]Bronzong||ColburBerry|Levitate|IronDefense,BodyPress,IceSpinner,StealthRock|Impish|252,4,252,,,|||||,,,,,Steel]Volbeat||HeavyDutyBoots|Prankster|Roost,Encore,Uturn,StruggleBug|Bold|252,,252,4,,|||||,,,,,Bug]Primarina||BlunderPolicy|Torrent|CalmMind,Sing,Moonblast,EnergyBall|Timid|248,,,188,4,68||,0,,,,|||,,,,,Water","Meowscarada||ProtectivePads|Protean|TripleAxel,FlowerTrick,KnockOff,Uturn|Jolly|,252,104,,,152|||||,,,,,Grass]Tera Captain|GreatTusk|EjectPack|Protosynthesis|HeadlongRush,CloseCombat,RapidSpin,PlayRough|Adamant|184,200,,,,124|||||,,,,,Fairy]Tera Captain|Mismagius|ExpertBelt|Levitate|NastyPlot,ShadowBall,Thunderbolt,DazzlingGleam|Timid|24,,,248,,236||,0,,,,|||,,,,,Fairy]Zapdos||HeavyDutyBoots|Static|Hurricane,Discharge,Roost,VoltSwitch|Calm|248,,,,240,20||,0,,,,|||,,,,,Electric]Qwilfish||RockyHelmet|Intimidate|Spikes,Taunt,PainSplit,FlipTurn|Jolly|248,,40,,,216|||||,,,,,Water]Empoleon||SitrusBerry|Torrent|StealthRock,Roar,Surf,FlipTurn|Calm|252,,,,196,60|||||,,,,,Water"],
+ ["Pecharunt||ColburBerry|PoisonPuppeteer|MalignantChain,Recover,NastyPlot,ShadowBall|Calm|252,,,48,208,||,0,,,,|||,,,,,Poison]Tera Captain|Latias|Leftovers|Levitate|DrainingKiss,CalmMind,StoredPower,Recover|Bold|248,,252,,,8||,0,,,,|||,,,,,Fairy]Primarina||HeavyDutyBoots|Torrent|EnergyBall,Moonblast,Sing,FlipTurn|Modest|252,,104,152,,|||||,,,,,Water]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,SwordsDance,HornLeech,PlayRough|Jolly|16,252,,,,240|||||,,,,,Fire]Iron Treads||Leftovers|QuarkDrive|StealthRock,Earthquake,RapidSpin,VoltSwitch|Careful|252,,4,,252,|||||,,,,,Ground]Scrafty||RockyHelmet|Intimidate|DrainPunch,IronHead,SuperFang,KnockOff|Impish|252,4,252,,,|||||,,,,,Dark","Weavile||HeavyDutyBoots|Pressure|SwordsDance,KnockOff,TripleAxel,PoisonJab|Jolly|,252,,,4,252|||||,,,,,Dark]Weezing-Galar||BlackSludge|Levitate|SludgeBomb,StrangeSteam,WillOWisp,PainSplit|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Thunderbolt,DragonPulse,TeraBlast,Roar|Modest|212,,,244,44,8||,20,,,,|||,,,,,Fighting]Infernape||ChoiceSpecs|Blaze|FireBlast,FocusBlast,VacuumWave,Uturn|Timid|,,16,252,,240|||||,,,,,Fire]Gastrodon||Leftovers|StormDrain|Surf,Recover,StealthRock,Yawn|Calm|252,,,4,252,||,0,,,,|||,,,,,Water]Corviknight||Leftovers|Pressure|Defog,Uturn,Roost,Taunt|Impish|248,,252,,,8|||||,,,,,Flying"],
+ ["Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,DarkPulse,Flamethrower,Memento|Timid|24,,,252,,232||,0,,,,|||,,,,,Dark]Galvantula||HeavyDutyBoots|CompoundEyes|Thunder,BugBuzz,VoltSwitch,StickyWeb|Timid|88,,,252,,168||,0,,,,|||,,,,,Bug]Iron Boulder||ChoiceBand|QuarkDrive|MightyCleave,CloseCombat,Earthquake,PsychoCut|Jolly|64,252,,,,192|||||,,,,,Rock]Mamoswine||LifeOrb|ThickFat|Earthquake,IceShard,KnockOff,StealthRock|Adamant|252,252,,,,4|||||,,,,,Ice]Tera Captain|Hawlucha|PowerHerb|Unburden|Acrobatics,SkyAttack,DrainPunch,BulkUp|Adamant|48,252,,,,208|||||,,,,,Fighting]Whimsicott||HeavyDutyBoots|Prankster|Moonblast,Uturn,Encore,StunSpore|Bold|252,,252,4,,|||||,,,,,Grass","Weezing-Galar||BlackSludge|Levitate|ToxicSpikes,WillOWisp,StrangeSteam,PainSplit|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison]Tera Captain|Latias|Leftovers|Levitate|DrainingKiss,IceBeam,MistBall,CalmMind|Timid|12,,,252,4,240||,0,,,,|||,,,,,Fairy]Volcanion||Leftovers|WaterAbsorb|WillOWisp,SteamEruption,Protect,Flamethrower|Calm|240,,252,4,12,||,0,,,,|||,,,,,Fire]Urshifu||ChoiceScarf|UnseenFist|WickedBlow,CloseCombat,Uturn,PoisonJab|Adamant|156,252,,,,100|||||,,,,,Fighting]Tsareena||AssaultVest|QueenlyMajesty|Uturn,TripleAxel,KnockOff,RapidSpin|Adamant|252,44,192,,20,|||||,,,,,Grass]Excadrill||FocusSash|MoldBreaker|RapidSpin,Earthquake,IronHead,SwordsDance|Adamant|76,252,,,4,176|||||,,,,,Ground"],
+ ["Tera Captain|Annihilape|ChoiceScarf|Defiant|CloseCombat,RageFist,Uturn,TeraBlast|Jolly|124,252,,,,132|||S||,,,,,Ghost]Greninja-Bond||LifeOrb|BattleBond|Surf,DarkPulse,IceBeam,WaterShuriken|Timid|8,,,252,,248|||||,,,,,Water]Slowking-Galar||AssaultVest|Regenerator|FutureSight,Flamethrower,SludgeBomb,IceBeam|Sassy|252,,,4,252,||,0,,,,0|||,,,,,Poison]Ting-Lu||Leftovers|VesselofRuin|StealthRock,Earthquake,Ruination,Whirlwind|Impish|248,,252,,8,|||||,,,,,Dark]Tera Captain|Kilowattrel|HeavyDutyBoots|Competitive|Thunderbolt,Hurricane,VoltSwitch,Roost|Timid|26,,6,252,,224||,0,,,,|||,,,,,Water]Tsareena||AssaultVest|QueenlyMajesty|RapidSpin,PowerWhip,KnockOff,TripleAxel|Careful|252,4,,,252,|||||,,,,,Grass","Tera Captain|Landorus|LifeOrb|SheerForce|EarthPower,FocusBlast,NastyPlot,SludgeWave|Timid|88,,,252,,168||,0,,,,|||,,,,,Fighting]Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,IceBeam,FlipTurn|Timid|88,,,252,,168|||||,,,,,Ice]Cyclizar||HeavyDutyBoots|Regenerator|DracoMeteor,KnockOff,RapidSpin,ShedTail|Bold|248,,144,,,116|||||,,,,,Dragon]Jirachi||ColburBerry|SereneGrace|BodySlam,PsychicNoise,Wish,Protect|Sassy|248,,8,,252,|||||,,,,,Steel]Cinderace||SilkScarf|Libero|SwordsDance,PyroBall,IronHead,QuickAttack|Adamant|120,252,,,4,132|||||,,,,,Fire]Weezing-Galar||BlackSludge|Levitate|StrangeSteam,WillOWisp,PainSplit,Defog|Calm|248,,20,,240,||,0,,,,|||,,,,,Poison"],
+ ["Ribombee||FocusSash|HoneyGather|Imprison,StickyWeb,Moonblast,StunSpore|Timid|,,,252,4,252||,0,,,,|||,,,,,Bug]Darkrai||HeavyDutyBoots|BadDreams|DarkPulse,Psychic,NastyPlot,Thunder|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Kyurem||HeavyDutyBoots|Pressure|FreezeDry,EarthPower,Substitute,DracoMeteor|Bold|184,,20,100,160,44||,0,,,,|||,,,,,Dragon]Gholdengo||AirBalloon|GoodasGold|Recover,MakeItRain,ShadowBall,Thunderbolt|Bold|72,,148,252,,36||,0,,,,|||,,,,,Steel]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|SurgingStrikes,Uturn,CloseCombat,TeraBlast|Jolly|,252,4,,,252|||||,,,,,Grass]Donphan||Leftovers|Sturdy|Earthquake,RapidSpin,StealthRock,KnockOff|Impish|252,,252,,4,|||||,,,,,Ground","Weavile||HeavyDutyBoots|Pressure|TripleAxel,IceShard,KnockOff,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Dark]Tera Captain|Jolteon|HeavyDutyBoots|VoltAbsorb|Thunderbolt,VoltSwitch,ShadowBall,AlluringVoice|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Great Tusk||Leftovers|Protosynthesis|StealthRock,RapidSpin,KnockOff,HeadlongRush|Jolly|252,,24,,,232|||||,,,,,Ground]Gholdengo||ChoiceScarf|GoodasGold|Trick,MakeItRain,ShadowBall,FocusBlast|Modest|,,40,252,,212||,0,,,,|||,,,,,Steel]Alomomola||AssaultVest|Regenerator|FlipTurn,PlayRough,Scald,MirrorCoat|Sassy|252,16,72,,168,|||||,,,,,Water]Tera Captain|Mew|LifeOrb|Synchronize|DragonDance,PlayRough,CloseCombat,FlareBlitz|Jolly|,252,4,,,252|||||,,,,,Fire"],
+ ["Great Tusk||AssaultVest|Protosynthesis|CloseCombat,Earthquake,IceSpinner,RapidSpin|Adamant|248,92,,,,168|||||,,,,,Ground]Greninja||ChoiceSpecs|Protean|HydroPump,IceBeam,Surf,Uturn|Timid|4,,,252,,252|||||,,,,,Water]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Thunderclap,DragonPulse,Thunderbolt,CalmMind|Bold|248,,120,140,,||,20,,,,|||,,,,,Flying]Uxie||ColburBerry|Levitate|FutureSight,ThunderWave,StealthRock,Uturn|Calm|248,,68,12,180,|||||,,,,,Psychic]Tinkaton||Leftovers|MoldBreaker|GigatonHammer,PlayRough,KnockOff,Encore|Jolly|248,36,,,32,192|||||,,,,,Fairy]Tera Captain|Shaymin|HeavyDutyBoots|NaturalCure|SeedFlare,EarthPower,LeechSeed,Synthesis|Timid|248,,,80,28,152||,0,,,,|||,,,,,Fire","Great Tusk||BoosterEnergy|Protosynthesis|HeadlongRush,Megahorn,RapidSpin,IceSpinner|Jolly|,252,,,4,252|||||,,,,,Ground]Tera Captain|Latias|LightClay|Levitate|DracoMeteor,Wish,Reflect,LightScreen|Timid|248,,,84,,176||,0,,,,|||,,,,,Fairy]Greninja||ChoiceScarf|Protean|HydroPump,IceBeam,Uturn,Switcheroo|Hasty|,4,,252,,252|||||,,,,,Water]Tinkaton||RedCard|OwnTempo|GigatonHammer,Endure,StealthRock,Endeavor|Jolly|,252,4,,,252|||||,,,,,Fairy]Rillaboom||Leftovers|GrassySurge|GrassyGlide,HighHorsepower,Uturn,SwordsDance|Adamant|80,252,,,,176|||||,,,,,Grass]Tera Captain|Frosmoth|HeavyDutyBoots|IceScales|IceBeam,BugBuzz,TeraBlast,QuiverDance|Modest|12,,,252,,244||,0,,,,|||,,,,,Ground"],
+ ["Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,MorningSun,DragonClaw,Earthquake|Careful|196,44,,,204,64|||||,,,,,Fire]Gholdengo||ColburBerry|GoodasGold|NastyPlot,FocusBlast,ShadowBall,Recover|Calm|232,,116,,140,20||,0,,,,|||,,,,,Steel]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|Substitute,IvyCudgel,PlayRough,Spikes|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|Comfey|Leftovers|Triage|CalmMind,DrainingKiss,TeraBlast,Synthesis|Bold|252,,252,4,,||,0,,,,|||,,,,,Ground]Tornadus-Therian||ChoiceScarf|Regenerator|Uturn,Hurricane,FoulPlay,KnockOff|Timid|240,,,16,,252|||||,,,,,Flying]Maushold-Four||ChoiceScarf|Technician|Switcheroo,PopulationBomb,Uturn,TidyUp|Jolly|8,252,,,,248|||||,,,,,Normal","Great Tusk||BoosterEnergy|Protosynthesis|BulkUp,Earthquake,IceSpinner,HeavySlam|Jolly|248,4,,,4,252|||||,,,,,Ground]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|NastyPlot,Thunderbolt,GrassKnot,SludgeBomb|Modest|248,,60,20,,180||,0,,,,|||,,,,,Poison]Tera Captain|Feraligatr|ChestoBerry|SheerForce|SwordsDance,Liquidation,TeraBlast,Rest|Impish|248,52,136,,72,|||||,,,,,Electric]Meowscarada||ChoiceScarf|Protean|FlowerTrick,KnockOff,TripleAxel,Uturn|Jolly|96,252,,,,160|||||,,,,,Grass]Heatran||ShucaBerry|FlashFire|StealthRock,MagmaStorm,EarthPower,MetalSound|Timid|40,,,252,,216||,0,,,,|||,,,,,Fire]Latios||WeaknessPolicy|Levitate|Psyshock,CalmMind,Recover,ShadowBall|Impish|208,,128,16,,156||,0,,,,|||,,,,,Dragon"],
+ ["Gholdengo||ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,Trick,FocusBlast|Modest|52,,,252,,204||,0,,,,|||,,,,,Ice]Tera Captain|Latias|Leftovers|Levitate|DrainingKiss,Earthquake,CalmMind,Agility|Timid|252,,160,,,96|||||,,,,,Fairy]Meowscarada||HeavyDutyBoots|Overgrow|Uturn,KnockOff,FlowerTrick,TripleAxel|Adamant|32,252,,,,224|||||,,,,,Ice]Arcanine-Hisui||HeavyDutyBoots|RockHead|ExtremeSpeed,FlareBlitz,HeadSmash,MorningSun|Jolly|,252,,,4,252|||||,,,,,Ice]Zapdos||HeavyDutyBoots|Pressure|Roost,Discharge,Uturn,Hurricane|Bold|252,,236,,,20|||||,,,,,Electric]Tera Captain|Mudsdale|Leftovers|Stamina|LashOut,StealthRock,BodyPress,Earthquake|Careful|248,,120,,140,|||||,,,,,Ground","Iron Boulder||LifeOrb|QuarkDrive|SwordsDance,MightyCleave,Earthquake,XScissor|Jolly|72,252,,,,184|||||,,,,,Rock]Krookodile||ChoiceScarf|Moxie|KnockOff,Earthquake,CloseCombat,GunkShot|Jolly|16,252,,,,240|||||,,,,,Ground]Enamorus-Therian||AssaultVest|Overcoat|SpringtideStorm,MysticalFire,EarthPower,DrainingKiss|Modest|4,,252,252,,||,0,,,,|||,,,,,Fairy]Kommo-o||SitrusBerry|Bulletproof|ClangorousSoul,FlashCannon,ClangingScales,Flamethrower|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel]Tera Captain|Magnezone|AssaultVest|MagnetPull|TeraBlast,Thunderbolt,VoltSwitch,BodyPress|Modest|4,,252,252,,||,0,,,,|||,,,,,Fire]Brambleghast||HeavyDutyBoots|Infiltrator|ShadowSneak,PowerWhip,StrengthSap,RapidSpin|Adamant|252,252,4,,,|||||,,,,,Grass"],
+ ["Tera Captain|Latias|Leftovers|Levitate|MistBall,TeraBlast,CalmMind,Substitute|Timid|32,,,252,,224||,0,,,,|||,,,,,Electric]Meowscarada||ChoiceScarf|Protean|FlowerTrick,KnockOff,LowKick,Uturn|Jolly|56,252,,,,200|||||,,,,,Grass]Gurdurr||Eviolite|Guts|DrainPunch,KnockOff,PoisonJab,IcePunch|Adamant|248,252,,,8,|||||,,,,,Fighting]Rotom-Wash||Leftovers|Levitate|Thunderbolt,HydroPump,ThunderWave,VoltSwitch|Calm|248,,,,184,76||,0,,,,|||,,,,,Electric]Sylveon||Leftovers|Pixilate|HyperVoice,Psychic,Wish,Protect|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Donphan||HeavyDutyBoots|Sturdy|StealthRock,Earthquake,IceShard,RapidSpin|Careful|248,8,,,252,|||||,,,,,Ground","Iron Valiant||LumBerry|QuarkDrive|CloseCombat,SpiritBreak,SwordsDance,Substitute|Jolly|48,252,,,,208|||||,,,,,Bug]Ditto||ChoiceScarf|Imposter|Transform||252,,252,,,4||,30,,,,|S||,,,,,Bug]Iron Treads||Leftovers|QuarkDrive|IronHead,KnockOff,VoltSwitch,RapidSpin|Impish|252,,48,,4,204|||||,,,,,Bug]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Uturn,Toxic,Spikes,Protect|Impish|252,,184,,72,|||||,,,,,Water]Tera Captain|WoChien|Leftovers|TabletsofRuin|PollenPuff,LeechSeed,Substitute,Protect|Calm|252,,124,,132,||,0,,,,|||,,,,,Fairy]Goodra-Hisui||RockyHelmet|Gooey|Earthquake,KnockOff,HeavySlam,DragonTail|Careful|252,,168,,88,|||||,,,,,Bug"],
+ ["Tera Captain|HoopaUnbound|ChoiceScarf|Magician|DrainPunch,HyperspaceFury,ZenHeadbutt,Trick|Adamant|,252,,,,252|||||,,,,,Dark]Cinderace||HeavyDutyBoots|Libero|PyroBall,Uturn,SuckerPunch,CourtChange|Jolly|,252,,,4,252|||||,,,,,Fire]Sinistcha-Masterpiece||Leftovers|Heatproof|MatchaGotcha,StunSpore,Hex,StrengthSap|Bold|252,,252,,4,||,0,,,,|||,,,,,Ghost]Blissey||HeavyDutyBoots|NaturalCure|ThunderWave,SoftBoiled,SeismicToss,LightScreen|Calm|4,,252,,252,||,0,,,,|||,,,,,Normal]Tera Captain|Thundurus|HeavyDutyBoots|Prankster|ThunderWave,VoltSwitch,FocusBlast,DarkPulse|Timid|,,,252,,252||,0,,,,|||,,,,,Fighting]Maushold||WideLens|Technician|TidyUp,PopulationBomb,Crunch,LowKick|Jolly|4,252,,,,252|||||,,,,,Normal","Tera Captain|Serperior|Leftovers|Contrary|Substitute,Glare,LeafStorm,TeraBlast|Timid|,,,252,16,240||,0,,,,|||,,,,,Stellar]Gouging Fire||Leftovers|Protosynthesis|DragonDance,Roar,HeatCrash,MorningSun|Adamant|184,252,,,,72|||||,,,,,Ground]Cyclizar||ChoiceScarf|Regenerator|ShedTail,IceSpinner,DracoMeteor,RapidSpin|Naive|248,20,,,,240|||||,,,,,Poison]Iron Treads||ChopleBerry|QuarkDrive|IceSpinner,StealthRock,Megahorn,Earthquake|Adamant|248,112,,,,148|||||,,,,,Poison]Greninja||ChoiceBand|Protean|GunkShot,Uturn,IcePunch,WaterShuriken|Jolly|,252,24,,,232|||||,,,,,Ice]Tera Captain|ArticunoGalar|ChoiceScarf|Competitive|Trick,Uturn,Hypnosis,AirSlash|Calm|248,,,,24,236|||||,,,,,Ice"],
+ ["Tera Captain|Latias|Leftovers|Levitate|StoredPower,AuraSphere,CalmMind,Agility|Timid|248,,204,,,56||,0,,,,|||,,,,,Steel]Empoleon||ChopleBerry|Torrent|Surf,DrillPeck,FlipTurn,StealthRock|Sassy|248,,8,,252,|||||,,,,,Water]Tera Captain|Electrode|Magnet|Static|Thunderbolt,TeraBlast,VoltSwitch,Taunt|Modest|96,,,252,,160||,0,,,,|||,,,,,Ice]Great Tusk||CobaBerry|Protosynthesis|RapidSpin,IceSpinner,CloseCombat,KnockOff|Impish|216,,232,,,60|||||,,,,,Ground]Zarude||Leftovers|LeafGuard|PowerWhip,KnockOff,CloseCombat,SwordsDance|Jolly|24,252,,,,232|||||,,,,,Dark]Tornadus-Therian||HeavyDutyBoots|Regenerator|Hurricane,HeatWave,KnockOff,NastyPlot|Timid|,,,252,4,252|||||,,,,,Flying","Tinkaton||MentalHerb|Pickpocket|StealthRock,ThunderWave,KnockOff,GigatonHammer|Careful|252,,4,,252,|||||,,,,,Flying]Garchomp||LoadedDice|RoughSkin|Earthquake,ScaleShot,IronHead,SwordsDance|Adamant|12,252,,,,244|||||,,,,,Fairy]Tornadus-Therian||ChartiBerry|Regenerator|Taunt,KnockOff,Hurricane,Uturn|Timid|252,,,,4,252|||||,,,,,Ground]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,HornLeech,PlayRough|Jolly|,252,,,4,252|||||,,,,,Water]Samurott-Hisui||ChoiceScarf|Sharpness|AquaCutter,CeaselessEdge,SacredSword,Encore|Adamant|76,252,,,,180|||||,,,,,Ghost]Tera Captain|Bellibolt|HeavyDutyBoots|Static|Toxic,SlackOff,VoltSwitch,TeraBlast|Bold|248,,156,,60,44||,0,,,,|||,,,,,Fairy"],
+ ["Urshifu||ChoiceScarf|UnseenFist|Uturn,WickedBlow,IcePunch,CloseCombat|Adamant|104,176,128,,4,96|||||,,,,,Fighting]Latios||ChoiceSpecs|Levitate|Trick,IceBeam,LusterPurge,Surf|Timid|72,,,216,4,216||,0,,,,|||,,,,,Poison]Tera Captain|Metagross|Leftovers|ClearBody|Earthquake,HeavySlam,IcePunch,ThunderPunch|Adamant|248,132,32,,68,28|||||,,,,,Steel]Wigglytuff||AirBalloon|Frisk|Wish,DrainingKiss,Sing,Copycat|Bold|248,,252,8,,|||||,,,,,Grass]Tornadus-Therian||HeavyDutyBoots|Regenerator|Taunt,KnockOff,BleakwindStorm,BrickBreak|Quirky|224,36,,,,248|||||,,,,,Flying]Tera Captain|Blastoise|CovertCloak|Torrent|RapidSpin,FlipTurn,Surf,Yawn|Quirky|248,,96,44,120,|||||,,,,,Electric","Palafin||Leftovers|ZerotoHero|BulkUp,JetPunch,DrainPunch,ThroatChop|Jolly|,,76,,200,232|||||,,,,,Water]Garchomp||RockyHelmet|RoughSkin|Spikes,Earthquake,DracoMeteor,DragonTail|Naive|,16,24,252,,216|||||,,,,,Dragon]Meowscarada||ChoiceBand|Protean|FlowerTrick,KnockOff,Uturn,ThunderPunch|Jolly|,212,56,,,240|||||,,,,,Grass]Tera Captain|Pecharunt|Leftovers|PoisonPuppeteer|Recover,TeraBlast,ShadowBall,PartingShot|Bold|248,,108,,152,||,0,,,,|||,,,,,Fairy]Tera Captain|Heatran|Leftovers|FlameBody|StealthRock,MagmaStorm,EarthPower,Protect|Timid|56,,,252,,200||,0,,,,|||,,,,,Water]Braviary-Hisui||HeavyDutyBoots|SheerForce|Roost,Uturn,Hurricane,ShadowBall|Mild|192,,,,252,64|||||,,,,,Psychic"],
+ ["Palafin||AssaultVest|ZerotoHero|WaveCrash,FlipTurn,IcePunch,DrainPunch|Jolly|88,168,,,,252|||||,,,,,Water]Tera Captain|Gholdengo|RedCard|GoodasGold|ShadowBall,DazzlingGleam,ThunderWave,Recover|Modest|112,,,252,,144||,0,,,,|||,,,,,Fairy]Tera Captain|EnamorusTherian|SitrusBerry|Overcoat|EarthPower,Moonblast,HealingWish,DrainingKiss|Bold|248,,200,44,,16||,0,,,,|||,,,,,Water]Vikavolt||WiseGlasses|Levitate|Agility,Thunderbolt,BugBuzz,ChargeBeam|Modest|,,,252,4,252||,0,,,,|||,,,,,Bug]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,StompingTantrum,PlayRough,WoodHammer|Jolly|80,252,,,,176|||||,,,,,Fire]Ting-Lu||Leftovers|VesselofRuin|Earthquake,Ruination,Spikes,BodyPress|Impish|232,8,252,,,16|||||,,,,,Dark","Urshifu||ChoiceBand|UnseenFist|Uturn,CloseCombat,WickedBlow,ThunderPunch|Adamant|208,252,,,4,44|||||,,,,,Fighting]Tera Captain|Blastoise|WhiteHerb|Torrent|DarkPulse,ShellSmash,IceBeam,Surf|Modest|180,,,252,,76||,0,,,,|||,,,,,Ice]Tornadus-Therian||HeavyDutyBoots|Regenerator|Uturn,BleakwindStorm,GrassKnot,FocusBlast|Timid|,,88,252,,168|||S||,,,,,Flying]Tera Captain|Metagross|ExpertBelt|ClearBody|BulletPunch,MeteorMash,IcePunch,KnockOff|Adamant|112,252,4,,,140|||S||,,,,,Dark]Entei||ExpertBelt|InnerFocus|StompingTantrum,SacredFire,Trailblaze,IronHead|Adamant|232,252,,,4,20|||S||,,,,,Fire]Toedscruel||FocusSash|MyceliumMight|LeafStorm,RapidSpin,ToxicSpikes,Hex|Timid|,,,252,4,252|||||,,,,,Ground"],
+ ["Dondozo||RockyHelmet|Unaware|WaveCrash,Curse,Yawn,Rest|Impish|252,4,252,,,|||||,,,,,Water]Ting-Lu||Leftovers|VesselofRuin|Ruination,Earthquake,Whirlwind,Spikes|Careful|252,4,,,252,|||||,,,,,Dark]Tera Captain|Gholdengo|Leftovers|GoodasGold|MakeItRain,TeraBlast,NastyPlot,Recover|Modest|104,,4,252,,148||,0,,,,|||,,,,,Grass]Tera Captain|Tsareena|HeavyDutyBoots|QueenlyMajesty|PowerWhip,PlayRough,HighJumpKick,RapidSpin|Adamant|96,252,,,,160|||||,,,,,Stellar]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,HeatWave,SludgeWave,KnockOff|Modest|52,,,252,,204|||||,,,,,Flying]Baxcalibur||LoadedDice|ThermalExchange|IcicleSpear,ScaleShot,Substitute,SwordsDance|Adamant|,252,20,,20,216|||||,,,,,Dragon","Manaphy||Leftovers|Hydration|TailGlow,AlluringVoice,GrassKnot,IceBeam|Timid|252,,,104,,152||,0,,,,|||,,,,,Water]Kommo-o||SitrusBerry|Soundproof|Taunt,ClangorousSoul,Boomburst,Flamethrower|Timid|,,4,252,,252||,0,,,,|||,,,,,Normal]Tera Captain|Cresselia|Leftovers|Levitate|Moonblast,StoredPower,CalmMind,Moonlight|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel]Weavile||HeavyDutyBoots|Pressure|KnockOff,IcicleSpear,SwordsDance,IceShard|Jolly|,252,,,4,252|||||,,,,,Dark]Orthworm||SitrusBerry|EarthEater|Spikes,BodyPress,StealthRock,ShedTail|Impish|252,,252,,4,||,0,,,,|||,,,,,Steel]Dachsbun||Leftovers|WellBakedBody|Wish,Yawn,BodyPress,Protect|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy"],
+ ["Darkrai||LifeOrb|BadDreams|NastyPlot,SludgeBomb,DarkPulse,IceBeam|Timid|4,,,252,,252||,0,,,,|||,,,,,Dark]Landorus-Therian||RockyHelmet|Intimidate|StealthRock,Taunt,Uturn,Earthquake|Impish|248,,252,,,8|||||,,,,,Ground]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|HornLeech,IvyCudgel,Uturn,Encore|Jolly|,252,,,4,252|||||,,,,,Water]Blastoise||WhiteHerb|Torrent|HydroPump,IceBeam,RapidSpin,ShellSmash|Timid|,,,252,4,252|||||,,,,,Ground]Archaludon||AssaultVest|Stamina|DracoMeteor,FlashCannon,BodyPress,ElectroShot|Modest|200,,,252,,56||,0,,,,|||,,,,,Steel]Clodsire||Leftovers|Unaware|Toxic,StealthRock,Recover,Earthquake|Careful|248,,8,,252,|||||,,,,,Flying","Tera Captain|Annihilape|ChoiceScarf|Defiant|CloseCombat,RageFist,IcePunch,Uturn|Adamant|112,236,,,,160|||S||,,,,,Stellar]Cyclizar||HeavyDutyBoots|Regenerator|DracoMeteor,RapidSpin,KnockOff,ShedTail|Timid|88,,252,,,168|||S||,,,,,Stellar]Pecharunt||CustapBerry|PoisonPuppeteer|NightShade,Toxic,DestinyBond,PartingShot|Bold|252,,16,,224,16||,0,,,,|||,,,,,Stellar]Skarmory||CustapBerry|Sturdy|BodyPress,Spikes,Whirlwind,Roost|Impish|252,,16,,240,||,0,,,,|S||,,,,,Stellar]Tera Captain|Mudsdale|Leftovers|Stamina|Earthquake,BodyPress,IronDefense,StealthRock|Impish|240,,136,,132,|||S||,,,,,Fighting]Palafin-Hero||Leftovers|ZerotoHero|JetPunch,DrainPunch,BulkUp,Taunt|Careful|240,,,,252,16|||S||,,,,,Stellar"],
+ ["Tera Captain|Excadrill|AirBalloon|SandRush|Earthquake,SwordsDance,TeraBlast,RapidSpin|Jolly|92,252,,,,164|||||,,,,,Ice]Hippowdon||SmoothRock|SandStream|Roar,SlackOff,Earthquake,StealthRock|Careful|252,,4,,252,|||||,,,,,Ground]Darkrai||ChoiceScarf|BadDreams|Trick,DarkPulse,SludgeBomb,IceBeam|Timid|48,,,252,,208||,0,,,,|||,,,,,Dark]Enamorus||Leftovers|Contrary|Superpower,PlayRough,ZenHeadbutt,BodySlam|Jolly|8,252,,,,248|||||,,,,,Fairy]Volcanion||HeavyDutyBoots|WaterAbsorb|SteamEruption,Earthquake,Flamethrower,Roar|Brave|4,252,,252,,|||||,,,,,Ground]Cinccino||LoadedDice|Technician|TidyUp,TailSlap,TripleAxel,BulletSeed|Jolly|80,252,,,,176|||||,,,,,Normal","Iron Valiant||ExpertBelt|QuarkDrive|Thunderbolt,VacuumWave,Moonblast,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Tentacruel||ShucaBerry|RainDish|Toxic,RainDance,Surf,KnockOff|Calm|252,,252,,4,|||||,,,,,Water]Cinderace||HeavyDutyBoots|Libero|HighJumpKick,ZenHeadbutt,SuckerPunch,WillOWisp|Jolly|,252,,,4,252|||||,,,,,Fire]Landorus-Therian||RockyHelmet|Intimidate|StealthRock,Uturn,Earthquake,StoneEdge|Impish|248,,252,,8,|||||,,,,,Ground]Tera Captain|Manaphy|Leftovers|Hydration|TailGlow,Substitute,Psychic,Scald|Timid|96,,,252,,160||,0,,,,|||,,,,,Grass]Tera Captain|Mismagius|Leftovers|Levitate|WillOWisp,Hex,PainSplit,DestinyBond|Timid|136,,252,,,120||,0,,,,|||,,,,,Steel"],
+ ["Weezing-Galar||BlackSludge|Levitate|Toxic,ShadowBall,Taunt,PainSplit|Bold|144,,252,,112,||,0,,,,|||,,,,,Poison]Arcanine-Hisui||HeavyDutyBoots|RockHead|HeadSmash,FlareBlitz,MorningSun,StealthRock|Jolly|12,252,,,4,240|||||,,,,,Fire]Iron Treads||AssaultVest|QuarkDrive|RapidSpin,VoltSwitch,IceSpinner,Earthquake|Jolly|,204,,,112,192|||||,,,,,Ground]Tera Captain|Cresselia|Leftovers|Levitate|Moonlight,Psyshock,CalmMind,TeraBlast|Modest|172,,84,252,,||,0,,,,|S||,,,,,Poison]Tera Captain|Raikou|HeavyDutyBoots|Pressure|VoltSwitch,Scald,AuraSphere,Extrasensory|Modest|16,,,252,4,236||,0,,,,|||,,,,,Water]Palafin-Hero||ProtectivePads|ZerotoHero|JetPunch,FlipTurn,Boomburst,Surf|Naive|,16,,252,,240|||S||,,,,,Water","Tera Captain|Clodsire|Leftovers|WaterAbsorb|Earthquake,Recover,Haze,Toxic|Impish|252,4,252,,,|||||,,,,,Psychic]Blissey||HeavyDutyBoots|NaturalCure|SeismicToss,SoftBoiled,StealthRock,SkillSwap|Bold|252,,252,,4,||,0,,,,|||,,,,,Normal]Talonflame||HeavyDutyBoots|FlameBody|Flamethrower,Defog,WillOWisp,Roost|Timid|80,,184,,,168||,0,,,,|||,,,,,Fire]Pecharunt||BlackSludge|PoisonPuppeteer|NightShade,MeanLook,MalignantChain,Recover|Calm|252,,16,,232,8||,0,,,,|||,,,,,Poison]Landorus-Therian||ChoiceScarf|Intimidate|Earthquake,Uturn,Psychic,BodySlam|Naive|,252,,4,,252|||||,,,,,Ground]Clefable||HeavyDutyBoots|Unaware|AlluringVoice,Moonlight,CalmMind,StoredPower|Calm|252,,120,,136,||,0,,,,|||,,,,,Fairy"],
+ ["Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|CalmMind,Thunderclap,DragonPulse,Thunderbolt|Timid|120,,,252,,136|||||,,,,,Water]Tinkaton||Leftovers|MoldBreaker|StealthRock,ThunderWave,PlayRough,KnockOff|Careful|252,,4,,252,|||||,,,,,Fairy]Dachsbun||Leftovers|WellBakedBody|BodyPress,Wish,Protect,Yawn|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy]Urshifu||ChoiceScarf|UnseenFist|WickedBlow,CloseCombat,Uturn,AerialAce|Adamant|,252,,,4,252|||||,,,,,Fighting]Araquanid||RockyHelmet|WaterBubble|Liquidation,LeechLife,Rest,SleepTalk|Impish|252,,188,,,68|||||,,,,,Water]Cinderace||HeavyDutyBoots|Blaze|PyroBall,CourtChange,WillOWisp,Uturn|Jolly|252,72,,,,184|||||,,,,,Fire","Tera Captain|MoltresGalar|SoftSand|Berserk|AirSlash,TeraBlast,NastyPlot,Agility|Modest|,,80,196,,232||,0,,,,|||,,,,,Ground]Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|IvyCudgel,StompingTantrum,PlayRough,SwordsDance|Jolly|,252,,,96,160|||||,,,,,Rock]Palafin-Hero||ChoiceBand|ZerotoHero|WaveCrash,JetPunch,FlipTurn,IcePunch|Jolly|,212,40,,24,232|||||,,,,,Water]Kilowattrel||ChoiceScarf|VoltAbsorb|Thunderbolt,Hurricane,VoltSwitch,Endeavor|Timid|,,60,240,,208||,0,,,,|||,,,,,Electric]Gouging Fire||BoosterEnergy|Protosynthesis|HeatCrash,DragonClaw,IronHead,DragonDance|Adamant|,244,136,,,128|||||,,,,,Fire]Decidueye-Hisui||RockyHelmet|Scrappy|AuraSphere,Roost,Uturn,Defog|Bold|248,,252,8,,|||||,,,,,Grass"],
+ ["Tera Captain|Zarude|HeavyDutyBoots|LeafGuard|PowerWhip,KnockOff,BulkUp,Synthesis|Jolly|248,,,,148,112|||||,,,,,Electric]Iron Valiant||LifeOrb|QuarkDrive|Moonblast,ShadowBall,VacuumWave,CalmMind|Timid|80,,16,252,,160||,0,,,,|||,,,,,Fairy]Ursaluna-Bloodmoon||AssaultVest|MindsEye|BloodMoon,HyperVoice,EarthPower,VacuumWave|Modest|92,,,164,252,||,0,,,,|||,,,,,Ground]Rotom-Wash||RockyHelmet|Levitate|HydroPump,VoltSwitch,WillOWisp,PainSplit|Bold|248,,252,,,8||,0,,,,|||,,,,,Electric]Jirachi||ColburBerry|SereneGrace|DoomDesire,Uturn,LightScreen,StealthRock|Jolly|248,,,,108,152|||||,,,,,Steel]Abomasnow||HeavyDutyBoots|SnowWarning|Blizzard,GigaDrain,Earthquake,IceShard|Quiet|248,,8,252,,|||||,,,,,Grass","Great Tusk||BoosterEnergy|Protosynthesis|CloseCombat,HeadlongRush,RockSlide,RapidSpin|Adamant|64,252,,,,192|||||,,,,,Ground]Greninja-Bond||ChoiceSpecs|BattleBond|Uturn,DarkPulse,Surf,WaterShuriken|Timid|48,,,252,,208|||||,,,,,Water]Tera Captain|RagingBolt|MentalHerb|Protosynthesis|DragonPulse,Thunderbolt,Thunderclap,CalmMind|Modest|104,,,252,,152||,20,,,,|||,,,,,Dragon]Uxie||ColburBerry|Levitate|Uturn,Psychic,StealthRock,ThunderWave|Calm|248,,168,,92,|||||,,,,,Psychic]Klefki||LightClay|Prankster|DazzlingGleam,LightScreen,Reflect,Spikes|Calm|248,,8,,252,||,0,,,,|||,,,,,Steel]Brambleghast||ExpertBelt|WindRider|Poltergeist,PowerWhip,RapidSpin,SkitterSmack|Adamant|32,252,,,,224|||||,,,,,Grass"],
+ ["Chi-Yu||ChoiceScarf|BeadsofRuin|HeatWave,DarkPulse,Psychic,Ruination|Modest|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|LandorusTherian|RockyHelmet|Intimidate|Uturn,StealthRock,StoneEdge,Earthquake|Jolly|,252,,,4,252|||S||,,,,,Fairy]Tornadus-Therian||HeavyDutyBoots|Regenerator|Uturn,BleakwindStorm,SludgeWave,Tailwind|Timid|,,,252,4,252|||S||,,,,,Flying]Dunsparce||Eviolite|SereneGrace|Coil,BodySlam,Earthquake,PoisonJab|Adamant|236,192,40,,40,|||||,,,,,Normal]Slowbro||Leftovers|Regenerator|IceBeam,Scald,GrassKnot,Flamethrower|Modest|252,,,252,4,||,0,,,,|||,,,,,Water]Tera Captain|Tinkaton|ExpertBelt|MoldBreaker|GigatonHammer,KnockOff,FakeOut,BrickBreak|Jolly|,252,,,4,252|||||,,,,,Dragon","Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Glare,Substitute|Timid|104,1,,252,,151||,0,,,,|||,,,,,Water]Excadrill||AirBalloon|MoldBreaker|Earthquake,RockSlide,SwordsDance,RapidSpin|Jolly|6,252,,,,250|||||,,,,,Ground]Iron Hands||AssaultVest|QuarkDrive|ThunderPunch,IcePunch,DrainPunch,Earthquake|Brave|4,132,208,,164,||,,,,,0|||,,,,,Fighting]Tera Captain|Cinccino|FocusSash|SkillLink|RockBlast,BulletSeed,TidyUp,IceSpinner|Jolly|4,252,,,,224|||||,,,,,Rock]Hatterene||LaggingTail|MagicBounce|Trick,DazzlingGleam,ShadowBall,Nuzzle||252,,,4,252,|||||,,,,,Psychic]Hippowdon||Leftovers|SandStream|Earthquake,StoneEdge,IceFang,SlackOff||252,,252,,4,|||||,,,,,Ground"],
+ ["Darkrai||RoseliBerry|BadDreams|DarkPulse,WillOWisp,SludgeBomb,FocusBlast|Timid|80,,,252,,176||,0,,,,|||,,,,,Dark]Heatran||AssaultVest|FlashFire|FlashCannon,StealthRock,ScorchingSands,FireBlast|Bold|,,224,252,,32||,0,,,,|||,,,,,Fire]Tera Captain|Terrakion|ShucaBerry|Justified|SacredSword,RockSlide,IronHead,SwordsDance|Careful|,252,,,124,132|||||,,,,,Steel]Walking Wake||ChoiceSpecs|Protosynthesis|HydroSteam,Flamethrower,FlipTurn,DracoMeteor|Timid|,,,180,144,184|||||,,,,,Water]Gliscor||ToxicOrb|PoisonHeal|Facade,Earthquake,SwordsDance,BrickBreak|Careful|244,,,,28,236|||||,,,,,Ground]Tera Captain|Shaymin|HeatRock|NaturalCure|SunnyDay,SeedFlare,HealingWish,Synthesis|Modest|,,96,,212,200||,0,,,,|||,,,,,Ground","Tera Captain|Cinccino|PowerHerb|SkillLink|TripleAxel,Uturn,TailSlap,Dig|Jolly|,252,,,48,208|||||,,,,,Fairy]Clefable||LifeOrb|MagicGuard|IceBeam,Moonlight,FocusBlast,HealingWish|Modest|228,,,252,28,||,0,,,,|||,,,,,Fairy]Mamoswine||AssaultVest|ThickFat|IceShard,Earthquake,Facade,IcicleCrash|Jolly|208,220,,,,80|||||,,,,,Ice]Dondozo||RockyHelmet|Unaware|Yawn,Liquidation,SleepTalk,Rest|Impish|248,8,252,,,|||||,,,,,Water]Tera Captain|Serperior|Leftovers|Contrary|LeechSeed,Substitute,Glare,LeafStorm|Timid|240,,,,40,228||,0,,,,|||,,,,,Grass]Zapdos||HeavyDutyBoots|Static|Roost,Uturn,Hurricane,Discharge|Timid|,,,252,4,252|||||,,,,,Electric"],
+ ["Rotom-Heat||ChoiceScarf|Levitate|Trick,VoltSwitch,Discharge,Overheat|Timid|152,,,252,4,100||,0,,,,|||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|NastyPlot,Hurricane,HeatWave,SludgeBomb|Timid|248,,,20,,240||,0,,,,|||,,,,,Fire]Meowscarada||ChoiceBand|Protean|Uturn,FlowerTrick,TripleAxel,KnockOff|Jolly|32,252,,,,224|||||,,,,,Ghost]Great Tusk||AssaultVest|Protosynthesis|RapidSpin,CloseCombat,Earthquake,Megahorn|Jolly|252,,,,164,92|||||,,,,,Fire]Tera Captain|Clefable|HeavyDutyBoots|Unaware|Moonlight,KnockOff,StealthRock,Encore|Impish|252,4,252,,,|||||,,,,,Steel]Tera Captain|OricorioPomPom|HeavyDutyBoots|Dancer|Substitute,QuiverDance,Roost,RevelationDance|Timid|252,,144,,,112||,0,,,,|||,,,,,Flying","Darkrai||ChoiceSpecs|BadDreams|DarkPulse,FocusBlast,IceBeam,SludgeBomb|Timid|16,,,252,,240||,0,,,,|||,,,,,Dark]Cinderace||ChoiceBand|Libero|PyroBall,HighJumpKick,Uturn,CourtChange|Adamant|96,252,,,,160|||||,,,,,Fire]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,PlayRough,Uturn,Taunt|Adamant|24,252,,,,232|||||,,,,,Water]Tera Captain|Comfey|Leftovers|Triage|DrainingKiss,WorrySeed,CalmMind,Synthesis|Modest|8,,252,248,,||,0,,,,|||,,,,,Fairy]Gliscor||ToxicOrb|PoisonHeal|KnockOff,Toxic,Substitute,Protect|Impish|248,,136,,124,|||||,,,,,Ground]Gholdengo||ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,PowerGem,Trick|Modest|4,,52,252,,200||,0,,,,|||,,,,,Steel"],
+ ["Darkrai||LifeOrb|BadDreams|DarkPulse,SludgeBomb,FocusBlast,Hypnosis|Timid|48,,,252,,208||,0,,,,|||,,,,,Dark]Forretress||RedCard|Sturdy|GyroBall,RapidSpin,ThunderWave,PainSplit|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Bug]Slowking-Galar||HeavyDutyBoots|Regenerator|SludgeBomb,FireBlast,SlackOff,ChillyReception|Calm|252,,,4,252,||,0,,,,29|||,,,,,Poison]Tera Captain|UrshifuRapidStrike|PunchingGlove|UnseenFist|SurgingStrikes,IcePunch,ThunderPunch,SwordsDance|Jolly|56,252,,,,200|||||,,,,,Steel]Sandy Shocks||BoosterEnergy|Protosynthesis|StealthRock,Thunderbolt,EarthPower,Spikes|Timid|184,,,72,,252||,0,,,,|||,,,,,Electric]Dragonite||HeavyDutyBoots|Multiscale|DragonClaw,Earthquake,ThunderPunch,DragonDance|Adamant|40,252,,,,216|||||,,,,,Dragon","Tera Captain|RotomHeat|ChoiceScarf|Levitate|WillOWisp,VoltSwitch,Overheat,Trick|Timid|252,,,64,,192||,0,,,,|||,,,,,Dragon]Slowking-Galar||HeavyDutyBoots|Regenerator|ChillyReception,ThunderWave,Psychic,Flamethrower|Relaxed|252,,252,,4,||,0,,,,0|||,,,,,Poison]Roaring Moon||BoosterEnergy|Protosynthesis|KnockOff,DragonDance,Acrobatics,FireFang|Adamant|24,252,,,,232|||||,,,,,Dragon]Primarina||KebiaBerry|LiquidVoice|HydroPump,Moonblast,PsychicNoise,FlipTurn|Bold|252,,252,,4,|||||,,,,,Water]Tera Captain|Annihilape|AssaultVest|Defiant|DrainPunch,FirePunch,RageFist,IcePunch|Adamant|252,244,,,,12|||||,,,,,Fighting]Iron Treads||HeavyDutyBoots|QuarkDrive|StealthRock,RapidSpin,Earthquake,VoltSwitch|Jolly|252,40,,,,216|||||,,,,,Ground"],
+ ["Palafin||AssaultVest|ZerotoHero|JetPunch,ZenHeadbutt,WaveCrash,CloseCombat|Adamant|16,252,,,,240|||||,,,,,Water]Meowscarada||ChoiceScarf|Protean|Uturn,KnockOff,FlowerTrick,SuckerPunch|Jolly|104,252,,,,152|||||,,,,,Grass]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|TeraBlast,SludgeWave,FieryDance,LightScreen|Timid|120,,,132,4,252||,0,,,,|||,,,,,Ground]Dragonite||HeavyDutyBoots|Multiscale|DragonDance,Earthquake,ExtremeSpeed,AerialAce|Adamant|,252,44,,,212|||||,,,,,Dragon]Orthworm||SitrusBerry|EarthEater|ShedTail,StealthRock,BodyPress,Spikes|Bold|248,,252,,8,||,0,,,,|||,,,,,Steel]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,RapidSpin,CalmMind,EarthPower|Modest|,,4,252,,252|||||,,,,,Stellar","Thwackey||Eviolite|GrassySurge|KnockOff,Uturn,FakeOut,WoodHammer|Impish|,252,252,,4,|||||,,,,,Grass]Sneasler||GrassySeed|Unburden|CloseCombat,DireClaw,SwordsDance,Uturn|Adamant|,252,,,4,252|||||,,,,,Dark]Clodsire||Leftovers|WaterAbsorb|StealthRock,Recover,Earthquake,Toxic|Careful|252,4,,,252,|||||,,,,,Poison]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|IvyCudgel,WoodHammer,SpikyShield,Synthesis|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|Espathra|Leftovers|SpeedBoost|TeraBlast,Uturn,Protect,LuminaCrash|Modest|,,,252,4,252|||||,,,,,Ice]Chi-Yu||FocusSash|BeadsofRuin|Overheat,DarkPulse,Hex,WillOWisp|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark"],
+ ["Garchomp||RockyHelmet|RoughSkin|SwordsDance,Earthquake,ScaleShot,StealthRock|Impish|184,68,248,,,8|||||,,,,,Dragon]Urshifu||PunchingGlove|UnseenFist|WickedBlow,SuckerPunch,CloseCombat,Uturn|Jolly|,252,,,4,252|||||,,,,,Fighting]Rotom-Wash||Leftovers|Levitate|VoltSwitch,HydroPump,PainSplit,WillOWisp|Bold|148,,236,48,76,||,0,,,,|||,,,,,Electric]Tera Captain|Revavroom|LifeOrb|Filter|ShiftGear,HighHorsepower,IronHead,TeraBlast|Adamant|,252,16,,,240|||||,,,,,Water]Sylveon||Leftovers|Pixilate|Wish,Protect,HyperVoice,Yawn|Calm|252,,,4,252,||,0,,,,|||,,,,,Fairy]Tsareena||RockyHelmet|QueenlyMajesty|RapidSpin,PowerWhip,HighJumpKick,KnockOff|Adamant|48,252,208,,,|||||,,,,,Grass","Pawmot||AirBalloon|VoltAbsorb|RevivalBlessing,PlayRough,DoubleShock,IcePunch|Jolly|148,108,,,,252|||||,,,,,Electric]Tera Captain|Basculegion|FocusSash|Adaptability|LastRespects,AquaJet,Liquidation,TeraBlast|Lonely|252,252,,4,,|||||,,,,,Ghost]Cinccino||LoadedDice|Technician|BulletSeed,RockBlast,TripleAxel,TailSlap|Jolly|,252,,,4,252|||||,,,,,Normal]Chi-Yu||ChoiceScarf|BeadsofRuin|Flamethrower,DarkPulse,Ruination,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tyranitar||AssaultVest|SandStream|BrickBreak,Earthquake,Avalanche,DragonClaw|Adamant|252,252,,,4,|||||,,,,,Rock]Tera Captain|GoodraHisui|Leftovers|Gooey|AcidArmor,Substitute,DragonPulse,FlashCannon|Calm|248,,,8,252,||,0,,,,|||,,,,,Steel"],
+ ["Gouging Fire||HabanBerry|Protosynthesis|DragonDance,Earthquake,DragonClaw,HeatCrash|Jolly|,168,,,88,252|||||,,,,,Fire]Torkoal||HeatRock|Drought|LavaPlume,StealthRock,RapidSpin,Yawn|Calm|248,,8,60,192,|||||,,,,,Fire]Hatterene||EjectButton|MagicBounce|DazzlingGleam,Psychic,MysticalFire,HealingWish|Bold|248,,208,,,52||,0,,,,|||,,,,,Psychic]Tera Captain|Venusaur|LifeOrb|Chlorophyll|WeatherBall,Growth,GigaDrain,SludgeBomb|Modest|32,,,252,8,216||,0,,,,|||,,,,,Grass]Ribombee||HeavyDutyBoots|ShieldDust|BugBuzz,Moonblast,SunnyDay,Uturn|Timid|,,92,248,,168|||||,,,,,Bug]Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|DracoMeteor,HydroSteam,FlipTurn,TeraBlast|Timid|,,,252,56,200|||||,,,,,Electric","Tera Captain|Serperior|RindoBerry|Contrary|LeafStorm,TeraBlast,DragonPulse,Substitute|Timid|4,,,252,,252||,0,,,,|||,,,,,Rock]Sylveon||Leftovers|Pixilate|Protect,Wish,Yawn,HyperVoice|Calm|252,,,4,252,||,0,,,,|||,,,,,Fairy]Tera Captain|IronThorns|SitrusBerry|QuarkDrive|TeraBlast,Earthquake,DragonDance,SupercellSlam|Jolly|,252,,,4,252|||||,,,,,Flying]Garchomp||HabanBerry|RoughSkin|DragonClaw,IronHead,StealthRock,Earthquake|Jolly|,252,,,176,80|||||,,,,,Dragon]Toxapex||ShucaBerry|Regenerator|Infestation,Haze,SludgeBomb,Recover|Bold|248,,152,8,100,||,0,,,,|||,,,,,Poison]Rotom-Heat||SitrusBerry|Levitate|Overheat,VoltSwitch,ThunderWave,NastyPlot|Calm|176,,,80,252,||,0,,,,|||,,,,,Electric"],
+ ["Baxcalibur||NeverMeltIce|ThermalExchange|SwordsDance,IceShard,Earthquake,IcicleCrash|Adamant|240,252,,,,16|||||,,,,,Bug]Ribombee||RockyHelmet|ShieldDust|Uturn,DrainingKiss,PsychicNoise,Thief|Timid|248,,12,,,248|||||,,,,,Bug]Samurott-Hisui||ChoiceBand|Sharpness|CeaselessEdge,KnockOff,AquaCutter,AquaJet|Adamant|248,252,,,,8|||||,,,,,Bug]Tera Captain|Gliscor|SitrusBerry|PoisonHeal|Agility,SwordsDance,Acrobatics,Earthquake|Adamant|120,252,4,,,132|||||,,,,,Fairy]Skeledirge||HeavyDutyBoots|Unaware|SlackOff,NightShade,ShadowBall,EarthPower|Calm|248,,,,252,||,0,,,,|||,,,,,Bug]Komala||AssaultVest|Comatose|RapidSpin,KnockOff,Uturn,SuckerPunch|Careful|240,,,,252,16|||||,,,,,Bug","Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,KnockOff,Uturn,HeatWave|Timid|248,,,8,,252|||||,,,,,Flying]Meowscarada||ChoiceBand|Protean|KnockOff,FlowerTrick,Uturn,SuckerPunch|Jolly|,252,,,4,252|||||,,,,,Grass]Clodsire||Leftovers|WaterAbsorb|ToxicSpikes,Earthquake,Recover,Toxic|Impish|252,,252,,4,|||||,,,,,Poison]Hatterene||Leftovers|MagicBounce|Nuzzle,CalmMind,StoredPower,DrainingKiss|Bold|252,,252,,4,|||||,,,,,Psychic]Conkeldurr||Leftovers|IronFist|DrainPunch,Defog,IcePunch,MachPunch|Adamant|200,252,,,,56|||||,,,,,Fighting]Tera Captain|Heatran|Leftovers|FlashFire|StealthRock,TeraBlast,MagmaStorm,EarthPower|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy"],
+ ["Tera Captain|Gholdengo|ChoiceScarf|GoodasGold|Trick,NastyPlot,MakeItRain,ShadowBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Iron Valiant||BoosterEnergy|QuarkDrive|IcyWind,ShadowBall,Moonblast,Thunderbolt|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Manaphy||Leftovers|Hydration|TailGlow,Surf,IceBeam,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Krookodile||FocusSash|Intimidate|Counter,Earthquake,StealthRock,KnockOff|Jolly|,252,,,4,252|||||,,,,,Ground]Tera Captain|Entei|Leftovers|InnerFocus|ExtremeSpeed,SacredFire,StompingTantrum,WillOWisp|Adamant|252,252,,,4,|||||,,,,,Ground]Dragonite||ChoiceSpecs|Multiscale|Thunderbolt,IceBeam,Flamethrower,DracoMeteor|Timid|,,,252,4,252||,0,,,,|||,,,,,Dragon","Zapdos||Leftovers|Static|Hurricane,VoltSwitch,Roost,Uturn|Modest|108,,100,132,80,88|||||,,,,,Electric]Tera Captain|LandorusTherian|ChoiceBand|Intimidate|StompingTantrum,TeraBlast,Uturn,StoneEdge|Jolly|76,56,44,,80,252|||||,,,,,Flying]Weavile||NeverMeltIce|Pickpocket|TripleAxel,KnockOff,Trailblaze,SwordsDance|Adamant|104,44,76,,92,192|||||,,,,,Dark]Toxapex||BlackSludge|Regenerator|Surf,ToxicSpikes,Recover,Haze|Bold|252,,148,,108,||,0,,,,|||,,,,,Poison]Gurdurr||Eviolite|IronFist|Defog,DrainPunch,FirePunch,ThunderPunch|Careful|180,80,84,,164,|||||,,,,,Fighting]Rotom-Mow||ChoiceScarf|Levitate|Trick,VoltSwitch,LeafStorm,Thunderbolt|Modest|188,,64,32,100,124||,0,,,,|||,,,,,Electric"],
+ ["Grimmsnarl||LightClay|Prankster|LightScreen,Reflect,Taunt,PartingShot|Bold|252,,252,,,||,0,,,,|||,,,,,Dark]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,EnergyBall,SludgeWave,Agility|Modest|,,,252,4,252||,0,,,,|||,,,,,Grass]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,PlayRough,Trailblaze|Jolly|,252,,,4,252|||||,,,,,Water]Mamoswine||LoadedDice|ThickFat|IcicleSpear,IceShard,StealthRock,Earthquake|Adamant|252,252,,,4,|||||,,,,,Ice]Kingambit||ChopleBerry|SupremeOverlord|SuckerPunch,SwordsDance,ZenHeadbutt,KowtowCleave|Adamant|,252,252,,4,|||||,,,,,Dark]Cyclizar||SitrusBerry|Regenerator|ShedTail,RapidSpin,DracoMeteor,Uturn|Timid|4,,,252,,252|||||,,,,,Dragon","Blaziken||LumBerry|SpeedBoost|FlareBlitz,BrickBreak,Protect,SwordsDance|Adamant|,252,,,4,252|||||,,,,,Fire]Scream Tail||LightClay|Protosynthesis|Wish,Psyshock,LightScreen,Reflect|Timid|252,,,4,,252||,0,,,,|||,,,,,Fairy]Hydrapple||Leftovers|Regenerator|BodyPress,FickleBeam,GigaDrain,Recover|Bold|248,,252,8,,||,0,,,,|||,,,,,Grass]Excadrill||ChoiceScarf|MoldBreaker|IronHead,RapidSpin,Earthquake,ThroatChop|Jolly|,252,,,4,252|||||,,,,,Ground]Tera Captain|UrshifuRapidStrike|ChoiceBand|UnseenFist|AquaJet,CloseCombat,SurgingStrikes,Uturn|Jolly|,252,,,4,252|||||,,,,,Fire]Minior||WhiteHerb|ShieldsDown|Acrobatics,ShellSmash,Earthquake,RockSlide|Adamant|,252,,,4,252|||S||,,,,,Ground"],
+ ["Iron Valiant||LifeOrb|QuarkDrive|Moonblast,CloseCombat,Psyshock,ShadowBall|Naive|,,8,252,,248|||||,,,,,Fairy]Garchomp||LoadedDice|RoughSkin|SwordsDance,Earthquake,ScaleShot,IronHead|Jolly|,252,,,20,236|||||,,,,,Dragon]Tornadus-Therian||AssaultVest|Regenerator|KnockOff,Uturn,FocusBlast,BleakwindStorm|Timid|248,,,52,,208|||||,,,,,Flying]Tera Captain|Empoleon|HeavyDutyBoots|Torrent|StealthRock,Roost,KnockOff,Roar|Impish|252,,252,,4,|||||,,,,,Dragon]Tera Captain|Mew|SitrusBerry|Synchronize|NastyPlot,Psyshock,ShadowBall,AuraSphere|Timid|,,4,252,,252||,0,,,,|||,,,,,Dragon]Brambleghast||ColburBerry|Infiltrator|RapidSpin,Spikes,Poltergeist,PowerWhip|Impish|252,,240,,,16|||||,,,,,Grass","Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,HornLeech,KnockOff|Jolly|,252,,,4,252|||||,,,,,Water]Slowbro||HeavyDutyBoots|Regenerator|IceBeam,SlackOff,Scald,BodyPress|Bold|252,,252,4,,||,0,,,,|S||,,,,,Water]Fezandipiti||HeavyDutyBoots|ToxicChain|Toxic,Uturn,PlayRough,Roost|Careful|252,4,120,,132,|||||,,,,,Poison]Uxie||ColburBerry|Levitate|PainSplit,ThunderWave,StealthRock,Psychic|Calm|252,,100,4,152,||,0,,,,|S||,,,,,Psychic]Ting-Lu||Leftovers|VesselofRuin|Spikes,Earthquake,Whirlwind,ThroatChop|Careful|252,,4,,252,|||||,,,,,Dark]Tsareena||HeavyDutyBoots|QueenlyMajesty|PowerWhip,Uturn,RapidSpin,Synthesis|Careful|252,,,,252,|||||,,,,,Grass"],
+ ["Palafin||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,CloseCombat,Acrobatics|Adamant|224,252,,,,32|||||,,,,,Water]Iron Moth||HeavyDutyBoots|QuarkDrive|Uturn,Flamethrower,MorningSun,Toxic|Calm|248,,,,72,188|||||,,,,,Fire]Tera Captain|Annihilape|Leftovers|InnerFocus|Substitute,DrainPunch,RageFist,BulkUp|Jolly|248,,,,20,240|||||,,,,,Steel]Iron Treads||AssaultVest|QuarkDrive|KnockOff,VoltSwitch,Earthquake,RapidSpin|Adamant|248,40,,,,220|||||,,,,,Ground]Meowscarada||ChoiceScarf|Protean|TripleAxel,FlowerTrick,SuckerPunch,Uturn|Jolly|44,252,,,,212|||||,,,,,Grass]Tera Captain|OricorioPomPom|RockyHelmet|Dancer|Uturn,Roost,RevelationDance,IcyWind|Bold|248,,252,,8,|||||,,,,,Water","Latios||ChoiceSpecs|Levitate|DracoMeteor,FlipTurn,AuraSphere,Trick|Timid|,,,252,4,252|||||,,,,,Dragon]Fezandipiti||RockyHelmet|ToxicChain|Uturn,Roost,HeatWave,Moonblast|Timid|252,,72,,,184|||||,,,,,Poison]Terapagos||HeavyDutyBoots|TeraShift|DazzlingGleam,Flamethrower,TeraStarstorm,RapidSpin|Modest|252,,,252,4,|||||,,,,,Stellar]Tera Captain|Milotic|Leftovers|MarvelScale|DragonTail,Coil,Recover,Scald|Jolly|252,,128,,,128|||S||,,,,,Dragon]Tyranitar||Leftovers|SandStream|ThunderWave,FireBlast,KnockOff,StealthRock|Quiet|252,,,128,128,|||||,,,,,Rock]Tera Captain|Excadrill|SoftSand|SandRush|XScissor,Earthquake,SwordsDance,TeraBlast|Jolly|64,252,,,,192|||||,,,,,Water"],
+ ["Masquerain||FocusSash|Intimidate|StickyWeb,Hurricane,Uturn,StunSpore|Timid|248,,,8,,252|||||,,,,,Bug]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,Substitute,Glare,TeraBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Stellar]Iron Boulder||BoosterEnergy|QuarkDrive|ZenHeadbutt,CloseCombat,MightyCleave,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Rock]Chi-Yu||ChoiceSpecs|BeadsofRuin|FireBlast,Overheat,Psychic,DarkPulse|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tentacruel||BlackSludge|ClearBody|FlipTurn,KnockOff,Haze,Protect|Jolly|,252,,,4,252|||||,,,,,Water]Skarmory||Leftovers|Sturdy|StealthRock,Whirlwind,BodyPress,Roost|Bold|252,,232,,,24||,0,,,,|||,,,,,Steel","Milotic||FlameOrb|MarvelScale|Scald,Recover,FlipTurn,Haze|Bold|252,,252,,4,|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Taunt,Uturn,BleakwindStorm,HeatWave|Timid|252,,,28,52,176|||||,,,,,Flying]Infernape||FocusSash|IronFist|MachPunch,FakeOut,StealthRock,Overheat|Hasty|252,24,,,40,192|||||,,,,,Fire]Gengar||ChoiceSpecs|CursedBody|ShadowBall,SludgeWave,Thunderbolt,EnergyBall|Timid|80,,,252,,176||,0,,,,|||,,,,,Ghost]Tera Captain|Torterra|LoadedDice|ShellArmor|BulletSeed,RockBlast,HeadlongRush,ShellSmash|Jolly|,252,,,4,252|||||,,,,,Rock]Baxcalibur||LoadedDice|ThermalExchange|IcicleSpear,GlaiveRush,DragonDance,Earthquake|Adamant|,252,,,4,252|||||,,,,,Dragon"],
+ ["Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|Trailblaze,IvyCudgel,KnockOff,SwordsDance|Adamant|40,252,,,,216|||||,,,,,Water]Gholdengo||AirBalloon|GoodasGold|MakeItRain,ShadowBall,ThunderWave,Recover|Bold|252,,196,,,60||,0,,,,|||,,,,,Steel]Garchomp||YacheBerry|RoughSkin|Spikes,SwordsDance,Earthquake,FireFang|Jolly|,252,,,4,252|||||,,,,,Dragon]Tera Captain|Lucario|LifeOrb|InnerFocus|VacuumWave,FlashCannon,AuraSphere,DragonPulse|Modest|,,,252,4,252||,0,,,,|||,,,,,Fighting]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,FocusBlast,HeatWave,Uturn|Timid|,,,252,4,252|||||,,,,,Flying]Tentacruel||ShucaBerry|ClearBody|ChillingWater,KnockOff,RapidSpin,FlipTurn|Bold|252,,252,4,,|||||,,,,,Water","Tera Captain|Excadrill|LifeOrb|SandRush|Earthquake,SwordsDance,IronHead,TeraBlast|Adamant|72,252,4,,,180|||||,,,,,Electric]Tera Captain|RotomMow|Leftovers|Levitate|LeafStorm,VoltSwitch,WillOWisp,Reflect|Modest|232,,,252,4,20||,0,,,,|||,,,,,Steel]Tyranitar||SmoothRock|SandStream|KnockOff,StealthRock,Earthquake,IcePunch|Adamant|252,4,248,,4,|||||,,,,,Rock]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,DragonClaw,HeatCrash,BurningBulwark|Jolly|,252,48,,4,204|||||,,,,,Fire]Cyclizar||HeavyDutyBoots|Regenerator|ShedTail,RapidSpin,KnockOff,DragonClaw|Jolly|240,,,,16,252|||||,,,,,Dragon]Palafin||RindoBerry|ZerotoHero|CloseCombat,WaveCrash,ZenHeadbutt,Agility|Adamant|24,252,,,,232|||||,,,,,Water"],
+ ["Garchomp||LoadedDice|RoughSkin|ScaleShot,Earthquake,SwordsDance,StealthRock|Jolly|,252,,,4,252|||||,,,,,Dragon]Palafin-Hero||Leftovers|ZerotoHero|BulkUp,Taunt,DrainPunch,JetPunch|Jolly|76,56,,,200,176|||||,,,,,Water]Tornadus-Therian||RockyHelmet|Regenerator|BleakwindStorm,Taunt,Uturn,KnockOff|Timid|144,,8,252,,104|||||,,,,,Flying]Gholdengo||ColburBerry|GoodasGold|MakeItRain,ShadowBall,Recover,ThunderWave|Modest|252,,28,212,,16||,0,,,,|||,,,,,Steel]Diancie||AirBalloon|ClearBody|Spikes,Moonblast,DiamondStorm,Encore|Relaxed|252,,40,216,,|||||,,,,,Rock]Tera Captain|Gallade|LifeOrb|Sharpness|Agility,SacredSword,PsychoCut,NightSlash|Adamant|120,252,,,,136|||||,,,,,Dark","Meowscarada||ChoiceBand|Protean|FlowerTrick,KnockOff,TripleAxel,Uturn|Adamant|,252,,,4,252|||||,,,,,Grass]Tera Captain|Annihilape|Leftovers|Defiant|RageFist,BulkUp,TeraBlast,Uturn|Adamant|252,252,,,4,|||||,,,,,Fire]Slowking-Galar||BlackSludge|Regenerator|ChillyReception,Whirlpool,ShadowBall,Amnesia|Modest|252,,,56,200,||,0,,,,|||,,,,,Poison]Sandslash-Alola||FocusSash|SlushRush|TripleAxel,IronHead,IceShard,RapidSpin|Adamant|,252,,,4,252|||||,,,,,Ice]Garchomp||FocusSash|RoughSkin|Earthquake,DracoMeteor,FireBlast,StealthRock|Naive|,4,,252,,252|||||,,,,,Dragon]Tera Captain|Moltres|PowerHerb|FlameBody|FireBlast,SolarBeam,WillOWisp,Roost|Modest|248,,,252,8,||,0,,,,|||,,,,,Fire"],
+ ["Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|CalmMind,DragonPulse,Thunderclap,SolarBeam|Modest|240,,,252,,16||,20,,,,|||,,,,,Grass]Palafin-Hero||ChoiceSpecs|ZerotoHero|HydroPump,Boomburst,FlipTurn,JetPunch|Mild|,120,,252,,136|||||,,,,,Water]Scream Tail||HeavyDutyBoots|Protosynthesis|StealthRock,DazzlingGleam,Wish,ThunderWave|Timid|164,,16,28,252,48||,0,,,,|||,,,,,Fairy]Donphan||AssaultVest|Sturdy|Earthquake,KnockOff,RapidSpin,IceShard|Adamant|252,148,88,,,20|||||,,,,,Ground]Meowscarada||ChoiceScarf|Protean|KnockOff,FlowerTrick,Uturn,TripleAxel|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Revavroom|ShucaBerry|Filter|ShiftGear,IronHead,HighHorsepower,TemperFlare|Adamant|40,252,,,,216|||||,,,,,Fire","Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|DragonPulse,HydroSteam,TeraBlast,Flamethrower|Modest|40,,,252,,216||,0,,,,|||,,,,,Electric]Torkoal||HeatRock|Drought|LavaPlume,RapidSpin,StealthRock,Yawn|Bold|248,,252,8,,|||||,,,,,Flying]Hoopa-Unbound||AssaultVest|Magician|KnockOff,IcePunch,DrainPunch,GunkShot|Adamant|248,48,,,212,|||||,,,,,Poison]Enamorus||ChoiceScarf|Contrary|Moonblast,EarthPower,MysticalFire,HealingWish|Modest|,,,252,4,252||,0,,,,|S||,,,,,Fairy]Arbok||RockyHelmet|Intimidate|Glare,PainSplit,PoisonJab,KnockOff|Impish|248,8,252,,,|||||,,,,,Poison]Ting-Lu||Leftovers|VesselofRuin|Spikes,Earthquake,Whirlwind,Ruination|Careful|248,,8,,252,|||||,,,,,Poison"],
+ ["Iron Boulder||ChoiceBand|QuarkDrive|MightyCleave,CloseCombat,ZenHeadbutt,QuickAttack|Jolly|,252,,,4,252|||||,,,,,Rock]Iron Bundle||ChoiceScarf|QuarkDrive|HydroPump,FreezeDry,IceBeam,FlipTurn|Timid|,,,252,4,252|||||,,,,,Ice]Clodsire||HeavyDutyBoots|WaterAbsorb|PoisonJab,Earthquake,Recover,StealthRock|Careful|248,8,,,252,|||||,,,,,Poison]Gliscor||ToxicOrb|PoisonHeal|Earthquake,KnockOff,Toxic,Protect|Impish|252,,184,,,72|||||,,,,,Ground]Tera Captain|Skeledirge|HeavyDutyBoots|Unaware|TorchSong,ScorchingSands,ShadowBall,SlackOff|Bold|248,,188,,72,||,0,,,,|||,,,,,Dark]Skarmory||RockyHelmet|Sturdy|BodyPress,SecretPower,Whirlwind,Roost|Impish|252,,160,,,96|||||,,,,,Steel","Meowscarada||YacheBerry|Protean|KnockOff,FlowerTrick,TripleAxel,SuckerPunch|Adamant|68,252,,,,188|||||,,,,,Grass]Gengar||ChoiceScarf|CursedBody|ShadowBall,SludgeBomb,Hex,Thunderbolt|Timid|80,,,252,,176||,0,,,,|||,,,,,Ghost]Landorus-Therian||SoftSand|Intimidate|SwordsDance,Earthquake,Substitute,Gravity|Adamant|4,252,,,,252|||||,,,,,Ground]Tera Captain|Quaquaval|AssaultVest|Moxie|AquaStep,CloseCombat,RapidSpin,IceSpinner|Adamant|252,148,,,108,|||||,,,,,Water]Heatran||AirBalloon|FlashFire|StealthRock,MagmaStorm,WillOWisp,EarthPower|Calm|252,,,32,224,||,0,,,,|||,,,,,Fire]Tera Captain|Comfey|Leftovers|Triage|Encore,DrainingKiss,GigaDrain,Synthesis|Bold|252,,56,200,,||,0,,,,|||,,,,,Grass"],
+ ["Chi-Yu||ChoiceSpecs|BeadsofRuin|Flamethrower,Overheat,DarkPulse,Psychic|Timid|,,,252,24,232||,0,,,,|||,,,,,Dark]Torkoal||HeatRock|Drought|StealthRock,RapidSpin,Yawn,LavaPlume|Relaxed|248,,252,,8,||,,,,,0|||,,,,,Fire]Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,Flamethrower,DracoMeteor,FlipTurn|Timid|12,,,244,,252|||||,,,,,Water]Tera Captain|Venusaur|RockyHelmet|Chlorophyll|GigaDrain,Synthesis,KnockOff,SunnyDay|Bold|248,,252,,8,|||||,,,,,Fairy]Slither Wing||Leftovers|Protosynthesis|FirstImpression,MorningSun,CloseCombat,Uturn|Impish|248,,180,,80,|||||,,,,,Bug]Cryogonal||HeavyDutyBoots|Levitate|FreezeDry,RapidSpin,Reflect,LightScreen|Timid|248,,,,68,192|||||,,,,,Ice","Darkrai||LifeOrb|BadDreams|DarkPulse,SludgeBomb,FocusBlast,Protect|Modest|32,,,224,,252||,0,,,,|||,,,,,Dark]Slowking-Galar||ShucaBerry|Regenerator|SludgeBomb,Psychic,ChillyReception,Flamethrower|Calm|248,,124,,136,||,0,,,,|||,,,,,Poison]Scizor||ChoiceBand|Technician|BulletPunch,QuickAttack,KnockOff,Uturn|Adamant|216,252,4,,,36|||||,,,,,Bug]Tera Captain|Diancie|Leftovers|ClearBody|Moonblast,PowerGem,Protect,StealthRock|Bold|248,,60,,200,||,0,,,,|||,,,,,Water]Tera Captain|UrshifuRapidStrike|LumBerry|UnseenFist|SurgingStrikes,PoisonJab,SwordsDance,AquaJet|Adamant|,152,,,124,232|||||,,,,,Poison]Sandy Shocks||Leftovers|Protosynthesis|Discharge,EarthPower,Spikes,BodyPress|Timid|56,,,204,,248||,0,,,,|||,,,,,Electric"],
+ ["Landorus-Therian||Leftovers|Intimidate|StealthRock,Earthquake,SmackDown,Taunt|Jolly|,252,,,4,252|||||,,,,,Ground]Urshifu-Rapid-Strike||ChoiceScarf|UnseenFist|SurgingStrikes,BrickBreak,IceSpinner,IronHead|Jolly|,252,,,4,252|||||,,,,,Fighting]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,DarkPulse,Psychic,Flamethrower|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|Heatran|AirBalloon|FlameBody|FlashCannon,EarthPower,FireBlast,Substitute|Modest|252,,,252,4,||,0,,,,|||,,,,,Grass]Toxapex||Leftovers|Regenerator|ChillingWater,Haze,Recover,Toxic|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Tera Captain|IndeedeeF|AssaultVest|PsychicSurge|Psychic,HyperVoice,ShadowBall,AlluringVoice|Calm|,,,252,252,||,0,,,,|||,,,,,Fairy","Kilowattrel||ChartiBerry|Competitive|VoltSwitch,Thunderbolt,AirSlash,Roost|Modest|,,84,252,,172||,0,,,,|||,,,,,Electric]Tera Captain|Lokix|ProtectivePads|TintedLens|FirstImpression,KnockOff,Uturn,SuckerPunch|Adamant|16,252,,,4,236|||S||,,,,,Water]Ninetales-Alola||RockyHelmet|SnowWarning|AuroraVeil,Moonblast,PainSplit,BabyDollEyes|Timid|72,,252,,,184||,0,,,,|||,,,,,Ice]Landorus||ExpertBelt|SheerForce|EarthPower,Psychic,Uturn,StealthRock|Timid|,,4,252,4,248|||||,,,,,Ground]Sandslash-Alola||FocusSash|SlushRush|StealthRock,KnockOff,MetalBurst,RapidSpin|Jolly|252,,12,,,244|||S||,,,,,Ice]Tera Captain|Latias|Leftovers|Levitate|CalmMind,MistBall,Surf,DrainingKiss|Timid|,,196,136,,176||,0,,,,|||,,,,,Water"],
+ ["Iron Boulder||FocusSash|QuarkDrive|CloseCombat,MightyCleave,ZenHeadbutt,SwordsDance|Adamant|,252,56,,,200|||||,,,,,Rock]Tentacruel||AssaultVest|LiquidOoze|RapidSpin,HydroPump,SludgeBomb,IceBeam|Timid|,,,252,4,252|||||,,,,,Water]Tera Captain|SandyShocks|HeavyDutyBoots|Protosynthesis|ScorchingSands,StealthRock,VoltSwitch,ThunderWave|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel]Enamorus||ChoiceScarf|CuteCharm|EarthPower,Moonblast,SludgeBomb,Tailwind|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Kyurem||LoadedDice|Pressure|DragonDance,ScaleShot,IcicleSpear,Facade|Adamant|,252,,,4,252|||||,,,,,Dragon]Combusken||HeavyDutyBoots|SpeedBoost|SwordsDance,CloseCombat,BlazeKick,ThunderPunch|Adamant|,252,,,4,252|||||,,,,,Fire","Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Substitute,DragonPulse|Timid|56,,,252,,200||,0,,,,|||,,,,,Stellar]Weavile||HeavyDutyBoots|Pressure|KnockOff,IceShard,IceSpinner,UpperHand|Jolly|,252,8,,,248|||||,,,,,Dark]Zapdos-Galar||ChoiceScarf|Defiant|CloseCombat,BraveBird,Uturn,KnockOff|Jolly|80,252,,,,176|||||,,,,,Fighting]Rotom-Heat||HeavyDutyBoots|Levitate|VoltSwitch,WillOWisp,Overheat,Hex|Timid|,,8,252,,248||,0,,,,|||,,,,,Electric]Garchomp||Leftovers|RoughSkin|Earthquake,Spikes,FireBlast,DracoMeteor|Naive|,8,,252,,248|||||,,,,,Dragon]Tinkaton||ShucaBerry|MoldBreaker|StealthRock,GigatonHammer,ThunderWave,KnockOff|Jolly|24,252,,,8,224|||||,,,,,Fairy"],
+ ["Tera Captain|Annihilape|ChoiceScarf|Defiant|CloseCombat,RageFist,StoneEdge,Uturn|Adamant|60,252,,,,196|||||,,,,,Fighting]Tera Captain|Vaporeon|Leftovers|WaterAbsorb|AlluringVoice,Wish,FlipTurn,Protect|Calm|252,,,4,252,|||||,,,,,Fairy]Raging Bolt||RoseliBerry|Protosynthesis|Thunderbolt,DragonPulse,WeatherBall,Thunderclap|Modest|252,,4,252,,||,20,,,,|||,,,,,Electric]Gholdengo||UtilityUmbrella|GoodasGold|ShadowBall,DazzlingGleam,ThunderWave,Recover|Calm|252,,,64,192,||,0,,,,|||,,,,,Steel]Gliscor||ToxicOrb|PoisonHeal|DualWingbeat,Earthquake,StealthRock,Spikes|Adamant|252,52,204,,,|||||,,,,,Ground]Weavile||ChoiceBand|Pickpocket|TripleAxel,KnockOff,IceShard,BrickBreak|Jolly|32,252,,,,224|||||,,,,,Dark","Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|DracoMeteor,HydroSteam,DragonPulse,FlipTurn|Modest|,,,252,44,212|||||,,,,,Water]Tera Captain|Hariyama|AssaultVest|ThickFat|CloseCombat,BulletPunch,KnockOff,IcePunch|Careful|,252,4,,252,|||||,,,,,Fairy]Cyclizar||HeavyDutyBoots|Regenerator|RapidSpin,ShedTail,KnockOff,DragonClaw|Adamant|248,144,,,,116|||||,,,,,Dragon]Darkrai||ChoiceSpecs|BadDreams|SludgeBomb,DarkPulse,Psychic,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Torkoal||HeatRock|Drought|LavaPlume,BodyPress,StealthRock,WillOWisp|Bold|248,,252,,8,||,0,,,,|||,,,,,Fire]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,HornLeech,Uturn,SwordsDance|Adamant|,252,52,,,204|||||,,,,,Fire"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|Encore,DestinyBond,Moonblast,Psyshock|Timid|,,,252,4,252||,0,,,,|||,,,,,Bug]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,Flamethrower,DarkPulse,Psychic|Modest|,,,252,4,252||,0,,,,|||,,,,,Bug]Rotom-Wash||HeavyDutyBoots|Levitate|VoltSwitch,HydroPump,ThunderWave,PainSplit|Calm|252,,,4,252,||,0,,,,0|||,,,,,Bug]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,Substitute,TeraBlast,DragonPulse|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Forretress||Leftovers|Sturdy|GyroBall,ThunderWave,StealthRock,BodyPress|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Bug]Tera Captain|Sinistcha|Leftovers|Heatproof|MatchaGotcha,ShadowBall,StrengthSap,CalmMind|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy","Gliscor||ToxicOrb|PoisonHeal|Earthquake,Toxic,StealthRock,Protect|Careful|252,,,,252,|||||,,,,,Ground]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,FocusBlast,Substitute,Encore|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Scizor||ChoiceBand|Technician|BulletPunch,Uturn,CloseCombat,KnockOff|Adamant|248,252,,,8,|||||,,,,,Bug]Kommo-o||AssaultVest|Soundproof|DrainPunch,PoisonJab,IronHead,DragonTail|Careful|252,,,,252,|||||,,,,,Dragon]Tera Captain|Porygon2|Eviolite|Download|Recover,TriAttack,IceBeam,Discharge|Calm|252,,,,252,||,0,,,,|||,,,,,Fire]Rotom-Wash||ChoiceScarf|Levitate|VoltSwitch,ThunderWave,Trick,HydroPump|Modest|112,,,252,,144||,0,,,,|||,,,,,Electric"],
+ ["Appletun||YacheBerry|ThickFat|LeafStorm,DracoMeteor,BodyPress,Recover|Bold|176,,252,80,,||,0,,,,|||,,,,,Grass]Tera Captain|Espathra|RockyHelmet|SpeedBoost|StoredPower,TeraBlast,Roost,CalmMind|Bold|252,,252,4,,||,0,,,,|||,,,,,Water]Urshifu-Rapid-Strike||ChoiceScarf|UnseenFist|CloseCombat,SurgingStrikes,Uturn,AquaJet|Adamant|,252,,,4,252|||||,,,,,Fighting]Kleavor||FocusSash|Sharpness|Trailblaze,StoneAxe,CloseCombat,Counter|Jolly|,252,,,4,252|||||,,,,,Bug]Kingambit||ChopleBerry|SupremeOverlord|SuckerPunch,SwordsDance,KowtowCleave,IronHead|Adamant|252,252,,,4,|||||,,,,,Dark]Tera Captain|Gengar|FocusSash|CursedBody|ToxicSpikes,Hex,FocusBlast,DestinyBond|Timid|,,,252,4,252||,0,,,,|||,,,,,Ghost","Palafin-Hero||SitrusBerry|ZerotoHero|BulkUp,Substitute,JetPunch,Acrobatics|Adamant|244,,208,,56,|||||,,,,,Water]Gouging Fire||ClearAmulet|Protosynthesis|DragonDance,HeatCrash,MorningSun,DragonClaw|Adamant|72,252,4,,,180|||||,,,,,Fire]Weavile||HeavyDutyBoots|Pressure|SwordsDance,KnockOff,IceShard,LowKick|Jolly|120,252,,,,136|||||,,,,,Dark]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,DarkPulse,Toxic,RapidSpin|Calm|252,,,108,148,|||||,,,,,Stellar]Tera Captain|ThundurusTherian|SitrusBerry|VoltAbsorb|Thunderbolt,DarkPulse,SludgeBomb,Agility|Modest|236,,,252,,20||,0,,,,|||,,,,,Dark]Copperajah||Leftovers|HeavyMetal|StealthRock,Whirlwind,HeavySlam,KnockOff|Adamant|,36,220,,252,|||||,,,,,Steel"],
+ ["Sandy Shocks||HeavyDutyBoots|Protosynthesis|VoltSwitch,EarthPower,StealthRock,ThunderWave|Timid|116,,,,140,252||,0,,,,|||,,,,,Electric]Slowking||Leftovers|Regenerator|Yawn,ShadowBall,Surf,ChillingWater|Calm|252,,,4,252,||,0,,,,|||,,,,,Water]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|Uturn,Taunt,Earthquake,TeraBlast|Jolly|16,236,,,56,200|||||,,,,,Flying]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,HeatCrash,DragonClaw,MorningSun|Jolly|56,252,,,,200|||||,,,,,Fire]Weezing-Galar||BlackSludge|NeutralizingGas|Defog,PainSplit,StrangeSteam,FireBlast|Bold|252,,216,40,,||,0,,,,|||,,,,,Poison]Meowscarada||HeavyDutyBoots|Protean|TripleAxel,Uturn,KnockOff,FlowerTrick|Jolly|4,252,,,,252|||||,,,,,Grass","Okidogi||Leftovers|ToxicChain|DrainPunch,KnockOff,IcePunch,PsychicFangs|Adamant|248,32,228,,,|||||,,,,,Poison]Tera Captain|Latias|RockyHelmet|Levitate|IceBeam,Thunderbolt,Recover,DragonPulse|Timid|248,,,156,,104||,0,,,,|||,,,,,Fairy]Sandy Shocks||BoosterEnergy|Protosynthesis|Thunderbolt,EarthPower,StealthRock,TriAttack|Timid|,,48,208,,252||,0,,,,|||,,,,,Electric]Gholdengo||ColburBerry|GoodasGold|MakeItRain,ShadowBall,Recover,NastyPlot|Bold|248,,252,,,||,0,,,,|||,,,,,Steel]Meowscarada||ChoiceBand|Protean|FlowerTrick,KnockOff,Spikes,Uturn|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Ribombee|HeavyDutyBoots|ShieldDust|Moonblast,BugBuzz,Psychic,QuiverDance|Timid|8,,,252,,248||,0,,,,|||,,,,,Dark"],
+ ["Great Tusk||Leftovers|Protosynthesis|HeadlongRush,CloseCombat,IceSpinner,RapidSpin|Jolly|16,252,,,,240|||||,,,,,Ground]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,KnockOff,Uturn,SeedBomb|Jolly|104,252,,,,152|||||,,,,,Water]Tornadus-Therian||ChoiceSpecs|Regenerator|Hurricane,HeatWave,AirSlash,DarkPulse|Modest|76,,,252,,180||,0,,,,|||,,,,,Flying]Tinkaton||RockyHelmet|MoldBreaker|StealthRock,PlayRough,KnockOff,Encore|Impish|252,4,252,,,|||||,,,,,Fairy]Umbreon||Leftovers|Synchronize|FoulPlay,AlluringVoice,Moonlight,ThunderWave|Calm|252,,4,,252,||,0,,,,|||,,,,,Dark]Tera Captain|Appletun|Leftovers|ThickFat|AppleAcid,Recover,LeechSeed,BodyPress|Bold|252,,252,,,4||,0,,,,|||,,,,,Fairy","Forretress||IronPlate|Sturdy|Spikes,RapidSpin,VoltSwitch,GyroBall|Relaxed|252,,120,,136,||,,,,,0|||,,,,,Bug]Tera Captain|Armarouge|ChoiceSpecs|WeakArmor|ArmorCannon,EnergyBall,Psyshock,DragonPulse|Modest|12,,,252,,244||,0,,,,|||,,,,,Dragon]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|ThunderPunch,Uturn,CloseCombat,SurgingStrikes|Jolly|12,252,,,,244|||||,,,,,Electric]Weavile||HeavyDutyBoots|Pickpocket|KnockOff,IcicleCrash,IceShard,SwordsDance|Jolly|32,252,,,,224|||||,,,,,Dark]Grafaiai||GrassySeed|Unburden|Acrobatics,SwordsDance,GunkShot,LowKick|Adamant|152,252,,,,104|||||,,,,,Poison]Rillaboom||HeavyDutyBoots|GrassySurge|GrassyGlide,Uturn,HighHorsepower,WoodHammer|Adamant|180,252,,,,76|||||,,,,,Grass"],
+ ["Overqwil||RockyHelmet|PoisonPoint|PainSplit,Endure,AquaJet,Liquidation|Impish|248,44,216,,,|||||,,,,,Dark]Tera Captain|Hoopa|Leftovers|Magician|TrickRoom,FocusBlast,Psyshock,ShadowBall|Calm|136,,,160,212,||,0,,,,|||,,,,,Fairy]Cryogonal||HeavyDutyBoots|Levitate|RapidSpin,FreezeDry,ChillingWater,Recover|Calm|232,,,60,108,108|||||,,,,,Ice]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,KnockOff,SwordsDance|Jolly|88,168,,,24,228|||||,,,,,Water]Ursaluna-Bloodmoon||ChopleBerry|MindsEye|BloodMoon,HyperVoice,VacuumWave,Moonlight|Modest|168,,88,252,,||,0,,,,|||,,,,,Ground]Scizor||AssaultVest|Technician|BulletPunch,DualWingbeat,CloseCombat,Uturn|Adamant|136,252,,,120,|||||,,,,,Bug","Blaziken||Leftovers|SpeedBoost|Protect,CloseCombat,FlareBlitz,Substitute|Jolly|80,252,,,,176|||||,,,,,Fire]Grafaiai||RedCard|Prankster|Encore,PartingShot,GunkShot,Toxic|Jolly|252,,,,4,252|||||,,,,,Poison]Tera Captain|Latias|SitrusBerry|Levitate|Thunderbolt,MistBall,IceBeam,DracoMeteor|Timid|32,,,252,,224||,0,,,,|||,,,,,Electric]Iron Treads||AssaultVest|QuarkDrive|VoltSwitch,Earthquake,RapidSpin,IronHead|Careful|224,112,,,172,|||||,,,,,Ground]Rotom-Wash||Leftovers|Levitate|PainSplit,VoltSwitch,WillOWisp,HydroPump|Calm|252,,,12,244,||,0,,,,|||,,,,,Electric]Iron Bundle||ChoiceScarf|QuarkDrive|FreezeDry,Uturn,HydroPump,IceBeam|Modest|80,,,252,,176|||||,,,,,Ice"],
+ ["Darkrai||ChoiceSpecs|BadDreams|FocusBlast,IceBeam,SludgeBomb,DarkPulse|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Slowking-Galar||ColburBerry|Regenerator|TrickRoom,SludgeWave,Psychic,IceBeam|Modest|248,,56,204,,||,0,,,,|||,,,,,Poison]Landorus-Therian||Leftovers|Intimidate|StealthRock,Uturn,StoneEdge,Earthquake|Impish|248,,244,,,16|||||,,,,,Ground]Tsareena||Leftovers|QueenlyMajesty|Synthesis,Uturn,KnockOff,PowerWhip|Impish|248,,252,,8,|||||,,,,,Grass]Ribombee||AbsorbBulb|SweetVeil|QuiverDance,BugBuzz,Psychic,Moonblast|Timid|32,,,252,,224||,0,,,,|||,,,,,Bug]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|Uturn,TeraBlast,SurgingStrikes,CloseCombat|Adamant|152,252,,,,104|||||,,,,,Grass","Darkrai||LifeOrb|BadDreams|NastyPlot,DarkPulse,FocusBlast,SludgeBomb|Timid|,,,252,4,252|||||,,,,,Poison]Garchomp||RockyHelmet|RoughSkin|StealthRock,Outrage,Earthquake,Liquidation|Impish|252,252,,,,4|||||,,,,,Fairy]Sneasler||ChoiceScarf|PoisonTouch|DireClaw,CloseCombat,Uturn,Switcheroo|Adamant|,252,,,4,252|||||,,,,,Grass]Tera Captain|Azumarill|ChoiceBand|HugePower|PlayRough,AquaJet,Liquidation,KnockOff|Adamant|252,152,,,104,|||||,,,,,Water]Zapdos||HeavyDutyBoots|Static|Roost,Discharge,Hurricane,Uturn|Timid|252,,104,,,152|||||,,,,,Electric]Tera Captain|Espeon|ChoiceSpecs|MagicBounce|AlluringVoice,Trick,ShadowBall,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy"],
+ ["Klefki||LightClay|Prankster|ThunderWave,SunnyDay,LightScreen,Reflect|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel]Tera Captain|Ditto|ChoiceScarf|Imposter|Transform|Calm|252,,252,,4,|||||,,,,,Stellar]Blaziken||HeavyDutyBoots|SpeedBoost|CloseCombat,Detect,FlareBlitz,SwordsDance|Adamant|4,252,108,,,144|||||,,,,,Fire]Tera Captain|Latias|AssaultVest|Levitate|TeraBlast,AirSlash,EnergyBall,IceBeam|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Charizard||ChoiceScarf|SolarPower|Flamethrower,Overheat,AncientPower,SolarBeam|Modest|248,,,252,,8||,0,,,,|||,,,,,Fire]Cyclizar||MentalHerb|Regenerator|ShedTail,SunnyDay,KnockOff,DracoMeteor|Timid|248,,,8,,252||,0,,,,|||,,,,,Dragon","Tera Captain|Galvantula|HeavyDutyBoots|CompoundEyes|Thunder,VoltSwitch,StickyWeb,TeraBlast|Timid|64,,,252,,192||,0,,,,|||,,,,,Ground]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,Glare,Substitute,TeraBlast|Timid|20,,,252,4,232||,0,,,,|||,,,,,Stellar]Gliscor||ToxicOrb|PoisonHeal|SwordsDance,Protect,Earthquake,Facade|Impish|252,,,,252,|||||,,,,,Ground]Samurott-Hisui||HeavyDutyBoots|Sharpness|FlipTurn,CeaselessEdge,RazorShell,AquaJet|Adamant|252,252,,,4,|||||,,,,,Water]Volcarona||HeavyDutyBoots|FlameBody|AirSlash,QuiverDance,FieryDance,BugBuzz|Calm|252,,56,,200,||,0,,,,|||,,,,,Bug]Altaria||Leftovers|NaturalCure|Earthquake,Haze,Roost,DracoMeteor|Relaxed|252,,204,,52,|||||,,,,,Dragon"],
+ ["Samurott-Hisui||FocusSash|Sharpness|CeaselessEdge,SuckerPunch,SacredSword,DrillRun|Jolly|,252,,,4,252|||S||,,,,,Fire]Tornadus-Therian||ChoiceSpecs|Regenerator|Hurricane,FocusBlast,WeatherBall,Uturn|Timid|80,,,252,,176|||||,,,,,Fighting]Tera Captain|SandyShocks|BoosterEnergy|Protosynthesis|Thunderbolt,EarthPower,TeraBlast,ChargeBeam|Timid|,,,208,48,252||,0,,,,|||,,,,,Flying]Brambleghast||ColburBerry|WindRider|Poltergeist,RapidSpin,StrengthSap,LeechSeed|Impish|248,,136,,104,20|||||,,,,,Water]Tera Captain|Jirachi|Leftovers|SereneGrace|Wish,Psychic,AuraSphere,CalmMind|Calm|124,,,156,228,||,0,,,,|||,,,,,Dragon]Iron Valiant||KebiaBerry|QuarkDrive|SwordsDance,Taunt,ZenHeadbutt,CloseCombat|Jolly|48,244,,,,216|||S||,,,,,Poison","Tera Captain|Archaludon|AssaultVest|Stamina|BodyPress,DracoMeteor,ElectroShot,FlashCannon|Calm|200,,,56,252,||,0,,,,|||,,,,,Fighting]Tornadus||DampRock|Prankster|RainDance,Tailwind,BleakwindStorm,Uturn|Calm|252,,,4,252,|||||,,,,,Flying]Raikou||LightClay|InnerFocus|LightScreen,Reflect,VoltSwitch,Extrasensory|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Tera Captain|Amoonguss|RockyHelmet|Regenerator|Spore,Toxic,SludgeBomb,GigaDrain|Calm|248,,,8,252,||,0,,,,|||,,,,,Water]Overqwil||ChoiceBand|Intimidate|AquaJet,ThroatChop,GunkShot,SmartStrike|Jolly|,252,,,4,252|||||,,,,,Dark]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|SpikyShield,SwordsDance,IvyCudgel,HornLeech|Adamant|,252,4,,,252|||||,,,,,Water"],
+ ["Iron Boulder||BoosterEnergy|QuarkDrive|Earthquake,SwordsDance,MightyCleave,CloseCombat|Jolly|,252,,,4,252|||||,,,,,Rock]Suicune||Leftovers|Pressure|CalmMind,Surf,IceBeam,Protect|Modest|252,,,252,4,||,0,,,,|||,,,,,Water]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|HornLeech,KnockOff,IvyCudgel,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Fire]Tera Captain|ZoroarkHisui|ChoiceSpecs|Illusion|HyperVoice,Psychic,TeraBlast,ShadowBall|Timid|,,,252,4,252||,0,,,,|S||,,,,,Fairy]Weezing-Galar||BlackSludge|NeutralizingGas|WillOWisp,Defog,SludgeBomb,Taunt|Calm|252,,,4,252,||,0,,,,|S||,,,,,Poison]Roaring Moon||BoosterEnergy|Protosynthesis|KnockOff,DragonDance,Earthquake,Acrobatics|Jolly|,252,,,4,252|||||,,,,,Dragon","Tera Captain|Heatran|AbilityShield|FlashFire|FlashCannon,StealthRock,LavaPlume,TeraBlast|Modest|136,,,252,,120||,0,,,,|||,,,,,Fairy]Great Tusk||BoosterEnergy|Protosynthesis|BulkUp,Earthquake,RapidSpin,CloseCombat|Jolly|248,4,,,4,252|||||,,,,,Fighting]Tera Captain|Kilowattrel|AssaultVest|VoltAbsorb|VoltSwitch,Hurricane,Thunderbolt,TeraBlast|Timid|8,,,152,100,248||,0,,,,|||,,,,,Fighting]Azumarill||AssaultVest|HugePower|AquaJet,PlayRough,KnockOff,Liquidation|Adamant|248,252,4,,4,|||||,,,,,Water]Dusknoir||IronBall|Frisk|Trick,Poltergeist,Payback,Memento|Careful|248,20,,,240,|||||,,,,,Ghost]Scizor||ChoiceBand|Technician|BulletPunch,Uturn,DualWingbeat,Trailblaze|Adamant|248,252,4,,4,|||||,,,,,Bug"],
+ ["Tera Captain|Manaphy|Leftovers|Hydration|TailGlow,Surf,DazzlingGleam,EnergyBall|Modest|196,,4,252,,56||,0,,,,|||,,,,,Grass]Rillaboom||AssaultVest|GrassySurge|GrassyGlide,HighHorsepower,WoodHammer,Uturn|Adamant|156,252,4,,,96|||||,,,,,Stellar]Sneasler||ClearAmulet|PoisonTouch|Uturn,CloseCombat,DireClaw,FakeOut|Jolly|,252,,,4,252|||||,,,,,Stellar]Tera Captain|Mesprit|Leftovers|Levitate|PsychicNoise,PainSplit,CalmMind,ShadowBall|Bold|76,,176,4,36,216||,0,,,,|||,,,,,Steel]Sandy Shocks||Leftovers|Protosynthesis|VoltSwitch,EarthPower,PowerGem,StealthRock|Timid|44,,,252,4,208||,0,,,,|||,,,,,Stellar]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,DragonClaw,FlareBlitz,MorningSun|Adamant|124,252,,,4,128|||||,,,,,Stellar","Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|Thunderclap,CalmMind,Thunderbolt,DragonPulse|Modest|252,,,252,4,||,20,,,,|||,,,,,Ghost]Scizor||RockyHelmet|Technician|BulletPunch,Uturn,Defog,KnockOff|Impish|248,100,160,,,|||||,,,,,Bug]Scream Tail||RedCard|Protosynthesis|Wish,Protect,Encore,PsychicNoise|Timid|248,,,20,60,180||,0,,,,|||,,,,,Fairy]Landorus-Therian||ChoiceScarf|Intimidate|StompingTantrum,StealthRock,Uturn,RockTomb|Jolly|88,252,,,,168|||||,,,,,Ground]Froslass||FocusSash|CursedBody|IceBeam,DestinyBond,Spikes,Taunt|Timid|64,,4,252,,188||,0,,,,|S||,,,,,Ice]Tera Captain|Milotic|FlameOrb|MarvelScale|Scald,Recover,DragonTail,Haze|Bold|252,,188,,68,|||S||,,,,,Ghost"],
+ ["Gliscor||ToxicOrb|PoisonHeal|Protect,Earthquake,StealthRock,ToxicSpikes|Jolly|,116,200,,,192|||||,,,,,Ground]Primarina||Leftovers|LiquidVoice|HyperVoice,FlipTurn,Moonblast,Encore|Calm|4,,,252,252,|||||,,,,,Water]Pecharunt||BlackSludge|PoisonPuppeteer|MalignantChain,Recover,PartingShot,Hex|Bold|248,,252,8,,||,0,,,,|||,,,,,Poison]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Substitute,Synthesis|Timid|252,,4,,,252||,0,,,,|||,,,,,Stellar]Chi-Yu||Leftovers|BeadsofRuin|Substitute,DarkPulse,Flamethrower,NastyPlot|Timid|104,,,252,,152||,0,,,,|||,,,,,Dark]Primeape||ChoiceBand|Defiant|Uturn,CloseCombat,Earthquake,ThroatChop|Jolly|64,252,,,,192|||||,,,,,Fighting","Tera Captain|Revavroom|AirBalloon|Overcoat|ShiftGear,HighHorsepower,GunkShot,TeraBlast|Adamant|40,252,4,,,212|||||,,,,,Water]Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,ZenHeadbutt,MightyCleave,CloseCombat|Jolly|112,252,,,,144|||||,,,,,Flying]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|PowerWhip,Uturn,Spikes,IvyCudgel|Jolly|80,252,,,,176|||||,,,,,Water]Great Tusk||EjectPack|Protosynthesis|IceSpinner,HeadlongRush,RapidSpin,StealthRock|Adamant|136,252,,,,120|||||,,,,,Steel]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,Flamethrower,DarkPulse,Ruination|Modest|80,,,252,,176||,0,,,,|||,,,,,Grass]Tera Captain|Eelektross|AssaultVest|Levitate|Uturn,KnockOff,CloseCombat,SupercellSlam|Careful|248,8,,,252,|||||,,,,,Ice"],
+ ["Garchomp||HabanBerry|RoughSkin|Earthquake,SwordsDance,DragonClaw,StealthRock|Adamant|32,252,,,,224|||||,,,,,Dragon]Tera Captain|UrshifuRapidStrike|WacanBerry|UnseenFist|ThunderPunch,SurgingStrikes,CloseCombat,SwordsDance|Adamant|,252,,,48,208|||||,,,,,Grass]Corviknight||RockyHelmet|MirrorArmor|Defog,Roost,Uturn,BraveBird|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Flying]Tera Captain|Arcanine|Leftovers|Intimidate|TeraBlast,MorningSun,Protect,WillOWisp|Bold|248,,140,,,120||,0,,,,|||,,,,,Water]Florges||Leftovers|FlowerVeil|Moonblast,Protect,Wish,CalmMind|Calm|248,,,,252,8||,0,,,,|||,,,,,Fairy]Jolteon||FlameOrb|QuickFeet|VoltSwitch,WeatherBall,AlluringVoice,Protect|Timid|80,,,252,,176||,0,,,,|||,,,,,Electric","Tera Captain|RagingBolt|WhiteHerb|Protosynthesis|Thunderclap,VoltSwitch,DracoMeteor,Thunderbolt|Timid|32,,12,228,28,208||,20,,,,|||,,,,,Fairy]Vikavolt||RockyHelmet|Levitate|StickyWeb,VoltSwitch,BugBuzz,ThunderWave|Modest|160,,20,228,100,||,0,,,,|||,,,,,Bug]Pelipper||DampRock|Drizzle|Roost,WeatherBall,Uturn,Hurricane|Timid|168,,,92,100,148|||||,,,,,Water]Archaludon||AssaultVest|Stamina|ElectroShot,FlashCannon,DragonPulse,BodyPress|Timid|56,,20,112,144,176||,0,,,,|||,,,,,Steel]Basculegion||ColburBerry|SwiftSwim|PhantomForce,FlipTurn,Liquidation,IceFang|Jolly|8,252,28,,28,192|||||,,,,,Water]Landorus-Therian||RockyHelmet|Intimidate|Uturn,Earthquake,SwordsDance,SmackDown|Jolly|,252,20,,28,208|||||,,,,,Ground"],
+ ["Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,KnockOff,PowerWhip,Uturn|Jolly|,252,,,4,252|||||,,,,,Water]Archaludon||PowerHerb|Stamina|MeteorBeam,BodyPress,Thunderbolt,DracoMeteor|Bold|4,,48,204,252,||,0,,,,|||,,,,,Steel]Fezandipiti||ChoiceScarf|ToxicChain|Moonblast,ShadowBall,Uturn,SludgeBomb|Modest|192,,4,252,4,56|||||,,,,,Poison]Iron Hands||AssaultVest|QuarkDrive|CloseCombat,ThunderPunch,Earthquake,IcePunch|Adamant|4,252,4,,248,|||||,,,,,Fighting]Sandaconda||RockyHelmet|ShedSkin|Earthquake,Glare,StealthRock,Rest|Impish|252,4,252,,,|||||,,,,,Ground]Kleavor||ChoiceScarf|Sharpness|Uturn,StoneAxe,XScissor,NightSlash|Jolly|44,252,4,,4,204|||||,,,,,Bug","Slowking-Galar||AssaultVest|Regenerator|FocusBlast,HydroPump,SludgeBomb,PsychicNoise|Calm|252,,20,88,148,||,0,,,,|||,,,,,Bug]Gouging Fire||LifeOrb|Protosynthesis|Earthquake,DragonDance,HeatCrash,ThunderFang|Jolly|44,252,,,4,208|||||,,,,,Bug]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|Uturn,IvyCudgel,Superpower,WoodHammer|Jolly|,252,4,,,252|||||,,,,,Water]Bronzong||Leftovers|Levitate|TrickRoom,StealthRock,Psychic,SteelBeam|Quiet|252,,100,152,4,||,0,,,,0|||,,,,,Bug]Tera Captain|Hydrapple|Leftovers|Regenerator|FickleBeam,GigaDrain,NastyPlot,EarthPower|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy]Tera Captain|EnamorusTherian|HeavyDutyBoots|Overcoat|DrainingKiss,CalmMind,EarthPower,Agility|Timid|124,,,252,4,128||,0,,,,|||,,,,,Grass"],
+ ["Tera Captain|Latias|Leftovers|Levitate|Substitute,CalmMind,DrainingKiss,Roar|Timid|252,,160,,,96||,0,,,,|||,,,,,Fairy]Palafin-Hero||ChoiceScarf|ZerotoHero|WaveCrash,CloseCombat,IcePunch,JetPunch|Adamant|4,252,,,,252|||||,,,,,Normal]Meowscarada||FocusSash|Overgrow|Spikes,LeafStorm,AuraSphere,Taunt|Timid|,,,252,4,252||,0,,,,|||,,,,,Normal]Tinkaton||Leftovers|MoldBreaker|Encore,GigatonHammer,KnockOff,StealthRock|Jolly|252,,,,32,224|||||,,,,,Normal]Iron Hands||ShucaBerry|QuarkDrive|SwordsDance,DrainPunch,IcePunch,Whirlwind|Impish|252,4,252,,,|||||,,,,,Normal]Donphan||HeavyDutyBoots|Sturdy|RapidSpin,Earthquake,SmackDown,Roar|Adamant|248,252,,,8,|||||,,,,,Normal","Tera Captain|Latias|Leftovers|Levitate|StoredPower,AuraSphere,CalmMind,Recover|Bold|252,,252,4,,||,0,,,,|||,,,,,Steel]Meowscarada||ChoiceBand|Protean|TripleAxel,FlowerTrick,KnockOff,Uturn|Jolly|,252,,,4,252|||||,,,,,Grass]Zapdos||HeavyDutyBoots|Static|Roost,Hurricane,VoltSwitch,Discharge|Bold|252,,252,,,4||,0,,,,|||,,,,,Electric]Tera Captain|Lucario|ChoiceBand|Steadfast|CloseCombat,ExtremeSpeed,MeteorMash,Earthquake|Adamant|240,252,,,,16|||||,,,,,Normal]Swampert||Leftovers|Torrent|Yawn,EarthPower,IceBeam,FlipTurn|Bold|252,,252,,,4|||||,,,,,Water]Glimmora||Leftovers|Corrosion|MortalSpin,PowerGem,Toxic,Spikes|Modest|212,,,252,,44|||||,,,,,Rock"],
+ ["Primarina||AssaultVest|Torrent|Moonblast,FlipTurn,Surf,Psychic|Modest|252,,,252,4,|||||,,,,,Water]Darkrai||HeavyDutyBoots|BadDreams|DarkPulse,SludgeBomb,Psychic,FocusBlast|Timid|72,,,252,,184||,0,,,,|||,,,,,Dark]Tera Captain|Landorus|LifeOrb|SheerForce|EarthPower,SludgeWave,Psychic,Uturn|Timid|,,,252,4,156|||||,,,,,Steel]Tera Captain|Bisharp|Eviolite|Defiant|StealthRock,IronHead,LowKick,TeraBlast|Adamant|252,252,,,4,|||||,,,,,Psychic]Magnezone||Leftovers|MagnetPull|MagnetRise,VoltSwitch,FlashCannon,BodyPress|Modest|,,,252,4,252||,0,,,,|||,,,,,Electric]Hitmontop||LifeOrb|Technician|MachPunch,TripleAxel,BulletPunch,FakeOut|Adamant|248,252,,,8,|||||,,,,,Fighting","Iron Bundle||ChoiceSpecs|QuarkDrive|FlipTurn,FreezeDry,HydroPump,IceBeam|Timid|88,,,252,,168|||||,,,,,Ice]Tera Captain|Excadrill|LifeOrb|SandRush|TeraBlast,Earthquake,SwordsDance,IronHead|Adamant|,252,,,56,200|||||,,,,,Ice]Tyranitar||ChopleBerry|SandStream|StealthRock,KnockOff,LowKick,StoneEdge|Careful|248,,8,,252,|||||,,,,,Rock]Latios||ChoiceScarf|Levitate|IceBeam,FlipTurn,AuraSphere,DracoMeteor|Modest|40,,32,252,,184|||||,,,,,Dragon]Blaziken||ShucaBerry|SpeedBoost|Earthquake,FlareBlitz,SwordsDance,Protect|Adamant|248,252,4,,4,|||||,,,,,Fire]Tera Captain|Lurantis|AssaultVest|Contrary|Superpower,LeafStorm,KnockOff,LeechLife|Sassy|248,60,,,200,|||||,,,,,Flying"],
+ ["Tera Captain|Quaquaval|ProtectivePads|Moxie|AquaStep,TripleAxel,CloseCombat,RapidSpin|Adamant|136,252,8,,,112|||||,,,,,Stellar]Enamorus||HeavyDutyBoots|CuteCharm|Moonblast,MysticalFire,SludgeBomb,HealingWish|Timid|32,,,252,,224||,0,,,,|||,,,,,Fairy]Slowking-Galar||BlackSludge|Regenerator|SludgeBomb,Flamethrower,Trick,SlackOff|Calm|248,,8,,252,||,0,,,,|||,,,,,Poison]Servine||Eviolite|Contrary|LeafStorm,KnockOff,Synthesis,Glare|Bold|248,,212,48,,|||||,,,,,Grass]Glimmora||PowerHerb|ToxicDebris|MeteorBeam,StealthRock,PowerGem,SludgeBomb|Modest|104,,,252,,152||,0,,,,|||,,,,,Rock]Darkrai||LifeOrb|BadDreams|DarkPulse,SludgeBomb,NastyPlot,IceBeam|Timid|112,,4,252,4,136||,0,,,,|||,,,,,Dark","Zapdos||ChoiceScarf|Static|Thunderbolt,VoltSwitch,SleepTalk,Hurricane|Modest|,,4,252,,252||,0,,,,|||,,,,,Electric]Palafin-Hero||LumBerry|ZerotoHero|JetPunch,DrainPunch,BulkUp,Encore|Adamant|252,36,,,156,64|||||,,,,,Water]Tera Captain|Latias|Leftovers|Levitate|Psyshock,CalmMind,Recover,AlluringVoice|Timid|252,,,4,,252||,0,,,,|||,,,,,Steel]Garchomp||YacheBerry|RoughSkin|Earthquake,Spikes,StealthRock,PoisonJab|Jolly|224,,124,,28,132|||||,,,,,Dragon]Tera Captain|Forretress|LightClay|Sturdy|BodyPress,Reflect,RapidSpin,ThunderWave|Impish|252,,216,,40,|||||,,,,,Ghost]Florges-Blue||HeavyDutyBoots|FlowerVeil|Moonblast,StoredPower,CalmMind,Synthesis|Calm|248,,160,,100,||,0,,,,|S||,,,,,Fairy"],
+ ["Great Tusk||ChoiceScarf|Protosynthesis|RapidSpin,HeadlongRush,CloseCombat,IceSpinner|Adamant|72,252,,,,184|||||,,,,,Ground]Greninja-Bond||FocusSash|BattleBond|HydroPump,DarkPulse,LowKick,ToxicSpikes|Naive|,96,,252,,160|||||,,,,,Water]Rillaboom||ChoiceBand|GrassySurge|WoodHammer,GrassyGlide,Uturn,DrainPunch|Adamant|252,252,,,4,|||||,,,,,Grass]Tinkaton||ShucaBerry|MoldBreaker|StealthRock,GigatonHammer,BrickBreak,KnockOff|Careful|252,,4,,252,|||||,,,,,Fairy]Tera Captain|Talonflame|HeavyDutyBoots|GaleWings|SwordsDance,BraveBird,TeraBlast,FlareBlitz|Adamant|,252,,,4,252|||||,,,,,Flying]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Thunderbolt,Thunderclap,DracoMeteor,Roar|Modest|252,,,252,4,||,20,,,,|||,,,,,Fairy","Darkrai||WideLens|BadDreams|DarkPulse,IceBeam,FocusBlast,Hypnosis|Timid|248,,24,4,,232||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,SwordsDance,Uturn|Adamant|160,56,108,,4,180|||||,,,,,Water]Kyurem||HeavyDutyBoots|Pressure|DracoMeteor,IceBeam,FreezeDry,EarthPower|Timid|56,,4,252,4,192||,0,,,,|||,,,,,Dragon]Klefki||ShucaBerry|Prankster|DazzlingGleam,FoulPlay,Spikes,ThunderWave|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel]Landorus-Therian||RockyHelmet|Intimidate|Earthquake,RockTomb,GrassKnot,Uturn|Lax|232,,100,,16,160|||||,,,,,Ground]Tera Captain|Eelektross|AssaultVest|Levitate|Thunderbolt,GigaDrain,TeraBlast,DragonTail|Brave|248,136,72,4,48,|||||,,,,,Poison"],
+ ["Tera Captain|Annihilape|Leftovers|VitalSpirit|DrainPunch,RageFist,BulkUp,Encore|Adamant|220,124,,,148,16|||||,,,,,Poison]Tera Captain|Toxtricity|AssaultVest|PunkRock|Boomburst,SludgeWave,VoltSwitch,PsychicNoise|Modest|104,,,196,72,136||,0,,,,|||,,,,,Normal]Enamorus||KebiaBerry|CuteCharm|Moonblast,EarthPower,Psychic,CalmMind|Timid|,,64,192,,252||,0,,,,|||,,,,,Bug]Greninja||ChoiceScarf|Protean|Liquidation,GunkShot,IceBeam,Uturn|Jolly|,208,,,60,240|||||,,,,,Bug]Iron Treads||BoosterEnergy|QuarkDrive|Earthquake,RapidSpin,KnockOff,StealthRock|Jolly|248,,8,,,252|||||,,,,,Bug]Alomomola||AssaultVest|Regenerator|FlipTurn,AquaJet,MirrorCoat,IcyWind|Sassy|248,8,,,252,|||||,,,,,Bug","Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,Flamethrower,Hex,DarkPulse|Modest|,,4,252,,252||,0,,,,|||,,,,,Fire]Tera Captain|Rillaboom|ChoiceBand|GrassySurge|GrassyGlide,KnockOff,WoodHammer,Uturn|Adamant|192,252,,,,64|||||,,,,,Normal]Sneasler||ChoiceScarf|PoisonTouch|DireClaw,BrickBreak,Uturn,Switcheroo|Jolly|,252,,,4,252|||||,,,,,Fighting]Tera Captain|Primarina|Leftovers|LiquidVoice|CalmMind,AlluringVoice,DrainingKiss,TeraBlast|Modest|140,,,252,72,44||,0,,,,|||,,,,,Poison]Iron Treads||AssaultVest|QuarkDrive|RapidSpin,VoltSwitch,IronHead,HighHorsepower|Careful|248,72,,,84,104|||||,,,,,Ground]Weezing||MentalHerb|Levitate|WillOWisp,ToxicSpikes,ClearSmog,Flamethrower|Bold|252,,152,60,,44||,0,,,,|||,,,,,Poison"],
+ ["Walking Wake||BoosterEnergy|Protosynthesis|Agility,HydroPump,DragonPulse,Flamethrower|Timid|8,,,252,,248||,0,,,,|||,,,,,Water]Kingambit||ChopleBerry|SupremeOverlord|SwordsDance,SuckerPunch,ZenHeadbutt,KowtowCleave|Adamant|252,240,,,,16|||||,,,,,Dark]Tera Captain|Landorus|LifeOrb|SheerForce|EarthPower,TeraBlast,Psychic,NastyPlot|Timid|48,,,252,,208||,0,,,,|||,,,,,Water]Tera Captain|Sylveon|HeavyDutyBoots|Pixilate|HyperVoice,TeraBlast,CalmMind,Trailblaze|Timid|40,,,252,,216|||||,,,,,Fire]Annihilape||ChoiceScarf|Defiant|FinalGambit,IcePunch,RageFist,Uturn|Jolly|252,56,,,,200|||||,,,,,Fighting]Ribombee||FocusSash|ShieldDust|StickyWeb,Moonblast,Psychic,QuiverDance|Timid|24,,,252,,232||,0,,,,|||,,,,,Bug","Darkrai||FocusSash|BadDreams|Hypnosis,NastyPlot,DarkPulse,SludgeBomb|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|StealthRock,Uturn,StoneEdge,Earthquake|Adamant|104,252,4,,,148|||||,,,,,Ground]Tornadus-Therian||AssaultVest|Regenerator|Uturn,KnockOff,SludgeBomb,BleakwindStorm|Timid|248,,,,100,160|||||,,,,,Flying]Keldeo||ChoiceSpecs|Justified|FlipTurn,SecretSword,Surf,HydroPump|Timid|56,,,252,,200|||||,,,,,Water]Scizor||Leftovers|Technician|Defog,BulletPunch,Uturn,CloseCombat|Adamant|248,116,,,144,|||||,,,,,Bug]Vileplume||BlackSludge|EffectSpore|StrengthSap,LeechSeed,SleepPowder,SludgeBomb|Bold|252,,252,,4,||,0,,,,|||,,,,,Grass"],
+ ["Ninetales||HeatRock|Drought|HealingWish,WillOWisp,Encore,Flamethrower|Timid|248,,52,,,208||,0,,,,|||,,,,,Fire]Tera Captain|WalkingWake|DragonFang|Protosynthesis|HydroSteam,DracoMeteor,FlipTurn,Flamethrower|Timid|,,,244,12,252|||||,,,,,Dragon]Roaring Moon||ChoiceBand|Protosynthesis|Uturn,KnockOff,Earthquake,IronHead|Jolly|72,252,,,,184|||||,,,,,Dragon]Excadrill||Leftovers|MoldBreaker|RapidSpin,StealthRock,Earthquake,RockTomb|Jolly|12,252,,,,244|||||,,,,,Ground]Scream Tail||EjectButton|Protosynthesis|Encore,Wish,Disable,DazzlingGleam|Timid|248,,,,12,248||,0,,,,|||,,,,,Fairy]Venusaur||CobaBerry|Chlorophyll|Growth,SludgeBomb,EarthPower,GigaDrain|Modest|160,,,252,,96||,0,,,,|||,,,,,Grass","Tera Captain|Latias|SitrusBerry|Levitate|AlluringVoice,AuraSphere,ThunderWave,Recover|Timid|132,,,128,,248||,0,,,,|||,,,,,Fairy]Talonflame||HeavyDutyBoots|GaleWings|BraveBird,WillOWisp,Taunt,Roost|Jolly|128,156,24,,,200|||||,,,,,Fire]Iron Hands||ShucaBerry|QuarkDrive|SwordsDance,DrainPunch,HeavySlam,VoltSwitch|Adamant|16,252,,,240,|||||,,,,,Fighting]Palafin||HeavyDutyBoots|ZerotoHero|Liquidation,CloseCombat,ZenHeadbutt,FlipTurn|Jolly|96,252,,,,160|||||,,,,,Water]Arbok||ChoiceScarf|Intimidate|GunkShot,FireFang,Glare,Switcheroo|Adamant|104,252,,,,120|||||,,,,,Poison]Terapagos||Leftovers|TeraShift|TeraStarstorm,Flamethrower,Toxic,Protect|Calm|252,,,,252,4||,15,,,,|||,,,,,Stellar"],
+ ["Tera Captain|Azumarill|SitrusBerry|HugePower|BellyDrum,AquaJet,PlayRough,Liquidation|Adamant|252,252,,,4,|||||,,,,,Water]Iron Boulder||BoosterEnergy|QuarkDrive|MightyCleave,Earthquake,IronHead,SwordsDance|Jolly|112,252,,,,144|||||,,,,,Stellar]Sneasler||FocusSash|PoisonTouch|FakeOut,DireClaw,CloseCombat,Uturn|Jolly|80,252,,,,176|||||,,,,,Stellar]Tera Captain|Espathra|Leftovers|SpeedBoost|StoredPower,DazzlingGleam,CalmMind,Protect|Calm|252,,,,188,68||,0,,,,|||,,,,,Fairy]Chi-Yu||ShucaBerry|BeadsofRuin|Overheat,Flamethrower,DarkPulse,Substitute|Modest|,,44,252,,184||,0,,,,|||,,,,,Stellar]Rotom-Mow||ChoiceSpecs|Levitate|LeafStorm,VoltSwitch,Thunderbolt,Trick|Modest|,,88,252,,168||,0,,,,|||,,,,,Stellar","Palafin-Hero||PunchingGlove|ZerotoHero|JetPunch,IcePunch,DrainPunch,FlipTurn|Adamant|252,252,4,,,|||||,,,,,Water]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|Earthquake,BrickBreak,Uturn,StealthRock|Jolly|32,252,,,4,220|||S||,,,,,Ground]Flareon||CustapBerry|FlashFire|DoubleKick,Roar,FlareBlitz,QuickAttack|Careful|248,8,,,252,|||||,,,,,Fire]Iron Treads||LumBerry|QuarkDrive|Earthquake,IceSpinner,RapidSpin,VoltSwitch|Jolly|44,252,,,4,208|||||,,,,,Ground]Qwilfish-Hisui||Eviolite|Intimidate|PoisonJab,Spikes,Haze,PainSplit|Impish|252,,252,,4,|||||,,,,,Dark]Latios||ChoiceScarf|Levitate|Psyshock,Surf,FlipTurn,Trick|Timid|36,,,252,4,216|||S||,,,,,Dragon"],
+ ["Tornadus-Therian||YacheBerry|Regenerator|FocusBlast,Uturn,BleakwindStorm,WeatherBall|Modest|40,,,252,,216|||||,,,,,Flying]Dragonite||HeavyDutyBoots|Multiscale|Earthquake,Roost,ExtremeSpeed,DracoMeteor|Quiet|248,,40,76,136,8|||||,,,,,Dragon]Tera Captain|GreninjaBond|LifeOrb|BattleBond|DarkPulse,IceBeam,UpperHand,HydroPump|Mild|,168,,252,,88|||||,,,,,Dark]Tera Captain|Bellibolt|ShucaBerry|Static|Reflect,Toxic,SlackOff,VoltSwitch|Calm|248,,8,,252,||,0,,,,|||,,,,,Steel]Toxapex||ShucaBerry|Regenerator|PoisonJab,Infestation,BanefulBunker,Recover|Careful|248,,72,,188,|||||,,,,,Poison]Ting-Lu||RockyHelmet|VesselofRuin|Earthquake,StealthRock,HeavySlam,Ruination|Adamant|96,,132,,252,28|||||,,,,,Dark","Tera Captain|ThundurusTherian|ChoiceSpecs|VoltAbsorb|TeraBlast,VoltSwitch,Thunderbolt,GrassKnot|Timid|,,,252,4,252||,0,,,,|||,,,,,Flying]Great Tusk||HeavyDutyBoots|Protosynthesis|RapidSpin,IceSpinner,HeadlongRush,StealthRock|Jolly|,252,,,4,252|||||,,,,,Ground]Sableye||Leftovers|Prankster|WillOWisp,Encore,KnockOff,Recover|Careful|252,4,,,252,|||||,,,,,Dark]Hatterene||Leftovers|MagicBounce|DrainingKiss,Nuzzle,CalmMind,Psyshock|Bold|252,,252,4,,|||||,,,,,Psychic]Volcanion||ChoiceScarf|WaterAbsorb|SludgeWave,Flamethrower,SteamEruption,EarthPower|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Kingambit||ShucaBerry|SupremeOverlord|SwordsDance,SuckerPunch,IronHead,LowKick|Adamant|236,252,,,,20|||||,,,,,Dark"],
+ ["Darkrai||MirrorHerb|BadDreams|DarkPulse,SludgeBomb,BrickBreak,NightShade|Timid|40,,,252,,216|||||,,,,,Dark]Tera Captain|Latias|GrassySeed|Levitate|CalmMind,StoredPower,Recover,Thunderbolt|Timid|248,,8,,,252||,0,,,,|||,,,,,Electric]Skarmory||Leftovers|Sturdy|BraveBird,Roost,StealthRock,Whirlwind|Careful|248,,8,,252,|||||,,,,,Steel]Sneasler||GrassySeed|Unburden|CloseCombat,Acrobatics,SwordsDance,Substitute|Adamant|,252,,,4,252|||||,,,,,Fighting]Thwackey||Eviolite|GrassySurge|GrassyGlide,LeechSeed,Uturn,KnockOff|Adamant|248,252,,,8,|||||,,,,,Grass]Dusclops||Eviolite|Pressure|NightShade,WillOWisp,Haze,PainSplit|Calm|252,,4,,252,||,0,,,,|||,,,,,Ghost","Klefki||Leftovers|Prankster|ThunderWave,Spikes,Reflect,LightScreen|Calm|252,,4,,252,||,0,,,,|||,,,,,Steel]Iron Bundle||ChoiceSpecs|QuarkDrive|IceBeam,HydroPump,Encore,FlipTurn|Timid|88,,,252,,168|||||,,,,,Ice]Cyclizar||HeavyDutyBoots|Regenerator|RapidSpin,ShedTail,KnockOff,IronHead|Jolly|252,4,,,,252|||||,,,,,Dragon]Tera Captain|Manaphy|Leftovers|Hydration|TailGlow,EnergyBall,Surf,TeraBlast|Bold|,,248,60,,200||,0,,,,|||,,,,,Fairy]Landorus||LifeOrb|SheerForce|NastyPlot,SludgeWave,EarthPower,Gravity|Timid|,,,252,4,252||,0,,,,|||,,,,,Ground]Tera Captain|Polteageist|WhiteHerb|CursedBody|ShellSmash,TeraBlast,StoredPower,StrengthSap|Modest|,,224,80,,204||,0,,,,|||,,,,,Fire"],
+ ["Tera Captain|Tyranitar|AssaultVest|SandStream|RockSlide,HeavySlam,Earthquake,Crunch|Careful|252,88,,,160,8|||S||,,,,,Flying]Scizor||Leftovers|Technician|Uturn,BulletPunch,KnockOff,Defog|Impish|248,,252,,,8|||||,,,,,Bug]Slowking||HeavyDutyBoots|Regenerator|ChillyReception,Yawn,Scald,WeatherBall|Sassy|248,,8,,252,||,0,,,,|||,,,,,Water]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Uturn,Earthquake,KnockOff,StealthRock|Careful|248,,,,248,12|||S||,,,,,Steel]Iron Valiant||BoosterEnergy|QuarkDrive|VacuumWave,Psychic,ShadowBall,AuraSphere|Timid|8,,,252,,248||,0,,,,|||,,,,,Fairy]Vikavolt||ThroatSpray|Levitate|Agility,FlashCannon,BugBuzz,EnergyBall|Timid|52,,,252,,204||,0,,,,|S||,,,,,Bug","Tera Captain|Lucario|LifeOrb|Justified|CloseCombat,Crunch,IcePunch,BulletPunch|Adamant|112,252,,,,144|||||,,,,,Steel]Clefable||BabiriBerry|MagicGuard|Moonblast,FireBlast,Moonlight,StealthRock|Calm|252,,4,,252,||,0,,,,|||,,,,,Fairy]Meowscarada||HeavyDutyBoots|Protean|KnockOff,TripleAxel,Uturn,FlowerTrick|Jolly|,252,,,56,200|||||,,,,,Grass]Tera Captain|SandyShocks|Leftovers|Protosynthesis|VoltSwitch,EarthPower,TeraBlast,Spikes|Modest|252,,180,20,,56||,0,,,,|||,,,,,Water]Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,Encore,FlipTurn|Modest|28,,,252,,228|||||,,,,,Ice]Cinccino||HeavyDutyBoots|SkillLink|TidyUp,TailSlap,RockBlast,TripleAxel|Adamant|48,252,,,,208|||||,,,,,Normal"],
+ ["Primarina||ChoiceScarf|Torrent|Moonblast,HydroPump,IceBeam,FlipTurn|Timid|72,,,252,,184|||||,,,,,Water]Great Tusk||EjectPack|Protosynthesis|CloseCombat,HeadlongRush,IceSpinner,RapidSpin|Adamant|,252,72,,,184|||||,,,,,Ground]Arcanine||Leftovers|Intimidate|Flamethrower,Protect,WillOWisp,MorningSun|Impish|252,,252,,4,||,0,,,,|||,,,,,Fire]Latios||ColburBerry|Levitate|Psychic,ShadowBall,AuraSphere,Protect|Timid|72,,,252,,184||,0,,,,|||,,,,,Dragon]Tera Captain|Weavile|LifeOrb|Pressure|IceShard,KnockOff,TeraBlast,SwordsDance|Adamant|,252,68,,,188|||||,,,,,Psychic]Corviknight||Leftovers|Pressure|IronDefense,BodyPress,Roost,BraveBird|Impish|252,,252,,4,|||||,,,,,Flying","Darkrai||BlackGlasses|BadDreams|NastyPlot,DarkPulse,Psychic,SludgeBomb|Timid|80,,,252,,176||,0,,,,|||,,,,,Dark]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|Discharge,GrassKnot,VoltSwitch,TeraBlast|Timid|56,,,252,,200||,0,,,,|||,,,,,Water]Flygon||ExpertBelt|Levitate|FirstImpression,EarthPower,Flamethrower,StealthRock|Hasty|,204,,88,,216|||||,,,,,Ground]Urshifu-Rapid-Strike||ChoiceScarf|UnseenFist|SurgingStrikes,Uturn,CloseCombat,Liquidation|Adamant|,252,152,,,104|||||,,,,,Fighting]Metagross||ColburBerry|ClearBody|IronHead,BulletPunch,PsychicFangs,KnockOff|Adamant|80,252,,,,176|||||,,,,,Steel]Weezing-Galar||RockyHelmet|Levitate|StrangeSteam,Flamethrower,Memento,WillOWisp|Bold|,,252,176,,80||,0,,,,|||,,,,,Poison"],
+ ["Zoroark-Hisui||Leftovers|Illusion|Substitute,CalmMind,FocusBlast,HyperVoice|Timid|,,,252,4,252||,0,,,,|||,,,,,Normal]Tyranitar||ChoiceScarf|SandStream|KnockOff,Earthquake,RockSlide,IceBeam|Hasty|,252,,36,,220|||||,,,,,Rock]Mandibuzz||HeavyDutyBoots|Overcoat|Uturn,Roost,Defog,KnockOff|Relaxed|248,,252,,8,|||||,,,,,Dark]Excadrill||LumBerry|SandRush|StealthRock,Earthquake,IronHead,RapidSpin|Jolly|8,252,,,,248|||||,,,,,Ground]Minior-Violet||WhiteHerb|ShieldsDown|Substitute,ShellSmash,Psychic,EarthPower|Modest|252,,,252,4,||,0,,,,|||,,,,,Fairy]Tera Captain|Latias|Leftovers|Levitate|Substitute,CalmMind,AuraSphere,MistBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Fighting","Manaphy||Leftovers|Hydration|AcidArmor,TakeHeart,Scald,StoredPower|Timid|248,,100,,,160||,0,,,,|||,,,,,Water]Kyurem||HeavyDutyBoots|Pressure|WeatherBall,FreezeDry,EarthPower,RainDance|Timid|,,56,252,,200||,0,,,,|||,,,,,Dragon]Tera Captain|Oricorio|HeavyDutyBoots|Dancer|QuiverDance,RevelationDance,Hurricane,Roost|Timid|,,40,252,,216||,0,,,,|||,,,,,Fairy]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,IvyCudgel,PowerWhip,Encore|Jolly|,252,,,4,252|||||,,,,,Fire]Tera Captain|GreatTusk|Leftovers|Protosynthesis|BodyPress,KnockOff,StealthRock,Rest|Impish|248,8,252,,,|||||,,,,,Fighting]Hatterene||Leftovers|MagicBounce|CalmMind,DrainingKiss,MysticalFire,Nuzzle|Calm|248,,8,,252,|||||,,,,,Psychic"],
+ ["Garchomp||RoseliBerry|RoughSkin|SwordsDance,StealthRock,Earthquake,Liquidation|Jolly|,252,,,56,200|||||,,,,,Dragon]Metagross||WeaknessPolicy|ClearBody|Agility,IcePunch,Earthquake,BrickBreak|Adamant|228,252,,,,28|||||,,,,,Steel]Tera Captain|Zarude|HeavyDutyBoots|LeafGuard|SwordsDance,Trailblaze,KnockOff,TeraBlast|Jolly|,252,,,80,176|||||,,,,,Poison]Tornadus-Therian||ChoiceScarf|Regenerator|BleakwindStorm,DarkPulse,Uturn,FocusBlast|Timid|120,,4,160,,224|||||,,,,,Flying]Iron Valiant||AirBalloon|QuarkDrive|Substitute,CalmMind,Moonblast,ShadowBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Morgrem||LightClay|Prankster|Reflect,LightScreen,PartingShot,ThroatChop|Careful|252,,4,,252,|||||,,,,,Dark","Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,CloseCombat,LeafBlade,SpiritBreak|Jolly|,252,,,4,252|||||,,,,,Fairy]Gliscor||ToxicOrb|PoisonHeal|StealthRock,Earthquake,Spikes,KnockOff|Impish|244,,252,,12,|||||,,,,,Ground]Ribombee||FocusSash|ShieldDust|StunSpore,StickyWeb,Tailwind,AlluringVoice|Timid|248,,,8,,252||,0,,,,|||,,,,,Bug]Tera Captain|Gholdengo|AirBalloon|GoodasGold|ShadowBall,MakeItRain,FocusBlast,ThunderWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Flying]Tera Captain|Hitmonlee|PsychicSeed|Unburden|CloseCombat,RapidSpin,Earthquake,StoneEdge|Adamant|,252,,,4,252|||||,,,,,Steel]Indeedee||ChoiceScarf|PsychicSurge|ExpandingForce,HyperVoice,ShadowBall,EnergyBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Psychic"],
+ ["Iron Bundle||ChoiceScarf|QuarkDrive|HydroPump,IceBeam,FreezeDry,FlipTurn|Timid|,,,252,4,252|||||,,,,,Ice]Tera Captain|LilligantHisui|WideLens|Hustle|CloseCombat,VictoryDance,TeraBlast,IceSpinner|Adamant|,252,,4,,252|||||,,,,,Ghost]Tera Captain|Clodsire|Leftovers|Unaware|Spikes,Haze,Earthquake,GunkShot|Careful|248,,8,,252,|||||,,,,,Flying]Kingambit||BlackGlasses|SupremeOverlord|SwordsDance,KowtowCleave,SuckerPunch,PoisonJab|Adamant|252,252,,,4,|||||,,,,,Dark]Weezing-Galar||RockyHelmet|Levitate|Defog,WillOWisp,SludgeBomb,PainSplit|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Raging Bolt||BoosterEnergy|Protosynthesis|CalmMind,Thunderclap,Thunderbolt,DracoMeteor|Modest|252,,,252,4,||,20,,,,|||,,,,,Electric","Tera Captain|Meowscarada|ChoiceBand|Protean|LowKick,FlowerTrick,TripleAxel,Uturn|Adamant|252,252,,,4,|||||,,,,,Ice]Tera Captain|Drifblim|FlameOrb|FlareBoost|StoredPower,StrengthSap,CalmMind,TeraBlast|Bold|252,,164,,76,16||,0,,,,|||,,,,,Fighting]Iron Boulder||ChoiceBand|QuarkDrive|MightyCleave,RockBlast,CloseCombat,ZenHeadbutt|Jolly|,252,,,4,252|||||,,,,,Rock]Hippowdon||RindoBerry|SandStream|Yawn,Roar,StealthRock,Earthquake|Impish|252,4,252,,,|||||,,,,,Ground]Slowking-Galar||AssaultVest|Regenerator|FutureSight,SludgeBomb,FocusBlast,IceBeam|Calm|112,,,144,252,||,0,,,,|||,,,,,Poison]Moltres||HeavyDutyBoots|FlameBody|WillOWisp,Uturn,Roost,Flamethrower|Bold|248,,252,8,,|||||,,,,,Fire"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,SpiritBreak,KnockOff,CloseCombat|Jolly|,252,,,4,252|||||,,,,,Fairy]Iron Treads||BoosterEnergy|QuarkDrive|StealthRock,Earthquake,IceSpinner,RapidSpin|Jolly|48,252,,,,208|||||,,,,,Ground]Tera Captain|Zapdos|HeavyDutyBoots|Static|Thunderbolt,Hurricane,TeraBlast,Roost|Timid|108,,,252,,148||,0,,,,|||,,,,,Grass]Tera Captain|Suicune|Leftovers|Pressure|CalmMind,Scald,IceBeam,Substitute|Timid|252,,,80,,176||,0,,,,|||,,,,,Fairy]Incineroar||HeavyDutyBoots|Intimidate|KnockOff,WillOWisp,FlareBlitz,PartingShot|Careful|,64,,,252,192|||||,,,,,Fire]Dragalge||SitrusBerry|Adaptability|DracoMeteor,SludgeWave,ToxicSpikes,FlipTurn|Modest|248,,,252,,8|||||,,,,,Poison","Iron Valiant||RoseliBerry|QuarkDrive|Encore,Moonblast,Psyshock,AuraSphere|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Gholdengo||ColburBerry|GoodasGold|FocusBlast,Hex,Recover,ThunderWave|Impish|248,,252,,8,||,0,,,,|||,,,,,Steel]Tera Captain|Armarouge|ChoiceScarf|FlashFire|ArmorCannon,Psyshock,Trick,AuraSphere|Timid|,,124,236,,148||,0,,,,|||,,,,,Fighting]Tera Captain|Salamence|ClearAmulet|Moxie|DragonDance,Roost,TeraBlast,DualWingbeat|Jolly|88,252,16,,16,136|||||,,,,,Electric]Glimmora||WeaknessPolicy|ToxicDebris|RockPolish,PowerGem,EarthPower,SludgeWave|Timid|80,,,252,8,168||,0,,,,|||,,,,,Rock]Gastrodon||RindoBerry|StormDrain|StealthRock,Recover,IceBeam,Earthquake|Sassy|192,12,148,,156,|||||,,,,,Water"],
+ ["Darkrai||WeaknessPolicy|BadDreams|DarkPulse,SludgeBomb,SuckerPunch,CalmMind|Hasty|92,,,164,,252|||||,,,,,Dark]Tera Captain|LandorusTherian|SoftSand|Intimidate|Earthquake,RockTomb,Gravity,Uturn|Jolly|40,252,,,,216|||||,,,,,Ground]Quaquaval||HeavyDutyBoots|Moxie|CloseCombat,AquaStep,Uturn,RapidSpin|Adamant|200,100,,,,208|||||,,,,,Water]Archaludon||ChestoBerry|Stamina|FlashCannon,DragonPulse,ElectroShot,Rest|Modest|136,,,76,252,44||,0,,,,|||,,,,,Steel]Tera Captain|Diancie|SitrusBerry|ClearBody|DrainingKiss,PowerGem,Spikes,BatonPass|Bold|252,,108,120,,28||,0,,,,|||,,,,,Fairy]Mesprit||RowapBerry|Levitate|Psyshock,StealthRock,LightScreen,Uturn|Calm|232,,,,252,24|||||,,,,,Psychic","Cyclizar||ChoiceScarf|Regenerator|ShedTail,RapidSpin,KnockOff,PowerWhip|Lonely|252,184,,,,72|||||,,,,,Dragon]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,EarthPower,RockPolish,CalmMind|Calm|252,,,,112,144||,15,,,,|||,,,,,Stellar]Tera Captain|RagingBolt|Leftovers|Protosynthesis|CalmMind,DragonPulse,Thunderbolt,Thunderclap|Modest|252,,,252,4,||,20,,,,|||,,,,,Fairy]Slowking||ExpertBelt|Regenerator|CalmMind,Psychic,FocusBlast,IceBeam|Modest|252,,224,32,,||,0,,,,|||,,,,,Water]Tera Captain|Flygon|YacheBerry|Levitate|Uturn,StealthRock,Earthquake,FirstImpression|Careful|252,4,,,252,|||||,,,,,Poison]Ogerpon-Cornerstone||CornerstoneMask|Sturdy|KnockOff,Uturn,Superpower,WoodHammer|Adamant|,252,96,,,160|||||,,,,,Rock"],
+ ["Great Tusk||LifeOrb|Protosynthesis|HeadlongRush,CloseCombat,TemperFlare,RapidSpin|Jolly|252,4,,,,252|||||,,,,,Ground]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|DragonPulse,WeatherBall,Thunderclap,VoltSwitch|Modest|252,,4,252,,||,20,,,,|||,,,,,Water]Sneasler||AssaultVest|PoisonTouch|FakeOut,CloseCombat,DireClaw,Uturn|Jolly|8,252,,,,248|||||,,,,,Fighting]Rillaboom||RockyHelmet|GrassySurge|FakeOut,GrassyGlide,Endure,Uturn|Impish|248,,252,,8,|||||,,,,,Grass]Empoleon||Leftovers|Torrent|StealthRock,IceBeam,KnockOff,Roost|Sassy|252,,,4,252,|||||,,,,,Water]Tera Captain|Mesprit|ColburBerry|Levitate|PsychicNoise,DazzlingGleam,KnockOff,Encore|Sassy|248,8,,,252,|||||,,,,,Fairy","Gouging Fire||LoadedDice|Protosynthesis|MorningSun,ScaleShot,BurningBulwark,FlareBlitz|Jolly|28,252,,,4,224|||||,,,,,Fire]Tera Captain|WalkingWake|CovertCloak|Protosynthesis|Agility,HydroSteam,DragonPulse,TeraBlast|Modest|64,,,252,4,188||,0,,,,|||,,,,,Electric]Kilowattrel||Leftovers|VoltAbsorb|Uturn,ThunderWave,Thunderbolt,AirSlash|Timid|36,,,252,4,216|||||,,,,,Electric]Bronzong||ColburBerry|Levitate|GyroBall,BodyPress,ZenHeadbutt,TrickRoom|Relaxed|252,,252,4,,||,,,,,0|||,,,,,Steel]Torkoal||HeavyDutyBoots|Drought|LavaPlume,RapidSpin,ClearSmog,ScorchingSands|Bold|248,,252,,8,|||||,,,,,Fire]Tera Captain|Comfey|GrassySeed|Triage|CalmMind,DrainingKiss,GigaDrain,StoredPower|Timid|100,,,252,4,152||,0,,,,|||,,,,,Fairy"],
+ ["Mamoswine||RockyHelmet|Oblivious|IcicleSpear,Earthquake,IceShard,StealthRock|Adamant|168,252,12,,60,16|||||,,,,,Ice]Tera Captain|Latias|Leftovers|Levitate|DragonPulse,MistBall,Recover,CalmMind|Timid|48,,252,4,28,176||,0,,,,|||,,,,,Poison]Empoleon||AdrenalineOrb|Competitive|Surf,FlipTurn,Roost,VacuumWave|Bold|216,,72,16,,204|||||,,,,,Water]Samurott-Hisui||ChopleBerry|Sharpness|CeaselessEdge,RazorShell,FlipTurn,SwordsDance|Adamant|248,252,,,,8|||||,,,,,Water]Muk||RockyHelmet|StickyHold|KnockOff,IcePunch,PainSplit,DrainPunch|Impish|252,,248,,8,|||||,,,,,Poison]Zapdos||HeavyDutyBoots|Static|Thunderbolt,Hurricane,Roost,Uturn|Timid|,,4,252,,252|||||,,,,,Electric","Tera Captain|Mew|LoadedDice|Synchronize|DragonDance,DrainPunch,IcicleSpear,Taunt|Adamant|16,252,,,,240|||||,,,,,Water]Great Tusk||CobaBerry|Protosynthesis|RapidSpin,KnockOff,HeadSmash,CloseCombat|Adamant|76,252,,,,180|||||,,,,,Ground]Grimmsnarl||LightClay|Prankster|LightScreen,Reflect,PartingShot,Taunt|Calm|252,,4,,252,||,0,,,,|||,,,,,Dark]Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,HydroPump,FlipTurn,Encore|Timid|88,,,252,4,164|||||,,,,,Ice]Pecharunt||BlackSludge|PoisonPuppeteer|NastyPlot,ShadowBall,MalignantChain,Recover|Timid|20,,,252,4,232||,0,,,,|||,,,,,Poison]Orthworm||SitrusBerry|EarthEater|ShedTail,Spikes,IronHead,MetalBurst|Impish|248,8,252,,,|||||,,,,,Steel"],
+ ["Tera Captain|Latias|SafetyGoggles|Levitate|Recover,CalmMind,StoredPower,Surf|Timid|252,,,,72,184||,0,,,,|S||,,,,,Poison]Tinkaton||MetalCoat|MoldBreaker|GigatonHammer,FakeOut,Encore,ThunderWave|Jolly|108,176,,,,224|||||,,,,,Fairy]Great Tusk||ExpertBelt|Protosynthesis|TemperFlare,IceSpinner,HeadlongRush,RapidSpin|Adamant|252,96,,,,160|||||,,,,,Ground]Meowscarada||ChoiceScarf|Protean|TripleAxel,Uturn,BrickBreak,FlowerTrick|Jolly|24,252,,,,232|||||,,,,,Grass]Rotom-Wash||CovertCloak|Levitate|HydroPump,VoltSwitch,WillOWisp,PainSplit|Calm|252,,,4,252,||,0,,,,|S||,,,,,Electric]Tera Captain|TyphlosionHisui|ChoiceSpecs|Frisk|Overheat,ShadowBall,Flamethrower,Earthquake|Hasty|,4,,252,,252|||S||,,,,,Fire","Chi-Yu||ChoiceSpecs|BeadsofRuin|Flamethrower,Overheat,DarkPulse,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|Landorus|LifeOrb|SheerForce|EarthPower,Gravity,SludgeBomb,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Ground]Scizor||ChoiceBand|Technician|KnockOff,Uturn,BulletPunch,CloseCombat|Adamant|248,252,,,8,|||||,,,,,Bug]Tera Captain|WoChien|Leftovers|TabletsofRuin|Ruination,LeechSeed,KnockOff,Protect|Sassy|252,4,,,252,|||||,,,,,Poison]Scream Tail||HeavyDutyBoots|Protosynthesis|PlayRough,Encore,Wish,Protect|Jolly|252,4,,,,252|||||,,,,,Fairy]Venomoth||HeavyDutyBoots|TintedLens|QuiverDance,BugBuzz,SludgeBomb,SleepPowder|Modest|,,,252,4,252||,0,,,,|||,,,,,Bug"],
+ ["Urshifu-Rapid-Strike||PunchingGlove|UnseenFist|SurgingStrikes,DrainPunch,SwordsDance,AquaJet|Jolly|4,252,,,,252|||||,,,,,Fighting]Gholdengo||AirBalloon|GoodasGold|MakeItRain,ShadowBall,NastyPlot,FocusBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel]Glimmora||FocusSash|ToxicDebris|MortalSpin,EnergyBall,StealthRock,PowerGem|Timid|4,,,252,,252|||||,,,,,Rock]Keldeo||ChoiceSpecs|Justified|SecretSword,HydroPump,Surf,VacuumWave|Timid|4,,,252,,252||,0,,,,|||,,,,,Water]Tera Captain|Incineroar|HeavyDutyBoots|Intimidate|FlareBlitz,KnockOff,WillOWisp,PartingShot|Adamant|252,252,,,,|||||,,,,,Ghost]Masquerain||FocusSash|Intimidate|Surf,IceBeam,StickyWeb,Uturn|Modest|252,,4,252,,|||||,,,,,Bug","Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|KnockOff,RapidSpin,HeadlongRush,CloseCombat|Jolly|8,252,,,,248|||||,,,,,Dragon]Greninja-Bond||LifeOrb|BattleBond|Surf,Extrasensory,DarkPulse,IceBeam|Timid|96,,,252,,160|||||,,,,,Water]Scizor||AssaultVest|Technician|Uturn,BulletPunch,DualWingbeat,KnockOff|Adamant|248,136,,,112,12|||||,,,,,Bug]Dragalge||ShucaBerry|Adaptability|SludgeBomb,FlipTurn,ToxicSpikes,DragonPulse|Sassy|252,,172,20,64,|||||,,,,,Poison]Bellibolt||RockyHelmet|Electromorphosis|VoltSwitch,SlackOff,AcidSpray,Toxic|Bold|252,,252,,4,||,0,,,,|||,,,,,Electric]Enamorus||ChoiceScarf|CuteCharm|Moonblast,EarthPower,Psychic,HealingWish|Timid|72,,,252,,184||,0,,,,|||,,,,,Fairy"],
+ ["Tera Captain|Comfey|LifeOrb|Triage|DrainingKiss,TeraBlast,StoredPower,CalmMind|Modest|,,4,252,,252||,0,,,,|S||,,,,,Fire]Garchomp||RockyHelmet|RoughSkin|ScorchingSands,Surf,Rest,StealthRock|Bold|248,,108,16,,136||,0,,,,|||,,,,,Dragon]Scizor||AssaultVest|Technician|BulletPunch,Uturn,KnockOff,QuickAttack|Adamant|248,252,,,8,|||||,,,,,Bug]Tera Captain|Raikou|Leftovers|Pressure|Thunderbolt,Scald,VoltSwitch,CalmMind|Timid|40,,,252,,216||,0,,,,|||,,,,,Water]Toedscruel||Leftovers|MyceliumMight|GigaDrain,Toxic,RapidSpin,Spikes|Calm|248,,8,,252,|||||,,,,,Ground]Cinderace||ChoiceBand|Libero|PyroBall,SuckerPunch,HighJumpKick,Uturn|Jolly|,252,,,4,252|||||,,,,,Fire","Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|HeadlongRush,BulkUp,RapidSpin,TemperFlare|Jolly|252,4,,,,252|||||,,,,,Ground]Manaphy||Leftovers|Hydration|EnergyBall,TakeHeart,Scald,IceBeam|Bold|252,,188,4,,64||,0,,,,|||,,,,,Fairy]Seviper||ChoiceScarf|Infiltrator|Glare,KnockOff,Switcheroo,Flamethrower|Timid|172,,,96,,240|||||,,,,,Poison]Rotom-Heat||ChoiceSpecs|Levitate|Overheat,Trick,VoltSwitch,WillOWisp|Timid|252,,4,144,,108||,0,,,,|||,,,,,Electric]Roaring Moon||ChoiceBand|Protosynthesis|Uturn,DragonClaw,StompingTantrum,KnockOff|Adamant|,252,,,4,252|||||,,,,,Dragon]Rillaboom||AssaultVest|GrassySurge|GrassyGlide,KnockOff,WoodHammer,Uturn|Adamant|68,252,,,4,184|||||,,,,,Grass"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|CalmMind,Thunderbolt,Moonblast,Encore|Timid|,,48,252,,208||,0,,,,|||,,,,,Fairy]Landorus-Therian||SitrusBerry|Intimidate|Taunt,Earthquake,Uturn,SmackDown|Jolly|32,252,,,,224|||S||,,,,,Ground]Tera Captain|Metagross|LifeOrb|ClearBody|Agility,PsychicFangs,ThunderPunch,Earthquake|Adamant|56,252,,,,200|||S||,,,,,Flying]Tera Captain|Gyarados|HeavyDutyBoots|Moxie|Crunch,DragonDance,TeraBlast,Waterfall|Adamant|,252,,4,,252|||S||,,,,,Electric]Glimmora||FocusSash|ToxicDebris|PowerGem,StealthRock,EnergyBall,MortalSpin|Timid|,,,252,4,252|||S||,,,,,Rock]Entei||RockyHelmet|InnerFocus|SacredFire,Crunch,StompingTantrum,ExtremeSpeed|Jolly|100,252,,,,156|||S||,,,,,Fire","Tera Captain|Yanmega|ThroatSpray|SpeedBoost|BugBuzz,AirSlash,ShadowBall,Protect|Modest|68,,,252,188,||,0,,,,|||,,,,,Ghost]Eelektross||AssaultVest|Levitate|Liquidation,Uturn,ZenHeadbutt,KnockOff|Adamant|252,252,,,4,|||||,,,,,Electric]Corviknight||Leftovers|Pressure|Defog,Roost,Uturn,IronHead|Impish|252,,4,,252,|||||,,,,,Flying]Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|RapidSpin,IceSpinner,HeadlongRush,RockSlide|Adamant|120,252,,,,136|||||,,,,,Water]Latios||ChoiceSpecs|Levitate|FlipTurn,LusterPurge,ShadowBall,IceBeam|Timid|80,,,252,,176|||||,,,,,Dragon]Vaporeon||Leftovers|WaterAbsorb|FlipTurn,Wish,Protect,Surf|Modest|252,,252,4,,|||||,,,,,Water"],
+ ["Darkrai||Leftovers|BadDreams|DarkPulse,IceBeam,Substitute,NastyPlot|Modest|4,,,252,,252||,0,,,,|||,,,,,Dark]Urshifu||ChoiceBand|UnseenFist|CloseCombat,WickedBlow,SuckerPunch,Uturn|Jolly|16,252,,,,240|||||,,,,,Fighting]Tera Captain|ScreamTail|Leftovers|Protosynthesis|PlayRough,Wish,Protect,BulkUp|Calm|252,,,4,252,|||||,,,,,Fairy]Pecharunt||ShucaBerry|PoisonPuppeteer|MalignantChain,ShadowBall,Toxic,Recover|Timid|228,,,28,,252||,0,,,,|||,,,,,Poison]Corviknight||Leftovers|Pressure|BodyPress,Roost,IronDefense,Uturn|Impish|252,4,252,,,|||||,,,,,Flying]Lanturn||Leftovers|VoltAbsorb|IcyWind,EerieImpulse,FlipTurn,Scald|Calm|252,,,4,252,|||||,,,,,Water","Ninetales||HeatRock|Drought|Overheat,WillOWisp,Encore,HealingWish|Calm|252,,4,,252,||,0,,,,|||,,,,,Fire]Hatterene||LightClay|MagicBounce|DrainingKiss,MysticalFire,CalmMind,LightScreen|Calm|252,,4,,252,||,0,,,,|||,,,,,Psychic]Great Tusk||ExpertBelt|Protosynthesis|HeadlongRush,HeavySlam,TemperFlare,RapidSpin|Jolly|56,252,,,,200|||||,,,,,Ground]Tera Captain|RagingBolt|ClearAmulet|Protosynthesis|Thunderbolt,SolarBeam,Thunderclap,CalmMind|Modest|144,,,252,,112||,20,,,,|||,,,,,Steel]Walking Wake||ChoiceSpecs|Protosynthesis|HydroSteam,DracoMeteor,DragonPulse,FlipTurn|Timid|8,,,244,4,252|||||,,,,,Water]Gouging Fire||ChoiceBand|Protosynthesis|HeatCrash,FlareBlitz,Earthquake,PsychicFangs|Jolly|88,168,,,,252|||||,,,,,Fire"],
+ ["Tera Captain|Okidogi|ChoiceScarf|ToxicChain|CloseCombat,KnockOff,GunkShot,HighHorsepower|Adamant|,252,,,4,252|||||,,,,,Fighting]Scizor||ChoiceScarf|Technician|Uturn,KnockOff,BulletPunch,IronHead|Jolly|,252,,,4,252|||||,,,,,Bug]Mandibuzz||HeavyDutyBoots|Overcoat|Defog,Roost,Uturn,Toxic|Impish|248,,252,,8,|||||,,,,,Dark]Rotom-Mow||ChoiceScarf|Levitate|VoltSwitch,LeafStorm,Trick,Thunderbolt|Modest|80,,,252,4,172||,0,,,,|||,,,,,Electric]Tera Captain|Hydreigon|ChoiceSpecs|Levitate|DracoMeteor,FireBlast,HydroPump,StealthRock|Timid|76,,,252,4,176||,0,,,,|||,,,,,Dark]Munkidori||ChoiceSpecs|ToxicChain|Psychic,FocusBlast,SludgeBomb,Uturn|Modest|,,,252,4,252|||||,,,,,Poison","Tera Captain|GreatTusk|LumBerry|Protosynthesis|Earthquake,CloseCombat,StealthRock,SupercellSlam|Adamant|,252,,,156,100|||||,,,,,Electric]Tera Captain|Espeon|ChoiceScarf|MagicBounce|AlluringVoice,Psyshock,ThunderWave,FutureSight|Timid|,,,252,32,224||,0,,,,|||,,,,,Fire]Klefki||IronBall|Prankster|DrainingKiss,Switcheroo,ThunderWave,Spikes|Calm|252,,,4,252,||,0,,,,|||,,,,,Steel]Manaphy||AssaultVest|Hydration|IceBeam,Surf,Psychic,FlipTurn|Timid|120,,,148,,240|||||,,,,,Water]Roaring Moon||ChoiceBand|Protosynthesis|KnockOff,Uturn,Earthquake,Outrage|Adamant|52,252,,,,204|||||,,,,,Dragon]Rotom-Heat||ChoiceSpecs|Levitate|VoltSwitch,Overheat,WillOWisp,Thunderbolt|Modest|148,,144,108,,108||,0,,,,|||,,,,,Electric"],
+ ["Sneasler||GrassySeed|Unburden|SwordsDance,Acrobatics,CloseCombat,DireClaw|Adamant|,252,,,4,252|||||,,,,,Fighting]Ursaluna-Bloodmoon||LifeOrb|MindsEye|BloodMoon,Moonlight,EarthPower,CalmMind|Modest|252,,,252,4,||,0,,,,|||,,,,,Ground]Gouging Fire||BoosterEnergy|Protosynthesis|BurningBulwark,HeatCrash,IronHead,Earthquake|Jolly|84,168,,,4,252|||||,,,,,Fire]Tera Captain|Rillaboom|AssaultVest|GrassySurge|Uturn,KnockOff,GrassyGlide,FakeOut|Jolly|,252,,,4,252|||||,,,,,Grass]Braviary-Hisui||LifeOrb|SheerForce|Agility,Psychic,AirSlash,HeatWave|Timid|,,,252,4,252||,0,,,,|S||,,,,,Psychic]Tera Captain|Ribombee|FocusSash|HoneyGather|StickyWeb,QuiverDance,Moonblast,TeraBlast|Modest|,,,252,4,252||,0,,,,|S||,,,,,Ground","Sneasler||WhiteHerb|Unburden|Acrobatics,CloseCombat,DireClaw,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Fighting]Talonflame||HeavyDutyBoots|FlameBody|BraveBird,Defog,Roost,Uturn|Jolly|,252,,,4,252|||||,,,,,Fire]Dachsbun||Leftovers|WellBakedBody|BodyPress,Wish,Protect,Yawn|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy]Tera Captain|Froslass|HeavyDutyBoots|CursedBody|IceBeam,Taunt,Spikes,DestinyBond|Timid|252,,152,,,104||,0,,,,|||,,,,,Dark]Tera Captain|RagingBolt|ChoiceSpecs|Protosynthesis|TeraBlast,Thunderbolt,DragonPulse,VoltSwitch|Timid|80,,,252,,176||,20,,,,|||,,,,,Flying]Slowking||Leftovers|Regenerator|ChillyReception,IceBeam,PsychicNoise,Scald|Calm|252,,,4,252,||,0,,,,|||,,,,,Water"],
+ ["Palafin-Hero||AssaultVest|ZerotoHero|FlipTurn,JetPunch,IcePunch,ZenHeadbutt|Adamant|60,252,,,,196|||||,,,,,Water]Iron Treads||HeavyDutyBoots|QuarkDrive|HighHorsepower,IceSpinner,RapidSpin,KnockOff|Adamant|,252,,,108,148|||||,,,,,Ground]Tera Captain|Rillaboom|Leftovers|GrassySurge|SwordsDance,GrassyGlide,TeraBlast,WoodHammer|Jolly|40,252,,,,216|||||,,,,,Fairy]Grimmsnarl||LightClay|Prankster|LightScreen,Reflect,ThunderWave,SpiritBreak|Impish|252,,120,,136,|||||,,,,,Dark]Tera Captain|Armarouge|ChoiceScarf|FlashFire|Trick,Psychic,EnergyBall,ArmorCannon|Timid|,,,252,4,252||,0,,,,|||,,,,,Grass]Tornadus-Therian||HeavyDutyBoots|Regenerator|Taunt,Uturn,KnockOff,BleakwindStorm|Timid|248,,,,120,140|||||,,,,,Flying","Ting-Lu||Leftovers|VesselofRuin|StealthRock,StompingTantrum,Whirlwind,StoneEdge|Careful|248,,108,,152,|||||,,,,,Dark]Tera Captain|GreninjaBond|ExpertBelt|BattleBond|Surf,IceBeam,TeraBlast,SludgeWave|Timid|,,,252,4,252|||||,,,,,Grass]Toxapex||ClearAmulet|Regenerator|Infestation,SludgeBomb,Recover,Surf|Modest|248,,8,252,,||,0,,,,|||,,,,,Poison]Tsareena||AssaultVest|QueenlyMajesty|RapidSpin,TripleAxel,KnockOff,PowerWhip|Jolly|40,252,,,4,212|||||,,,,,Grass]Tornadus-Therian||SharpBeak|Regenerator|BleakwindStorm,HeatWave,Uturn,Tailwind|Timid|248,,,124,,136|||||,,,,,Flying]Dragonite||HeavyDutyBoots|Multiscale|DragonDance,ExtremeSpeed,ThunderPunch,IceSpinner|Adamant|192,252,,,,64|||||,,,,,Dragon"],
+ ["Magnezone||ChoiceSpecs|MagnetPull|Thunderbolt,VoltSwitch,FlashCannon,TriAttack|Modest|52,,,252,,204||,0,,,,|||,,,,,Electric]Decidueye||ChoiceScarf|Overgrow|LeafStorm,ShadowBall,Uturn,Defog|Naive|,36,,252,,220|||||,,,,,Grass]Primarina||Leftovers|Torrent|Surf,FlipTurn,EnergyBall,Haze|Calm|252,,,4,252,|||||,,,,,Water]Hitmontop||EjectPack|Intimidate|RapidSpin,Earthquake,CloseCombat,MachPunch|Impish|252,,252,,4,|||||,,,,,Fighting]Tera Captain|Landorus|LifeOrb|SandForce|EarthPower,StealthRock,SludgeWave,TeraBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Gouging Fire||ChoiceBand|Protosynthesis|FlareBlitz,ScaleShot,Outrage,Earthquake|Adamant|,252,,,4,252|||||,,,,,Fire","Corviknight||WacanBerry|Pressure|BodyPress,Roost,Uturn,Defog|Careful|248,,8,,252,|||||,,,,,Flying]Tera Captain|AvaluggHisui|HeavyDutyBoots|Sturdy|Earthquake,RapidSpin,Recover,StoneEdge|Impish|252,4,252,,,|||||,,,,,Ground]Scream Tail||Leftovers|Protosynthesis|Wish,Protect,PlayRough,ThunderWave|Careful|248,8,,,252,|||||,,,,,Fairy]Overqwil||ChestoBerry|PoisonPoint|GunkShot,Crunch,Rest,SleepTalk|Careful|248,8,,,252,|||||,,,,,Dark]Palafin||ChoiceBand|ZerotoHero|JetPunch,IronHead,WaveCrash,FlipTurn|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|SandyShocks|ChoiceScarf|Protosynthesis|EarthPower,TeraBlast,Thunderbolt,VoltSwitch|Timid|,,,252,4,252||,0,,,,|||,,,,,Ice"],
+ ["Ogerpon-Cornerstone||CornerstoneMask|Sturdy|SwordsDance,HornLeech,IvyCudgel,PowerWhip|Adamant|,252,196,,,60|||||,,,,,Rock]Tera Captain|RagingBolt|WhiteHerb|Protosynthesis|CalmMind,Thunderbolt,Thunderclap,DracoMeteor|Modest|4,,252,252,,||,20,,,,|||,,,,,Bug]Rotom-Heat||HeavyDutyBoots|Levitate|Overheat,WillOWisp,VoltSwitch,SunnyDay|Modest|164,,,192,,152||,0,,,,|||,,,,,Electric]Cyclizar||AguavBerry|Regenerator|ShedTail,RapidSpin,KnockOff,Uturn|Jolly|252,,,,88,168|||||,,,,,Dragon]Terapagos||HeavyDutyBoots|TeraShift|CalmMind,IceBeam,RapidSpin,TeraStarstorm|Modest|152,,,152,120,84|||||,,,,,Stellar]Ribombee||ChoiceScarf|SweetVeil|BugBuzz,Uturn,StickyWeb,Trick|Modest|32,,,224,252,|||||,,,,,Bug","Darkrai||HeavyDutyBoots|BadDreams|DarkPulse,IceBeam,SludgeBomb,Hypnosis|Timid|,,,252,32,224||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,WoodHammer,PlayRough,Encore|Jolly|,252,,,4,252|||||,,,,,Water]Skarmory||RockyHelmet|Sturdy|BraveBird,StealthRock,Whirlwind,Roost|Impish|248,,252,,8,|||||,,,,,Steel]Gliscor||ToxicOrb|PoisonHeal|Earthquake,Toxic,Uturn,Protect|Careful|248,,8,,252,|||||,,,,,Ground]Tera Captain|Cetitan|HeavyDutyBoots|SheerForce|IcicleCrash,IceShard,KnockOff,BellyDrum|Adamant|,252,4,,252,|||||,,,,,Steel]Slowking-Galar||MirrorHerb|Regenerator|CalmMind,Psyshock,ToxicSpikes,SlackOff|Calm|248,,108,,152,||,0,,,,|||,,,,,Poison"],
+ ["Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|Thunderclap,Thunderbolt,DragonPulse,CalmMind|Modest|,,,252,236,20||,20,,,,|||,,,,,Water]Krookodile||PasshoBerry|Intimidate|StealthRock,Earthquake,KnockOff,Taunt|Adamant|252,172,,,,84|||||,,,,,Ground]Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,MightyCleave,PsychoCut,SacredSword|Jolly|,252,24,,,232|||||,,,,,Rock]Tera Captain|WeezingGalar|CustapBerry|NeutralizingGas|StrangeSteam,Thunderbolt,Endure,DestinyBond|Bold|252,,24,,232,||,0,,,,|||,,,,,Steel]Iron Bundle||ChoiceScarf|QuarkDrive|FreezeDry,IceBeam,HydroPump,FlipTurn|Timid|,,120,252,,136|||||,,,,,Ice]Corviknight||WacanBerry|MirrorArmor|BraveBird,BodyPress,Roost,SunnyDay|Impish|228,,,,112,168|||||,,,,,Flying","Tera Captain|Basculegion|ChoiceBand|SwiftSwim|WaveCrash,FlipTurn,AquaJet,PsychicFangs|Adamant|88,252,,,,168|||||,,,,,Water]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|StealthRock,Uturn,Protect,Earthquake|Careful|252,4,,,252,|||||,,,,,Steel]Archaludon||AssaultVest|Stamina|DracoMeteor,BodyPress,ElectroShot,AuraSphere|Timid|,,,252,80,176||,0,,,,|||,,,,,Steel]Pelipper||DampRock|Drizzle|KnockOff,Uturn,Surf,Roost|Bold|252,,252,,4,|||||,,,,,Water]Iron Valiant||ChoiceScarf|QuarkDrive|VacuumWave,Moonblast,AuraSphere,Thunderbolt|Modest|80,,,252,,176||,0,,,,|||,,,,,Fairy]Grafaiai||BlackSludge|Prankster|PartingShot,Encore,KnockOff,Toxic|Careful|252,,,,8,248|||||,,,,,Poison"],
+ ["Gurdurr||Eviolite|IronFist|MachPunch,DrainPunch,Defog,IcePunch|Adamant|252,252,,,4,|||||,,,,,Fighting]Iron Valiant||ChoiceScarf|QuarkDrive|ShadowBall,AuraSphere,Moonblast,Thunderbolt|Modest|88,,,252,,168||,0,,,,|||,,,,,Fairy]Rotom-Wash||Leftovers|Levitate|VoltSwitch,HydroPump,WillOWisp,PainSplit|Bold|252,,252,4,,||,0,,,,|||,,,,,Electric]Glimmora||FocusSash|ToxicDebris|MortalSpin,EarthPower,SludgeBomb,StealthRock|Modest|92,,4,252,,160|||||,,,,,Rock]Tera Captain|Skeledirge|HeavyDutyBoots|Unaware|TorchSong,WillOWisp,SlackOff,AlluringVoice|Calm|248,,,8,252,||,0,,,,|||,,,,,Fairy]Landorus-Therian||RockyHelmet|Intimidate|GrassKnot,StealthRock,Uturn,Earthquake|Jolly|,252,,,,252|||||,,,,,Ground","Tera Captain|GreatTusk|HeavyDutyBoots|Protosynthesis|Earthquake,RapidSpin,KnockOff,IceSpinner|Jolly|252,,,,4,252|||||,,,,,Poison]Tera Captain|Hoopa|ChoiceScarf|Magician|Trick,Psychic,ShadowBall,FocusBlast|Modest|,,,252,4,252||,0,,,,|||,,,,,Ghost]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,Earthquake,Outrage,FlareBlitz|Adamant|,252,,,4,252|||||,,,,,Fire]Ting-Lu||Leftovers|VesselofRuin|Ruination,HeavySlam,Earthquake,StealthRock|Careful|252,,4,,252,|||||,,,,,Dark]Hydrapple||HeavyDutyBoots|Regenerator|EarthPower,NastyPlot,LeafStorm,Recover|Modest|252,,,252,,4||,0,,,,|||,,,,,Grass]Alomomola||HeavyDutyBoots|Regenerator|Wish,Protect,FlipTurn,LightScreen|Impish|252,,252,,4,|||||,,,,,Water"],
+ ["Iron Bundle||ChoiceScarf|QuarkDrive|FreezeDry,IceBeam,HydroPump,FlipTurn|Timid|112,,,252,,144|||||,,,,,Ice]Moltres||Leftovers|FlameBody|Flamethrower,BraveBird,Uturn,Roost|Calm|252,,,,200,56|||S||,,,,,Fire]Tera Captain|Gyarados|ExpertBelt|Moxie|DragonDance,TemperFlare,Earthquake,Waterfall|Adamant|,252,,,4,252|||S||,,,,,Water]Latios||ChoiceSpecs|Levitate|FlipTurn,DracoMeteor,LusterPurge,Trick|Timid|32,,,252,,224|||||,,,,,Dragon]Tera Captain|Excadrill|FocusSash|SandRush|Earthquake,TeraBlast,SwordsDance,RapidSpin|Jolly|,252,,,4,252|||S||,,,,,Flying]Tyranitar||SmoothRock|SandStream|StealthRock,KnockOff,ThunderWave,Roar|Careful|252,,,,220,36|||||,,,,,Rock","Tera Captain|GreatTusk|AssaultVest|Protosynthesis|CloseCombat,StoneEdge,HeavySlam,RapidSpin|Adamant|,252,,,4,252|||||,,,,,Steel]Enamorus||ChoiceScarf|CuteCharm|Moonblast,HealingWish,Psychic,EarthPower|Modest|,,,252,96,160||,0,,,,|||,,,,,Water]Scizor||AssaultVest|Technician|BulletPunch,Uturn,CloseCombat,KnockOff|Adamant|200,40,,,252,16|||||,,,,,Water]Tera Captain|WoChien|YacheBerry|TabletsofRuin|FoulPlay,GigaDrain,Ruination,StunSpore|Bold|252,,252,,4,||,0,,,,|||,,,,,Water]Greninja-Bond||MysticWater|BattleBond|DarkPulse,Uturn,WaterShuriken,Surf|Timid|16,,4,252,,236|||||,,,,,Water]Bellibolt||ShucaBerry|Static|VoltSwitch,MuddyWater,SlackOff,Toxic|Bold|252,,252,,4,||,0,,,,|||,,,,,Water"],
+ ["Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,WaveCrash,IcePunch|Jolly|104,228,,,,176|||S||,,,,,Water]Iron Valiant||LifeOrb|QuarkDrive|Moonblast,CloseCombat,KnockOff,Encore|Naive|,240,,92,,176|||||,,,,,Fairy]Tera Captain|Latias|Leftovers|Levitate|CalmMind,MistBall,AuraSphere,Recover|Modest|52,,,252,,204||,0,,,,|||,,,,,Poison]Mandibuzz||RockyHelmet|BigPecks|Roost,FoulPlay,Toxic,Defog|Impish|252,,252,,4,||,0,,,,|||,,,,,Dark]Iron Treads||ShucaBerry|QuarkDrive|StealthRock,Earthquake,IronHead,Megahorn|Jolly|144,112,,,,252|||||,,,,,Ground]Rotom-Heat||HeavyDutyBoots|Levitate|Overheat,VoltSwitch,WillOWisp,PainSplit|Bold|252,,108,84,,64||,0,,,,|||,,,,,Electric","Roaring Moon||BoosterEnergy|Protosynthesis|Acrobatics,KnockOff,ZenHeadbutt,BrickBreak|Jolly|36,220,,,,252|||||,,,,,Dragon]Slowking-Galar||BlackSludge|Regenerator|PsychicNoise,Flamethrower,SlackOff,Toxic|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison]Dipplin||Eviolite|StickyHold|DragonTail,Recover,Growth,GigaDrain|Relaxed|252,4,252,,,|||||,,,,,Grass]Iron Treads||Leftovers|QuarkDrive|Earthquake,IronDefense,BodyPress,RapidSpin|Jolly|200,,56,,,252|||||,,,,,Ground]Primarina||ExpertBelt|LiquidVoice|EnergyBall,PsychicNoise,Moonblast,PerishSong|Modest|252,,52,204,,||,0,,,,|||,,,,,Water]Tera Captain|RotomHeat|ChoiceScarf|Levitate|VoltSwitch,Trick,WillOWisp,Overheat|Modest|252,,,88,,168||,0,,,,|||,,,,,Dragon"],
+ ["Tera Captain|UrshifuRapidStrike|PunchingGlove|UnseenFist|ThunderPunch,SurgingStrikes,SwordsDance,AquaJet|Jolly|24,252,,,,232|||||,,,,,Electric]Orthworm||SitrusBerry|EarthEater|Earthquake,StealthRock,ShedTail,IronHead|Careful|252,,4,,252,|||||,,,,,Steel]Darkrai||AssaultVest|BadDreams|DarkPulse,SludgeBomb,Blizzard,FocusBlast|Modest|136,,,252,,120||,0,,,,|||,,,,,Dark]Slowking-Galar||ColburBerry|Regenerator|ChillyReception,SludgeBomb,Flamethrower,Surf|Calm|248,,,8,252,||,0,,,,|||,,,,,Poison]Zapdos||HeavyDutyBoots|Static|Discharge,VoltSwitch,Hurricane,Roost|Timid|48,,,252,,208||,0,,,,|||,,,,,Electric]Tera Captain|Delphox|HeavyDutyBoots|Blaze|Encore,Flamethrower,GrassKnot,FocusBlast|Timid|32,,,252,,224||,0,,,,|||,,,,,Grass","Tera Captain|LandorusTherian|LumBerry|Intimidate|BrickBreak,Earthquake,Uturn,StealthRock|Jolly|,252,36,,,220|||S||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Uturn,BleakwindStorm,Taunt,ChillingWater|Timid|64,,,176,68,200|||S||,,,,,Flying]Terapagos||ChopleBerry|TeraShift|IceBeam,BugBuzz,EnergyBall,RapidSpin|Modest|248,,,252,8,|||||,,,,,Stellar]Chi-Yu||ChoiceScarf|BeadsofRuin|HeatWave,DarkPulse,Hex,Psychic|Jolly|4,,20,252,,232||,0,,,,|||,,,,,Dark]Slowbro||RedCard|Regenerator|ThunderWave,Scald,CalmMind,FutureSight|Modest|184,,56,252,16,||,0,,,,|||,,,,,Water]Tera Captain|Tinkaton|LightClay|MoldBreaker|FakeOut,KnockOff,Reflect,LightScreen|Jolly|68,,224,,,216|||||,,,,,Dragon"],
+ ["Gholdengo||ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,Trick,Thunderbolt|Modest|72,,,248,,188||,0,,,,|||,,,,,Steel]Tera Captain|Mamoswine|AssaultVest|Oblivious|Earthquake,IcicleCrash,IceShard,Trailblaze|Adamant|,228,28,,100,152|||||,,,,,Water]Weezing-Galar||RockyHelmet|Levitate|StrangeSteam,PainSplit,Haze,WillOWisp|Bold|248,,252,,,8||,0,,,,|||,,,,,Poison]Slowking||ColburBerry|Regenerator|Scald,ChillyReception,SlackOff,Psychic|Quiet|252,,52,204,,||,0,,,,17|||,,,,,Water]Tera Captain|Hydreigon|RoseliBerry|Levitate|Flamethrower,FlashCannon,StealthRock,Taunt|Timid|172,,,168,,168||,0,,,,|||,,,,,Fire]Oricorio-Pom-Pom||HeavyDutyBoots|Dancer|RevelationDance,Hurricane,Roost,QuiverDance|Modest|248,,144,68,,48||,0,,,,|||,,,,,Electric","Tera Captain|Ceruledge|HeavyDutyBoots|FlashFire|BitterBlade,Poltergeist,ShadowSneak,SwordsDance|Jolly|40,252,,,,216|||||,,,,,Fairy]Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,WaveCrash,FlipTurn,BodySlam|Jolly|8,252,,,4,244|||||,,,,,Water]Overqwil||RockyHelmet|Intimidate|Crunch,BarbBarrage,Spikes,DestinyBond|Jolly|248,,44,,,216|||||,,,,,Dark]Great Tusk||AssaultVest|Protosynthesis|HeadlongRush,CloseCombat,KnockOff,RapidSpin|Jolly|,252,,,56,200|||||,,,,,Ground]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,HeatWave,FocusBlast,Uturn|Timid|96,,,8,252,152|||||,,,,,Flying]Tinkaton||AirBalloon|Pickpocket|GigatonHammer,PlayRough,Encore,StealthRock|Jolly|248,,116,,,144|||||,,,,,Fairy"],
+ ["Hatterene||Leftovers|MagicBounce|CalmMind,DrainingKiss,Psychic,Nuzzle|Calm|248,,8,,252,|||||,,,,,Psychic]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,PowerWhip,Trailblaze,GrassyTerrain|Jolly|,252,,,4,252|||||,,,,,Fire]Bisharp||Eviolite|Defiant|SwordsDance,NightSlash,IronHead,SuckerPunch|Adamant|200,252,,,56,|||||,,,,,Dark]Smeargle||FocusSash|OwnTempo|StickyWeb,CeaselessEdge,ToxicSpikes,RapidSpin|Jolly|252,,,,4,252|||||,,,,,Normal]Tera Captain|GreatTusk|AssaultVest|Protosynthesis|Earthquake,IceSpinner,HeavySlam,RapidSpin|Jolly|120,80,,,152,156|||||,,,,,Ghost]Kyurem||LoadedDice|Pressure|DragonDance,IcicleSpear,ScaleShot,Substitute|Jolly|56,252,,,108,92|||||,,,,,Dragon","Iron Jugulis||PowerHerb|QuarkDrive|AirSlash,Flamethrower,MeteorBeam,FlashCannon|Timid|8,,,252,4,244||,0,,,,|||,,,,,Dark]Tera Captain|IronMoth|AirBalloon|QuarkDrive|SludgeWave,FieryDance,DazzlingGleam,EnergyBall|Timid|120,,,132,4,252||,0,,,,|||,,,,,Fairy]Tera Captain|IronThorns|MentalHerb|QuarkDrive|RockBlast,TeraBlast,Earthquake,DragonDance|Adamant|40,252,,,,216|||||,,,,,Flying]Pincurchin||TerrainExtender|ElectricSurge|ThunderWave,Spikes,Memento,Discharge|Bold|252,,216,,40,||,0,,,,|||,,,,,Electric]Iron Valiant||BoosterEnergy|QuarkDrive|CloseCombat,SpiritBreak,SwordsDance,Encore|Jolly|48,252,,,,208|||||,,,,,Fairy]Iron Bundle||HeavyDutyBoots|QuarkDrive|IceBeam,FreezeDry,HydroPump,FlipTurn||80,,,252,4,172|||||,,,,,Ice"],
+ ["Tera Captain|Mew|PowerHerb|Synchronize|Psychic,DarkPulse,MeteorBeam,Agility|Timid|8,,,252,8,240||,0,,,,|||,,,,,Grass]Tera Captain|MoltresGalar|SafetyGoggles|Berserk|FieryWrath,AirSlash,NastyPlot,Agility|Timid|24,,,252,,232||,0,,,,|||,,,,,Steel]Rotom-Heat||HeavyDutyBoots|Levitate|VoltSwitch,Overheat,WillOWisp,Thunder|Calm|252,,,,244,12||,0,,,,|||,,,,,Electric]Iron Treads||BoosterEnergy|QuarkDrive|Earthquake,StoneEdge,Megahorn,RapidSpin|Jolly|8,252,,,,248|||||,,,,,Ground]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,Thunderbolt,Psychic,ShadowBall|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Amoonguss||RockyHelmet|Regenerator|SludgeBomb,GigaDrain,StompingTantrum,Spore|Bold|252,,252,,,4|||||,,,,,Grass","Amoonguss||PayapaBerry|Regenerator|ClearSmog,GigaDrain,Synthesis,SludgeBomb|Calm|240,,164,,104,||,0,,,,|||,,,,,Grass]Moltres||HeavyDutyBoots|FlameBody|Flamethrower,WillOWisp,Uturn,Roost|Bold|252,,252,,4,|||||,,,,,Fire]Tera Captain|IronCrown|BoosterEnergy|QuarkDrive|CalmMind,Substitute,TachyonCutter,TeraBlast|Timid|124,,,152,,232||,20,,,,|||,,,,,Fire]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|Encore,IvyCudgel,HornLeech,Uturn|Jolly|100,,,,232,176|||||,,,,,Water]Tera Captain|Jolteon|ChoiceScarf|VoltAbsorb|Discharge,VoltSwitch,TeraBlast,AlluringVoice|Timid|80,,,252,,176||,0,,,,|||,,,,,Fire]Great Tusk||PayapaBerry|Protosynthesis|RapidSpin,Earthquake,StoneEdge,StealthRock|Jolly|,252,,,8,248|||||,,,,,Ground"],
+ ["Tera Captain|Annihilape|Leftovers|Defiant|BulkUp,TeraBlast,RageFist,Protect|Careful|252,252,,,4,|||||,,,,,Fairy]Roaring Moon||ChoiceBand|Protosynthesis|KnockOff,Uturn,IronHead,DragonClaw|Jolly|24,252,,,,232|||||,,,,,Dragon]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,HornLeech,Encore,SwordsDance|Adamant|248,44,,,,216|||||,,,,,Fire]Slowking-Galar||ColburBerry|Regenerator|ToxicSpikes,EerieSpell,ChillyReception,IceBeam|Sassy|248,,,36,224,||,0,,,,|||,,,,,Poison]Corviknight||Leftovers|Pressure|Defog,Roost,Uturn,BraveBird|Relaxed|252,,84,,172,||,,,,,26|||,,,,,Flying]Tera Captain|Dudunsparce|Leftovers|SereneGrace|Glare,Roost,StealthRock,IceBeam|Bold|252,,252,4,,||,0,,,,|||,,,,,Ghost","Tera Captain|Serperior|SitrusBerry|Contrary|LeafStorm,DragonPulse,TeraBlast,Glare|Timid|24,,,252,,232||,0,,,,|||,,,,,Stellar]Iron Valiant||ChoiceSpecs|QuarkDrive|Thunderbolt,Moonblast,Hex,VacuumWave|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Garchomp||RockyHelmet|RoughSkin|Earthquake,DragonTail,StealthRock,Spikes|Impish|252,,244,,,12|||||,,,,,Dragon]Primarina||Leftovers|Torrent|Moonblast,Surf,CalmMind,Substitute|Calm|252,,108,,148,||,0,,,,|||,,,,,Water]Corviknight||Leftovers|Pressure|BraveBird,Uturn,Roost,BulkUp|Careful|248,,92,,168,|||||,,,,,Flying]Arbok||IronBall|Intimidate|GunkShot,Glare,PainSplit,Switcheroo|Careful|248,,80,,180,|||||,,,,,Poison"],
+ ["Tera Captain|Latias|Leftovers|Levitate|CalmMind,ShadowBall,Recover,DragonPulse|Bold|252,,252,4,,||,0,,,,|||,,,,,Dragon]Glimmora||ChoiceScarf|ToxicDebris|EarthPower,EnergyBall,PowerGem,SludgeWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Rock]Empoleon||Leftovers|Competitive|BrickBreak,Yawn,Roost,FlipTurn|Impish|252,,252,,4,|||||,,,,,Water]Mimikyu||RockyHelmet|Disguise|Curse,PainSplit,DrainPunch,DestinyBond|Impish|,76,224,,,208|||||,,,,,Ghost]Tera Captain|Torterra|MentalHerb|ShellArmor|Stockpile,BodyPress,Synthesis,HeavySlam|Impish|252,,252,,4,|||||,,,,,Bug]Palafin||ChoiceSpecs|ZerotoHero|Boomburst,GrassKnot,Surf,DrainingKiss|Timid|,,,252,4,252||,0,,,,|||,,,,,Water","Meowscarada||ChoiceScarf|Protean|FlowerTrick,KnockOff,Uturn,TripleAxel|Jolly|,252,,,4,252|||||,,,,,Grass]Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,IcePunch,CloseCombat|Adamant|,252,,,4,252|||||,,,,,Water]Donphan||HeavyDutyBoots|Sturdy|StealthRock,Earthquake,KnockOff,RapidSpin|Adamant|248,252,,,8,|||||,,,,,Ground]Scream Tail||HeavyDutyBoots|Protosynthesis|DazzlingGleam,Wish,Protect,Encore|Timid|4,,,,252,252||,0,,,,|||,,,,,Fairy]Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|CalmMind,DragonPulse,Thunderbolt,Thunderclap|Modest|152,,,252,,104||,20,,,,|||,,,,,Steel]Tera Captain|Revavroom|AirBalloon|Filter|ShiftGear,GunkShot,IronHead,HighHorsepower|Adamant|188,252,,,,68|||||,,,,,Steel"],
+ ["Tera Captain|Primarina|AssaultVest|Torrent|Moonblast,FlipTurn,Surf,EnergyBall|Calm|252,,4,,252,|||||,,,,,Fire]Gouging Fire||ChoiceBand|Protosynthesis|FlareBlitz,DragonClaw,Earthquake,StoneEdge|Adamant|168,252,,,,88|||||,,,,,Fire]Excadrill||AirBalloon|MoldBreaker|Earthquake,RapidSpin,SwordsDance,IronHead|Adamant|,252,,,80,176|||||,,,,,Ground]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,CalmMind,AuraSphere,ShadowBall|Timid|,,4,252,,252||,0,,,,|||,,,,,Fairy]Tera Captain|Espathra|MirrorHerb|SpeedBoost|CalmMind,StoredPower,ShadowBall,DazzlingGleam|Modest|,,152,144,,212||,0,,,,|||,,,,,Steel]Rotom-Mow||ChoiceScarf|Levitate|LeafStorm,VoltSwitch,Trick,Thunderbolt|Modest|,,64,252,,192||,0,,,,|||,,,,,Electric","Darkrai||ChoiceScarf|BadDreams|DarkPulse,SludgeBomb,FocusBlast,FoulPlay|Timid|,,72,252,,184||,0,,,,|||,,,,,Dark]Iron Crown||Leftovers|QuarkDrive|TachyonCutter,CalmMind,Agility,Psyshock|Modest|252,,,252,,4||,20,,,,|||,,,,,Steel]Rotom-Wash||ShucaBerry|Levitate|HydroPump,ThunderWave,VoltSwitch,PainSplit|Bold|248,,212,48,,||,0,,,,|||,,,,,Electric]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|Agility,FieryDance,SludgeWave,TeraBlast|Timid|,,40,252,,216||,0,,,,|||,,,,,Dark]Gliscor||ToxicOrb|PoisonHeal|ToxicSpikes,Spikes,Uturn,Earthquake|Careful|196,,,,252,60|||||,,,,,Ground]Tera Captain|Cloyster|WhiteHerb|SkillLink|IcicleSpear,TeraBlast,ShellSmash,RockBlast|Jolly|,252,,,32,224|||||,,,,,Poison"],
+ ["Palafin-Hero||Leftovers|ZerotoHero|JetPunch,DrainPunch,BulkUp,Encore|Adamant|88,252,,,12,156|||||,,,,,Water]Garchomp||Leftovers|RoughSkin|StealthRock,Earthquake,Crunch,SwordsDance|Jolly|216,,36,,60,196|||||,,,,,Dragon]Zapdos||HeavyDutyBoots|Static|Hurricane,VoltSwitch,EerieImpulse,Roost|Bold|248,,192,,8,60||,0,,,,|||,,,,,Electric]Tera Captain|Latias|Leftovers|Levitate|Thunderbolt,MistBall,CalmMind,Recover|Timid|248,,12,52,44,152||,0,,,,|||,,,,,Electric]Florges-Blue||HeavyDutyBoots|FlowerVeil|AlluringVoice,DrainingKiss,CalmMind,Synthesis|Calm|248,,228,,32,||,0,,,,|S||,,,,,Fairy]Tera Captain|Forretress|Leftovers|Sturdy|ToxicSpikes,BodyPress,RapidSpin,VoltSwitch|Impish|248,,252,,4,4|||||,,,,,Fighting","Tera Captain|RagingBolt|Leftovers|Protosynthesis|CalmMind,Roar,DragonPulse,Thunderbolt|Modest|104,,136,252,,16||,20,,,,|||,,,,,Water]Mesprit||LightClay|Levitate|HealingWish,Reflect,LightScreen,Psychic|Bold|248,,236,8,,16||,0,,,,|||,,,,,Psychic]Samurott-Hisui||ChoiceScarf|Sharpness|CeaselessEdge,FlipTurn,AquaCutter,KnockOff|Adamant|144,252,,,,112|||||,,,,,Water]Cinderace||HeavyDutyBoots|Libero|PyroBall,HighJumpKick,Uturn,Taunt|Jolly|72,252,,,,184|||||,,,,,Fire]Great Tusk||ProtectivePads|Protosynthesis|RapidSpin,IceSpinner,HeadlongRush,SupercellSlam|Adamant|120,252,,,,136|||||,,,,,Ground]Tinkaton||AirBalloon|MoldBreaker|Encore,StealthRock,KnockOff,PlayRough|Careful|248,84,76,,20,80|||||,,,,,Fairy"],
+ ["Tera Captain|UrshifuRapidStrike|ProtectivePads|UnseenFist|SwordsDance,AquaJet,SurgingStrikes,CloseCombat|Jolly|,80,,,252,176|||||,,,,,Electric]Kyurem||Leftovers|Pressure|FreezeDry,ScaleShot,EarthPower,DragonDance|Naive|,88,,252,,168|||||,,,,,Dragon]Gholdengo||ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,Trick,Hex|Timid|72,,,252,,184||,0,,,,|||,,,,,Steel]Darkrai||WideLens|BadDreams|Hypnosis,DarkPulse,ShadowBall,KnockOff|Modest|84,,,252,,172|||||,,,,,Dark]Donphan||Leftovers|Sturdy|RapidSpin,StealthRock,IceSpinner,Earthquake|Impish|252,4,252,,,|||||,,,,,Ground]Tera Captain|Espeon|Leftovers|MagicBounce|TeraBlast,CalmMind,Psychic,StoredPower|Timid|,,4,252,,252||,0,,,,|||,,,,,Fire","Baxcalibur||HeavyDutyBoots|ThermalExchange|SwordsDance,GlaiveRush,Earthquake,IceShard|Jolly|,252,,,4,252|||||,,,,,Dragon]Slowking-Galar||HeavyDutyBoots|Regenerator|FutureSight,ChillyReception,SludgeBomb,ThunderWave|Sassy|252,,16,,240,||,,,,,0|||,,,,,Poison]Urshifu-Rapid-Strike||MysticWater|UnseenFist|SwordsDance,CloseCombat,SurgingStrikes,AquaJet|Jolly|,252,,,4,252|||||,,,,,Fighting]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Earthquake,DualWingbeat,Protect,Toxic|Impish|244,,248,,16,|||||,,,,,Water]Volcarona||HeavyDutyBoots|FlameBody|QuiverDance,FieryDance,Psychic,GigaDrain|Timid|,,,252,4,252||,0,,,,|||,,,,,Bug]Tera Captain|Klefki|Leftovers|Prankster|Spikes,MagnetRise,DazzlingGleam,ThunderWave|Calm|252,4,,,252,||,0,,,,|||,,,,,Water"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|CalmMind,Moonblast,Psyshock,Encore|Timid|16,,,252,,240||,0,,,,|||,,,,,Fairy]Garchomp||LumBerry|RoughSkin|FireFang,Earthquake,ScaleShot,SwordsDance|Adamant|248,4,200,,,56|||||,,,,,Dragon]Tera Captain|Scizor|HeavyDutyBoots|Technician|SwordsDance,QuickAttack,BulletPunch,BugBite|Adamant|216,252,,,,40|||||,,,,,Normal]Uxie||SitrusBerry|Levitate|ThunderWave,Encore,Uturn,StealthRock|Careful|248,8,,,252,|||||,,,,,Psychic]Tera Captain|Braviary|LifeOrb|SheerForce|BodySlam,BulkUp,Roost,Whirlwind|Adamant|248,92,,,156,12|||||,,,,,Normal]Arbok||FocusSash|Intimidate|ToxicSpikes,Toxic,Glare,KnockOff|Jolly|248,,124,,,136|||||,,,,,Poison","Brambleghast||HeavyDutyBoots|WindRider|PowerWhip,RapidSpin,Poltergeist,StrengthSap|Impish|252,,192,,,64|||||,,,,,Grass]Ting-Lu||RedCard|VesselofRuin|Spikes,StealthRock,Ruination,Earthquake|Relaxed|252,4,252,,,|||||,,,,,Dark]Cinderace||HeavyDutyBoots|Blaze|WillOWisp,CourtChange,PyroBall,Uturn|Jolly|252,,116,,,140|||||,,,,,Fire]Meowscarada||ChoiceScarf|Protean|PlayRough,FlowerTrick,Uturn,KnockOff|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Latias|HeavyDutyBoots|Levitate|DracoMeteor,AuraSphere,Psychic,Recover|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel]Tera Captain|BraviaryHisui|HeavyDutyBoots|TintedLens|EsperWing,CalmMind,Roost,HeatWave|Bold|252,,120,,136,||,0,,,,|||,,,,,Steel"],
+ ["Glimmora||ChoiceSpecs|ToxicDebris|EnergyBall,EarthPower,PowerGem,SludgeWave|Timid|32,,,224,,252||,0,,,,|||,,,,,Rock]Clefable||Leftovers|Unaware|Wish,CalmMind,StoredPower,AlluringVoice|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy]Tera Captain|Annihilape|Leftovers|VitalSpirit|RageFist,Taunt,DrainPunch,BulkUp|Adamant|248,,200,,60,|||||,,,,,Water]Landorus-Therian||Leftovers|Intimidate|StealthRock,Earthquake,BrickBreak,Uturn|Impish|248,,252,,,8|||||,,,,,Ground]Meowscarada||ChoiceScarf|Protean|FlowerTrick,Uturn,KnockOff,BrickBreak|Jolly|168,72,84,,,184|||||,,,,,Grass]Tatsugiri-Droopy||HeavyDutyBoots|StormDrain|Counter,RapidSpin,Memento,Whirlpool|Bold|252,,128,,128,|||||,,,,,Dragon","Zapdos||HeavyDutyBoots|Static|Hurricane,Roost,Uturn,ThunderWave|Timid|208,,160,,,140|||||,,,,,Electric]Tera Captain|SlowkingGalar|IcyRock|Regenerator|ChillyReception,SludgeBomb,Toxic,FutureSight|Bold|248,,228,24,8,||,0,,,,|||,,,,,Fairy]Grimmsnarl||ChoiceSpecs|Prankster|Trick,PlayRough,IcePunch,PartingShot|Impish|148,108,252,,,|||||,,,,,Dark]Tera Captain|Cetitan|HeavyDutyBoots|SlushRush|BellyDrum,Earthquake,HeavySlam,IceShard|Adamant|240,120,8,,,140|||||,,,,,Poison]Great Tusk||BoosterEnergy|Protosynthesis|Earthquake,CloseCombat,IceSpinner,RapidSpin|Jolly|248,4,,,4,252|||||,,,,,Ground]Palafin-Hero||ChoiceScarf|ZerotoHero|WaveCrash,CloseCombat,IcePunch,FlipTurn|Adamant|184,252,,,,72|||||,,,,,Water"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,AuraSphere,Thunderbolt,Encore|Timid|68,,,252,,188||,0,,,,|||,,,,,Fairy]Tera Captain|Gholdengo|ShucaBerry|GoodasGold|MakeItRain,ShadowBall,PowerGem,Recover|Modest|248,,124,136,,||,0,,,,|||,,,,,Steel]Ting-Lu||Leftovers|VesselofRuin|Earthquake,RockSlide,Ruination,Spikes|Adamant|184,76,,,248,|||||,,,,,Dark]Blastoise||WhiteHerb|Torrent|Surf,IceBeam,ShellSmash,RapidSpin|Modest|120,,,252,,136|||||,,,,,Water]Braviary||LifeOrb|SheerForce|BodySlam,BulkUp,Agility,Roost|Adamant|248,252,8,,,|||||,,,,,Normal]Lokix||HeavyDutyBoots|TintedLens|FirstImpression,Uturn,KnockOff,SuckerPunch|Jolly|56,236,,,,216|||||,,,,,Bug","Tera Captain|Oricorio|Leftovers|Dancer|RevelationDance,QuiverDance,Roost,Taunt|Timid|252,,144,,,112||,0,,,,|||,,,,,Fairy]Meowscarada||ChoiceScarf|Protean|PlayRough,FlowerTrick,TripleAxel,Uturn|Jolly|56,252,,,,200|||||,,,,,Fairy]Rotom-Heat||HeavyDutyBoots|Levitate|Discharge,Rest,WillOWisp,Reflect|Calm|248,,8,,252,||,0,,,,|||,,,,,Grass]Great Tusk||BoosterEnergy|Protosynthesis|BulkUp,HeadlongRush,CloseCombat,SupercellSlam|Jolly|252,4,,,,252|||||,,,,,Ice]Tera Captain|Clefable|Leftovers|MagicGuard|Moonblast,Moonlight,StealthRock,Flamethrower|Bold|252,,252,,4,||,0,,,,|||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|NastyPlot,Hurricane,HeatWave,Uturn|Timid|252,,,40,,216|||||,,,,,Flying"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|CloseCombat,PoisonJab,FirePunch,SwordsDance|Jolly|16,252,,,,240|||||,,,,,Bug]Ditto||ChoiceScarf|Imposter|Transform|Relaxed|252,,252,,,||,30,,,,|S||,,,,,Bug]Goodra-Hisui||AssaultVest|Gooey|DracoMeteor,HeavySlam,KnockOff,DragonTail|Relaxed|252,,136,,120,|||||,,,,,Bug]Slowking||HeavyDutyBoots|Regenerator|IceBeam,FoulPlay,ThunderWave,ChillyReception|Sassy|252,,4,,252,||,0,,,,0|||,,,,,Bug]Rotom-Heat||HeavyDutyBoots|Levitate|Overheat,VoltSwitch,PainSplit,ThunderWave|Bold|252,,248,,,8||,0,,,,|S||,,,,,Bug]Iron Treads||HeavyDutyBoots|QuarkDrive|Earthquake,HeavySlam,RapidSpin,VoltSwitch|Adamant|104,156,,,,248|||||,,,,,Bug","Hatterene||AssaultVest|MagicBounce|PsychicNoise,DrainingKiss,GigaDrain,MistyExplosion|Bold|248,,60,,200,||,0,,,,|||,,,,,Psychic]Gouging Fire||AirBalloon|Protosynthesis|DragonDance,HeatCrash,Substitute,DragonClaw|Adamant|144,252,8,,,104|||||,,,,,Fire]Ribombee||FocusSash|SweetVeil|StickyWeb,Moonblast,SkillSwap,Uturn|Timid|56,,8,252,,192|||||,,,,,Bug]Iron Treads||Leftovers|QuarkDrive|StealthRock,RapidSpin,Earthquake,IceSpinner|Careful|248,8,,,252,|||||,,,,,Ground]Tera Captain|WalkingWake|AirBalloon|Protosynthesis|Scald,Substitute,KnockOff,TeraBlast|Timid|,,24,252,,232|||||,,,,,Grass]Tera Captain|Venusaur|LifeOrb|Overgrow|SwordsDance,PowerWhip,Earthquake,SleepPowder|Adamant|32,252,32,,,192|||||,,,,,Flying"],
+ ["Tera Captain|Annihilape|Leftovers|VitalSpirit|Taunt,DrainPunch,RageFist,Protect|Jolly|120,,,,252,136|||||,,,,,Water]Greninja||ChoiceScarf|Protean|Uturn,ToxicSpikes,LowKick,Liquidation|Jolly|,212,44,,,252|||||,,,,,Water]Tornadus-Therian||RedCard|Regenerator|KnockOff,Acrobatics,Uturn,Taunt|Jolly|252,,,,4,252|||||,,,,,Flying]Ting-Lu||HeavyDutyBoots|VesselofRuin|StealthRock,Whirlwind,ThroatChop,Earthquake|Careful|252,,,,252,4|||||,,,,,Dark]Tera Captain|Comfey|MirrorHerb|Triage|DrainingKiss,KnockOff,Synthesis,Encore|Modest|252,,4,252,,|||||,,,,,Fairy]Scizor||ChoiceBand|Technician|BulletPunch,Uturn,KnockOff,Defog|Adamant|72,252,,,,184|||||,,,,,Bug","Greninja||AssaultVest|Protean|Extrasensory,Uturn,IceBeam,SludgeWave|Timid|,,,252,4,252|||||,,,,,Water]Latios||Leftovers|Levitate|DracoMeteor,LusterPurge,Recover,ThunderWave|Modest|252,,,160,,96||,0,,,,|||,,,,,Dragon]Cyclizar||HeavyDutyBoots|Regenerator|RapidSpin,ShedTail,Uturn,Overheat|Timid|248,,,8,,252|||||,,,,,Dragon]Tera Captain|Skeledirge|Leftovers|Unaware|SlackOff,TorchSong,AlluringVoice,WillOWisp|Bold|248,,252,,8,||,0,,,,|||,,,,,Fairy]Tera Captain|Torterra|LoadedDice|ShellArmor|BulletSeed,RockBlast,HeadlongRush,ShellSmash|Adamant|,252,,,4,252|||||,,,,,Rock]Heracross||AssaultVest|Moxie|Trailblaze,ShadowClaw,CloseCombat,StoneEdge|Adamant|,252,,,4,252|||||,,,,,Bug"],
+ ["Tera Captain|Hatterene|Leftovers|MagicBounce|DrainingKiss,CalmMind,MysticalFire,Psyshock|Calm|252,,,4,252,||,0,,,,|||,,,,,Dragon]Urshifu||BlackGlasses|UnseenFist|CloseCombat,Uturn,WickedBlow,SuckerPunch|Jolly|76,252,,,,180|||||,,,,,Fighting]Clefable||Leftovers|Unaware|StealthRock,CalmMind,Moonblast,Wish|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Archaludon||AssaultVest|Stamina|DracoMeteor,BodyPress,DragonTail,MirrorCoat|Calm|252,,,68,188,|||||,,,,,Steel]Tera Captain|ThundurusTherian|ChoiceSpecs|VoltAbsorb|VoltSwitch,GrassKnot,TeraBlast,KnockOff|Modest|4,,,252,,252|||||,,,,,Flying]Chi-Yu||EjectPack|BeadsofRuin|Overheat,Flamethrower,DarkPulse,NastyPlot|Timid|,,,252,100,156||,0,,,,|||,,,,,Dark","Volcanion||ChoiceSpecs|WaterAbsorb|SteamEruption,EarthPower,Overheat,SludgeWave|Modest|252,,4,252,,||,0,,,,|||,,,,,Fire]Ting-Lu||Leftovers|VesselofRuin|Whirlwind,HeavySlam,StealthRock,Earthquake|Impish|252,,4,,252,|||||,,,,,Dark]Tera Captain|IronLeaves|BoosterEnergy|QuarkDrive|SwordsDance,CloseCombat,LeafBlade,SmartStrike|Jolly|,148,,,108,252|||||,,,,,Fighting]Ditto||ChoiceScarf|Imposter|Transform|Timid|252,,,,,252||,30,,,,|||,,,,,Normal]Skarmory||CustapBerry|Sturdy|IronHead,BraveBird,Roost,Endure|Impish|252,,252,,4,|||||,,,,,Steel]Tera Captain|Annihilape|Leftovers|Defiant|BulkUp,RageFist,DrainPunch,Substitute|Careful|252,20,36,,200,|||||,,,,,Fairy"],
+ ["Ribombee||HeavyDutyBoots|ShieldDust|QuiverDance,Uturn,Moonblast,Psychic|Modest|,,20,252,,236|||||,,,,,Bug]Cinderace||HeavyDutyBoots|Libero|Uturn,ZenHeadbutt,GunkShot,PyroBall|Jolly|,252,,,72,184|||||,,,,,Fire]Donphan||AssaultVest|Sturdy|Earthquake,KnockOff,IceShard,RapidSpin|Adamant|252,120,,,136,|||||,,,,,Ground]Palafin||ChoiceBand|ZerotoHero|FlipTurn,JetPunch,WaveCrash,CloseCombat|Adamant|,252,,,16,240|||||,,,,,Water]Kingambit||Leftovers|SupremeOverlord|ZenHeadbutt,SuckerPunch,IronHead,StealthRock|Adamant|,252,,,164,92|||||,,,,,Dark]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Thunderclap,TeraBlast,DragonPulse,CalmMind|Modest|128,,100,252,28,||,20,,,,|||,,,,,Ground","Tera Captain|Latias|Leftovers|Levitate|MistBall,AuraSphere,CalmMind,Recover|Timid|248,,84,,,176||,0,,,,|||,,,,,Fairy]Iron Treads||BoosterEnergy|QuarkDrive|Earthquake,IronHead,VoltSwitch,RapidSpin|Jolly|48,252,,,,208|||||,,,,,Ground]Tauros-Paldea-Blaze||RockyHelmet|Intimidate|RagingBull,BodyPress,Trailblaze,WillOWisp|Impish|248,,184,,,76|||||,,,,,Fighting]Tera Captain|Kilowattrel|ChoiceSpecs|VoltAbsorb|Thunderbolt,Hurricane,VoltSwitch,TeraBlast|Timid|8,,,252,,248||,0,,,,|||,,,,,Fairy]Sylveon||Leftovers|Pixilate|HyperVoice,BatonPass,Wish,Protect|Bold|248,,252,,8,||,0,,,,|||,,,,,Fairy]Samurott-Hisui||ChoiceScarf|Sharpness|CeaselessEdge,RazorShell,KnockOff,FlipTurn|Adamant|60,252,,,,196|||||,,,,,Water"],
+ ["Baxcalibur||HeavyDutyBoots|ThermalExchange|GlaiveRush,IceShard,Earthquake,SwordsDance|Adamant|196,252,,,,60|||||,,,,,Dragon]Slowking-Galar||ColburBerry|Regenerator|SludgeBomb,FireBlast,Toxic,ChillyReception|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Slither Wing||BoosterEnergy|Protosynthesis|CloseCombat,Acrobatics,FlareBlitz,Substitute|Jolly|,252,4,,,252|||||,,,,,Bug]Hydreigon||ChoiceScarf|Levitate|DracoMeteor,DarkPulse,FlashCannon,Uturn|Timid|92,,,252,,164|||||,,,,,Dark]Forretress||RedCard|Sturdy|GyroBall,VoltSwitch,RapidSpin,StealthRock|Sassy|248,,8,,252,||,,,,,0|||,,,,,Bug]Tera Captain|Ogerpon|HeavyDutyBoots|Defiant|IvyCudgel,Superpower,Encore,Uturn|Jolly|80,252,,,,176|||||,,,,,Grass","Iron Valiant||BoosterEnergy|QuarkDrive|KnockOff,Encore,FirePunch,CloseCombat|Jolly|,252,,,4,252|||||,,,,,Bug]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,DarkPulse,Flamethrower,WillOWisp|Timid|,,,252,16,240||,0,,,,|||,,,,,Bug]Tera Captain|Serperior|HeavyDutyBoots|Contrary|LeafStorm,Substitute,Glare,LeechSeed|Timid|24,,,,252,232||,0,,,,|||,,,,,Fire]Tera Captain|Sinistcha|HeavyDutyBoots|Heatproof|TeraBlast,ShadowBall,StrengthSap,CalmMind|Bold|252,,176,,80,||,0,,,,|||,,,,,Fairy]Forretress||Leftovers|Sturdy|Spikes,RapidSpin,GyroBall,ThunderWave|Relaxed|252,4,252,,,||,,,,,0|||,,,,,Bug]Mudsdale||Leftovers|Stamina|Earthquake,StealthRock,BodyPress,Roar|Impish|212,4,252,,40,|||||,,,,,Ground"],
+ ["Qwilfish-Hisui||Eviolite|SwiftSwim|BarbBarrage,PainSplit,Liquidation,ToxicSpikes|Jolly|128,60,8,,224,88|||||,,,,,Dark]Archaludon||AssaultVest|Stamina|ElectroShot,FlashCannon,DragonPulse,BodyPress|Timid|,,20,120,144,224||,0,,,,|||,,,,,Steel]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|Thunderclap,VoltSwitch,DracoMeteor,TeraBlast|Timid|32,,16,252,40,168||,20,,,,|||,,,,,Fairy]Pelipper||DampRock|Drizzle|Roost,WeatherBall,Uturn,Hurricane|Timid|168,,,104,100,136|||||,,,,,Water]Vikavolt||OccaBerry|Levitate|StickyWeb,VoltSwitch,BugBuzz,ThunderWave|Modest|96,,20,240,140,12||,0,,,,|||,,,,,Bug]Basculegion||WacanBerry|SwiftSwim|PhantomForce,FlipTurn,Liquidation,Outrage|Adamant|8,208,,,60,232|||||,,,,,Water","Palafin||AssaultVest|ZerotoHero|JetPunch,IcePunch,GrassKnot,Liquidation|Hasty|64,252,,56,,136|||||,,,,,Grass]Raikou||ExpertBelt|Pressure|Thunderbolt,VoltSwitch,Extrasensory,ThunderWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Flying]Tyranitar||ChopleBerry|SandStream|Roar,StealthRock,KnockOff,ThunderWave|Careful|252,4,,,252,|||||,,,,,Ghost]Tera Captain|Chesnaught|AssaultVest|Bulletproof|PoisonJab,Earthquake,TeraBlast,RockSlide|Careful|252,4,,,252,|||||,,,,,Fire]Espeon||MirrorHerb|MagicBounce|AlluringVoice,Wish,Protect,Psyshock|Timid|248,,,4,,252||,0,,,,|||,,,,,Fairy]Reuniclus||ColburBerry|MagicGuard|AcidArmor,CalmMind,StoredPower,Recover|Bold|252,,212,44,,||,0,,,,|||,,,,,Dark"],
+ ["Tera Captain|IronMoth|ChoiceScarf|QuarkDrive|FieryDance,SludgeWave,Discharge,DazzlingGleam|Modest|,,,252,4,252||,0,,,,|||,,,,,Fire]Hydrapple||AssaultVest|Regenerator|FickleBeam,DracoMeteor,HydroPump,EarthPower|Calm|248,,,8,252,||,0,,,,|||,,,,,Grass]Metagross||PunchingGlove|ClearBody|IcePunch,MeteorMash,Agility,KnockOff|Adamant|,252,,,4,252|||||,,,,,Steel]Rotom-Wash||Leftovers|Levitate|HydroPump,VoltSwitch,WillOWisp,Protect|Bold|252,,252,4,,||,0,,,,|||,,,,,Electric]Garchomp||RockyHelmet|RoughSkin|Earthquake,DragonTail,Spikes,StealthRock|Adamant|248,252,,,,8|||||,,,,,Dragon]Fezandipiti||BlackSludge|ToxicChain|PoisonJab,IcyWind,PlayRough,Roost|Relaxed|252,4,252,,,|||||,,,,,Poison","Garchomp||LoadedDice|RoughSkin|ScaleShot,Earthquake,SwordsDance,Substitute|Jolly|,252,,,4,252|||||,,,,,Dragon]Iron Valiant||FocusSash|QuarkDrive|ThunderWave,Moonblast,ShadowBall,Psyshock|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Tera Captain|Ogerpon|ExpertBelt|Defiant|KnockOff,Uturn,StompingTantrum,IvyCudgel|Jolly|,252,,,4,252|||||,,,,,Grass]Copperajah||Leftovers|HeavyMetal|StealthRock,HeavySlam,KnockOff,Whirlwind|Impish|248,,232,,28,|||||,,,,,Steel]Tentacruel||BlackSludge|LiquidOoze|Toxic,RapidSpin,MirrorCoat,FlipTurn|Careful|248,,8,,252,|||||,,,,,Water]Rotom-Heat||HeavyDutyBoots|Levitate|WillOWisp,VoltSwitch,PainSplit,NightShade|Bold|248,,240,,8,12||,0,,,,|||,,,,,Electric"],
+ ["Slowking-Galar||AssaultVest|Regenerator|Psychic,Flamethrower,SludgeBomb,FutureSight|Calm|248,,,8,252,||,0,,,,|||,,,,,Poison]Clefable||Leftovers|MagicGuard|Moonblast,KnockOff,StealthRock,Moonlight|Bold|252,,252,,4,|||||,,,,,Fairy]Houndoom||HeavyDutyBoots|Unnerve|DarkPulse,Flamethrower,SolarBeam,NastyPlot|Timid|72,,,252,,184||,0,,,,|S||,,,,,Dark]Tera Captain|Serperior|Leftovers|Overgrow|KnockOff,TeraBlast,Synthesis,Coil|Jolly|40,,,,252,216|||S||,,,,,Rock]Palafin||Leftovers|ZerotoHero|JetPunch,DrainPunch,GrassKnot,BulkUp|Careful|248,8,,,252,|||||,,,,,Water]Sandslash||CustapBerry|SandRush|Earthquake,KnockOff,Spikes,RapidSpin|Careful|252,,64,,192,|||S||,,,,,Ground","Tera Captain|Latias|Leftovers|Levitate|CalmMind,MistBall,Recover,Thunderbolt|Timid|252,,,80,,176||,0,,,,|||,,,,,Steel]Iron Treads||AssaultVest|QuarkDrive|SupercellSlam,RapidSpin,IronHead,Earthquake|Jolly|72,228,,,,208|||||,,,,,Ground]Infernape||ChoiceScarf|Blaze|Switcheroo,Earthquake,FireBlast,StealthRock|Hasty|,64,,252,,192|||||,,,,,Fire]Gastrodon||RindoBerry|StormDrain|IceBeam,EarthPower,Recover,MirrorCoat|Calm|252,,36,60,160,||,0,,,,|||,,,,,Water]Vikavolt||HeavyDutyBoots|Levitate|VoltSwitch,BugBuzz,EnergyBall,StickyWeb|Modest|252,,,96,160,||,0,,,,|||,,,,,Bug]Tera Captain|Gyarados|ChoiceBand|Intimidate|Waterfall,Earthquake,TemperFlare,IronHead|Adamant|,252,12,,52,192|||||,,,,,Water"],
+ ["Meowscarada||ChoiceBand|Protean|FlowerTrick,KnockOff,AerialAce,Uturn|Jolly|120,252,,,,136|||||,,,,,Grass]Garchomp||ExpertBelt|RoughSkin|Earthquake,DragonTail,Spikes,FireFang|Adamant|84,252,,,,172|||||,,,,,Dragon]Tera Captain|OricorioSensu|HeavyDutyBoots|Dancer|RevelationDance,AirSlash,QuiverDance,Roost|Modest|12,,,252,,244||,0,,,,|||,,,,,Ground]Tera Captain|RagingBolt|MirrorHerb|Protosynthesis|Thunderclap,DragonPulse,CalmMind,VoltSwitch|Modest|252,,,68,,188||,20,,,,|||,,,,,Fire]Florges-White||Leftovers|FlowerVeil|Moonblast,Wish,Protect,Charm|Timid|252,,,80,,176||,0,,,,|||,,,,,Fairy]Gholdengo||ColburBerry|GoodasGold|ShadowBall,Recover,NastyPlot,FocusBlast|Timid|252,,,40,,216||,0,,,,|||,,,,,Steel","Infernape||ExpertBelt|IronFist|MachPunch,SwordsDance,GunkShot,Earthquake|Jolly|48,252,,,,208|||||,,,,,Fire]Tera Captain|Toxtricity|LifeOrb|PunkRock|ShiftGear,TeraBlast,SludgeWave,Overdrive|Modest|172,,,252,,84||,0,,,,|||,,,,,Ice]Palafin||ChoiceBand|ZerotoHero|FlipTurn,ZenHeadbutt,WaveCrash,JetPunch|Adamant|24,252,,,,232|||||,,,,,Water]Kingambit||ChopleBerry|SupremeOverlord|ZenHeadbutt,SuckerPunch,IronHead,KowtowCleave|Adamant|252,252,,,4,|||||,,,,,Dark]Tera Captain|Torterra|Leftovers|ShellArmor|Earthquake,Synthesis,StealthRock,SeedBomb|Careful|252,28,16,,212,|||||,,,,,Ground]Necrozma||SitrusBerry|PrismArmor|DragonDance,KnockOff,PhotonGeyser,XScissor|Adamant|16,252,,,,240|||||,,,,,Psychic"],
+ ["Alcremie||Leftovers|SweetVeil|DrainingKiss,CalmMind,Recover,Psychic|Bold|252,,252,4,,||,0,,,,|S||,,,,,Fairy]Tera Captain|Metagross|WeaknessPolicy|ClearBody|TeraBlast,Agility,IronHead,PsychicFangs|Naughty|80,252,,4,,172|||S||,,,,,Fairy]Dragalge||BlackSludge|Adaptability|Haze,FlipTurn,DracoMeteor,SludgeBomb|Modest|252,,,252,4,|||||,,,,,Poison]Urshifu||CobaBerry|UnseenFist|IcePunch,WickedBlow,SuckerPunch,DrainPunch|Adamant|252,252,,,4,|||||,,,,,Fighting]Toedscruel||FocusSash|MyceliumMight|Spikes,RapidSpin,KnockOff,DazzlingGleam|Careful|252,4,,,252,|||||,,,,,Ground]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,Psychic,Uturn,FocusBlast|Timid|,,,252,4,252|||||,,,,,Flying","Darkrai||ChoiceScarf|BadDreams|DarkPulse,SludgeBomb,FocusBlast,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Poison]Garchomp||LoadedDice|RoughSkin|SwordsDance,Earthquake,ScaleShot,FireFang|Jolly|,252,,,4,252|||||,,,,,Fire]Sneasler||ChoiceScarf|PoisonTouch|DireClaw,CloseCombat,Uturn,Switcheroo|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Azumarill|ChoiceBand|HugePower|PlayRough,AquaJet,Liquidation,KnockOff|Adamant|252,152,,,104,|||||,,,,,Water]Zapdos||HeavyDutyBoots|Static|Uturn,Discharge,Hurricane,Roost|Timid|252,,104,,,152|||||,,,,,Steel]Tera Captain|Espeon|ChoiceSpecs|MagicBounce|AlluringVoice,Psychic,ShadowBall,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy"],
+ ["Great Tusk||BoosterEnergy|Protosynthesis|HeadlongRush,IceSpinner,BrickBreak,RapidSpin|Jolly|,252,4,,,252|||||,,,,,Ground]Tera Captain|Latias|LightClay|Levitate|FutureSight,Wish,Reflect,LightScreen|Timid|248,,,132,,128||,0,,,,|||,,,,,Fairy]Greninja||ChoiceScarf|Protean|HydroPump,IceBeam,GrassKnot,Uturn|Naive|,4,,252,,252|||||,,,,,Water]Tinkaton||CustapBerry|Pickpocket|GigatonHammer,Endeavor,Endure,StealthRock|Jolly|,252,4,,,252|||||,,,,,Fairy]Rillaboom||Leftovers|GrassySurge|GrassyGlide,KnockOff,HighHorsepower,Uturn|Adamant|232,252,,,,24|||||,,,,,Grass]Tera Captain|Frosmoth|HeavyDutyBoots|IceScales|IceBeam,BugBuzz,TeraBlast,QuiverDance|Timid|,,,252,4,252||,0,,,,|||,,,,,Ground","Tera Captain|GreatTusk|RockyHelmet|Protosynthesis|HeadlongRush,StoneEdge,IceSpinner,RapidSpin|Jolly|8,252,,,,248|||||,,,,,Bug]Tornadus-Therian||YacheBerry|Regenerator|Taunt,KnockOff,BleakwindStorm,Uturn|Timid|248,,52,40,,168|||||,,,,,Flying]Samurott-Hisui||ChoiceScarf|Sharpness|FlipTurn,SacredSword,RazorShell,CeaselessEdge|Adamant|72,252,,,,184|||||,,,,,Water]Latios||SoulDew|Levitate|CalmMind,Psyshock,DragonPulse,FlipTurn|Modest|72,,,252,4,180|||||,,,,,Dragon]Tinkaton||OccaBerry|Pickpocket|PlayRough,SwordsDance,GigatonHammer,RockSlide|Jolly|56,252,,,,200|||||,,,,,Fairy]Tera Captain|Bellibolt|ColburBerry|Static|VoltSwitch,Toxic,MuddyWater,SlackOff|Bold|248,,156,48,,56||,0,,,,|||,,,,,Ghost"],
+ ["Flareon||ToxicOrb|Guts|FlareBlitz,TemperFlare,Facade,QuickAttack|Adamant|252,252,,,4,|||||,,,,,Dark]Tera Captain|Comfey|HeavyDutyBoots|Triage|DrainingKiss,Encore,KnockOff,Uturn|Timid|248,,,132,,128|||||,,,,,Fairy]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|Earthquake,TeraBlast,Crunch,Uturn|Jolly|56,252,,,,200|||S||,,,,,Poison]Latios||SoulDew|Levitate|LusterPurge,FutureSight,DracoMeteor,FlipTurn|Timid|,,4,252,,252|||S||,,,,,Fire]Iron Treads||LumBerry|QuarkDrive|Earthquake,HeavySlam,KnockOff,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Grass]Palafin-Hero||ChoiceBand|ZerotoHero|WaveCrash,JetPunch,CloseCombat,FlipTurn|Adamant|24,252,,,,232|||||,,,,,Fighting","Tera Captain|Entei|SilkScarf|InnerFocus|SacredFire,DoubleEdge,Trailblaze,ExtremeSpeed|Adamant|252,252,4,,,|||||,,,,,Normal]Meowscarada||AssaultVest|Overgrow|FlowerTrick,KnockOff,Uturn,TripleAxel|Jolly|,252,,,104,152|||||,,,,,Grass]Tera Captain|Keldeo|RockyHelmet|Justified|Surf,AuraSphere,PainSplit,FlipTurn|Timid|16,,252,,,240|||||,,,,,Psychic]Iron Treads||AssaultVest|QuarkDrive|RapidSpin,IceSpinner,Earthquake,VoltSwitch|Jolly|,252,,,4,252|||||,,,,,Ground]Enamorus-Therian||RockyHelmet|Overcoat|Moonblast,HealingWish,EarthPower,Tailwind|Bold|248,,68,,,192||,0,,,,|||,,,,,Fairy]Grafaiai||FocusSash|Prankster|Toxic,SuperFang,LowKick,Copycat|Adamant|,252,40,,,216|||||,,,,,Poison"],
+ ["Iron Valiant||AssaultVest|QuarkDrive|VacuumWave,Moonblast,KnockOff,Psychic|Timid|48,,,252,72,136|||||,,,,,Fairy]Tera Captain|Salamence|HeavyDutyBoots|Intimidate|DracoMeteor,Flamethrower,Roost,Hurricane|Modest|200,,16,252,16,24||,0,,,,|||,,,,,Water]Gastrodon||YacheBerry|StormDrain|Recover,EarthPower,Surf,MirrorCoat|Bold|192,,76,,240,||,0,,,,|||,,,,,Water]Glimmora||ChoiceScarf|ToxicDebris|PowerGem,SludgeWave,EarthPower,Memento|Timid|92,,,252,,164||,0,,,,|||,,,,,Rock]Tera Captain|Armarouge|SitrusBerry|WeakArmor|CalmMind,IronDefense,StoredPower,Flamethrower|Timid|240,,16,56,40,156||,0,,,,|||,,,,,Water]Gholdengo||ShucaBerry|GoodasGold|ThunderWave,ShadowBall,MakeItRain,Recover|Calm|240,,20,12,220,16||,0,,,,|||,,,,,Steel","Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,IceBeam,Uturn|Modest|24,,,252,4,228|||||,,,,,Ice]Cyclizar||ChopleBerry|Regenerator|ShedTail,KnockOff,Overheat,DracoMeteor|Timid|248,,,,44,216|||||,,,,,Dragon]Jirachi||WeaknessPolicy|SereneGrace|CalmMind,StoredPower,DrainPunch,Wish|Timid|248,,,,8,252|||||,,,,,Steel]Weezing-Galar||PayapaBerry|Levitate|StrangeSteam,Flamethrower,PainSplit,Haze|Careful|248,,8,,252,||,0,,,,|||,,,,,Poison]Tera Captain|Landorus|LifeOrb|SheerForce|NastyPlot,EarthPower,SludgeWave,FocusBlast|Timid|8,,,252,,248||,0,,,,|||,,,,,Grass]Cinderace||HeavyDutyBoots|Libero|PyroBall,DoubleEdge,SwordsDance,CourtChange|Jolly|20,252,,,,236|||||,,,,,Fire"],
+ ["Tornadus-Therian||LifeOrb|Regenerator|BleakwindStorm,GrassKnot,HeatWave,Taunt|Timid|88,,,252,,168||,0,,,,|||,,,,,Flying]Latios||SoulDew|Levitate|Psyshock,DracoMeteor,Memento,Recover|Timid|,,,252,4,252||,0,,,,|||,,,,,Dragon]Tera Captain|Moltres|HeavyDutyBoots|FlameBody|Hurricane,ScorchingSands,Uturn,Roost|Timid|184,,,192,,132|||||,,,,,Flying]Tera Captain|UrshifuRapidStrike|LumBerry|UnseenFist|CloseCombat,SurgingStrikes,Trailblaze,SwordsDance|Adamant|152,108,,,200,48|||||,,,,,Water]Sandy Shocks||BoosterEnergy|Protosynthesis|Spikes,Thunderbolt,EarthPower,ThunderWave|Timid|,,,,,224||,0,,,,|||,,,,,Electric]Kingambit||AirBalloon|SupremeOverlord|KowtowCleave,IronHead,SuckerPunch,SwordsDance|Adamant|252,88,,,4,164|||||,,,,,Dark","Weezing-Galar||BlackSludge|Levitate|ToxicSpikes,PainSplit,WillOWisp,Thunderbolt|Calm|220,,,4,32,252||,0,,,,|||,,,,,Poison]Tera Captain|Latias|KeeBerry|Levitate|IceBeam,Thunderbolt,CalmMind,Recover|Timid|252,,4,,,252||,0,,,,|||,,,,,Electric]Volcanion||ShucaBerry|WaterAbsorb|WillOWisp,SteamEruption,Flamethrower,StoneEdge|Rash|252,,48,,,172|||||,,,,,Fire]Urshifu||ChoiceScarf|UnseenFist|Uturn,WickedBlow,CloseCombat,StoneEdge|Adamant|232,252,,,,24|||||,,,,,Fighting]Excadrill||AssaultVest|MoldBreaker|RockSlide,Earthquake,RapidSpin,IronHead|Careful|100,236,,,76,96|||||,,,,,Ground]Tera Captain|IronThorns|BoosterEnergy|QuarkDrive|DragonDance,Crunch,SupercellSlam,LowKick|Adamant|,252,,,4,224|||||,,,,,Dark"],
+ ["Darkrai||SitrusBerry|BadDreams|DarkPulse,FocusBlast,NastyPlot,ThroatChop|Modest|32,,,252,,224|||||,,,,,Dark]Iron Treads||HeavyDutyBoots|QuarkDrive|HeavySlam,RapidSpin,IronDefense,BodyPress|Impish|,,248,,172,88|||||,,,,,Ground]Slowking-Galar||HeavyDutyBoots|Regenerator|ChillyReception,Toxic,FutureSight,ThunderWave|Calm|252,,32,,224,||,0,,,,|||,,,,,Poison]Tera Captain|Kilowattrel|ChoiceScarf|Competitive|TeraBlast,VoltSwitch,Hurricane,Endeavor|Modest|28,,,252,,228||,0,,,,|||,,,,,Flying]Swampert||Leftovers|Torrent|StealthRock,FlipTurn,Earthquake,KnockOff|Adamant|252,48,208,,,|||||,,,,,Water]Hariyama||FlameOrb|Guts|CloseCombat,HeavySlam,KnockOff,RockSlide|Adamant|160,252,,,,96|||||,,,,,Fighting","Tera Captain|Sinistcha|LumBerry|Heatproof|NastyPlot,ShadowBall,MatchaGotcha,StrengthSap|Modest|160,,,252,,96||,0,,,,|||,,,,,Fairy]Tera Captain|GreatTusk|RockyHelmet|Protosynthesis|BodyPress,StealthRock,KnockOff,RapidSpin|Impish|72,,252,,,184|||||,,,,,Electric]Sylveon||WeaknessPolicy|Pixilate|DrainingKiss,CalmMind,QuickAttack,StoredPower|Modest|80,,,252,,176|||||,,,,,Fairy]Cyclizar||ChoiceScarf|Regenerator|ShedTail,DracoMeteor,Overheat,HyperVoice|Timid|112,,,252,4,140||,0,,,,|||,,,,,Steel]Samurott-Hisui||AssaultVest|Sharpness|CeaselessEdge,KnockOff,FlipTurn,XScissor|Jolly|,252,,,4,252|||||,,,,,Fighting]Munkidori||FocusSash|ToxicChain|FakeOut,SludgeWave,FocusBlast,PartingShot|Timid|,,,252,4,252|||||,,,,,Flying"],
+ ["Gholdengo||ColburBerry|GoodasGold|Recover,ThunderWave,Hex,Thunderbolt|Modest|248,,16,52,,192||,0,,,,|||,,,,,Bug]Samurott-Hisui||LumBerry|Sharpness|CeaselessEdge,KnockOff,FlipTurn,SuckerPunch|Adamant|240,252,,,,16|||||,,,,,Bug]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Protect,SwordsDance,Facade,Earthquake|Impish|248,8,148,,,104|||||,,,,,Water]Tera Captain|Jolteon|Leftovers|VoltAbsorb|CalmMind,Thunderbolt,StoredPower,TeraBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Ribombee||FocusSash|ShieldDust|StickyWeb,StunSpore,LightScreen,Reflect|Timid|248,,,,8,252||,0,,,,|||,,,,,Bug]Skeledirge||ColburBerry|Unaware|SlackOff,TorchSong,EarthPower,ShadowBall|Calm|248,,,8,252,||,0,,,,|||,,,,,Bug","Tera Captain|Latias|WeaknessPolicy|Levitate|Agility,CalmMind,ShadowBall,StoredPower|Timid|248,,176,28,,56||,0,,,,|S||,,,,,Steel]Tera Captain|Bellibolt|LightClay|Static|VoltSwitch,SlackOff,LightScreen,Reflect|Calm|248,,8,,252,||,0,,,,|||,,,,,Fairy]Scizor||HeavyDutyBoots|Technician|Defog,BulletPunch,Uturn,KnockOff|Adamant|224,252,,,,32|||||,,,,,Bug]Gliscor||YacheBerry|PoisonHeal|Uturn,Spikes,StealthRock,ToxicSpikes|Impish|212,,252,,,44|||S||,,,,,Ground]Greninja-Bond||HeavyDutyBoots|BattleBond|NightSlash,Uturn,IceBeam,LowKick|Lonely|,252,,104,,152|||||,,,,,Water]Thwackey||ChoiceBand|GrassySurge|GrassyGlide,Uturn,KnockOff,WoodHammer|Adamant|248,252,,,8,|||S||,,,,,Grass"],
+ ["Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,PowerWhip,SwordsDance,Synthesis|Jolly|,252,,,4,252|||||,,,,,Water]Darkrai||LifeOrb|BadDreams|DarkPulse,Psychic,SludgeBomb,IceBeam|Timid|112,,8,252,,136||,0,,,,|||,,,,,Dark]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,Psyshock,ShadowBall,DestinyBond|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Uxie||RockyHelmet|Levitate|FoulPlay,Uturn,StealthRock,PainSplit|Impish|248,,252,,8,|||||,,,,,Psychic]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,Flamethrower,CalmMind,RapidSpin|Modest|144,,,252,,112|||||,,,,,Stellar]Muk||BlackSludge|PoisonTouch|PoisonJab,KnockOff,ZenHeadbutt,PainSplit|Careful|248,,8,,252,|||||,,,,,Poison","Iron Moth||ChoiceScarf|QuarkDrive|Uturn,SludgeWave,Discharge,FieryDance|Timid|,,,252,4,252|||||,,,,,Fire]Volbeat||HeavyDutyBoots|Prankster|Roost,Encore,Uturn,ThunderWave|Careful|252,,4,,252,|||||,,,,,Bug]Tera Captain|IronHands|RockyHelmet|QuarkDrive|DrainPunch,VoltSwitch,Rest,SleepTalk|Careful|,4,252,,252,|||||,,,,,Dragon]Garchomp||FocusSash|RoughSkin|ScaleShot,Earthquake,SwordsDance,Spikes|Jolly|,252,,,4,252|||||,,,,,Dragon]Mandibuzz||HeavyDutyBoots|BigPecks|Roost,Uturn,Toxic,Defog|Careful|248,,8,,252,|||||,,,,,Dark]Tera Captain|Polteageist|ChoiceSpecs|WeakArmor|ShadowBall,TeraBlast,GigaDrain,Memento|Modest|,,,252,4,252||,0,,,,|||,,,,,Fairy"],
+ ["Latios||WeaknessPolicy|Levitate|Psyshock,AuraSphere,Substitute,Agility|Modest|48,,,252,4,204||,0,,,,|||,,,,,Dragon]Tera Captain|Serperior|LightClay|Contrary|LeafStorm,Reflect,LightScreen,Taunt|Timid|200,,4,104,,200||,0,,,,|||,,,,,Ghost]Palafin||ChoiceBand|ZerotoHero|WaveCrash,JetPunch,FlipTurn,DrainPunch|Adamant|40,216,,,,252|||||,,,,,Water]Tera Captain|Umbreon|MentalHerb|Synchronize|AlluringVoice,Roar,Wish,Protect|Calm|252,,4,,252,||,0,,,,|||,,,,,Fairy]Heatran||Leftovers|FlameBody|LavaPlume,PowerGem,StealthRock,WillOWisp|Bold|252,,216,,,40||,0,,,,|||,,,,,Fire]Donphan||ExpertBelt|Sturdy|Earthquake,IceShard,KnockOff,RapidSpin|Adamant|104,252,8,,144,|||||,,,,,Ground","Iron Bundle||ChoiceSpecs|QuarkDrive|HydroPump,FlipTurn,IceBeam,FreezeDry|Modest|56,,,252,,200|||||,,,,,Ice]Enamorus||FairyFeather|CuteCharm|DrainingKiss,Moonblast,EarthPower,Substitute|Modest|132,,,252,,124||,0,,,,|||,,,,,Fairy]Clodsire||MentalHerb|WaterAbsorb|Recover,Toxic,Earthquake,StealthRock|Careful|248,8,,,252,|||||,,,,,Poison]Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|BulkUp,Earthquake,IceSpinner,TeraBlast|Jolly|,4,,,252,252|||||,,,,,Grass]Kingambit||ProtectivePads|SupremeOverlord|SuckerPunch,SwordsDance,IronHead,KowtowCleave|Adamant|96,160,,,252,|||||,,,,,Dark]Tera Captain|Cinccino|LoadedDice|Technician|TailSlap,BulletSeed,TeraBlast,TidyUp|Jolly|,252,4,,,252|||||,,,,,Ground"],
+ ["Tera Captain|Excadrill|ChoiceScarf|MoldBreaker|Earthquake,StealthRock,IronHead,ThroatChop|Jolly|16,252,,,,240|||||,,,,,Ground]Latios||ExpertBelt|Levitate|DragonDance,AuraSphere,Earthquake,DracoMeteor|Naive|,4,,252,,252|||||,,,,,Dragon]Tera Captain|Milotic|FlameOrb|MarvelScale|Scald,AlluringVoice,Recover,Haze|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Terapagos||HeavyDutyBoots|TeraShift|RapidSpin,BodyPress,EarthPower,Toxic|Bold|252,,252,,4,|||||,,,,,Stellar]Tyranitar||AirBalloon|SandStream|StealthRock,IceBeam,KnockOff,EarthPower|Naive|,4,,252,,252|||||,,,,,Rock]Chesnaught||RockyHelmet|Bulletproof|BodyPress,Synthesis,KnockOff,LeechSeed|Impish|252,4,252,,,|||||,,,,,Grass","Tera Captain|Latias|HeavyDutyBoots|Levitate|BatonPass,Surf,ShadowBall,Recover|Timid|252,,176,,,80||,0,,,,|||,,,,,Water]Weavile||HeavyDutyBoots|Pressure|KnockOff,TripleAxel,IceShard,SwordsDance|Jolly|120,252,,,,136|||||,,,,,Dark]Quaquaval||ChoiceBand|Moxie|AquaStep,TripleAxel,CloseCombat,WaveCrash|Adamant|104,252,,,,152|||||,,,,,Water]Heatran||Leftovers|FlameBody|MagmaStorm,FlashCannon,Taunt,StealthRock|Calm|248,,,,216,44||,0,,,,|||,,,,,Fire]Tera Captain|SinistchaMasterpiece|HeavyDutyBoots|Heatproof|NastyPlot,MatchaGotcha,ShadowBall,StrengthSap|Bold|248,,160,,,100||,0,,,,|||,,,,,Dark]Donphan||Leftovers|Sturdy|Earthquake,IceShard,KnockOff,RapidSpin|Impish|248,,172,,,88|||||,,,,,Ground"],
+ ["Tornadus||SharpBeak|Prankster|NastyPlot,RainDance,BleakwindStorm,SludgeWave|Timid|88,,,252,,168||,0,,,,|||,,,,,Flying]Meowscarada||ChoiceScarf|Protean|KnockOff,Uturn,TripleAxel,FlowerTrick|Jolly|,252,4,,,252|||||,,,,,Grass]Tera Captain|Latias|WeaknessPolicy|Levitate|DrainingKiss,StoredPower,CalmMind,Agility|Modest|140,,,252,,116||,0,,,,|||,,,,,Fairy]Primarina||Leftovers|Torrent|CalmMind,DrainingKiss,Surf,Moonblast|Bold|252,,252,4,,||,0,,,,|||,,,,,Water]Iron Treads||BoosterEnergy|QuarkDrive|Earthquake,Endeavor,StealthRock,RapidSpin|Jolly|48,252,,,,208|||||,,,,,Ground]Rotom-Heat||StickyBarb|Levitate|VoltSwitch,Overheat,Trick,ThunderWave|Bold|252,,220,,,36||,0,,,,|||,,,,,Electric","Great Tusk||ExpertBelt|Protosynthesis|CloseCombat,IceSpinner,RapidSpin,SupercellSlam|Jolly|252,4,,,,252|||||,,,,,Ground]Torkoal||HeatRock|Drought|Yawn,StealthRock,Overheat,RapidSpin|Calm|248,,,8,252,|||||,,,,,Fire]Gouging Fire||Leftovers|Protosynthesis|HeatCrash,MorningSun,DragonClaw,DragonDance|Adamant|72,252,,,40,144|||||,,,,,Fire]Tera Captain|Mew|ChoiceBand|Synchronize|Uturn,Trick,CloseCombat,PsychicFangs|Adamant|80,252,,,,176|||||,,,,,Fairy]Tera Captain|Venusaur|LifeOrb|Chlorophyll|SludgeBomb,TeraBlast,WeatherBall,GigaDrain|Modest|140,,4,252,,112||,0,,,,|||,,,,,Rock]Primarina||AssaultVest|Torrent|AlluringVoice,PsychicNoise,FlipTurn,IceBeam|Modest|252,,,252,4,|||||,,,,,Water"],
+ ["Grafaiai||HeavyDutyBoots|PoisonTouch|KnockOff,PoisonJab,Uturn,SwordsDance|Jolly|248,,,,84,176|||||,,,,,Poison]Tera Captain|Latias|Leftovers|Levitate|CalmMind,AuraSphere,StoredPower,Recover|Timid|248,,160,,,100||,0,,,,|||,,,,,Poison]Clefable||LifeOrb|MagicGuard|CalmMind,Flamethrower,Moonblast,Moonlight|Modest|252,,240,16,,||,0,,,,|||,,,,,Fairy]Tinkaton||Leftovers|MoldBreaker|StealthRock,Encore,KnockOff,GigatonHammer|Careful|248,,8,,252,|||||,,,,,Fairy]Meowscarada||HeavyDutyBoots|Protean|FlowerTrick,KnockOff,TripleAxel,Uturn|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Umbreon|Leftovers|InnerFocus|FoulPlay,Toxic,Wish,Protect|Calm|252,,4,,252,||,0,,,,|||,,,,,Water","Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,AuraSphere,CalmMind,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Tera Captain|Gholdengo|ChoiceScarf|GoodasGold|Trick,NastyPlot,MakeItRain,TeraBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Tera Captain|Entei|ChoiceBand|Pressure|SacredFire,IronHead,StompingTantrum,TeraBlast|Naive|,252,,4,,252|||||,,,,,Fighting]Manaphy||Leftovers|Hydration|TailGlow,IceBeam,Surf,RainDance|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Dragonite||ChoiceSpecs|Multiscale|Hurricane,Flamethrower,DracoMeteor,FocusBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Dragon]Morgrem||LightClay|Prankster|PartingShot,Reflect,LightScreen,ThunderWave|Calm|252,,4,,252,||,0,,,,|||,,,,,Dark"],
+ ["Meowscarada||HeavyDutyBoots|Overgrow|FlowerTrick,KnockOff,Trailblaze,TripleAxel|Jolly|,252,,,4,252|||||,,,,,Grass]Honchkrow||ScopeLens|SuperLuck|DarkPulse,HeatWave,AirCutter,Tailwind|Timid|216,,,252,4,36||,0,,,,|||,,,,,Dark]Sandy Shocks||BoosterEnergy|Protosynthesis|Thunderbolt,EarthPower,StealthRock,Spikes|Timid|48,,,208,,252||,0,,,,|||,,,,,Electric]Tentacruel||BlackSludge|ClearBody|Surf,Toxic,KnockOff,ToxicSpikes|Gentle|252,,,,240,16|||||,,,,,Water]Tera Captain|Latias|RockyHelmet|Levitate|MistBall,DrainingKiss,CalmMind,Thunderbolt|Timid|248,,188,,,72||,0,,,,|||,,,,,Electric]Gholdengo||ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,Trick,Thunderbolt|Modest|252,,,56,,200||,0,,,,|||,,,,,Steel","Iron Bundle||HeavyDutyBoots|QuarkDrive|FlipTurn,HydroPump,FreezeDry,Encore|Timid|92,,,252,4,160|||||,,,,,Ice]Great Tusk||AssaultVest|Protosynthesis|RapidSpin,KnockOff,HeavySlam,HeadlongRush|Jolly|252,,,,24,232|||||,,,,,Ground]Crocalor||Eviolite|Unaware|SlackOff,Flamethrower,Roar,WillOWisp|Calm|252,,52,4,200,||,0,,,,|||,,,,,Fire]Pecharunt||ChoiceScarf|PoisonPuppeteer|Curse,ShadowBall,MalignantChain,PartingShot|Timid|24,,,252,4,228||,0,,,,|||,,,,,Poison]Tera Captain|Mew|LumBerry|Synchronize|DragonDance,PsychicFangs,KnockOff,DrainPunch|Adamant|16,252,,,4,236|||||,,,,,Poison]Grimmsnarl||LightClay|Prankster|LightScreen,Reflect,Taunt,PartingShot|Calm|252,,4,,252,||,0,,,,|||,,,,,Dark"],
+ ["Zoroark-Hisui||FocusSash|Illusion|WillOWisp,BitterMalice,FocusBlast,Uturn|Modest|4,,,252,,252|||S||,,,,,Normal]Tera Captain|Haxorus|Leftovers|MoldBreaker|DragonDance,IronHead,Outrage,Earthquake|Adamant|4,252,,,,252|||S||,,,,,Steel]Hatterene||AssaultVest|MagicBounce|DrainingKiss,MysticalFire,Psychic,Nuzzle|Bold|4,,252,252,,|||S||,,,,,Psychic]Iron Hands||AssaultVest|QuarkDrive|FakeOut,DrainPunch,IcePunch,SupercellSlam|Adamant|84,132,40,,252,|||S||,,,,,Fighting]Mareanie||Eviolite|Regenerator|Recover,Liquidation,Toxic,Haze|Careful|4,,252,,252,|||S||,,,,,Poison]Darkrai||LifeOrb|BadDreams|ThunderWave,DarkPulse,SludgeBomb,IceBeam|Timid|,,,252,,252||,0,,,,|||,,,,,Dark","Slowking-Galar||ShucaBerry|Regenerator|Psychic,SludgeBomb,IceBeam,SlackOff|Calm|248,,184,52,16,8||,0,,,,|||,,,,,Poison]Weavile||LifeOrb|Pressure|TripleAxel,IceShard,KnockOff,SwordsDance|Jolly|,252,4,,,252|||||,,,,,Dark]Mandibuzz||RockyHelmet|BigPecks|FoulPlay,Uturn,Toxic,Roost|Impish|200,,216,,,92|||||,,,,,Dark]Tera Captain|Heatran|AssaultVest|FlameBody|MagmaStorm,FlashCannon,EarthPower,TeraBlast|Modest|248,,,96,48,116||,0,,,,|||,,,,,Fairy]Tera Captain|Gliscor|ChoiceScarf|PoisonHeal|Uturn,Earthquake,KnockOff,TeraBlast|Jolly|88,252,,,,168|||||,,,,,Fairy]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|Uturn,IvyCudgel,PlayRough,Encore|Jolly|,252,4,,,252|||||,,,,,Water"],
+ ["Tera Captain|Manaphy|Leftovers|Hydration|TakeHeart,Scald,AcidArmor,StoredPower|Calm|252,,4,,252,||,0,,,,|||,,,,,Water]Tornadus-Therian||LifeOrb|Regenerator|BleakwindStorm,NastyPlot,GrassKnot,FocusBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Flying]Weezing-Galar||BlackSludge|Levitate|StrangeSteam,SludgeBomb,Defog,PainSplit|Calm|252,,,,252,||,0,,,,|||,,,,,Poison]Donphan||AssaultVest|Sturdy|KnockOff,Earthquake,StoneEdge,RapidSpin|Adamant|248,252,,,8,|||||,,,,,Ground]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|Trailblaze,SwordsDance,IvyCudgel,KnockOff|Jolly|,252,,,4,252|||||,,,,,Fire]Raging Bolt||ChoiceSpecs|Protosynthesis|VoltSwitch,DracoMeteor,Thunderbolt,DragonPulse|Modest|252,,,252,4,||,20,,,,|||,,,,,Electric","Iron Valiant||LifeOrb|QuarkDrive|AuraSphere,Psychic,Moonblast,Thunderbolt|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Sceptile||EjectPack|Overgrow|Acrobatics,LeafStorm,Earthquake,ShedTail|Hasty|,252,,4,,252|||||,,,,,Grass]Tera Captain|Weavile|HeavyDutyBoots|Pressure|TripleAxel,KnockOff,LowKick,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Dark]Latios||ChoiceScarf|Levitate|LusterPurge,DragonPulse,FlipTurn,DracoMeteor|Timid|,,,252,4,252|||||,,,,,Dragon]Tera Captain|Moltres|HeavyDutyBoots|FlameBody|Roost,Flamethrower,Uturn,ScorchingSands|Modest|248,,,252,8,|||||,,,,,Dragon]Clodsire||BlackSludge|WaterAbsorb|PoisonJab,Recover,Haze,Earthquake|Careful|252,4,,,252,|||||,,,,,Poison"],
+ ["Tera Captain|Ceruledge|AssaultVest|FlashFire|BitterBlade,Poltergeist,CloseCombat,TeraBlast|Hasty|,252,,4,,252|||||,,,,,Fairy]Tera Captain|Hydrapple|AssaultVest|Regenerator|LeafStorm,DracoMeteor,GigaDrain,EarthPower|Modest|248,,,252,8,||,0,,,,|||,,,,,Water]Dartrix||Eviolite|Overgrow|LeafBlade,KnockOff,Roost,Haze|Careful|248,,,,252,8|||||,,,,,Grass]Rotom-Wash||ChoiceScarf|Levitate|HydroPump,VoltSwitch,PainSplit,Trick|Timid|248,,,252,8,||,0,,,,|||,,,,,Electric]Greninja||LifeOrb|Protean|Surf,DarkPulse,SludgeWave,WaterShuriken|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Iron Treads||SoftSand|QuarkDrive|Earthquake,IronHead,VoltSwitch,StealthRock|Jolly|42,252,4,,,210|||||,,,,,Ground","Ursaluna-Bloodmoon||AssaultVest|MindsEye|BloodMoon,HyperVoice,EarthPower,VacuumWave|Modest|252,,,252,4,||,0,,,,|||,,,,,Ground]Tera Captain|WalkingWake|Leftovers|Protosynthesis|Substitute,HydroSteam,Flamethrower,DragonPulse|Timid|4,,,252,,252||,0,,,,|||,,,,,Water]Torkoal||HeatRock|Drought|StealthRock,SunnyDay,RapidSpin,LavaPlume|Calm|248,,40,,220,|||||,,,,,Fire]Weezing-Galar||RockyHelmet|Levitate|Defog,Flamethrower,SludgeBomb,Toxic|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Bronzong||AssaultVest|Levitate|BodyPress,FlashCannon,Earthquake,PsychicNoise|Relaxed|252,,216,,40,|||||,,,,,Steel]Chi-Yu||ChoiceScarf|BeadsofRuin|DarkPulse,Flamethrower,Memento,Psychic|Modest|128,,,252,32,96||,0,,,,|||,,,,,Dark"],
+ ["Slowking-Galar||HeavyDutyBoots|Regenerator|FoulPlay,ChillyReception,FutureSight,SludgeBomb|Sassy|252,,4,,252,||,0,,,,|S||,,,,,Poison]Tera Captain|UrshifuRapidStrike|MysticWater|UnseenFist|AquaJet,Uturn,SurgingStrikes,CloseCombat|Adamant|80,252,,,,176|||||,,,,,Water]Weavile||HeavyDutyBoots|Pickpocket|IceShard,KnockOff,TripleAxel,Substitute|Jolly|120,252,,,,136|||||,,,,,Dark]Rillaboom||AssaultVest|GrassySurge|GrassyGlide,KnockOff,Uturn,DrainPunch|Adamant|76,252,,,4,176|||S||,,,,,Grass]Tera Captain|Armarouge|ChoiceSpecs|WeakArmor|ArmorCannon,Trick,Psyshock,ShadowBall|Modest|4,,,252,,252||,0,,,,|S||,,,,,Ghost]Forretress||RockyHelmet|Sturdy|StealthRock,VoltSwitch,RapidSpin,BodyPress|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Bug","Orthworm||SitrusBerry|EarthEater|HeavySlam,StealthRock,Spikes,ShedTail|Relaxed|252,4,252,,,||,,,,,0|||,,,,,Steel]Blaziken||MuscleBand|SpeedBoost|FlareBlitz,CloseCombat,Uturn,SwordsDance|Adamant|,252,12,,,244|||||,,,,,Fire]Tera Captain|Toxtricity|FocusSash|PunkRock|Boomburst,Overdrive,Taunt,Endeavor|Modest|,,4,252,,252||,0,,,,|||,,,,,Normal]Palafin-Hero||Leftovers|ZerotoHero|JetPunch,DrainPunch,IcePunch,BulkUp|Adamant|252,,160,,,96|||||,,,,,Water]Latios||ChoiceScarf|Levitate|DracoMeteor,LusterPurge,FlipTurn,Trick|Timid|,,104,252,,152|||||,,,,,Dragon]Tera Captain|Clefable|RockyHelmet|MagicGuard|TeraBlast,Moonlight,CosmicPower,CalmMind|Bold|252,,252,4,,||,0,,,,|||,,,,,Dragon"],
+ ["Palafin-Hero||RindoBerry|ZerotoHero|BulkUp,DrainPunch,JetPunch,Acrobatics|Adamant|248,84,24,,12,140|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Uturn,HeatWave,KnockOff,Hurricane|Timid|216,,,108,92,92|||||,,,,,Flying]Tera Captain|RagingBolt|SitrusBerry|Protosynthesis|CalmMind,DragonPulse,Thunderbolt,Thunderclap|Modest|56,,156,224,72,||,20,,,,|||,,,,,Fairy]Tinkaton||LumBerry|OwnTempo|StealthRock,GigatonHammer,IceHammer,PlayRough|Adamant|64,252,,,4,188|||||,,,,,Fairy]Terapagos||HeavyDutyBoots|TeraShift|RapidSpin,TeraStarstorm,Flamethrower,CalmMind|Modest|56,,,252,,200|||||,,,,,Stellar]Tera Captain|Torterra|CustapBerry|Overgrow|Endure,HeadlongRush,ShellSmash,SeedBomb|Adamant|88,252,4,,,164|||||,,,,,Fairy","Darkrai||Leftovers|BadDreams|DarkPulse,IceBeam,WillOWisp,Taunt|Timid|120,,4,152,8,224||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,Encore,Uturn|Jolly|156,168,8,,,176|||||,,,,,Water]Kyurem||ChoiceScarf|Pressure|DracoMeteor,IceBeam,FreezeDry,EarthPower|Timid|24,,4,252,4,224||,0,,,,|||,,,,,Dragon]Klefki||StickyBarb|Prankster|PlayRough,Spikes,Switcheroo,ThunderWave|Careful|252,4,,,252,|||||,,,,,Steel]Landorus-Therian||Leftovers|Intimidate|Earthquake,StoneEdge,Substitute,Uturn|Adamant|248,16,,,116,128|||||,,,,,Ground]Tera Captain|Eelektross|AssaultVest|Levitate|Thunderbolt,Flamethrower,FlashCannon,DragonTail|Quiet|232,,,216,60,|||||,,,,,Steel"],
+ ["Enamorus-Therian||KebiaBerry|Overcoat|DrainingKiss,IronDefense,EarthPower,CalmMind|Bold|248,,252,8,,||,0,,,,|||,,,,,Fairy]Pecharunt||RockyHelmet|PoisonPuppeteer|PartingShot,Recover,Hex,MalignantChain|Modest|252,,,236,,20||,0,,,,|||,,,,,Poison]Tera Captain|Armarouge|HeavyDutyBoots|WeakArmor|ArmorCannon,CalmMind,ScorchingSands,Psychic|Modest|,,,252,4,252||,0,,,,|||,,,,,Fighting]Dewgong||RockyHelmet|ThickFat|KnockOff,FlipTurn,IceBeam,Encore|Impish|248,,252,,8,|||||,,,,,Water]Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|StompingTantrum,SwordsDance,IvyCudgel,HornLeech|Jolly|64,252,,,,192|||||,,,,,Rock]Ursaluna-Bloodmoon||ChopleBerry|MindsEye|CalmMind,BloodMoon,EarthPower,Moonlight|Modest|252,,172,76,,8||,0,,,,|||,,,,,Ground","Garchomp||LoadedDice|RoughSkin|SwordsDance,StealthRock,Earthquake,ScaleShot|Jolly|,252,32,,,224|||||,,,,,Dragon]Urshifu||FocusSash|UnseenFist|CloseCombat,WickedBlow,SuckerPunch,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Fighting]Rotom-Wash||Leftovers|Levitate|VoltSwitch,ThunderWave,HydroPump,PainSplit|Calm|252,,,16,240,||,0,,,,|||,,,,,Electric]Tsareena||HeavyDutyBoots|QueenlyMajesty|RapidSpin,KnockOff,PowerWhip,Uturn|Adamant|212,136,160,,,|||||,,,,,Grass]Tera Captain|Revavroom|LifeOrb|Filter|ShiftGear,TeraBlast,IronHead,HighHorsepower|Adamant|,252,,,4,252|||||,,,,,Water]Typhlosion-Hisui||ChoiceScarf|Frisk|Eruption,Flamethrower,InfernalParade,FocusBlast|Modest|,,4,252,,252||,0,,,,|||,,,,,Fire"],
+ ["Tera Captain|Sceptile|SitrusBerry|Overgrow|ShedTail,Roar,UpperHand,LeafStorm|Jolly|80,252,,,,176|||||,,,,,Psychic]Roaring Moon||BoosterEnergy|Protosynthesis|ThroatChop,DragonDance,Earthquake,IronHead|Jolly|,156,16,,152,184|||||,,,,,Dragon]Donphan||CustapBerry|Sturdy|StealthRock,RapidSpin,Endeavor,KnockOff|Impish|252,84,40,,,132|||||,,,,,Ground]Iron Moth||PowerHerb|QuarkDrive|MeteorBeam,Psychic,SludgeWave,FieryDance|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Tera Captain|Annihilape|Leftovers|Defiant|Taunt,BulkUp,RageFist,DrainPunch|Adamant|164,252,,,,92|||||,,,,,Steel]Skarmory||RockyHelmet|Sturdy|Taunt,Whirlwind,Spikes,BraveBird|Impish|252,,248,,,8|||||,,,,,Steel","Palafin||ChoiceSpecs|ZerotoHero|Boomburst,Surf,JetPunch,IceBeam|Hasty|,80,,252,,176|||||,,,,,Water]Tera Captain|Latias|Leftovers|Levitate|CalmMind,Psychic,IceBeam,Recover|Timid|252,,120,36,4,96||,0,,,,|||,,,,,Fairy]Meowscarada||ChoiceScarf|Protean|KnockOff,Uturn,PlayRough,FlowerTrick|Jolly|24,252,,,,232|||||,,,,,Grass]Clodsire||Leftovers|Unaware|Yawn,Recover,Earthquake,StealthRock|Careful|252,4,,,252,|||||,,,,,Poison]Tera Captain|Comfey|LifeOrb|Triage|CalmMind,DrainingKiss,AlluringVoice,TeraBlast|Modest|252,,,252,4,||,0,,,,|||,,,,,Water]Typhlosion-Hisui||HeavyDutyBoots|Frisk|WillOWisp,InfernalParade,Earthquake,Roar|Timid|252,40,,,,216|||||,,,,,Fire"],
+ ["Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,HydroPump,IceBeam,FlipTurn|Timid|120,,,252,,136|||||,,,,,Ice]Enamorus||HeavyDutyBoots|CuteCharm|Moonblast,EarthPower,CalmMind,HealingWish|Timid|40,,,252,,216||,0,,,,|||,,,,,Fairy]Tera Captain|Annihilape|HeavyDutyBoots|InnerFocus|RageFist,DrainPunch,BulkUp,Substitute|Careful|248,,,,120,140|||||,,,,,Water]Bronzong||Leftovers|Levitate|IronDefense,CalmMind,BodyPress,StoredPower|Bold|252,,252,4,,||,0,,,,|||,,,,,Steel]Tera Captain|Ribombee|LightClay|ShieldDust|StickyWeb,Moonblast,Reflect,LightScreen|Timid|24,,,252,,232||,0,,,,|||,,,,,Fire]Donphan||HeavyDutyBoots|Sturdy|KnockOff,Earthquake,IceSpinner,RapidSpin|Adamant|248,252,,,,8|||||,,,,,Ground","Brambleghast||ColburBerry|WindRider|RapidSpin,Poltergeist,PowerWhip,Curse|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Jirachi|Leftovers|SereneGrace|Protect,Wish,Thunderbolt,Psychic|Calm|252,,,,224,32||,0,,,,|||,,,,,Steel]Samurott-Hisui||ChoiceScarf|Sharpness|CeaselessEdge,RazorShell,FlipTurn,SacredSword|Jolly|,252,,,4,252|||||,,,,,Water]Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,DrainPunch,ShadowClaw,DestinyBond|Jolly|,252,,,4,252|||||,,,,,Fairy]Tera Captain|SandyShocks|BoosterEnergy|Protosynthesis|IronDefense,Thunderbolt,TeraBlast,StealthRock|Timid|,,48,208,,252||,0,,,,|||,,,,,Flying]Tornadus-Therian||Leftovers|Regenerator|Taunt,NastyPlot,BleakwindStorm,HeatWave|Timid|80,,36,252,,140||,0,,,,|||,,,,,Flying"],
+ ["Great Tusk||Leftovers|Protosynthesis|Substitute,BulkUp,HeadlongRush,StoneEdge|Adamant|176,252,,,,80|||||,,,,,Ground]Meowscarada||ChoiceScarf|Protean|FlowerTrick,Uturn,KnockOff,TripleAxel|Jolly|56,252,,,,200|||||,,,,,Grass]Latios||ChoiceSpecs|Levitate|DracoMeteor,AuraSphere,Thunderbolt,FlipTurn|Modest|204,,,252,,52|||||,,,,,Dragon]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|VoltSwitch,Taunt,Thunderbolt,FlashCannon|Modest|248,,56,80,,124||,0,,,,|||,,,,,Steel]Heatran||ChopleBerry|FlameBody|StealthRock,HeavySlam,MagmaStorm,Earthquake|Lax|,108,200,52,,148|||||,,,,,Fire]Tera Captain|Feraligatr|LifeOrb|SheerForce|Substitute,DragonDance,Liquidation,Earthquake|Adamant|48,252,,,,208|||||,,,,,Ground","Tera Captain|Tyranitar|Leftovers|SandStream|Earthquake,StealthRock,KnockOff,RockSlide|Careful|248,,8,,252,|||||,,,,,Fairy]Scizor||RockyHelmet|Technician|BulletPunch,KnockOff,CloseCombat,Uturn|Impish|248,,208,,52,|||||,,,,,Bug]Electrode-Hisui||HeavyDutyBoots|Aftermath|LeafStorm,Taunt,VoltSwitch,ElectricTerrain|Timid|252,,,68,,188||,0,,,,|S||,,,,,Electric]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Earthquake,Uturn,StealthRock,Toxic|Impish|252,,248,,,8|||||,,,,,Water]Iron Valiant||BoosterEnergy|QuarkDrive|SpiritBreak,Moonblast,CloseCombat,DestinyBond|Naive|,224,,68,,216|||||,,,,,Fairy]Slowking||Leftovers|Regenerator|ChillyReception,Scald,IceBeam,ThunderWave|Calm|248,,8,,252,||,0,,,,|||,,,,,Water"],
+ ["Tera Captain|Cinccino|PowerHerb|SkillLink|TripleAxel,Uturn,TailSlap,Dig|Jolly|,252,,,48,208|||||,,,,,Fairy]Clefable||LifeOrb|MagicGuard|IceBeam,Moonlight,Moonblast,HealingWish|Modest|228,,,252,28,||,0,,,,|||,,,,,Fairy]Mamoswine||AssaultVest|ThickFat|IceShard,Earthquake,Facade,IcicleCrash|Jolly|208,220,,,,80|||||,,,,,Ice]Dondozo||RockyHelmet|Unaware|Yawn,Liquidation,SleepTalk,Rest|Impish|248,8,252,,,|||||,,,,,Water]Tera Captain|Serperior|Leftovers|Contrary|LeechSeed,Substitute,TeraBlast,LeafStorm|Timid|240,,,,40,228||,0,,,,|||,,,,,Ground]Zapdos||HeavyDutyBoots|Static|Roost,Uturn,Hurricane,Discharge|Timid|,,,252,4,252|||||,,,,,Electric","Tera Captain|Annihilape|ChoiceBand|Defiant|DrainPunch,RageFist,SeedBomb,Uturn|Adamant|252,252,4,,,|||||,,,,,Ghost]Weavile||ChoiceBand|Pressure|TripleAxel,KnockOff,IceShard,LowKick|Jolly|72,252,,,8,176|||||,,,,,Dark]Gliscor||ToxicOrb|PoisonHeal|Earthquake,StealthRock,ToxicSpikes,Uturn|Careful|252,,4,,252,|||||,,,,,Ground]Tera Captain|Vaporeon|Leftovers|WaterAbsorb|Scald,Haze,Wish,FlipTurn|Calm|252,,4,,252,|||||,,,,,Fire]Raging Bolt||ShucaBerry|Protosynthesis|SunnyDay,Thunderbolt,SolarBeam,WeatherBall|Modest|252,,100,156,,||,20,,,,|||,,,,,Electric]Gholdengo||ShucaBerry|GoodasGold|MakeItRain,ShadowBall,Recover,ThunderWave|Modest|252,,128,120,,8||,0,,,,|||,,,,,Steel"],
+ ["Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|Spikes,IvyCudgel,KnockOff,Synthesis|Jolly|248,36,,,,224|||||,,,,,Water]Zapdos||HeavyDutyBoots|Static|Roost,ThunderWave,VoltSwitch,HeatWave|Bold|248,,252,8,,||,0,,,,|||,,,,,Electric]Ursaluna-Bloodmoon||CustapBerry|MindsEye|Endure,BloodMoon,EarthPower,CalmMind|Modest|248,,,156,104,||,0,,,,|||,,,,,Ground]Scizor||ChoiceBand|Technician|BulletPunch,QuickAttack,Uturn,CloseCombat|Adamant|248,252,,,8,|||||,,,,,Bug]Tera Captain|Torterra|AssaultVest|ShellArmor|HeadlongRush,StoneEdge,WoodHammer,LeafStorm|Sassy|248,8,,,252,|||||,,,,,Grass]Sneasler||ChoiceBand|PoisonTouch|Uturn,ShadowClaw,CloseCombat,QuickAttack|Adamant|,252,4,,,252|||||,,,,,Fighting","Tera Captain|Annihilape|AssaultVest|Defiant|CloseCombat,DrainPunch,RageFist,Uturn|Adamant|248,140,,,88,32|||||,,,,,Dragon]Tera Captain|Toxtricity|ThroatSpray|PunkRock|Boomburst,Overdrive,Substitute,ShiftGear|Modest|64,,4,252,,188||,0,,,,|||,,,,,Electric]Iron Treads||ShucaBerry|QuarkDrive|Earthquake,BodyPress,IronDefense,StealthRock|Impish|248,,192,,48,20|||||,,,,,Bug]Greninja||ChoiceScarf|Protean|IceBeam,Extrasensory,Uturn,Spikes|Timid|,,16,252,,240|||||,,,,,Bug]Alomomola||RockyHelmet|Regenerator|Scald,ZenHeadbutt,FlipTurn,Wish|Relaxed|248,,252,,8,|||||,,,,,Bug]Abomasnow||LightClay|SnowWarning|WoodHammer,IceShard,Blizzard,AuroraVeil|Impish|248,68,192,,,|||||,,,,,Bug"],
+ ["Palafin-Hero|||ZerotoHero|Acrobatics,JetPunch,DrainPunch,FlipTurn|Adamant|16,252,,,,240|||||,,,,,Water]Corviknight||Leftovers|Pressure|BraveBird,Uturn,Roost,Defog|Impish|252,,116,,140,|||||,,,,,Flying]Mamoswine||ChoiceScarf|ThickFat|Earthquake,IcicleCrash,IceShard,KnockOff|Jolly|64,252,,,,192|||||,,,,,Ice]Meowscarada||ChoiceBand|Protean|FlowerTrick,KnockOff,Uturn,Trick|Jolly|56,252,,,,200|||||,,,,,Grass]Tera Captain|Fezandipiti|Leftovers|ToxicChain|NastyPlot,TeraBlast,Moonblast,DarkPulse|Serious|136,,,124,,248||,0,,,,|||,,,,,Psychic]Tera Captain|RagingBolt|ChoiceSpecs|Protosynthesis|VoltSwitch,DracoMeteor,Thunderclap,TeraBlast|Modest|196,,,252,,60||,20,,,,|||,,,,,Water","Iron Valiant||ExpertBelt|QuarkDrive|Moonblast,Thunderbolt,Psyshock,VacuumWave|Modest|128,,,252,,128||,0,,,,|||,,,,,Fairy]Garchomp||RockyHelmet|RoughSkin|Earthquake,FireFang,SwordsDance,StealthRock|Adamant|208,16,252,,,32|||||,,,,,Dragon]Empoleon||ChopleBerry|Competitive|Surf,IceBeam,GrassKnot,Agility|Modest|184,,208,8,,108||,0,,,,|||,,,,,Water]Weezing-Galar||BabiriBerry|Levitate|SludgeBomb,Thief,WillOWisp,PainSplit|Bold|248,,216,,44,|||||,,,,,Poison]Tera Captain|Tyranitar|ChoiceBand|SandStream|StoneEdge,RockSlide,RockBlast,IcePunch|Adamant|128,252,,,,128|||||,,,,,Rock]Tera Captain|Ceruledge|FocusSash|WeakArmor|BitterBlade,Poltergeist,ShadowSneak,SwordsDance|Adamant|,252,4,,,252|||||,,,,,Ghost"],
+ ["Tera Captain|Cloyster|HeavyDutyBoots|Overcoat|ShellSmash,IceBeam,TeraBlast,IceShard|Gentle|140,,,,252,116|||||,,,,,Fighting]Baxcalibur||HeavyDutyBoots|ThermalExchange|IceShard,SwordsDance,Substitute,DragonClaw|Adamant|248,252,,,8,|||||,,,,,Dragon]Decidueye||AssaultVest|Overgrow|ShadowBall,EnergyBall,ShadowSneak,Uturn|Sassy|248,,8,,252,|||||,,,,,Grass]Slowking||HeavyDutyBoots|Regenerator|NastyPlot,TrickRoom,Surf,ShadowBall|Quiet|252,,,252,4,||,0,,,,0|||,,,,,Water]Ribombee||FocusSash|ShieldDust|Moonblast,QuiverDance,Psychic,StickyWeb|Timid|112,,,252,,144||,0,,,,|||,,,,,Bug]Tera Captain|LandorusTherian|AssaultVest|Intimidate|Psychic,Uturn,Earthquake,TeraBlast|Jolly|248,,,,12,248|||||,,,,,Ice","Tera Captain|Excadrill|LumBerry|MoldBreaker|RapidSpin,IronHead,Earthquake,TeraBlast|Adamant|,252,,,84,172|||||,,,,,Ice]Tyranitar||ShucaBerry|SandStream|KnockOff,Earthquake,RockBlast,DragonDance|Jolly|,252,132,,,124|||||,,,,,Rock]Latios||ColburBerry|Levitate|LusterPurge,ShadowBall,AuraSphere,CalmMind|Modest|,,32,252,,224||,0,,,,|||,,,,,Dragon]Enamorus-Therian||HeavyDutyBoots|Overcoat|Moonblast,EarthPower,HealingWish,MysticalFire|Calm|248,,8,,252,||,0,,,,|||,,,,,Fairy]Iron Bundle||ChoiceScarf|QuarkDrive|FreezeDry,HydroPump,Encore,FlipTurn||208,,4,252,,44|||||,,,,,Ice]Tera Captain|Eelektross|AssaultVest|Levitate|StompingTantrum,Liquidation,SupercellSlam,CloseCombat|Adamant|,208,252,,,48|||||,,,,,Electric"],
+ ["Fezandipiti||BlackSludge|ToxicChain|Taunt,Roost,Uturn,LightScreen|Careful|252,,,,236,20|||||,,,,,Poison]Tera Captain|Armarouge|ChoiceScarf|FlashFire|ArmorCannon,Psyshock,DestinyBond,Trick|Timid|68,,,252,,188||,0,,,,|||,,,,,Psychic]Tera Captain|RagingBolt|Leftovers|Protosynthesis|DracoMeteor,Discharge,Thunderclap,CalmMind|Modest|252,,,120,136,||,20,,,,|||,,,,,Dark]Weavile||ChoiceScarf|Pressure|FoulPlay,LowKick,TripleAxel,KnockOff|Adamant|72,252,,,,184|||||,,,,,Dark]Ursaluna-Bloodmoon||YacheBerry|MindsEye|VacuumWave,Roar,BloodMoon,Yawn|Modest|252,,236,20,,||,0,,,,|||,,,,,Ground]Corviknight||RockyHelmet|Unnerve|Taunt,Roost,Defog,Uturn|Impish|252,,236,,,20|||||,,,,,Flying","Weavile||HeavyDutyBoots|Pressure|TripleAxel,KnockOff,IceShard,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Dark]Kommo-o||ThroatSpray|Bulletproof|ClangorousSoul,Boomburst,Flamethrower,ClangingScales|Modest|,,,252,4,252||,0,,,,|||,,,,,Normal]Terapagos||Leftovers|TeraShift|TeraStarstorm,ScorchingSands,Flamethrower,CalmMind|Timid|,,4,252,,252||,15,,,,|||,,,,,Stellar]Tera Captain|Cresselia|Leftovers|Levitate|CalmMind,StoredPower,Moonblast,Moonlight|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison]Manaphy||Leftovers|Hydration|Substitute,TailGlow,IceBeam,Surf|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Orthworm||RockyHelmet|EarthEater|BodyPress,Spikes,Earthquake,ShedTail|Impish|248,8,252,,,|||||,,,,,Steel"],
+ ["Gliscor||ToxicOrb|PoisonHeal|Earthquake,Spikes,Protect,KnockOff|Careful|244,,36,,228,|||||,,,,,Stellar]Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,HydroPump,IceBeam,FlipTurn|Timid|116,,,252,,140|||||,,,,,Stellar]Tera Captain|Hydreigon|ChoiceScarf|Levitate|DarkPulse,DracoMeteor,FlashCannon,Uturn|Timid|,,,252,4,252|||||,,,,,Steel]Magnezone||ChoiceScarf|Sturdy|FlashCannon,VoltSwitch,Thunderbolt,SteelBeam|Timid|,,44,252,,212||,0,,,,|||,,,,,Stellar]Iron Boulder||ChoiceBand|QuarkDrive|MightyCleave,CloseCombat,Earthquake,IronHead|Jolly|24,252,,,,232|||||,,,,,Stellar]Tera Captain|Cetitan|HeavyDutyBoots|SheerForce|Yawn,IcicleCrash,IceShard,Earthquake|Adamant|56,252,,,8,192|||||,,,,,Water","Garchomp||RockyHelmet|RoughSkin|StealthRock,SwordsDance,Earthquake,ScaleShot|Jolly|12,56,216,,,224|||||,,,,,Dragon]Palafin-Hero||YacheBerry|ZerotoHero|JetPunch,DrainPunch,FlipTurn,BulkUp|Adamant|156,32,252,,60,8|||||,,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,FocusBlast,KnockOff,Uturn|Timid|248,,,,188,72|||||,,,,,Flying]Gholdengo||ColburBerry|GoodasGold|MakeItRain,ShadowBall,Recover,NastyPlot|Calm|140,,,52,164,152||,0,,,,|||,,,,,Steel]Tera Captain|Gallade|HeavyDutyBoots|Sharpness|PsychoCut,SacredSword,IcePunch,Agility|Adamant|64,252,,,,192|||||,,,,,Psychic]Tera Captain|Frosmoth|MentalHerb|IceScales|QuiverDance,IceBeam,TeraBlast,Defog|Modest|248,,,104,,156||,0,,,,|||,,,,,Fighting"],
+ ["Overqwil||HeavyDutyBoots|Intimidate|DestinyBond,Haze,Crunch,Toxic|Impish|248,8,252,,,|||S||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,HornLeech,StompingTantrum|Jolly|,252,,,4,252|||||,,,,,Water]Scizor||LumBerry|Technician|SwordsDance,BulletPunch,Thief,KnockOff|Adamant|248,252,,,8,|||||,,,,,Bug]Emboar||HeavyDutyBoots|Reckless|SuckerPunch,WillOWisp,WildCharge,FlareBlitz|Careful|168,252,,,88,|||S||,,,,,Fire]Ursaluna-Bloodmoon||HeavyDutyBoots|MindsEye|BloodMoon,HyperVoice,EarthPower,Moonlight|Modest|184,,172,152,,||,0,,,,|||,,,,,Ground]Tera Captain|Hoopa|HeavyDutyBoots|Magician|ShadowBall,Psyshock,TeraBlast,Reflect|Modest|192,,64,252,,||,0,,,,|||,,,,,Flying","Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,Trailblaze,PowerWhip,Uturn|Jolly|,252,,,4,252|||||,,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,GrassKnot,KnockOff,Uturn|Timid|88,,,252,,168|||||,,,,,Flying]Garchomp||RockyHelmet|RoughSkin|StealthRock,Surf,Flamethrower,ScorchingSands|Bold|252,,172,,,84||,0,,,,|||,,,,,Dragon]Tera Captain|Lucario|ChoiceBand|InnerFocus|ExtremeSpeed,BulletPunch,CloseCombat,Crunch|Adamant|40,252,,,,216|||||,,,,,Normal]Tentacruel||BlackSludge|LiquidOoze|RapidSpin,SludgeBomb,Surf,KnockOff|Calm|252,,4,,252,|||||,,,,,Water]Gholdengo||ShucaBerry|GoodasGold|ThunderWave,Recover,MakeItRain,ShadowBall|Bold|252,,252,4,,||,0,,,,|||,,,,,Steel"],
+ ["Overqwil||Leftovers|Intimidate|Taunt,SwordsDance,GunkShot,Waterfall|Adamant|192,252,64,,,|||||,,,,,Dark]Tera Captain|GreatTusk|MirrorHerb|Protosynthesis|Taunt,RapidSpin,CloseCombat,Earthquake|Adamant|248,252,,,,8|||||,,,,,Grass]Empoleon||ChopleBerry|Torrent|HydroPump,StealthRock,IceBeam,GrassKnot|Modest|32,,,252,,224||,0,,,,|||,,,,,Water]Iron Bundle||AssaultVest|QuarkDrive|FreezeDry,FlipTurn,HydroPump,IceBeam|Modest|232,,,252,24,|||||,,,,,Ice]Arboliva||ChopleBerry|SeedSower|LeechSeed,EnergyBall,EarthPower,StrengthSap|Bold|252,,12,,,244||,0,,,,|||,,,,,Grass]Tera Captain|OricorioPomPom|CovertCloak|Dancer|QuiverDance,Taunt,TeraBlast,Roost|Bold|252,,252,4,,||,0,,,,|||,,,,,Water","Torterra||LoadedDice|Overgrow|ShellSmash,BulletSeed,RockBlast,HeadlongRush|Adamant|,252,28,,,228|||||,,,,,Grass]Gardevoir||ChoiceScarf|Synchronize|Moonblast,Psychic,HealingWish,FocusBlast|Timid|,,,252,44,212||,0,,,,|||,,,,,Psychic]Corviknight||Leftovers|Pressure|BraveBird,Uturn,Roost,IronHead|Impish|252,4,252,,,|||||,,,,,Flying]Tera Captain|Skeledirge|Leftovers|Unaware|TorchSong,ShadowBall,SlackOff,EarthPower|Modest|252,,,252,4,||,0,,,,|||,,,,,Steel]Tera Captain|Garganacl|Leftovers|PurifyingSalt|SaltCure,Earthquake,Recover,StoneEdge|Adamant|252,112,,,144,|||||,,,,,Ghost]Ting-Lu||Leftovers|VesselofRuin|StealthRock,Ruination,Earthquake,Spikes|Sassy|252,4,,,252,|||||,,,,,Dark"],
+ ["Garchomp||ChoiceScarf|RoughSkin|Earthquake,DragonClaw,IronHead,StealthRock|Jolly|56,252,,,,200|||S||,,,,,Dragon]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,SwordsDance,Uturn|Adamant|8,252,,,,248|||||,,,,,Water]Scizor||AssaultVest|Technician|Uturn,KnockOff,DualWingbeat,BulletPunch|Adamant|248,252,,,8,|||||,,,,,Bug]Zapdos||HeavyDutyBoots|Static|Hurricane,Thunderbolt,AncientPower,Roost|Timid|40,,,252,,216||,0,,,,|||,,,,,Electric]Overqwil||RockyHelmet|PoisonPoint|GunkShot,Spikes,Haze,PainSplit|Impish|128,,252,,,124|||S||,,,,,Dark]Tera Captain|Hariyama|CobaBerry|ThickFat|DrainPunch,HeavySlam,KnockOff,Whirlwind|Adamant|,4,252,,252,|||S||,,,,,Grass","Hatterene||CustapBerry|MagicBounce|DazzlingGleam,MysticalFire,Reflect,HealingWish|Bold|252,,224,32,,||,0,,,,|||,,,,,Psychic]Palafin||RindoBerry|ZerotoHero|Taunt,JetPunch,IcePunch,Counter|Adamant|252,176,16,,,64|||||,,,,,Water]Tera Captain|Kilowattrel|WiseGlasses|VoltAbsorb|Thunderbolt,Hurricane,Roost,ChargeBeam|Modest|80,,,248,,180||,0,,,,|||,,,,,Fairy]Meowscarada||ProtectivePads|Overgrow|KnockOff,Uturn,FlowerTrick,TripleAxel|Jolly|,212,144,,,152|||||,,,,,Grass]Tera Captain|Annihilape|ChoiceScarf|Defiant|Uturn,TeraBlast,CloseCombat,RageFist|Adamant|88,252,,,,168|||||,,,,,Fighting]Glimmora||BabiriBerry|ToxicDebris|StealthRock,PowerGem,DazzlingGleam,SpikyShield|Modest|,,160,232,,116||,0,,,,|||,,,,,Rock"],
+ ["Bronzong||ColburBerry|Levitate|LightScreen,IronDefense,BodyPress,Psychic|Calm|252,,132,,124,||,0,,,,|||,,,,,Steel]Tera Captain|Venusaur|RockyHelmet|Chlorophyll|GigaDrain,Synthesis,KnockOff,SunnyDay|Bold|252,,252,,4,|||||,,,,,Fairy]Chi-Yu||ChoiceScarf|BeadsofRuin|DarkPulse,Flamethrower,FireBlast,Psychic|Modest|,,,252,24,232||,0,,,,|||,,,,,Dark]Torkoal||HeatRock|Drought|LavaPlume,Yawn,StealthRock,RapidSpin|Bold|248,,252,,8,|||||,,,,,Fire]Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,Flamethrower,DracoMeteor,FlipTurn|Timid|12,,,244,,252|||||,,,,,Water]Slither Wing||Leftovers|Protosynthesis|FirstImpression,Uturn,CloseCombat,MorningSun|Careful|252,,156,,88,12|||||,,,,,Bug","Urshifu-Rapid-Strike||ProtectivePads|UnseenFist|RainDance,SurgingStrikes,AerialAce,CloseCombat|Careful|,24,,,252,232|||||,,,,,Fighting]Darkrai||ChoiceScarf|BadDreams|DarkPulse,FocusBlast,SludgeBomb,Trick|Modest|,,,252,4,252||,0,,,,|||,,,,,Dark]Weezing-Galar||CustapBerry|MistySurge|SludgeWave,MistyExplosion,StrangeSteam,DestinyBond|Calm|248,,,104,148,8||,0,,,,|||,,,,,Poison]Tera Captain|ThundurusTherian|LumBerry|VoltAbsorb|Agility,Thunderbolt,SludgeWave,NastyPlot|Modest|176,,,132,,200||,0,,,,|||,,,,,Poison]Tera Captain|Dudunsparce|Leftovers|SereneGrace|HyperDrill,Roost,Glare,StealthRock|Careful|248,8,,,252,|||||,,,,,Ghost]Metagross||ChoiceBand|ClearBody|BulletPunch,Explosion,PsychicFangs,IronHead|Adamant|252,252,,,4,|||||,,,,,Steel"],
+ ["Darkrai||WeaknessPolicy|BadDreams|DrainPunch,DarkPulse,Taunt,CalmMind|Hasty|,56,,248,,204|||||,,,,,Dark]Sneasler||WhiteHerb|Unburden|CloseCombat,SwordsDance,GunkShot,Toxic|Jolly|,252,,,4,252|||||,,,,,Fighting]Swampert||AssaultVest|Torrent|FlipTurn,Earthquake,KnockOff,Outrage|Adamant|248,100,,,160,|||||,,,,,Water]Tera Captain|Diancie|Leftovers|ClearBody|SleepTalk,Rest,BodyPress,DiamondStorm|Careful|252,4,,,252,|||||,,,,,Fighting]Skarmory||RockyHelmet|Sturdy|BraveBird,Spikes,Roost,Whirlwind|Careful|248,,8,,252,|||||,,,,,Steel]Tera Captain|Latias|ChoiceScarf|Levitate|HealingWish,MistBall,DracoMeteor,WeatherBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Psychic","Ninetales||HeatRock|Drought|HealingWish,Encore,WillOWisp,Flamethrower|Bold|248,,252,,,8||,0,,,,|||,,,,,Fire]Cresselia||Leftovers|Levitate|CalmMind,Moonlight,Moonblast,Psyshock|Bold|248,,216,,,44||,0,,,,|||,,,,,Psychic]Scream Tail||Leftovers|Protosynthesis|StealthRock,Flamethrower,ThunderWave,DazzlingGleam|Timid|248,,,12,,248||,0,,,,|||,,,,,Fairy]Venusaur||LumBerry|Chlorophyll|WeatherBall,GigaDrain,Growth,SludgeBomb|Modest|232,,4,252,,20||,0,,,,|||,,,,,Grass]Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,DracoMeteor,FlipTurn,Flamethrower|Timid|,,12,244,,252|||||,,,,,Water]Roaring Moon||ChopleBerry|Protosynthesis|DragonDance,FireFang,KnockOff,IronHead|Jolly|,228,28,,,252|||||,,,,,Dragon"],
+ ["Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,PowerWhip,PlayRough,SwordsDance|Jolly|80,252,,,,176|||||,,,,,Water]Iron Boulder||BoosterEnergy|QuarkDrive|MightyCleave,CloseCombat,PsychoCut,IronHead|Jolly|152,252,,,,104|||||,,,,,Rock]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,DarkPulse,Psychic,Flamethrower|Timid|96,,,252,,160||,0,,,,|||,,,,,Dark]Corviknight||HeavyDutyBoots|Pressure|Uturn,IronHead,Roost,Defog|Impish|252,,252,,4,|||||,,,,,Flying]Alomomola||RockyHelmet|Regenerator|FlipTurn,Wish,PlayRough,BodySlam|Impish|252,,252,,4,|||||,,,,,Water]Tera Captain|Orthworm|SitrusBerry|EarthEater|ShedTail,StealthRock,MetalBurst,BodyPress|Impish|252,,252,,4,||,0,,,,|||,,,,,Poison","Tyranitar||Leftovers|SandStream|StealthRock,KnockOff,Taunt,Flamethrower||252,76,,120,,60|||||,,,,,Rock]Clefable||HeavyDutyBoots|Unaware|Moonlight,ThunderWave,Moonblast,Flamethrower|Modest|252,,160,96,,||,0,,,,|S||,,,,,Fairy]Tera Captain|Amoonguss|RockyHelmet|Regenerator|SludgeBomb,Spore,GigaDrain,StunSpore|Bold|208,,252,48,,||,0,,,,|||,,,,,Grass]Tauros-Paldea-Aqua||ChoiceBand|Intimidate|CloseCombat,AquaJet,RagingBull,WaveCrash|Adamant|252,252,4,,,|||||,,,,,Fighting]Eelektross||Leftovers|Levitate|Thunderbolt,GigaDrain,Uturn,Flamethrower|Modest|112,,,252,,144|||||,,,,,Electric]Ceruledge||HeavyDutyBoots|FlashFire|BitterBlade,WillOWisp,Poltergeist,ShadowSneak|Adamant|144,252,,,,112|||||,,,,,Fire"],
+ ["Kyurem||LoadedDice|Pressure|ScaleShot,IceBeam,IcicleSpear,Roost|Serious|4,252,,,,252|||||,,,,,Dragon]Zapdos||HeavyDutyBoots|Static|Thunderbolt,Uturn,Roost,HeatWave|Modest|248,,,252,8,|||||,,,,,Electric]Darkrai||LifeOrb|BadDreams|NastyPlot,DarkPulse,Psychic,IceBeam|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Sneasler||FocusSash|Unburden|DireClaw,SwordsDance,BrickBreak,Uturn|Adamant|,252,,,4,252|||||,,,,,Fighting]Tera Captain|Heatran|AirBalloon|FlameBody|MagmaStorm,FlashCannon,StealthRock,WillOWisp|Serious|252,,126,4,126,||,0,,,,|||,,,,,Flying]Avalugg-Hisui||CustapBerry|Sturdy|MountainGale,StealthRock,RapidSpin,StoneEdge|Adamant|252,252,4,,,|||||,,,,,Ice","Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,AuraSphere,VacuumWave,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Garchomp||YacheBerry|RoughSkin|ScaleShot,StealthRock,Earthquake,Liquidation|Jolly|112,196,,,,200|||||,,,,,Dragon]Metagross||ChoiceScarf|ClearBody|MeteorMash,BulletPunch,PsychicFangs,IcePunch|Jolly|,252,,,28,228|||||,,,,,Steel]Tera Captain|Lanturn|RockyHelmet|VoltAbsorb|ElectricTerrain,VoltSwitch,Scald,DazzlingGleam|Calm|40,,112,104,252,||,0,,,,|||,,,,,Water]Tera Captain|Zarude|ChopleBerry|LeafGuard|KnockOff,TeraBlast,Uturn,Acrobatics|Jolly|80,252,,,,176|||||,,,,,Rock]Tornadus-Therian||ProtectivePads|Regenerator|KnockOff,Taunt,Uturn,Tailwind|Careful|240,56,36,,168,8|||||,,,,,Flying"],
+ ["Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|HornLeech,IvyCudgel,Substitute,LowKick|Adamant|48,252,,,4,204|||||,,,,,Water]Tornadus-Therian||ChoiceScarf|Regenerator|KnockOff,Uturn,Hurricane,FocusBlast|Modest|128,,12,252,,116|||||,,,,,Flying]Urshifu||ChoiceScarf|UnseenFist|Uturn,PoisonJab,CloseCombat,WickedBlow|Jolly|56,252,,,,200|||||,,,,,Fighting]Heatran||ChopleBerry|FlameBody|MagmaStorm,Protect,StealthRock,WillOWisp|Bold|252,,252,4,,||,0,,,,|||,,,,,Fire]Glimmora||RockyHelmet|Corrosion|Toxic,EarthPower,PowerGem,SpikyShield|Bold|252,,252,4,,||,0,,,,|||,,,,,Rock]Alomomola||RockyHelmet|Regenerator|Whirlpool,FlipTurn,Protect,AlluringVoice|Bold|252,,252,4,,|||||,,,,,Water","Tera Captain|HoopaUnbound|ChoiceScarf|Magician|DarkPulse,Thunderbolt,FocusBlast,KnockOff|Modest|36,,,252,,220|||||,,,,,Dark]Goodra-Hisui||AssaultVest|Gooey|Earthquake,Thunderbolt,HeavySlam,DragonTail|Relaxed|252,,196,,60,|||||,,,,,Steel]Cinderace||HeavyDutyBoots|Libero|Uturn,PyroBall,HighJumpKick,CourtChange|Jolly|72,252,,,,184|||||,,,,,Fire]Tera Captain|Clefable|Leftovers|Unaware|Moonlight,StealthRock,Moonblast,CalmMind|Bold|252,,252,4,,||,0,,,,|||,,,,,Dragon]Annihilape||ChoiceScarf|Defiant|Uturn,CloseCombat,RageFist,FinalGambit|Adamant|116,252,,,,140|||||,,,,,Fighting]Alomomola||RockyHelmet|Regenerator|FlipTurn,Wish,Protect,PlayRough|Relaxed|252,4,252,,,||,,,,,0|||,,,,,Water"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,KnockOff,CloseCombat,Encore|Jolly|,240,16,,,252|||||,,,,,Stellar]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|DualWingbeat,Earthquake,Protect,Spikes|Jolly|244,,32,,,232|||||,,,,,Fairy]Empoleon||CustapBerry|Torrent|Surf,IceBeam,GrassKnot,StealthRock|Modest|168,,88,252,,||,0,,,,|||,,,,,Stellar]Sceptile||YacheBerry|Unburden|LeafStorm,DragonPulse,ShedTail,DragonTail|Timid|80,,,252,,176|||S||,,,,,Stellar]Tera Captain|Espathra|Leftovers|SpeedBoost|CalmMind,DazzlingGleam,TeraBlast,Protect|Timid|232,,,,100,176||,0,,,,|||,,,,,Fighting]Gengar||LifeOrb|CursedBody|SludgeWave,ShadowBall,FocusPunch,Substitute|Naive|,4,,252,,252|||||,,,,,Stellar","Snorlax||Leftovers|Immunity|Curse,BodySlam,Crunch,Protect|Careful|88,12,156,,252,|||||,,,,,Normal]Greninja||LifeOrb|Protean|WaterShuriken,IceBeam,DarkPulse,LowKick|Hasty|,48,,252,,208|||||,,,,,Water]Gouging Fire||BoosterEnergy|Protosynthesis|DragonDance,FlareBlitz,DragonClaw,MorningSun|Adamant|248,160,,,,100|||||,,,,,Fire]Tera Captain|Latias|MirrorHerb|Levitate|Thunderbolt,IceBeam,CalmMind,Recover|Timid|248,,,8,,252||,0,,,,|||,,,,,Electric]Iron Treads||BoosterEnergy|QuarkDrive|IceSpinner,Earthquake,RapidSpin,StealthRock|Jolly|8,252,,,,248|||||,,,,,Ground]Electivire||Leftovers|VitalSpirit|IcePunch,ThunderPunch,BulkUp,Protect|Jolly|152,100,,,4,252|||||,,,,,Electric"],
+ ["Tera Captain|Latias|Leftovers|Levitate|ThunderWave,Psychic,IceBeam,Recover|Calm|248,,108,,32,120||,0,,,,|||,,,,,Steel]Ninetales-Alola||HeavyDutyBoots|SnowWarning|Blizzard,Moonblast,Hex,AuroraVeil|Modest|,,128,252,,128||,0,,,,|||,,,,,Ice]Kilowattrel||ChoiceScarf|WindPower|VoltSwitch,Uturn,Roost,Hurricane|Naive|,8,,252,,248|||||,,,,,Electric]Sandslash-Alola||MentalHerb|SlushRush|StealthRock,RapidSpin,KnockOff,IceSpinner|Impish|152,,252,,4,100|||||,,,,,Ice]Weezing-Galar||AirBalloon|NeutralizingGas|StrangeSteam,Explosion,Taunt,Toxic|Bold|248,,112,,8,140|||||,,,,,Poison]Sneasler||SitrusBerry|Unburden|Uturn,CloseCombat,ThroatChop,Taunt|Adamant|,252,,,88,168|||||,,,,,Fighting","Iron Boulder||ChoiceBand|QuarkDrive|MightyCleave,CloseCombat,ZenHeadbutt,QuickAttack|Jolly|,252,,,4,252|||||,,,,,Rock]Skarmory||RockyHelmet|Sturdy|BodyPress,BraveBird,Whirlwind,Roost|Impish|252,,160,,,96|||||,,,,,Steel]Gliscor||ToxicOrb|PoisonHeal|KnockOff,Earthquake,Toxic,Protect|Careful|252,,4,,252,|||||,,,,,Ground]Iron Bundle||ChoiceScarf|QuarkDrive|IceBeam,FreezeDry,HydroPump,FlipTurn|Timid|,,,252,4,252|||||,,,,,Ice]Tera Captain|Skeledirge|HeavyDutyBoots|Unaware|TorchSong,Hex,WillOWisp,SlackOff|Bold|252,,172,,84,||,0,,,,|||,,,,,Dark]Clodsire||HeavyDutyBoots|Unaware|Earthquake,PoisonJab,StealthRock,Recover|Careful|248,,168,,92,|||||,,,,,Poison"],
+ ["Tera Captain|Annihilape|Leftovers|Defiant|Substitute,BulkUp,DrainPunch,RageFist|Careful|120,,,,252,136|||S||,,,,,Steel]Palafin||Leftovers|ZerotoHero|BulkUp,Taunt,JetPunch,DrainPunch|Adamant|200,252,,,,56|||S||,,,,,Water]Zapdos||RockyHelmet|Static|HyperBeam,Hurricane,MetalSound,Roost|Bold|252,,200,,,56||,0,,,,|S||,,,,,Electric]Archaludon||AssaultVest|Stamina|ElectroShot,DragonPulse,BodyPress,HeavySlam|Modest|80,,,252,,176|||S||,,,,,Steel]Politoed||DampRock|Drizzle|HydroPump,IceBeam,Haze,Rest|Calm|252,,,,160,96||,0,,,,|S||,,,,,Water]Tera Captain|Overqwil|LoadedDice|SwiftSwim|SwordsDance,TeraBlast,PinMissile,ScaleShot|Adamant|56,252,,,,200|||S||,,,,,Fighting","Kingambit||ChopleBerry|SupremeOverlord|SwordsDance,SuckerPunch,StoneEdge,KowtowCleave|Adamant|4,252,252,,,|||||,,,,,Dark]Iron Bundle||ChoiceSpecs|QuarkDrive|FreezeDry,HydroPump,FlipTurn,Encore|Modest|,,,252,4,252|||||,,,,,Ice]Raging Bolt||BoosterEnergy|Protosynthesis|Thunderclap,DracoMeteor,Thunder,CalmMind|Modest|172,,,252,,84||,20,,,,|||,,,,,Electric]Tera Captain|Clodsire|Leftovers|WaterAbsorb|Spikes,Toxic,Recover,Earthquake|Careful|244,,12,,252,|||||,,,,,Dark]Kilowattrel||HeavyDutyBoots|VoltAbsorb|Hurricane,Thunder,VoltSwitch,ThunderWave|Timid|100,,40,252,60,56||,0,,,,|||,,,,,Electric]Tera Captain|LilligantHisui|WideLens|Hustle|CloseCombat,TeraBlast,LeafBlade,VictoryDance|Adamant|,252,,4,,252|||||,,,,,Ghost"],
+ ["Milotic||FlameOrb|MarvelScale|Scald,FlipTurn,DragonTail,Recover|Impish|252,4,252,,,|||||,,,,,Water]Infernape||Charcoal|Blaze|Overheat,Uturn,VacuumWave,WillOWisp|Timid|,,52,252,,200|||||,,,,,Fire]Baxcalibur||LoadedDice|ThermalExchange|IcicleSpear,GlaiveRush,Earthquake,DragonDance|Adamant|100,252,,,,156|||||,,,,,Dragon]Wigglytuff||RockyHelmet|CuteCharm|DrainingKiss,StealthRock,ThunderWave,Encore|Bold|252,,252,,4,||,0,,,,|||,,,,,Normal]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,Uturn,Taunt,FocusBlast|Timid|252,,160,,,96|||||,,,,,Flying]Tera Captain|Torterra|LoadedDice|Overgrow|BulletSeed,HeadlongRush,RockBlast,ShellSmash|Adamant|76,252,,,4,176|||||,,,,,Water","Palafin-Hero||ChoiceBand|ZerotoHero|WaveCrash,JetPunch,FlipTurn,CloseCombat|Adamant|104,252,,,,152|||||,,,,,Water]Gouging Fire||ShucaBerry|Protosynthesis|DragonDance,Outrage,MorningSun,HeatCrash|Adamant|72,252,4,,,180|||||,,,,,Fire]Tera Captain|ThundurusTherian|MirrorHerb|VoltAbsorb|Thunderbolt,TeraBlast,FocusBlast,Agility|Modest|248,,,,8,252||,0,,,,|||,,,,,Ice]Terapagos||HeavyDutyBoots|TeraShift|Thunderbolt,RapidSpin,Toxic,Roar|Bold|252,,60,,196,|||||,,,,,Stellar]Tera Captain|Rhyperior|CustapBerry|SolidRock|StealthRock,Earthquake,TeraBlast,StoneEdge|Adamant|,252,4,,252,|||||,,,,,Electric]Weavile||LifeOrb|Pressure|SwordsDance,KnockOff,LowKick,IceShard|Jolly|32,252,,,,224|||||,,,,,Dark"],
+ ["Garchomp||RockyHelmet|RoughSkin|StompingTantrum,PoisonJab,DragonClaw,StealthRock|Jolly|248,,120,,,140|||||,,,,,Dragon]Weavile||ChoiceScarf|Pressure|IceShard,TripleAxel,KnockOff,LowKick|Jolly|8,252,,,,248|||||,,,,,Dark]Tera Captain|Keldeo|ChoiceSpecs|Justified|Surf,FlipTurn,SecretSword,VacuumWave|Timid|16,,,252,,240|||||,,,,,Dragon]Gholdengo||ShucaBerry|GoodasGold|MakeItRain,ShadowBall,Reflect,Recover|Bold|248,,232,28,,||,0,,,,|||,,,,,Steel]Tera Captain|Mesprit|AssaultVest|Levitate|ZenHeadbutt,FutureSight,KnockOff,Uturn|Sassy|248,52,,,208,|||||,,,,,Steel]Weezing-Galar||RedCard|Levitate|SludgeBomb,DestinyBond,Defog,Haze|Bold|252,,236,,20,||,0,,,,|||,,,,,Poison","Iron Boulder||ChoiceBand|QuarkDrive|MightyCleave,ThroatChop,ZenHeadbutt,QuickAttack|Adamant|,252,,,4,252|||||,,,,,Rock]Enamorus||ChoiceScarf|CuteCharm|Moonblast,MysticalFire,Psychic,HealingWish|Timid|,,,252,32,224||,0,,,,|||,,,,,Fairy]Tera Captain|Rillaboom|LumBerry|GrassySurge|SwordsDance,GrassyGlide,DrumBeating,TeraBlast|Adamant|,252,4,,,252|||||,,,,,Steel]Kyurem||HeavyDutyBoots|Pressure|FreezeDry,FlashCannon,EarthPower,DracoMeteor|Modest|248,,,252,8,||,0,,,,|||,,,,,Dragon]Duraludon||Eviolite|HeavyMetal|DracoMeteor,FlashCannon,BodyPress,ThunderWave|Bold|248,,252,4,,4||,0,,,,|||,,,,,Steel]Tentacruel||BlackSludge|LiquidOoze|RapidSpin,FlipTurn,IceBeam,SludgeBomb|Modest|,,,252,4,252|||||,,,,,Water"],
+ ["Samurott-Hisui||HeavyDutyBoots|Sharpness|CeaselessEdge,AquaCutter,AquaJet,FlipTurn|Adamant|252,252,,,4,|||||,,,,,Water]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Glare,Substitute|Modest|64,,,252,,192||,0,,,,|||,,,,,Rock]Gliscor||ToxicOrb|PoisonHeal|Protect,Earthquake,KnockOff,Toxic|Impish|244,,252,,12,|||||,,,,,Ground]Ninetales-Alola||LightClay|SnowWarning|Blizzard,Moonblast,Encore,AuroraVeil|Modest|248,,8,252,,||,0,,,,|||,,,,,Ice]Volcarona||HeavyDutyBoots|FlameBody|QuiverDance,FieryDance,MorningSun,WillOWisp|Bold|252,,252,,4,||,0,,,,|||,,,,,Bug]Tera Captain|Galvantula|FocusSash|CompoundEyes|Thunder,TeraBlast,VoltSwitch,StickyWeb|Timid|,,104,252,,152||,0,,,,|||,,,,,Ice","Clodsire||Leftovers|Unaware|ToxicSpikes,Spikes,Recover,GunkShot|Careful|252,,4,,252,|||||,,,,,Poison]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|Earthquake,Uturn,StoneEdge,TeraBlast|Naive|,252,,4,,252|||||,,,,,Flying]Diancie||Leftovers|ClearBody|StealthRock,DiamondStorm,Moonblast,BodyPress|Sassy|248,,8,,252,|||||,,,,,Rock]Chi-Yu||ChoiceSpecs|BeadsofRuin|DarkPulse,Overheat,Flamethrower,Psychic|Timid|4,,,252,,252||,0,,,,|||,,,,,Dark]Scizor||Leftovers|Technician|Uturn,KnockOff,BulletPunch,DualWingbeat|Adamant|252,252,4,,,|||||,,,,,Bug]Tatsugiri||HeavyDutyBoots|StormDrain|Surf,DracoMeteor,RapidSpin,NastyPlot|Timid|,,,252,,252|||||,,,,,Dragon"],
+ ["Meowscarada||LifeOrb|Overgrow|HoneClaws,KnockOff,SuckerPunch,FlowerTrick|Jolly|,252,4,,,252|||||,,,,,Grass]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|VoltSwitch,DracoMeteor,Discharge,Thunderclap|Calm|252,,136,,120,||,20,,,,|||,,,,,Flying]Araquanid||ChoiceBand|WaterBubble|Liquidation,StickyWeb,LeechLife,Lunge|Adamant|208,252,,,4,44|||||,,,,,Water]Ting-Lu||Leftovers|VesselofRuin|Spikes,Ruination,Earthquake,Whirlwind|Careful|252,,4,,252,|||||,,,,,Dark]Hawlucha||RockyHelmet|MoldBreaker|Roost,CloseCombat,Defog,Encore|Impish|252,,176,,,80|||||,,,,,Fighting]Weezing-Galar||AssaultVest|Levitate|StrangeSteam,ClearSmog,SludgeBomb,Flamethrower|Calm|252,,4,,252,||,0,,,,|||,,,,,Poison","Garchomp||LoadedDice|RoughSkin|ScaleShot,Earthquake,Crunch,IronHead|Adamant|76,252,,,,180|||||,,,,,Dragon]Tera Captain|Greninja|FocusSash|Protean|ToxicSpikes,Spikes,Uturn,Surf|Hasty|,32,,252,,224|||||,,,,,Water]Scream Tail||Leftovers|Protosynthesis|Wish,Protect,Encore,Disable|Calm|252,,,,148,108||,0,,,,|||,,,,,Fairy]Scizor||RockyHelmet|Technician|BulletPunch,Uturn,KnockOff,DualWingbeat|Impish|252,4,252,,,|||||,,,,,Bug]Terapagos||HeavyDutyBoots|TeraShift|RapidSpin,TeraStarstorm,DarkPulse,CalmMind|Modest|,,,252,4,252|||||,,,,,Stellar]Tera Captain|IronThorns|BoosterEnergy|QuarkDrive|LowKick,HeavySlam,ThunderPunch,DragonDance|Adamant|64,252,,,,192|||||,,,,,Flying"],
+ ["Latios||ColburBerry|Levitate|LusterPurge,IceBeam,DracoMeteor,Recover|Modest|252,,76,92,,88||,0,,,,|||,,,,,Dragon]Gholdengo||RockyHelmet|GoodasGold|Hex,MakeItRain,ThunderWave,Recover|Bold|252,,60,8,188,||,0,,,,|||,,,,,Steel]Chi-Yu||ChoiceScarf|BeadsofRuin|DarkPulse,Flamethrower,Psychic,Hex|Timid|4,,,252,,252||,0,,,,|||,,,,,Dark]Tera Captain|GreatTusk|HeavyDutyBoots|Protosynthesis|TeraBlast,HeadlongRush,KnockOff,RapidSpin|Serious|236,8,,,12,252|||||,,,,,Poison]Tera Captain|Hoopa|ChoiceScarf|Magician|Psychic,Thunderbolt,ShadowBall,DestinyBond|Modest|128,,236,4,,140||,0,,,,|||,,,,,Psychic]Golem||ChoiceBand|Sturdy|Earthquake,StoneEdge,SmackDown,Explosion|Adamant|,252,,,4,252|||||,,,,,Rock","Slowking-Galar||ColburBerry|Regenerator|ThunderWave,ChillyReception,FutureSight,ShadowBall|Calm|252,,4,,252,||,0,,,,|||,,,,,Poison]Tera Captain|RagingBolt|AirBalloon|Protosynthesis|DragonPulse,Discharge,Thunderclap,CalmMind|Modest|232,,248,12,8,8||,20,,,,|||,,,,,Fairy]Tera Captain|Alomomola|AssaultVest|Regenerator|FlipTurn,Scald,AquaJet,PlayRough|Sassy|252,,4,,252,|||||,,,,,Fairy]Iron Treads||Leftovers|QuarkDrive|Earthquake,KnockOff,RapidSpin,StealthRock|Jolly|36,12,,,252,208|||||,,,,,Ground]Moltres||HeavyDutyBoots|FlameBody|Flamethrower,Uturn,ScorchingSands,Roost|Timid|252,,8,,16,232|||||,,,,,Fire]Meowscarada||ChoiceScarf|Protean|Uturn,LeafStorm,KnockOff,BrickBreak|Hasty|,248,,108,,152|||||,,,,,Grass"],
+ ["Weezing-Galar||RockyHelmet|Levitate|ToxicSpikes,PainSplit,SludgeBomb,DazzlingGleam|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Iron Treads||LumBerry|QuarkDrive|RapidSpin,IceSpinner,Earthquake,StealthRock|Jolly|,252,,,4,252|||||,,,,,Ground]Tera Captain|Cresselia|Leftovers|Levitate|Moonlight,IceBeam,ShadowBall,Moonblast|Modest|252,,,252,4,||,0,,,,|S||,,,,,Fairy]Palafin||ChoiceBand|ZerotoHero|FlipTurn,WaveCrash,DrainPunch,JetPunch|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|Raikou|ChoiceScarf|InnerFocus|VoltSwitch,TeraBlast,ShadowBall,Scald|Timid|,,,252,4,252||,0,,,,|||,,,,,Flying]Dudunsparce||HeavyDutyBoots|SereneGrace|DragonTail,Roost,BodySlam,Earthquake|Careful|252,4,,,252,|||||,,,,,Normal","Tera Captain|GreninjaBond|MysticWater|BattleBond|HydroPump,Surf,DarkPulse,GrassKnot|Timid|56,,,252,,200|||||,,,,,Water]Garchomp||YacheBerry|RoughSkin|SwordsDance,ScaleShot,Earthquake,IronHead|Adamant|216,252,,,,40|||||,,,,,Dragon]Enamorus||HeavyDutyBoots|CuteCharm|CalmMind,Moonblast,Psychic,EarthPower|Timid|4,,,252,,252||,0,,,,|||,,,,,Fairy]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,IvyCudgel,HornLeech,StompingTantrum|Jolly|32,252,,,,224|||||,,,,,Fire]Jirachi||Leftovers|SereneGrace|Substitute,IronHead,FirePunch,ThunderWave|Jolly|80,252,,,,176|||||,,,,,Steel]Rotom-Mow||ChoiceScarf|Levitate|LeafStorm,Discharge,Trick,VoltSwitch|Modest|88,,,252,,168||,0,,,,|||,,,,,Electric"],
+ ["Blaziken||CustapBerry|SpeedBoost|FlareBlitz,CloseCombat,Protect,SwordsDance|Adamant|,252,,,4,252|||||,,,,,Fire]Cinccino||LoadedDice|Technician|TailSlap,BulletSeed,Substitute,TidyUp|Jolly|,252,,,4,252|||||,,,,,Normal]Hydrapple||AssaultVest|Regenerator|BodyPress,FickleBeam,GigaDrain,EarthPower|Modest|248,,,148,112,||,0,,,,|||,,,,,Grass]Mimikyu||ChoiceBand|Disguise|PlayRough,ShadowSneak,ShadowClaw,WoodHammer|Jolly|,252,,,4,252|||||,,,,,Ghost]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|AquaJet,CloseCombat,SurgingStrikes,Uturn|Adamant|,252,,,4,252|||||,,,,,Water]Minior||WhiteHerb|ShieldsDown|Acrobatics,ShellSmash,Earthquake,RockSlide|Adamant|,252,,,4,252|||S||,,,,,Water","Orthworm||SitrusBerry|EarthEater|BodyPress,StealthRock,ShedTail,HeavySlam|Impish|248,,252,,8,|||||,,,,,Steel]Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,SpiritBreak,CloseCombat,ShadowSneak|Jolly|,252,,,8,248|||||,,,,,Fairy]Tera Captain|ThundurusTherian|ChoiceScarf|VoltAbsorb|Uturn,TeraBlast,Thunderbolt,FocusBlast|Naive|,32,,252,,224|||||,,,,,Flying]Samurott-Hisui||FocusSash|Sharpness|CeaselessEdge,RazorShell,AirSlash,AquaJet|Naive|,252,4,36,,216|||||,,,,,Water]Tera Captain|Espathra|Leftovers|SpeedBoost|Roost,CalmMind,LuminaCrash,DazzlingGleam|Bold|252,,252,4,,||,0,,,,|||,,,,,Water]Donphan||RockyHelmet|Sturdy|Earthquake,RapidSpin,StealthRock,IceSpinner|Adamant|248,252,,,,8|||||,,,,,Ground"],
+ ["Latios||ChoiceScarf|Levitate|LusterPurge,DracoMeteor,ShadowBall,Thunderbolt|Timid|92,,,252,4,160||,0,,,,|||,,,,,Electric]Excadrill||ChoiceScarf|MoldBreaker|HighHorsepower,IronHead,ShadowClaw,StealthRock|Jolly|28,252,,,4,224|||||,,,,,Ground]Komala||AssaultVest|Comatose|RapidSpin,StompingTantrum,BodySlam,Uturn|Careful|244,76,,,188,|||||,,,,,Normal]Hawlucha||BigNugget|Unburden|SwordsDance,CloseCombat,Acrobatics,Fling|Adamant|156,252,,,4,96|||||,,,,,Flying]Tera Captain|Crocalor|Eviolite|Unaware|Flamethrower,TeraBlast,Yawn,SlackOff|Serious|248,,156,,104,||,0,,,,|||,,,,,Fairy]Rillaboom||AssaultVest|GrassySurge|GrassyGlide,KnockOff,HighHorsepower,Uturn|Adamant|236,252,,,20,|||||,,,,,Grass","Palafin-Hero||ChoiceBand|ZerotoHero|FlipTurn,JetPunch,IcePunch,WaveCrash|Adamant|16,252,,,,240|||||,,,,,Water]Tera Captain|Gholdengo|ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,Trick,SteelBeam|Modest|,,88,252,,168||,0,,,,|||,,,,,Ghost]Donphan||AssaultVest|Sturdy|KnockOff,HighHorsepower,IceShard,IceSpinner|Adamant|248,124,124,,12,|||||,,,,,Ground]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|KnockOff,PowerWhip,IvyCudgel,Uturn|Jolly|,252,,,4,252|||||,,,,,Fire]Weezing-Galar||RockyHelmet|MistySurge|StrangeSteam,SludgeBomb,ShadowBall,PainSplit|Bold|248,,168,,92,||,0,,,,|||,,,,,Poison]Ursaring||Eviolite|Guts|BodySlam,Earthquake,Rest,SleepTalk|Careful|248,8,,,252,|||||,,,,,Normal"],
+ ["Darkrai||Leftovers|BadDreams|Hypnosis,WillOWisp,NastyPlot,DarkPulse|Timid|16,,252,,,240||,0,,,,|||,,,,,Dark]Tornadus-Therian||RockyHelmet|Regenerator|NastyPlot,Uturn,HeatWave,BleakwindStorm|Timid|248,,92,,,168|||||,,,,,Flying]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|Uturn,TeraBlast,StoneEdge,Earthquake|Adamant|112,252,,,,144|||||,,,,,Grass]Keldeo||ChoiceSpecs|Justified|VacuumWave,SecretSword,Surf,HydroPump|Timid|24,,,252,,232||,0,,,,|||,,,,,Water]Scizor||HeavyDutyBoots|Technician|Defog,KnockOff,Uturn,BulletPunch|Careful|252,4,,,252,|||||,,,,,Bug]Vileplume||RockyHelmet|EffectSpore|SleepPowder,LeechSeed,StrengthSap,SludgeBomb|Bold|252,,252,,4,||,0,,,,|||,,,,,Grass","Tera Captain|Latias|Leftovers|Levitate|CalmMind,DrainingKiss,MistBall,TeraBlast|Timid|16,,,252,,240||,0,,,,|||,,,,,Fire]Palafin-Hero||PunchingGlove|ZerotoHero|BulkUp,JetPunch,DrainPunch,IcePunch|Adamant|248,252,,,8,|||||,,,,,Normal]Meowscarada||ProtectivePads|Protean|KnockOff,PlayRough,TripleAxel,Taunt|Jolly|16,252,,,,240|||||,,,,,Normal]Tinkaton||LumBerry|OwnTempo|StealthRock,ThunderWave,IceHammer,Reflect|Jolly|252,24,,,,232|||||,,,,,Normal]Iron Hands||AssaultVest|QuarkDrive|DrainPunch,ThunderPunch,SeismicToss,VoltSwitch|Careful|252,4,,,252,|||||,,,,,Normal]Donphan||HeavyDutyBoots|Sturdy|Earthquake,KnockOff,Endeavor,IceShard|Adamant|80,252,,,,176|||||,,,,,Normal"],
+ ["Urshifu||PunchingGlove|UnseenFist|SwordsDance,CloseCombat,WickedBlow,Substitute|Jolly|136,164,,,,208|||||,,,,,Fighting]Slowking-Galar||AssaultVest|Regenerator|SludgeBomb,IceBeam,FutureSight,PowerGem|Calm|248,,,68,192,||,0,,,,|||,,,,,Poison]Tera Captain|Rhyperior|Leftovers|SolidRock|Earthquake,StoneEdge,IcePunch,StealthRock|Adamant|248,80,108,,72,|||||,,,,,Ground]Blastoise||Leftovers|Torrent|IceBeam,HydroPump,RapidSpin,FlipTurn|Bold|248,,144,48,68,|||||,,,,,Water]Zapdos||HeavyDutyBoots|Static|Hurricane,Thunderbolt,Uturn,Roost|Timid|16,,4,236,,252|||||,,,,,Electric]Whimsicott||PixiePlate|Prankster|Encore,Moonblast,Uturn,LeechSeed|Timid|160,,4,112,,232|||||,,,,,Grass","Tera Captain|Serperior|NormalGem|Contrary|LeafStorm,TeraBlast,HyperBeam,Taunt|Timid|244,,108,4,,152||,0,,,,|||,,,,,Ground]Jirachi||MentalHerb|SereneGrace|StoredPower,DazzlingGleam,CalmMind,Substitute|Timid|240,,,16,,252||,0,,,,|||,,,,,Steel]Quaquaval||ProtectivePads|Moxie|AquaStep,CloseCombat,TripleAxel,SwordsDance|Adamant|120,252,,,,136|||||,,,,,Water]Tera Captain|Gligar|Eviolite|Immunity|Earthquake,Toxic,Uturn,Spikes|Impish|248,,140,,120,|||||,,,,,Fairy]Dewgong||ChopleBerry|ThickFat|IceBeam,FlipTurn,AlluringVoice,Haze|Modest|80,,252,172,4,|||||,,,,,Water]Grimmsnarl||BabiriBerry|Prankster|DarkPulse,DrainingKiss,NastyPlot,LightScreen|Modest|244,,232,32,,||,0,,,,|||,,,,,Dark"],
+ ["Palafin||ThroatSpray|ZerotoHero|Boomburst,HydroPump,IceBeam,Taunt|Modest|80,,4,252,,172||,0,,,,|||,,,,,Water]Meowscarada||ChoiceScarf|Protean|Trick,KnockOff,Uturn,FlowerTrick|Jolly|,252,4,,,252|||||,,,,,Grass]Terapagos||HeavyDutyBoots|TeraShift|Roar,CalmMind,TeraStarstorm,EarthPower|Modest|248,,,252,,8||,15,,,,|||,,,,,Stellar]Orthworm||RockyHelmet|EarthEater|ShedTail,BodyPress,Spikes,StealthRock|Bold|248,,252,,8,||,0,,,,|||,,,,,Steel]Dragonite||HeavyDutyBoots|Multiscale|DragonDance,ExtremeSpeed,Earthquake,IronHead|Adamant|8,252,,,4,244|||||,,,,,Dragon]Tera Captain|Golurk|AssaultVest|NoGuard|Earthquake,CloseCombat,Poltergeist,StoneEdge|Adamant|72,252,,,,184|||||,,,,,Dark","Palafin||PunchingGlove|ZerotoHero|Haze,JetPunch,DrainPunch,IcePunch|Adamant|208,152,52,,,96|||||,,,,,Water]Meowscarada||ExpertBelt|Protean|Uturn,FlowerTrick,KnockOff,LowKick|Adamant|68,252,,,,188|||||,,,,,Grass]Tera Captain|Kilowattrel|ChoiceScarf|VoltAbsorb|VoltSwitch,TeraBlast,Thunderbolt,AirSlash|Timid|16,,,252,,240||,0,,,,|||,,,,,Water]Weezing-Galar||RockyHelmet|MistySurge|MistyExplosion,PainSplit,Defog,Taunt|Bold|252,,108,,104,44||,0,,,,|||,,,,,Poison]Tera Captain|Latias|Leftovers|Levitate|Recover,ThunderWave,MistBall,Roar|Bold|252,,64,108,68,16||,0,,,,|||,,,,,Steel]Hitmonlee||MistySeed|Unburden|SwordsDance,StoneEdge,MachPunch,HighJumpKick|Impish|,252,240,,,16|||||,,,,,Fighting"],
+ ["Volcanion||AssaultVest|WaterAbsorb|Flamethrower,SteamEruption,EarthPower,SludgeWave|Modest|252,,,252,4,||,0,,,,|||,,,,,Dragon]Brambleghast||Leftovers|WindRider|LeechSeed,StrengthSap,RapidSpin,Poltergeist|Jolly|252,,24,,,232|||||,,,,,Poison]Scream Tail||Leftovers|Protosynthesis|LightScreen,Wish,FireBlast,DazzlingGleam|Bold|252,,84,,,172||,0,,,,|||,,,,,Normal]Urshifu||HeavyDutyBoots|UnseenFist|SwordsDance,PoisonJab,WickedBlow,DrainPunch|Jolly|80,252,,,,176|||||,,,,,Water]Tera Captain|Kilowattrel|HeavyDutyBoots|VoltAbsorb|Roost,VoltSwitch,AirSlash,Discharge|Modest|196,,,252,,60||,0,,,,|||,,,,,Water]Goodra||AssaultVest|Gooey|SludgeBomb,Thunderbolt,Flamethrower,Earthquake|Sassy|252,,136,,120,|||||,,,,,Steel","Slowking-Galar||HeavyDutyBoots|Regenerator|FutureSight,ChillyReception,SludgeBomb,ThunderWave|Sassy|252,,16,,240,||,,,,,0|||,,,,,Water]Tera Captain|Scizor|HeavyDutyBoots|Technician|SwordsDance,KnockOff,Uturn,BulletPunch|Adamant|248,252,,,8,|||||,,,,,Fire]Great Tusk||Leftovers|Protosynthesis|Earthquake,StealthRock,KnockOff,RapidSpin|Impish|252,,220,,,36|||||,,,,,Water]Tera Captain|Sylveon|Leftovers|Pixilate|CalmMind,HyperVoice,Wish,Protect|Bold|252,,252,,4,||,0,,,,|||,,,,,Water]Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,FlipTurn,Taunt|Timid|,,,252,4,252|||||,,,,,Ice]Rotom-Mow||ChoiceScarf|Levitate|WillOWisp,VoltSwitch,LeafStorm,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric"],
+ ["Great Tusk||AssaultVest|Protosynthesis|HeadlongRush,HeavySlam,IceSpinner,RapidSpin|Jolly|128,,,,128,232|||||,,,,,Ground]Tera Captain|RagingBolt|ShucaBerry|Protosynthesis|CalmMind,Thunderbolt,DragonPulse,Thunderclap|Modest|252,,136,120,,||,20,,,,|||,,,,,Poison]Sneasler||ProtectivePads|PoisonTouch|CloseCombat,DireClaw,ThroatChop,Uturn|Adamant|24,252,,,,232|||||,,,,,Fighting]Rillaboom||AssaultVest|GrassySurge|WoodHammer,GrassyGlide,KnockOff,HighHorsepower|Careful|248,8,,,252,|||||,,,,,Grass]Empoleon||Leftovers|Torrent|Surf,KnockOff,Haze,Roost|Sassy|252,,,4,252,|||||,,,,,Water]Tera Captain|Mesprit|LightBall|Levitate|StealthRock,Psychic,Fling,HealingWish|Bold|248,,252,,8,|||||,,,,,Fairy","Garchomp||RockyHelmet|RoughSkin|StealthRock,Spikes,Earthquake,DragonTail|Impish|252,4,228,,,24|||||,,,,,Dragon]Iron Bundle||BoosterEnergy|QuarkDrive|IceBeam,HydroPump,FreezeDry,FlipTurn|Timid|,,,252,4,252|||||,,,,,Ice]Gholdengo||AirBalloon|GoodasGold|ShadowBall,MakeItRain,NastyPlot,Recover|Modest|252,,,252,4,||,0,,,,|||,,,,,Steel]Tera Captain|ThundurusTherian|ChoiceScarf|VoltAbsorb|Uturn,Thunderbolt,Psychic,GrassKnot|Modest|,,,252,4,252|||S||,,,,,Fighting]Tentacruel||BlackSludge|ClearBody|RapidSpin,KnockOff,FlipTurn,SludgeBomb|Hasty|,252,,4,,252|||||,,,,,Water]Tera Captain|OricorioSensu|HeavyDutyBoots|Dancer|QuiverDance,Roost,AirSlash,RevelationDance|Serious|4,,,252,,252||,0,,,,|S||,,,,,Steel"],
+ ["Iron Valiant||LumBerry|QuarkDrive|CloseCombat,SwordsDance,KnockOff,SpiritBreak|Jolly|,252,4,,,252|||||,,,,,Fairy]Cinderace||ChoiceBand|Libero|PyroBall,GunkShot,Uturn,SuckerPunch|Jolly|,252,,,4,252|||||,,,,,Fire]Regidrago||ChoiceScarf|DragonsMaw|Outrage,Earthquake,Explosion,DragonClaw|Adamant|,252,4,,,252|||||,,,,,Dragon]Landorus-Therian||RockyHelmet|Intimidate|Earthquake,StealthRock,Taunt,Uturn|Jolly|,252,,,4,252|||||,,,,,Ground]Tera Captain|Manaphy|Leftovers|Hydration|Scald,AlluringVoice,KnockOff,TailGlow|Timid|,,,252,4,252|||||,,,,,Steel]Tera Captain|Mismagius|Leftovers|Levitate|CalmMind,DrainingKiss,ShadowBall,Psyshock|Timid|,,88,164,4,252||,0,,,,|||,,,,,Fairy","Ogerpon-Wellspring||WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,PlayRough,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|Thundurus|HeavyDutyBoots|Prankster|ThunderWave,VoltSwitch,TeraBlast,DarkPulse|Modest|,,4,252,,252||,0,,,,|||,,,,,Ice]Sinistcha-Masterpiece||Leftovers|Heatproof|MatchaGotcha,StunSpore,Hex,StrengthSap|Bold|252,,180,,76,||,0,,,,|||,,,,,Ghost]Clefable||HeavyDutyBoots|Unaware|CosmicPower,StoredPower,ChargeBeam,Wish|Calm|252,,96,,160,||,0,,,,|||,,,,,Fairy]Tera Captain|HoopaUnbound|ChoiceScarf|Magician|Psychic,DarkPulse,EnergyBall,DestinyBond|Modest|,,,252,4,252||,0,,,,|||,,,,,Psychic]Maushold-Four||WideLens|Technician|TidyUp,PopulationBomb,Encore,Crunch|Jolly|64,188,,,4,252|||||,,,,,Normal"],
+ ["Tera Captain|Gholdengo|AirBalloon|GoodasGold|FocusBlast,ShadowBall,NastyPlot,TeraBlast|Modest|252,,12,244,,||,0,,,,|||,,,,,Fairy]Garchomp||SitrusBerry|RoughSkin|Earthquake,Spikes,StealthRock,Outrage|Impish|252,,252,,4,|||||,,,,,Dragon]Meowscarada||ChoiceScarf|Protean|FlowerTrick,TripleAxel,KnockOff,Uturn|Jolly|116,144,,,,248|||||,,,,,Grass]Milotic||HeavyDutyBoots|MarvelScale|Scald,Recover,MirrorCoat,Haze|Calm|252,,4,,252,||,0,,,,|||,,,,,Water]Maushold||WideLens|Technician|TidyUp,PopulationBomb,Bite,PlayRough|Jolly|,252,,,4,252|||||,,,,,Normal]Tera Captain|ArticunoGalar|HeavyDutyBoots|Competitive|FreezingGlare,Uturn,Hurricane,TeraBlast|Calm|,,,252,54,202|||||,,,,,Fairy","Terapagos||Leftovers|TeraShift|Rest,DarkPulse,IceBeam,Roar|Calm|252,,,4,252,||,15,,,,|||,,,,,Stellar]Swalot||RockyHelmet|StickyHold|PainSplit,ClearSmog,BodyPress,KnockOff|Impish|252,,252,,4,|||||,,,,,Poison]Uxie||ColburBerry|Levitate|ThunderWave,Encore,FoulPlay,Uturn|Impish|252,,252,,4,|||||,,,,,Psychic]Garchomp||RockyHelmet|RoughSkin|StealthRock,Earthquake,StoneEdge,SwordsDance|Jolly|,252,,,4,252|||S||,,,,,Dragon]Tera Captain|Ogerpon|LumBerry|Defiant|IvyCudgel,KnockOff,Encore,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Diancie|AssaultVest|ClearBody|DiamondStorm,EarthPower,Moonblast,BodyPress|Sassy|252,4,,,252,|||||,,,,,Dark"],
+ ["Iron Valiant||LifeOrb|QuarkDrive|Psychic,Moonblast,AuraSphere,Encore|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Scizor||HeavyDutyBoots|Technician|Uturn,BulletPunch,KnockOff,Defog|Adamant|248,104,,,156,|||||,,,,,Bug]Garchomp||LoadedDice|RoughSkin|Earthquake,StealthRock,SwordsDance,ScaleShot|Jolly|112,252,,,,144|||||,,,,,Dragon]Rotom-Wash||RindoBerry|Levitate|VoltSwitch,HydroPump,ThunderWave,PainSplit|Calm|248,,36,,196,28||,0,,,,|||,,,,,Electric]Skuntank||ClearAmulet|Aftermath|KnockOff,Taunt,Memento,PoisonJab|Jolly|72,252,,,,184|||||,,,,,Poison]Tera Captain|Skeledirge|HeavyDutyBoots|Unaware|SlackOff,TorchSong,Encore,TeraBlast|Calm|248,,164,,96,||,0,,,,|||,,,,,Fairy","Primarina||AssaultVest|Torrent|FlipTurn,EnergyBall,Moonblast,Surf|Modest|252,,96,160,,|||||,,,,,Water]Tera Captain|Latias|SoulDew|Levitate|MistBall,DracoMeteor,TeraBlast,Agility|Modest|184,,,252,,72||,0,,,,|||,,,,,Fire]Tera Captain|Kilowattrel|HeavyDutyBoots|VoltAbsorb|VoltSwitch,AirSlash,Roost,Discharge|Timid|72,,,252,,184||,0,,,,|||,,,,,Ice]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|HornLeech,KnockOff,IvyCudgel,SwordsDance|Jolly|64,252,,,,192|||||,,,,,Fire]Iron Treads||Leftovers|QuarkDrive|IceSpinner,RapidSpin,Earthquake,VoltSwitch|Jolly|32,252,,,,224|||||,,,,,Ground]Smeargle||FocusSash|OwnTempo|Spore,StickyWeb,StealthRock,Nuzzle|Impish|252,4,252,,,|||||,,,,,Normal"],
+ ["Fezandipiti||ShucaBerry|ToxicChain|Uturn,Roost,HeatWave,Moonblast|Bold|248,,144,,112,|||||,,,,,Poison]Tera Captain|Toedscruel|HeavyDutyBoots|MyceliumMight|RapidSpin,EarthPower,TeraBlast,GigaDrain|Modest|180,,20,28,132,148|||||,,,,,Fire]Archaludon||AssaultVest|Stamina|DracoMeteor,BodyPress,Thunderbolt,FlashCannon|Modest|200,,,104,204,||,0,,,,|||,,,,,Steel]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,KnockOff,Synthesis,Uturn|Jolly|120,128,4,,4,252|||||,,,,,Water]Iron Hands||AssaultVest|QuarkDrive|DrainPunch,IcePunch,SupercellSlam,Earthquake|Adamant|,140,116,,252,|||||,,,,,Fighting]Kleavor||ChoiceScarf|Sharpness|CloseCombat,StoneEdge,XScissor,Uturn|Jolly|72,252,4,,8,172|||||,,,,,Bug","Cinderace||LumBerry|Libero|HighJumpKick,ZenHeadbutt,ElectroBall,BulkUp|Naive|,252,,4,,252|||||,,,,,Fire]Tera Captain|Latias|SoulDew|Levitate|DracoMeteor,Psyshock,HealingWish,Recover|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,HydroPump,Encore,Uturn|Modest|80,,,252,,176|||||,,,,,Ice]Sinistcha||ColburBerry|Hospitality|MatchaGotcha,ShadowBall,CalmMind,StrengthSap|Bold|252,,160,,,96||,0,,,,|||,,,,,Grass]Iron Treads||AssaultVest|QuarkDrive|EarthPower,Thunder,Megahorn,RapidSpin|Naive|48,,,252,,208|||||,,,,,Ground]Tera Captain|Diancie|Leftovers|ClearBody|BodyPress,DiamondStorm,Rest,SleepTalk|Careful|252,,68,,112,76|||||,,,,,Fighting"],
+ ["Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,MightyCleave,Megahorn,PsychoCut|Jolly|112,252,,,,144|||||,,,,,Rock]Chi-Yu||HeavyDutyBoots|BeadsofRuin|Ruination,WillOWisp,DarkPulse,FireBlast|Timid|80,,,252,,176||,0,,,,|||,,,,,Dark]Great Tusk||PayapaBerry|Protosynthesis|SupercellSlam,BulkUp,IceSpinner,HeadlongRush|Adamant|248,252,,,8,|||||,,,,,Ground]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,Trailblaze,HornLeech|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|Revavroom|ExpertBelt|Filter|TemperFlare,TeraBlast,ShiftGear,GunkShot|Adamant|64,252,,,,192|||||,,,,,Water]Tera Captain|Eelektross|AssaultVest|Levitate|Uturn,KnockOff,SupercellSlam,DragonTail|Careful|248,,8,,252,|||||,,,,,Poison","Tera Captain|Annihilape|ChoiceScarf|Defiant|CloseCombat,RageFist,Earthquake,Uturn|Jolly|,252,,,24,232|||||,,,,,Fighting]Corviknight||RockyHelmet|Pressure|BodyPress,Uturn,Defog,Roost|Impish|252,4,252,,,|||||,,,,,Flying]Ting-Lu||Leftovers|VesselofRuin|Earthquake,Whirlwind,StealthRock,Spikes|Impish|252,,100,,156,|||||,,,,,Dark]Cinderace||HeavyDutyBoots|Libero|PyroBall,HighJumpKick,Uturn,CourtChange|Jolly|,252,,,72,184|||||,,,,,Fire]Primarina||Leftovers|Torrent|Surf,Moonblast,FlipTurn,Haze|Calm|252,,,4,252,|||||,,,,,Water]Latios||Leftovers|Levitate|DracoMeteor,LusterPurge,AuraSphere,CalmMind|Timid|,,4,252,,252||,0,,,,|||,,,,,Dragon"],
+ ["Garchomp||RockyHelmet|RoughSkin|StealthRock,Spikes,PoisonJab,Earthquake|Jolly|,,136,,120,252|||||,,,,,Dragon]Greninja-Bond||HeavyDutyBoots|BattleBond|WaterShuriken,Surf,DarkPulse,Haze|Timid|,,,252,4,252|||||,,,,,Water]Iron Moth||BoosterEnergy|QuarkDrive|FieryDance,Discharge,BugBuzz,TeraBlast|Timid|,,124,132,,252||,0,,,,|||,,,,,Fairy]Brambleghast||SitrusBerry|Infiltrator|RapidSpin,Poltergeist,PowerWhip,StrengthSap|Jolly|,252,,,4,252|||||,,,,,Grass]Rotom-Wash||LaggingTail|Levitate|Trick,WillOWisp,VoltSwitch,HydroPump|Modest|240,,252,16,,||,0,,,,|||,,,,,Electric]Braviary||ChoiceScarf|SheerForce|BraveBird,DoubleEdge,ZenHeadbutt,IronHead|Jolly|,252,,,4,252|||||,,,,,Flying","Tornadus-Therian||ChoiceScarf|Regenerator|BleakwindStorm,IcyWind,SludgeBomb,Uturn|Timid|,,,252,4,252|||||,,,,,Flying]Gouging Fire||BoosterEnergy|Protosynthesis|HeatCrash,DragonDance,MorningSun,Outrage|Adamant|,252,,,4,252|||||,,,,,Fire]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,PowerWhip,Encore|Jolly|,252,,,4,252|||||,,,,,Water]Iron Treads||Leftovers|QuarkDrive|Earthquake,KnockOff,IceSpinner,RapidSpin|Jolly|4,252,,,,224|||||,,,,,Ground]Tinkaton||Leftovers|MoldBreaker|StealthRock,GigatonHammer,KnockOff,Encore|Careful|252,60,8,,108,80|||||,,,,,Ghost]Tera Captain|Lokix|ChoiceBand|TintedLens|FirstImpression,Uturn,KnockOff,SuckerPunch|Jolly|,252,,,4,252|||||,,,,,Bug"],
+ ["Urshifu||PunchingGlove|UnseenFist|WickedBlow,Taunt,SuckerPunch,IronHead|Jolly|32,252,,,,224|||||,,,,,Fighting]Tsareena||RockyHelmet|QueenlyMajesty|Synthesis,RapidSpin,Uturn,PowerWhip|Impish|248,,252,,8,|||S||,,,,,Grass]Weezing||RockyHelmet|NeutralizingGas|ToxicSpikes,PainSplit,WillOWisp,Flamethrower|Bold|248,,252,,8,||,0,,,,|||,,,,,Poison]Enamorus||HeavyDutyBoots|Contrary|Moonblast,Taunt,EarthPower,Superpower|Timid|48,,,252,,208|||||,,,,,Fairy]Tera Captain|Regidrago|LumBerry|DragonsMaw|DragonDance,TeraBlast,DragonClaw,Earthquake|Adamant|,252,52,,,204|||||,,,,,Steel]Gastrodon||RindoBerry|StormDrain|Recover,Earthquake,MirrorCoat,StealthRock|Calm|248,,48,,212,|||||,,,,,Water","Rillaboom||TerrainExtender|GrassySurge|Uturn,HighHorsepower,Taunt,DrumBeating|Adamant|248,168,,,,92|||||,,,,,Grass]Tera Captain|Sylveon|AssaultVest|Pixilate|TeraBlast,DrainingKiss,HyperVoice,MagicalLeaf|Modest|240,,,252,,16||,0,,,,|||,,,,,Ground]Tera Captain|RagingBolt|Leftovers|Protosynthesis|CalmMind,Thunderbolt,DragonPulse,Thunderclap|Bold|248,,116,,,144||,20,,,,|||,,,,,Steel]Oricorio||HeavyDutyBoots|Dancer|Uturn,RevelationDance,Roost,Defog|Timid|248,,,76,,184|||||,,,,,Fire]Heatran||PowerHerb|FlameBody|MagmaStorm,StealthRock,EarthPower,SolarBeam|Calm|248,,,,184,76||,0,,,,|||,,,,,Fire]Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,WaveCrash,ZenHeadbutt,FlipTurn|Adamant|24,252,,,,232|||||,,,,,Water"],
+ ["Palafin||LumBerry|ZerotoHero|BulkUp,JetPunch,Rest,SleepTalk|Careful|252,,4,,252,|||||,,,,,Water]Zapdos||Leftovers|Pressure|Thunderbolt,HeatWave,Roost,Uturn|Calm|248,,16,24,168,52|||||,,,,,Electric]Darkrai||Leftovers|BadDreams|PoisonJab,DrainPunch,SwordsDance,KnockOff|Adamant|,252,,,4,252|||||,,,,,Dark]Tera Captain|Metagross|LiechiBerry|ClearBody|Agility,Substitute,MeteorMash,Earthquake|Adamant|56,252,,,,200|||||,,,,,Water]Glimmora||BlackSludge|Corrosion|Toxic,StealthRock,SpikyShield,PowerGem|Calm|248,,,,228,32||,0,,,,|||,,,,,Rock]Brambleghast||HeavyDutyBoots|WindRider|RapidSpin,PowerWhip,Poltergeist,StrengthSap|Jolly|80,252,,,,176|||||,,,,,Grass","Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|DracoMeteor,HydroSteam,Flamethrower,DragonPulse|Timid|72,,,252,,184||,0,,,,|||,,,,,Water]Torkoal||HeatRock|Drought|WeatherBall,RapidSpin,SolarBeam,WillOWisp|Bold|248,,252,8,,|||||,,,,,Fire]Hoopa-Unbound||AssaultVest|Magician|KnockOff,Psychic,DrainPunch,IcePunch|Lonely|248,48,,,212,|||||,,,,,Psychic]Ting-Lu||Leftovers|VesselofRuin|Earthquake,StealthRock,Whirlwind,StoneEdge|Careful|248,,8,,252,|||||,,,,,Dark]Arbok||RockyHelmet|Intimidate|Glare,KnockOff,PainSplit,PoisonJab|Impish|248,8,252,,,|||||,,,,,Poison]Enamorus||ChoiceScarf|Contrary|Moonblast,EarthPower,MysticalFire,HealingWish|Modest|,,4,252,,252||,0,,,,|S||,,,,,Fairy"],
+ ["Corviknight||RockyHelmet|MirrorArmor|Roost,Uturn,Defog,IronHead|Impish|248,8,252,,,|||||,,,,,Flying]Meowscarada||ProtectivePads|Overgrow|Spikes,Uturn,SuckerPunch,KnockOff|Adamant|,252,4,,,252|||||,,,,,Grass]Iron Bundle||ChoiceScarf|QuarkDrive|FlipTurn,HydroPump,IceBeam,FreezeDry|Modest|,,80,252,,176|||||,,,,,Ice]Tera Captain|BraviaryHisui|ChoiceSpecs|TintedLens|EsperWing,VacuumWave,Hurricane,Psyshock|Timid|68,,,252,,188||,0,,,,|S||,,,,,Psychic]Tera Captain|GreatTusk|WeaknessPolicy|Protosynthesis|RapidSpin,BulkUp,Earthquake,StoneEdge|Jolly|248,,60,,,200|||||,,,,,Grass]Ceruledge||FocusSash|WeakArmor|BitterBlade,SwordsDance,ShadowSneak,DestinyBond|Jolly|40,252,,,,216|||||,,,,,Fire","Tera Captain|Meowscarada|ChoiceBand|Protean|TeraBlast,KnockOff,TripleAxel,Uturn|Jolly|,252,,,,252|||||,,,,,Electric]Slowking-Galar||AssaultVest|Regenerator|HydroPump,FireBlast,Psyshock,SludgeBomb|Calm|252,,,76,180,||,0,,,,|||,,,,,Poison]Tera Captain|Drifblim|WeaknessPolicy|Unburden|StrengthSap,CalmMind,StoredPower,TeraBlast|Bold|252,,180,,76,||,0,,,,|||,,,,,Electric]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|IvyCudgel,Trailblaze,Substitute,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Water]Moltres||HeavyDutyBoots|Pressure|ScorchingSands,Uturn,Tailwind,Roost|Bold|248,,252,8,,|||||,,,,,Fire]Iron Boulder||BoosterEnergy|QuarkDrive|Agility,MightyCleave,CloseCombat,ZenHeadbutt|Adamant|,252,,,4,252|||||,,,,,Rock"],
+ ["Darkrai||ChoiceSpecs|BadDreams|DarkPulse,IceBeam,Psychic,Hypnosis|Timid|40,,,252,,216||,0,,,,|||,,,,,Dark]Tera Captain|Latias|Leftovers|Levitate|CalmMind,MistBall,DragonPulse,Recover|Timid|252,,72,,,184||,0,,,,|||,,,,,Poison]Urshifu-Rapid-Strike||ChoiceBand|UnseenFist|SurgingStrikes,CloseCombat,AquaJet,Uturn|Jolly|104,252,,,,152|||||,,,,,Fighting]Excadrill||FocusSash|MoldBreaker|SwordsDance,HighHorsepower,IronHead,XScissor|Jolly|,252,,,4,252|||||,,,,,Ground]Fezandipiti||RockyHelmet|ToxicChain|SwordsDance,PlayRough,Uturn,Roost|Jolly|252,,208,,,48|||||,,,,,Poison]Brambleghast||RockyHelmet|WindRider|Spikes,NightShade,RapidSpin,StrengthSap|Jolly|252,,136,,,120|||||,,,,,Grass","Rillaboom||AssaultVest|GrassySurge|GrassyGlide,KnockOff,HighHorsepower,Uturn|Adamant|252,252,4,,,|||||,,,,,Grass]Gouging Fire||Leftovers|Protosynthesis|HeatCrash,BurningBulwark,Outrage,DragonDance|Jolly|52,200,,,24,232|||||,,,,,Fire]Tera Captain|Manaphy|Leftovers|Hydration|Scald,HeartSwap,Substitute,AlluringVoice|Timid|252,,,24,,232||,0,,,,|||,,,,,Fairy]Tera Captain|Mesprit|GrassySeed|Levitate|CalmMind,StoredPower,DrainingKiss,Imprison|Modest|244,,,252,4,8||,0,,,,|||,,,,,Dark]Sneasler||ChoiceScarf|PoisonTouch|DireClaw,CloseCombat,NightSlash,Uturn|Jolly|72,252,,,4,176|||||,,,,,Fighting]Braviary||HeavyDutyBoots|Defiant|BraveBird,Defog,Roost,CloseCombat|Impish|252,56,176,,16,8|||||,,,,,Normal"],
+ ["Torkoal||HeatRock|Drought|WillOWisp,RapidSpin,Flamethrower,EarthPower|Modest|248,,,8,252,|||||,,,,,Fire]Flamigo||ChoiceScarf|Scrappy|CloseCombat,BraveBird,ThroatChop,Uturn|Adamant|,252,,,112,144|||||,,,,,Flying]Tera Captain|Venusaur|LifeOrb|Chlorophyll|EarthPower,SludgeBomb,GigaDrain,SleepPowder|Modest|252,,,252,4,||,0,,,,|||,,,,,Water]Walking Wake||ChoiceSpecs|Protosynthesis|HydroSteam,DracoMeteor,Roar,Flamethrower|Timid|8,4,,244,,252||,0,,,,|||,,,,,Water]Ting-Lu||Leftovers|VesselofRuin|Spikes,Whirlwind,Earthquake,BodyPress|Careful|252,,4,,252,|||||,,,,,Dark]Gholdengo||AirBalloon|GoodasGold|ShadowBall,MakeItRain,PowerGem,Thunderbolt|Modest|252,,,252,4,||,0,,,,|||,,,,,Steel","Tera Captain|Serperior|AssaultVest|Overgrow|ScaleShot,Trailblaze,LeafStorm,TeraBlast|Timid|24,,,252,,232|||||,,,,,Rock]Gouging Fire||LumBerry|Protosynthesis|DragonDance,FireSpin,Earthquake,HeatCrash|Adamant|192,252,,,,64|||||,,,,,Ground]Cyclizar||HeavyDutyBoots|Regenerator|ShedTail,Endeavor,ScaleShot,RapidSpin|Naive|248,,92,,,168|||||,,,,,Poison]Iron Treads||ChopleBerry|QuarkDrive|IceSpinner,KnockOff,RapidSpin,Earthquake|Adamant|212,112,,,,184|||||,,,,,Poison]Greninja-Bond||SalacBerry|BattleBond|IceBeam,DarkPulse,WaterShuriken,Substitute|Hasty|96,,,252,,160|||||,,,,,Ice]Tera Captain|ArticunoGalar|ChoiceScarf|Competitive|AirSlash,Trick,TeraBlast,Uturn|Timid|248,,,,92,168|||||,,,,,Dark"],
+ ["Ninetales-Alola||LightClay|SnowWarning|AuroraVeil,Blizzard,Moonblast,Charm|Timid|4,,,252,,252||,0,,,,|||,,,,,Ice]Baxcalibur||RoseliBerry|ThermalExchange|DragonDance,GlaiveRush,IcicleCrash,Earthquake|Adamant|,252,4,,,252|||||,,,,,Dragon]Tera Captain|Espathra|Leftovers|SpeedBoost|CalmMind,StoredPower,DazzlingGleam,TeraBlast|Modest|252,,,252,4,||,0,,,,|||,,,,,Ground]Cyclizar||HeavyDutyBoots|Regenerator|RapidSpin,KnockOff,ShedTail,Uturn|Timid|252,,252,,4,|||||,,,,,Dragon]Manaphy||Leftovers|Hydration|TailGlow,Surf,IceBeam,EnergyBall|Timid|,,4,252,,252||,0,,,,|||,,,,,Water]Tera Captain|Pecharunt|Leftovers|PoisonPuppeteer|NastyPlot,MalignantChain,Hex,Recover|Modest|,,,252,252,4||,0,,,,|||,,,,,Grass","Samurott-Hisui||ChoiceScarf|Sharpness|SmartStrike,SacredSword,Encore,CeaselessEdge|Jolly|,252,4,,,252|||||,,,,,Water]Weezing-Galar||CustapBerry|MistySurge|StrangeSteam,Endure,DestinyBond,Defog|Bold|252,,152,24,80,||,0,,,,|||,,,,,Poison]Heatran||ShucaBerry|FlameBody|Taunt,FlashCannon,StealthRock,FireSpin|Calm|104,,252,24,112,16||,0,,,,|||,,,,,Fire]Tera Captain|RagingBolt|MistySeed|Protosynthesis|Thunderclap,DragonPulse,Thunderbolt,Roar|Modest|168,,88,252,,||,20,,,,|||,,,,,Steel]Electrode||FocusSash|Aftermath|ThunderWave,VoltSwitch,Taunt,ElectricTerrain|Timid|100,,252,8,,148||,0,,,,|||,,,,,Electric]Iron Valiant||FocusSash|QuarkDrive|SwordsDance,KnockOff,ShadowSneak,CloseCombat|Jolly|,252,,,4,252|||||,,,,,Fairy"],
+ ["Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Substitute,Synthesis|Timid|56,,4,216,,232||,0,,,,|||,,,,,Ice]Mamoswine||AssaultVest|ThickFat|Earthquake,IcicleCrash,IceShard,Trailblaze|Adamant|,212,,,56,240|||||,,,,,Ice]Tinkaton||RockyHelmet|Pickpocket|PlayRough,Reflect,KnockOff,StealthRock|Jolly|248,,60,,,200|||||,,,,,Fairy]Quaquaval||ChoiceScarf|Moxie|AquaStep,TripleAxel,CloseCombat,Uturn|Adamant|56,252,,,,200|||||,,,,,Water]Zapdos||RockyHelmet|Static|VoltSwitch,Hurricane,HeatWave,Roost|Bold|248,,252,8,,||,0,,,,|||,,,,,Electric]Greninja-Bond||LifeOrb|BattleBond|HydroPump,IceBeam,DarkPulse,WaterShuriken|Timid|56,,,252,,200|||||,,,,,Water","Dragalge||BlackSludge|Adaptability|SludgeBomb,FlipTurn,Thunderbolt,Haze|Sassy|252,,84,36,136,|||||,,,,,Poison]Great Tusk||BoosterEnergy|Protosynthesis|SupercellSlam,HeadlongRush,HeadSmash,BulkUp|Jolly|212,4,,,40,252|||||,,,,,Ground]Weavile||ProtectivePads|Pressure|TripleAxel,IceShard,Trailblaze,LowKick|Jolly|20,252,,,4,232|||||,,,,,Dark]Zapdos||HeavyDutyBoots|Static|Hurricane,Discharge,Roost,ThunderWave|Bold|124,,84,24,32,244||,0,,,,|||,,,,,Electric]Tinkaton||Leftovers|MoldBreaker|GigatonHammer,ThunderWave,StealthRock,PlayRough|Careful|252,,42,,214,|||||,,,,,Fairy]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|HornLeech,IvyCudgel,Spikes,Uturn|Jolly|124,184,48,,84,68|||||,,,,,Water"],
+ ["Tera Captain|Raikou|Leftovers|Pressure|CalmMind,Agility,Thunderbolt,TeraBlast|Modest|,,,252,4,252||,0,,,,|||,,,,,Water]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,Trailblaze,IvyCudgel,KnockOff|Jolly|,252,,,4,252|||||,,,,,Fire]Corviknight||Leftovers|MirrorArmor|Uturn,DrillPeck,Defog,Roost|Impish|252,4,252,,,|||||,,,,,Flying]Urshifu||ChoiceScarf|UnseenFist|Uturn,CloseCombat,WickedBlow,IcePunch|Jolly|,252,,,4,252|||||,,,,,Fighting]Tera Captain|Araquanid|AssaultVest|WaterBubble|Liquidation,LeechLife,PoisonJab,Crunch|Adamant|248,252,,,8,|||||,,,,,Water]Weezing-Galar||AirBalloon|NeutralizingGas|Toxic,SludgeWave,Haze,WillOWisp|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison","Arcanine-Hisui||HeavyDutyBoots|RockHead|WillOWisp,FlameCharge,HeadSmash,FlareBlitz|Jolly|,252,,,4,252|||||,,,,,Fire]Landorus||LifeOrb|SheerForce|EarthPower,NastyPlot,SludgeWave,Psychic|Timid|32,,,252,,224||,0,,,,|||,,,,,Ground]Tera Captain|Serperior|HeavyDutyBoots|Contrary|LeafStorm,TeraBlast,Synthesis,Glare|Modest|12,,,252,,244||,0,,,,|||,,,,,Fairy]Sneasler||RazorClaw|PoisonTouch|CloseCombat,DireClaw,SwordsDance,QuickAttack|Jolly|40,252,,,,216|||||,,,,,Fighting]Spidops||FocusSash|Stakeout|StickyWeb,CircleThrow,Spikes,KnockOff|Adamant|248,252,8,,,|||||,,,,,Bug]Gholdengo||Leftovers|GoodasGold|MakeItRain,Thunderbolt,DazzlingGleam,NastyPlot|Modest|,,252,252,,4||,0,,,,|||,,,,,Steel"],
+ ["Tera Captain|Landorus|YacheBerry|SheerForce|TeraBlast,EarthPower,StealthRock,SludgeWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Grass]Annihilape||ChoiceScarf|Defiant|FinalGambit,Uturn,CloseCombat,IcePunch|Jolly|252,4,,,,252|||||,,,,,Fighting]Kingambit||LumBerry|Defiant|SwordsDance,SuckerPunch,KowtowCleave,IronHead|Adamant|252,252,,,4,|||||,,,,,Dark]Cinderace||HeavyDutyBoots|Blaze|PyroBall,CourtChange,WillOWisp,Uturn|Jolly|252,4,,,,252|||||,,,,,Fire]Walking Wake||ChoiceScarf|Protosynthesis|DracoMeteor,DragonPulse,HydroPump,Flamethrower|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Tera Captain|Sylveon|Leftovers|Pixilate|HyperVoice,TeraBlast,Wish,Protect|Bold|252,,252,4,,||,0,,,,|||,,,,,Fire","Cinderace||HeavyDutyBoots|Libero|HighJumpKick,GunkShot,Uturn,CourtChange|Jolly|80,252,,,,176|||||,,,,,Fire]Rotom-Wash||ChoiceScarf|Levitate|HydroPump,Thunderbolt,ThunderWave,VoltSwitch|Timid|,,68,252,,188||,0,,,,|||,,,,,Electric]Garchomp||LoadedDice|RoughSkin|ScaleShot,Substitute,SwordsDance,Earthquake|Jolly|,252,8,,,248|||||,,,,,Dragon]Scizor||OccaBerry|Technician|SwordsDance,BulletPunch,CloseCombat,Counter|Impish|252,120,136,,,|||||,,,,,Bug]Ninetales-Alola||LightClay|SnowWarning|FreezeDry,Moonblast,Encore,AuroraVeil|Timid|252,,,64,,192||,0,,,,|||,,,,,Ice]Tera Captain|Cetitan|SitrusBerry|SlushRush|Earthquake,BellyDrum,IceShard,IceSpinner|Jolly|220,108,,,,180|||||,,,,,Flying"],
+ ["Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,Psyshock,ShadowBall,VacuumWave|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Tera Captain|Suicune|Leftovers|Pressure|Substitute,CalmMind,Scald,IceBeam|Bold|252,,244,,,12||,0,,,,|||,,,,,Grass]Tera Captain|Zapdos|HeavyDutyBoots|Static|Discharge,Hurricane,VoltSwitch,Roost|Timid|252,,,120,,136||,0,,,,|||,,,,,Water]Iron Treads||BoosterEnergy|QuarkDrive|Earthquake,IceSpinner,StealthRock,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Ground]Incineroar||HeavyDutyBoots|Intimidate|KnockOff,WillOWisp,FlareBlitz,PartingShot|Careful|160,,,,252,96|||||,,,,,Fire]Sinistcha||Leftovers|Heatproof|CalmMind,MatchaGotcha,ShadowBall,StrengthSap|Bold|252,,160,84,,12||,0,,,,|||,,,,,Grass","Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,SludgeWave,AirSlash,EnergyBall|Timid|,,252,,,252||,0,,,,|S||,,,,,Fairy]Electivire||WiseGlasses|MotorDrive|Thunderbolt,Flamethrower,FocusBlast,Earthquake|Hasty|,4,,252,,252|||S||,,,,,Electric]Donphan||RockyHelmet|Sturdy|AncientPower,GunkShot,RapidSpin,StealthRock|Bold|252,,108,,148,|||S||,,,,,Ghost]Samurott-Hisui||RedCard|Sharpness|AquaCutter,CeaselessEdge,Detect,SacredSword|Timid|92,,60,140,28,188|||||,,,,,Water]Tera Captain|Sinistcha|FocusSash|Heatproof|TeraBlast,TrickRoom,Poltergeist,CalmMind|Quiet|4,252,,252,,|||||,,,,,Fire]Dachsbun||Leftovers|WellBakedBody|BodyPress,Endeavor,DrainingKiss,Wish|Quiet|136,,128,152,92,||,0,,,,|||,,,,,Fairy"],
+ ["Ting-Lu||Leftovers|VesselofRuin|StealthRock,Earthquake,Ruination,Protect|Sassy|252,4,,,252,|||||,,,,,Dark]Tera Captain|Gholdengo|LifeOrb|GoodasGold|TeraBlast,ShadowBall,MakeItRain,Recover|Modest|156,,,252,4,96||,0,,,,|||,,,,,Fighting]Palafin||ChoiceBand|ZerotoHero|WaveCrash,FlipTurn,JetPunch,IcePunch|Jolly|,252,,,4,252|||||,,,,,Water]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|WoodHammer,StompingTantrum,IvyCudgel,KnockOff|Jolly|8,252,,,,248|||||,,,,,Fire]Cyclizar||ChoiceSpecs|Regenerator|DracoMeteor,HyperVoice,MudShot,RapidSpin|Timid|96,,,252,,160|||||,,,,,Dragon]Tera Captain|EnamorusTherian|AssaultVest|Overcoat|EarthPower,Moonblast,AlluringVoice,TeraBlast|Quiet|248,8,,252,,||,0,,,,|||,,,,,Water","Tera Captain|Terrakion|LifeOrb|Justified|StoneEdge,CloseCombat,Earthquake,SwordsDance|Jolly|,252,,,64,192|||||,,,,,Ghost]Heatran||Leftovers|FlameBody|MagmaStorm,PowerGem,BodyPress,FlashCannon|Bold|52,,252,,,204||,0,,,,|||,,,,,Fire]Darkrai||LifeOrb|BadDreams|Hypnosis,NastyPlot,DarkPulse,IceBeam|Timid|,,,252,32,224||,0,,,,|||,,,,,Dark]Mismagius||ChoiceSpecs|Levitate|DrainingKiss,Thunder,MysticalFire,PowerGem|Timid|44,,,248,,216||,0,,,,|||,,,,,Ghost]Smeargle||FocusSash|Technician|StoneAxe,Nuzzle,PopulationBomb,StickyWeb|Adamant|,252,,,36,220|||||,,,,,Normal]Gliscor||ToxicOrb|PoisonHeal|Facade,IceFang,KnockOff,SwordsDance|Jolly|180,160,,,,168|||||,,,,,Ground"],
+ ["Tera Captain|Comfey|LifeOrb|Triage|DrainingKiss,GigaDrain,TeraBlast,CalmMind|Modest|248,,8,252,,||,0,,,,|S||,,,,,Ground]Scizor||ChoiceBand|Swarm|BulletPunch,KnockOff,BugBite,Uturn|Adamant|248,252,8,,,|||||,,,,,Bug]Cinderace||HeavyDutyBoots|Libero|PyroBall,HighJumpKick,Uturn,CourtChange|Jolly|32,252,,,,224|||||,,,,,Fire]Slowking||AssaultVest|Regenerator|Scald,Psyshock,IceBeam,FutureSight|Calm|248,,,252,8,||,0,,,,|||,,,,,Water]Garchomp||LoadedDice|RoughSkin|Earthquake,ScaleShot,FireFang,SwordsDance|Jolly|8,252,,,,248|||||,,,,,Dragon]Tera Captain|Raikou|Leftovers|Pressure|Thunderbolt,Scald,VoltSwitch,CalmMind|Timid|,,,252,4,252||,0,,,,|||,,,,,Water","Iron Bundle||ChoiceSpecs|QuarkDrive|IceBeam,FlipTurn,FreezeDry,HydroPump|Modest|,,,252,4,252|||||,,,,,Ice]Cyclizar||HeavyDutyBoots|Regenerator|ShedTail,RapidSpin,KnockOff,Uturn|Jolly|252,,,,4,252|||||,,,,,Dragon]Tera Captain|Polteageist|WhiteHerb|CursedBody|ShellSmash,ShadowBall,StoredPower,Memento|Modest|,,,252,4,252||,0,,,,|||,,,,,Ghost]Tera Captain|Manaphy|Leftovers|Hydration|TailGlow,Scald,EnergyBall,Whirlpool|Timid|,,,252,4,252||,0,,,,|||,,,,,Ground]Klefki||LightClay|Prankster|LightScreen,Reflect,Spikes,ThunderWave|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel]Cinccino||LoadedDice|Technician|TidyUp,TailSlap,RockBlast,KnockOff|Adamant|,252,,,4,252|||||,,,,,Normal"],
+ ["Iron Crown||BoosterEnergy|QuarkDrive|TachyonCutter,Psychic,FocusBlast,CalmMind|Timid|84,,,172,,252||,20,,,,|||,,,,,Steel]Rillaboom||MuscleBand|GrassySurge|FakeOut,GrassyGlide,KnockOff,Uturn|Adamant|240,252,,,16,|||||,,,,,Grass]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,EnergyBall,SludgeWave,Substitute|Timid|120,,4,132,,252||,0,,,,|||,,,,,Fire]Greninja-Bond||LifeOrb|BattleBond|DarkPulse,Extrasensory,IceBeam,Surf|Modest|,,4,252,,252|||||,,,,,Water]Comfey||KebiaBerry|Triage|DrainingKiss,GigaDrain,StoredPower,CalmMind|Timid|192,,,172,,144||,0,,,,|||,,,,,Fairy]Great Tusk||AssaultVest|Protosynthesis|HeadlongRush,IceSpinner,CloseCombat,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Ground","Slowking-Galar||ColburBerry|Regenerator|ThunderWave,SlackOff,SludgeBomb,FutureSight|Calm|248,,80,,180,||,0,,,,|||,,,,,Poison]Enamorus||HeavyDutyBoots|CuteCharm|Moonblast,EarthPower,CalmMind,Agility|Timid|64,,,252,,192||,0,,,,|||,,,,,Fairy]Darkrai||ChoiceSpecs|BadDreams|DarkPulse,Trick,Psychic,SludgeBomb|Timid|16,,4,252,4,232||,0,,,,|||,,,,,Dark]Glimmora||BlackSludge|ToxicDebris|Substitute,EnergyBall,SludgeWave,EarthPower|Timid|8,,,252,,248||,0,,,,|||,,,,,Rock]Tera Captain|Quaquaval|RindoBerry|Moxie|AquaStep,AquaJet,IceSpinner,BrickBreak|Adamant|72,252,,,,184|||||,,,,,Water]Tera Captain|Cetitan|AssaultVest|ThickFat|HeavySlam,IceShard,PlayRough,Earthquake|Careful|,252,4,,252,|||||,,,,,Water"],
+ ["Cyclizar||HeavyDutyBoots|Regenerator|ShedTail,RapidSpin,Taunt,Overheat|Jolly|252,4,,,,252|||||,,,,,Dragon]Tera Captain|ArcanineHisui|ChoiceBand|RockHead|ExtremeSpeed,HeadSmash,FlareBlitz,RockSlide|Adamant|132,252,60,,64,|||S||,,,,,Normal]Tera Captain|Azumarill|ExpertBelt|HugePower|PlayRough,BellyDrum,Superpower,AquaJet|Adamant|172,252,,,,84|||||,,,,,Steel]Goodra-Hisui||Leftovers|Gooey|HeavySlam,Earthquake,Flamethrower,KnockOff|Sassy|4,,252,,252,|||S||,,,,,Steel]Landorus-Therian||LifeOrb|Intimidate|SwordsDance,Earthquake,Fly,Outrage|Adamant|4,252,,,,252|||||,,,,,Ground]Amoonguss||BlackSludge|Regenerator|Spore,Toxic,PollenPuff,GigaDrain|Calm|252,,,4,252,||,0,,,,|||,,,,,Grass","Quagsire||Leftovers|Unaware|Scald,Recover,SeismicToss,StealthRock|Bold|252,,252,,4,||,0,,,,|||,,,,,Water]Chi-Yu||HeavyDutyBoots|BeadsofRuin|NastyPlot,DarkPulse,Overheat,Flamethrower|Timid|68,,,252,4,184||,0,,,,|||,,,,,Dark]Rillaboom||Leftovers|GrassySurge|GrassyGlide,Uturn,StompingTantrum,LeechSeed|Adamant|252,252,4,,,|||||,,,,,Grass]Sneasler||ProtectivePads|PoisonTouch|Uturn,CloseCombat,DireClaw,FakeOut|Adamant|116,252,,,4,136|||||,,,,,Fighting]Tera Captain|Latias|OccaBerry|Levitate|CalmMind,AuraSphere,StoredPower,Roost|Timid|148,,,252,4,104||,0,,,,|||,,,,,Steel]Skarmory||SafetyGoggles|Sturdy|Spikes,Defog,Roost,BraveBird|Impish|252,,196,,60,|||S||,,,,,Steel"],
+ ["Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,PlayRough,Trailblaze,SwordsDance|Jolly|,252,,,32,224|||||,,,,,Fire]Dondozo||ShedShell|Unaware|Liquidation,HeavySlam,Yawn,Rest|Impish|252,68,188,,,|||||,,,,,Water]Cyclizar||SitrusBerry|Regenerator|ShedTail,Uturn,RapidSpin,Overheat|Timid|88,,,252,,168|||||,,,,,Dragon]Tera Captain|Serperior|LumBerry|Contrary|TeraBlast,LeafStorm,Glare,Synthesis|Timid|24,,,252,,232||,0,,,,|||,,,,,Stellar]Clodsire||BlackSludge|WaterAbsorb|Earthquake,StealthRock,Toxic,Recover|Careful|204,52,,,252,|||||,,,,,Poison]Clefairy||Eviolite|MagicGuard|Moonblast,HealingWish,KnockOff,Moonlight|Calm|252,,4,,252,|||||,,,,,Fairy","Iron Treads||BoosterEnergy|QuarkDrive|StealthRock,RapidSpin,IceSpinner,Earthquake|Jolly|,252,,,,252|||||,,,,,Ground]Gallade||MuscleBand|Sharpness|Agility,SacredSword,PsychoCut,NightSlash|Adamant|,252,,,,252|||||,,,,,Psychic]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|SludgeWave,EnergyBall,FieryDance,DazzlingGleam|Timid|124,,,132,,252||,0,,,,|||,,,,,Grass]Mimikyu||LifeOrb|Disguise|SwordsDance,ShadowSneak,PlayRough,WoodHammer|Jolly|,252,,,4,252|||||,,,,,Ghost]Tera Captain|Jolteon|LifeOrb|VoltAbsorb|CalmMind,TeraBlast,Thunderbolt,ShadowBall|Timid|64,,,252,,192||,0,,,,|||,,,,,Ice]Hydreigon||RockyHelmet|Levitate|DarkPulse,Flamethrower,DracoMeteor,FlashCannon|Modest|,,,252,,252||,0,,,,|||,,,,,Dark"],
+ ["Baxcalibur||HeavyDutyBoots|ThermalExchange|IcicleCrash,GlaiveRush,Earthquake,DragonDance|Adamant|,252,4,,,252|||||,,,,,Normal]Ninetales-Alola||LightClay|SnowWarning|AuroraVeil,Encore,PainSplit,Moonblast|Timid|228,,,96,,184||,0,,,,|||,,,,,Normal]Tera Captain|Annihilape|Leftovers|Defiant|BulkUp,Taunt,DrainPunch,RageFist|Careful|212,,44,,252,|||||,,,,,Dark]Excadrill||SitrusBerry|MoldBreaker|Earthquake,IronHead,StealthRock,RapidSpin|Jolly|8,252,,,,248|||||,,,,,Normal]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,HeatWave,KnockOff,Uturn|Timid|80,,,252,88,88|||||,,,,,Normal]Alomomola||RockyHelmet|Regenerator|Scald,FlipTurn,Wish,Protect|Relaxed|252,,252,4,,|||||,,,,,Ground","Tera Captain|Jolteon|ExpertBelt|VoltAbsorb|Thunderbolt,VoltSwitch,TeraBlast,WeatherBall|Timid|24,,48,252,,184||,0,,,,|||,,,,,Fighting]Weavile||HeavyDutyBoots|Pressure|KnockOff,TripleAxel,IceShard,Substitute|Jolly|8,252,,,24,224|||||,,,,,Dark]Great Tusk||Leftovers|Protosynthesis|StealthRock,RapidSpin,CloseCombat,Earthquake|Jolly|,252,4,,,252|||||,,,,,Ground]Gholdengo||ShucaBerry|GoodasGold|Recover,ThunderWave,MakeItRain,Hex|Bold|252,,196,32,28,||,0,,,,|||,,,,,Steel]Alomomola||RockyHelmet|Regenerator|AlluringVoice,FlipTurn,Wish,Scald|Relaxed|252,,252,4,,||,,,,,0|||,,,,,Water]Tera Captain|Mew|Leftovers|Synchronize|Encore,PsychicFangs,WillOWisp,CloseCombat|Impish|252,,40,,,216|||S||,,,,,Fairy"],
+ ["Ninetales||HeatRock|Drought|Flamethrower,PainSplit,Encore,HealingWish|Timid|,,,252,4,252||,0,,,,|||,,,,,Bug]Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,Flamethrower,DracoMeteor,TeraBlast|Timid|12,,,244,,252||,0,,,,|||,,,,,Stellar]Heatran||Leftovers|FlashFire|MagmaStorm,Overheat,ScorchingSands,StealthRock|Calm|252,,,4,252,||,0,,,,|||,,,,,Bug]Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,MightyCleave,CloseCombat,Earthquake|Jolly|88,252,,,,168|||||,,,,,Bug]Great Tusk||LumBerry|Protosynthesis|BulkUp,Earthquake,IceSpinner,CloseCombat|Jolly|252,4,,,,252|||||,,,,,Bug]Weezing-Galar||BlackSludge|NeutralizingGas|StrangeSteam,SludgeWave,Haze,Protect|Calm|252,,,4,252,||,0,,,,|||,,,,,Bug","Chi-Yu||HeavyDutyBoots|BeadsofRuin|FlameCharge,FireBlast,DarkPulse,NastyPlot|Timid|4,,,252,,252|||||,,,,,Dark]Tera Captain|GolemAlola|Leftovers|MagnetPull|StealthRock,Earthquake,SupercellSlam,Explosion|Jolly|252,64,,,,192|||||,,,,,Flying]Pecharunt||BlackSludge|PoisonPuppeteer|MalignantChain,Hex,Recover,PartingShot|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Primarina||AssaultVest|Torrent|HydroPump,FlipTurn,Moonblast,PsychicNoise|Modest|252,,,252,4,|||||,,,,,Water]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Glare,Synthesis|Timid|252,,,4,,252|||||,,,,,Rock]Goodra-Hisui||Leftovers|ShellArmor|Curse,BodyPress,DragonTail,GyroBall|Sassy|252,,4,,252,||,,,,,0|||,,,,,Steel"],
+ ["Tera Captain|Excadrill|ChoiceScarf|MoldBreaker|Earthquake,RapidSpin,IronHead,BrickBreak|Jolly|,252,,,4,252|||||,,,,,Ground]Weezing||RockyHelmet|Levitate|Haze,PainSplit,WillOWisp,SludgeBomb|Bold|248,,252,8,,||,0,,,,|||,,,,,Poison]Iron Bundle||HeavyDutyBoots|QuarkDrive|FlipTurn,FreezeDry,HydroPump,Taunt|Timid|104,,,252,56,96|||||,,,,,Ice]Tyranitar||ChopleBerry|SandStream|StealthRock,KnockOff,Roar,HeavySlam|Careful|248,,104,,156,|||||,,,,,Rock]Latios|||Levitate|LusterPurge,DracoMeteor,Recover,CalmMind|Timid|64,,,252,,192||,0,,,,|||,,,,,Dragon]Alcremie||Leftovers|AromaVeil|AcidArmor,CalmMind,DrainingKiss,Recover|Bold|248,,252,,8,||,0,,,,|||,,,,,Fairy","Iron Valiant||LifeOrb|QuarkDrive|Moonblast,CloseCombat,VacuumWave,Psychic|Naive|,48,,252,,208|||||,,,,,Fairy]Garchomp||RockyHelmet|RoughSkin|Spikes,Earthquake,ScaleShot,DracoMeteor|Impish|248,,180,,,80|||||,,,,,Dragon]Rotom-Wash||YacheBerry|Levitate|HydroPump,VoltSwitch,PainSplit,WillOWisp|Careful|248,,8,,252,||,0,,,,|||,,,,,Electric]Tera Captain|Ceruledge|ChoiceScarf|FlashFire|Poltergeist,ShadowSneak,BitterBlade,CloseCombat|Jolly|40,252,,,,216|||||,,,,,Ghost]Uxie||SitrusBerry|Levitate|StealthRock,Psychic,Uturn,FoulPlay|Bold|248,,252,,8,|||||,,,,,Psychic]Morgrem||LightClay|Prankster|Reflect,LightScreen,ThunderWave,PartingShot|Bold|248,,252,,8,||,0,,,,|||,,,,,Dark"],
+ ["Annihilape||Leftovers|Defiant|BulkUp,DrainPunch,RageFist,FirePunch|Adamant|252,252,,,4,|||||,,,,,Fighting]Tera Captain|Mamoswine|LoadedDice|ThickFat|Trailblaze,IcicleSpear,RockBlast,IceShard|Jolly|,252,,,4,252|||||,,,,,Grass]Iron Valiant||FocusSash|QuarkDrive|SwordsDance,ShadowSneak,CloseCombat,SpiritBreak|Jolly|,252,,,4,252|||||,,,,,Fairy]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,IvyCudgel,HornLeech,PlayRough|Jolly|,252,,,4,252|||||,,,,,Fire]Tera Captain|Dondozo|Leftovers|Unaware|Curse,WaveCrash,Rest,SleepTalk|Impish|252,4,252,,,|||||,,,,,Grass]Weezing-Galar||BlackSludge|Levitate|Haze,StrangeSteam,WillOWisp,Defog|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison","Chi-Yu||ChoiceScarf|BeadsofRuin|Overheat,Flamethrower,DarkPulse,Memento|Modest|224,,,252,,32||,0,,,,|||,,,,,Dark]Sneasler||GrassySeed|Unburden|SwordsDance,GunkShot,CloseCombat,Acrobatics|Adamant|248,252,8,,,|||||,,,,,Fighting]Tera Captain|Rillaboom|ChoiceBand|GrassySurge|GrassyGlide,WoodHammer,KnockOff,Uturn|Adamant|196,252,,,,60|||||,,,,,Grass]Flygon||Leftovers|Levitate|StealthRock,FirstImpression,Earthquake,Uturn|Adamant|,252,,,4,252|||||,,,,,Ground]Iron Treads||AssaultVest|QuarkDrive|IronHead,VoltSwitch,KnockOff,RapidSpin|Jolly|252,64,,,4,188|||||,,,,,Ground]Tera Captain|Primarina|Leftovers|LiquidVoice|CalmMind,AlluringVoice,DrainingKiss,Moonblast|Modest|140,,,252,116,||,0,,,,|||,,,,,Normal"],
+ ["Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Substitute,Glare|Timid|252,,20,28,,208||,0,,,,|||,,,,,Water]Tera Captain|Ribombee|ChoiceSpecs|ShieldDust|Moonblast,BugBuzz,StickyWeb,Uturn|Timid|32,,,252,4,220|||||,,,,,Fairy]Zapdos-Galar||ChoiceScarf|Defiant|BraveBird,CloseCombat,Uturn,KnockOff|Jolly|16,252,,,8,232|||||,,,,,Fighting]Garchomp||RockyHelmet|RoughSkin|StealthRock,Earthquake,Protect,Crunch|Impish|252,100,152,,,4|||||,,,,,Dragon]Rotom-Heat||HeavyDutyBoots|Levitate|VoltSwitch,WillOWisp,Overheat,Hex|Timid|252,,,16,,240||,0,,,,|||,,,,,Electric]Weavile||HeavyDutyBoots|Pressure|FakeOut,KnockOff,IceSpinner,BrickBreak|Jolly|32,252,,,12,212|||||,,,,,Dark","Iron Bundle||ChoiceSpecs|QuarkDrive|FreezeDry,HydroPump,IceBeam,FlipTurn|Modest|56,,,252,,200|||||,,,,,Ice]Iron Treads||ShucaBerry|QuarkDrive|RapidSpin,IceSpinner,VoltSwitch,Earthquake|Jolly|248,,36,,,224|||||,,,,,Ground]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|Uturn,SurgingStrikes,CloseCombat,IceSpinner|Jolly|24,252,,,,232|||||,,,,,Water]Cinderace||HeavyDutyBoots|Libero|HighJumpKick,Uturn,Trailblaze,PyroBall|Jolly|48,252,,,,208|||||,,,,,Fire]Tera Captain|Dudunsparce|Leftovers|Rattled|Roost,StealthRock,Boomburst,Flamethrower|Calm|248,,8,,252,||,0,,,,|||,,,,,Poison]Hattrem||Eviolite|MagicBounce|Nuzzle,HealingWish,BatonPass,Psychic|Bold|248,,224,,36,|||||,,,,,Psychic"],
+ ["Gholdengo||ChoiceScarf|GoodasGold|ShadowBall,MakeItRain,Thunderbolt,Memento|Timid|24,,,252,,232||,0,,,,|||,,,,,Steel]Tera Captain|Latias|Leftovers|Levitate|CalmMind,StoredPower,Recover,AuraSphere|Bold|252,,208,20,,28||,0,,,,|||,,,,,Poison]Tera Captain|Gyarados|Leftovers|Intimidate|Roar,ThunderWave,Earthquake,Waterfall|Impish|252,,204,,,52|||||,,,,,Water]Donphan||Leftovers|Sturdy|RapidSpin,StealthRock,KnockOff,Earthquake|Careful|252,4,,,184,68|||||,,,,,Ground]Moltres||HeavyDutyBoots|FlameBody|Roost,WillOWisp,BraveBird,Uturn|Careful|248,8,,,252,|||||,,,,,Fire]Iron Valiant||HeavyDutyBoots|QuarkDrive|SwordsDance,CloseCombat,IcePunch,ZenHeadbutt|Jolly|,252,,,4,252|||||,,,,,Fairy","Decidueye||ChoiceBand|LongReach|Uturn,Poltergeist,ShadowSneak,LeafBlade|Adamant|,252,,,88,168|||||,,,,,Grass]Entei||ChoiceBand|InnerFocus|SacredFire,ExtremeSpeed,StoneEdge,Crunch|Adamant|24,252,,,,232|||||,,,,,Fire]Glimmora||PasshoBerry|ToxicDebris|EarthPower,PowerGem,MortalSpin,SpikyShield|Modest|,,40,252,,216|||||,,,,,Rock]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,ShadowBall,CalmMind,Thunderbolt|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Tera Captain|Gyarados|ClearAmulet|Moxie|DragonDance,Earthquake,Waterfall,Crunch|Jolly|,252,,,4,252|||||,,,,,Ground]Tera Captain|Metagross|AssaultVest|ClearBody|BulletPunch,KnockOff,StoneEdge,GrassKnot|Relaxed|252,,240,,16,|||||,,,,,Fire"],
+ ["Garchomp||ChoiceScarf|RoughSkin|DragonClaw,Earthquake,Outrage,StoneEdge|Adamant|120,252,,,,136|||||,,,,,Dragon]Tera Captain|UrshifuRapidStrike|PunchingGlove|UnseenFist|SurgingStrikes,CloseCombat,Trailblaze,SwordsDance|Jolly|48,252,,,,208|||||,,,,,Steel]Corviknight||Leftovers|MirrorArmor|Defog,Roost,Uturn,IronHead|Impish|252,,64,,192,|||||,,,,,Flying]Tera Captain|Arcanine|Leftovers|Intimidate|TeraBlast,MorningSun,ScorchingSands,ExtremeSpeed|Relaxed|248,,176,84,,|||||,,,,,Fairy]Florges||Leftovers|FlowerVeil|AlluringVoice,Synthesis,CalmMind,PsychicNoise|Calm|252,,4,,252,||,0,,,,|||,,,,,Fairy]Overqwil||BlackSludge|Intimidate|Toxic,Crunch,GunkShot,Liquidation|Adamant|252,252,,,4,|||||,,,,,Dark","Tera Captain|Serperior|Leftovers|Contrary|TeraBlast,LeafStorm,Glare,Substitute|Timid|,,,252,4,252||,0,,,,|||,,,,,Stellar]Landorus-Therian||Leftovers|Intimidate|Psychic,EarthPower,NastyPlot,FocusBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Ground]Baxcalibur||LoadedDice|ThermalExchange|GlaiveRush,IcicleSpear,DragonDance,Earthquake|Adamant|,252,,,4,252|||||,,,,,Dragon]Moltres||HeavyDutyBoots|FlameBody|WillOWisp,Flamethrower,AirSlash,Uturn|Bold|120,,252,136,,|||||,,,,,Fire]Glimmora||PowerHerb|ToxicDebris|MortalSpin,SludgeWave,MeteorBeam,StealthRock|Timid|,,,252,4,252|||||,,,,,Rock]Walking Wake||ChoiceScarf|Protosynthesis|HydroPump,FlipTurn,Flamethrower,DracoMeteor|Modest|,,,252,4,252|||||,,,,,Water"],
+ ["Morpeko||HeavyDutyBoots|HungerSwitch|AuraWheel,KnockOff,PartingShot,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Bug]Tera Captain|EnamorusTherian|RedCard|Overcoat|SludgeBomb,HealingWish,Moonblast,EarthPower|Calm|252,,100,,156,||,0,,,,|||,,,,,Steel]Slowking-Galar||AirBalloon|Regenerator|FocusBlast,ChillyReception,ThunderWave,IceBeam|Calm|252,,,100,156,||,0,,,,|||,,,,,Bug]Gouging Fire||BoosterEnergy|Protosynthesis|DragonDance,HeatCrash,MorningSun,Earthquake|Adamant|,136,116,,4,252|||||,,,,,Bug]Tera Captain|Hydrapple|AssaultVest|Regenerator|EarthPower,EnergyBall,FickleBeam,DragonTail|Bold|252,,140,,116,|||||,,,,,Steel]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|Spikes,PowerWhip,IvyCudgel,Synthesis|Jolly|152,104,,,,252|||||,,,,,Water","Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|TeraBlast,Fly,Earthquake,Uturn|Jolly|36,252,,,,220|||||,,,,,Flying]Tera Captain|Diancie|SitrusBerry|ClearBody|DiamondStorm,Endeavor,IronDefense,Spikes|Impish|252,84,160,,,12|||||,,,,,Dragon]Darkrai||Leftovers|BadDreams|DarkPulse,SludgeBomb,Substitute,Hypnosis|Timid|40,,,252,,216||,0,,,,|||,,,,,Dark]Archaludon||RockyHelmet|Stamina|FlashCannon,DragonPulse,Rest,SleepTalk|Bold|252,,180,44,,32||,0,,,,|||,,,,,Steel]Sinistcha||Leftovers|Heatproof|ShadowBall,CalmMind,IronDefense,StrengthSap|Modest|,,148,108,252,||,0,,,,|||,,,,,Grass]Arbok||BlackSludge|Intimidate|GunkShot,KnockOff,Glare,Coil|Adamant|252,164,,,64,28|||||,,,,,Poison"],
+ ["Darkrai||LumBerry|BadDreams|DarkPulse,Psyshock,SludgeBomb,NastyPlot|Modest|136,,,216,,156||,0,,,,|||,,,,,Dark]Slowking-Galar||ShucaBerry|Regenerator|FutureSight,Toxic,IceBeam,ChillyReception|Calm|248,,,8,252,||,0,,,,|||,,,,,Poison]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Uturn,Protect,Spikes,KnockOff|Impish|240,,252,,,16|||||,,,,,Water]Tera Captain|Terrakion|BlackBelt|Justified|TeraBlast,CloseCombat,IronHead,SwordsDance|Jolly|80,252,,,,176|||||,,,,,Water]Blastoise||Leftovers|Torrent|RapidSpin,FlipTurn,HydroPump,BodyPress|Relaxed|252,,252,4,,||,,,,,0|||,,,,,Water]Sandslash-Alola||ProtectivePads|SlushRush|KnockOff,SwordsDance,TripleAxel,IronHead|Adamant|144,252,,,,112|||||,,,,,Ice","Pecharunt||HeavyDutyBoots|PoisonPuppeteer|FoulPlay,Recover,Hex,MalignantChain|Bold|252,,96,,140,20||,0,,,,|||,,,,,Poison]Landorus-Therian||Leftovers|Intimidate|Earthquake,Uturn,StealthRock,StoneEdge|Careful|252,4,,,252,|||||,,,,,Ground]Tera Captain|Hydreigon|ChestoBerry|Levitate|Rest,DracoMeteor,ThunderWave,Uturn|Calm|252,,,4,252,|||||,,,,,Ghost]Tera Captain|Clodsire|HeavyDutyBoots|Unaware|Haze,Toxic,Recover,Earthquake|Impish|56,,252,,200,|||||,,,,,Water]Alomomola||HeavyDutyBoots|Regenerator|Wish,FlipTurn,Protect,Scald|Bold|252,,252,,4,|||||,,,,,Water]Clefable||StickyBarb|MagicGuard|Moonlight,Moonblast,Trick,Reflect|Calm|252,,120,4,132,||,0,,,,|||,,,,,Fairy"],
+ ["Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,Trailblaze,Synthesis|Jolly|,252,,,80,176|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Uturn,KnockOff,HammerArm,Taunt|Jolly|252,,,,168,88|||||,,,,,Flying]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,MorningSun,Outrage,RagingFury|Adamant|,252,,,4,252|||||,,,,,Fire]Tera Captain|Comfey|Leftovers|Triage|CalmMind,DrainingKiss,Taunt,Synthesis|Calm|,,136,200,172,||,0,,,,|||,,,,,Fairy]Gholdengo||AirBalloon|GoodasGold|NastyPlot,ShadowBall,DazzlingGleam,Recover|Calm|220,,,48,208,32||,0,,,,|||,,,,,Steel]Maushold||ProtectivePads|Technician|TidyUp,Bite,PopulationBomb,Encore|Jolly|,252,,,4,252|||||,,,,,Normal","Darkrai||WiseGlasses|BadDreams|DarkPulse,IceBeam,FocusBlast,NastyPlot|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|Gholdengo|Leftovers|GoodasGold|ShadowBall,NastyPlot,ThunderWave,Recover|Calm|252,,132,,124,||,0,,,,|||,,,,,Fairy]Ting-Lu||Leftovers|VesselofRuin|Earthquake,StoneEdge,StealthRock,Whirlwind|Serious|252,,184,,72,|||||,,,,,Dark]Zapdos||HeavyDutyBoots|Static|Discharge,Hurricane,VoltSwitch,Roost|Bold|252,,252,,,||,0,,,,|||,,,,,Electric]Tsareena||YacheBerry|QueenlyMajesty|PowerWhip,TripleAxel,Endeavor,RapidSpin|Adamant|252,252,,,4,|||||,,,,,Grass]Tera Captain|Okidogi|ChoiceScarf|ToxicChain|GunkShot,CloseCombat,KnockOff,PsychicFangs|Jolly|,252,,,4,252|||||,,,,,Fighting"],
+ ["Darkrai||LifeOrb|BadDreams|DarkPulse,Psychic,FocusBlast,Hypnosis|Timid|,,16,252,,240||,0,,,,|S||,,,,,Dark]Tera Captain|Infernape|ChoiceScarf|Blaze|CloseCombat,FlareBlitz,Earthquake,Uturn|Jolly|,252,24,,,232|||S||,,,,,Fighting]Forretress||RockyHelmet|Sturdy|Spikes,RapidSpin,Earthquake,Lunge|Impish|252,,252,,4,|||||,,,,,Bug]Swampert||Leftovers|Torrent|StealthRock,FlipTurn,Earthquake,Yawn|Careful|252,,4,,252,|||S||,,,,,Water]Tera Captain|Mimikyu|LifeOrb|Disguise|SwordsDance,ShadowSneak,ShadowClaw,PlayRough|Adamant|,252,16,,,240|||S||,,,,,Ghost]Slowking-Galar||ColburBerry|Regenerator|SludgeBomb,Toxic,ThunderWave,ChillyReception|Calm|252,,4,,252,||,0,,,,|S||,,,,,Poison","Tera Captain|Zarude|Leftovers|LeafGuard|BulkUp,TeraBlast,Trailblaze,KnockOff|Jolly|56,252,,,,200|||||,,,,,Fairy]Blastoise||WhiteHerb|Torrent|ShellSmash,HydroPump,Earthquake,IceSpinner|Rash|208,114,,188,,|||||,,,,,Water]Sandy Shocks||LightClay|Protosynthesis|Spikes,ScorchingSands,Reflect,VoltSwitch|Timid|36,,,252,,220||,0,,,,|||,,,,,Electric]Slither Wing||MuscleBand|Protosynthesis|Trailblaze,Uturn,CloseCombat,FirstImpression|Adamant|24,252,,,,232|||||,,,,,Bug]Incineroar||Leftovers|Intimidate|PartingShot,DarkestLariat,WillOWisp,FirePunch|Jolly|252,252,,,,4|||||,,,,,Fire]Fezandipiti||BlackSludge|ToxicChain|GunkShot,Taunt,Uturn,Roost|Jolly|140,,,,136,232|||||,,,,,Poison"],
+ ["Tera Captain|RagingBolt|Leftovers|Protosynthesis|CalmMind,Taunt,Thunderbolt,TeraBlast|Modest|,,80,252,,176||,20,,,,|||,,,,,Water]Weezing-Galar||RockyHelmet|Levitate|Taunt,PainSplit,Flamethrower,StrangeSteam|Bold|248,,252,,,8||,0,,,,|||,,,,,Poison]Infernape||FistPlate|IronFist|Flamethrower,CloseCombat,Uturn,MachPunch|Jolly|,252,,,64,192|||||,,,,,Fire]Weavile||ProtectivePads|Pressure|KnockOff,TripleAxel,Protect,BrickBreak|Adamant|,252,,,84,172|||||,,,,,Dark]Brambleghast||HeavyDutyBoots|WindRider|PowerWhip,Poltergeist,RapidSpin,Protect|Adamant|,252,,,4,252|||||,,,,,Grass]Gastrodon||Leftovers|StormDrain|Surf,EarthPower,Recover,StealthRock|Calm|252,,,4,252,||,0,,,,|||,,,,,Water","Urshifu-Rapid-Strike||LifeOrb|UnseenFist|SurgingStrikes,CloseCombat,Uturn,ZenHeadbutt|Jolly|,252,,,4,252|||||,,,,,Fighting]Indeedee||ChoiceSpecs|PsychicSurge|DazzlingGleam,Psychic,EnergyBall,ShadowBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Chi-Yu||ChoiceScarf|BeadsofRuin|Overheat,DarkPulse,Psychic,WillOWisp|Modest|,,,252,4,252||,0,,,,|||,,,,,Dark]Landorus-Therian||Leftovers|Intimidate|Earthquake,StoneEdge,SwordsDance,Crunch|Adamant|,252,4,,252,|||||,,,,,Ground]Tera Captain|Heatran|Leftovers|FlameBody|TeraBlast,FlashCannon,Flamethrower,EarthPower|Modest|252,,,252,4,||,0,,,,|||,,,,,Grass]Forretress||RockyHelmet|Sturdy|RapidSpin,StealthRock,BodyPress,Explosion|Impish|252,4,252,,,|||||,,,,,Bug"],
+ ["Tera Captain|Latias|Leftovers|Levitate|CalmMind,Recover,IceBeam,Thunderbolt|Timid|252,,64,,,192||,0,,,,|||,,,,,Fairy]Meowscarada||ProtectivePads|Protean|Uturn,TripleAxel,KnockOff,FlowerTrick|Jolly|,252,,,4,252|||||,,,,,Grass]Zapdos||HeavyDutyBoots|Pressure|Hurricane,VoltSwitch,Roost,Discharge|Bold|248,,252,8,,||,0,,,,|||,,,,,Electric]Glimmora||FocusSash|ToxicDebris|Spikes,MortalSpin,PowerGem,EarthPower|Timid|128,,,252,,128|||||,,,,,Rock]Swampert||Leftovers|Torrent|EarthPower,FlipTurn,StealthRock,Surf|Bold|252,,252,4,,|||||,,,,,Water]Tera Captain|Lucario|ChoiceScarf|Justified|StoneEdge,IcePunch,CloseCombat,MeteorMash|Jolly|,252,,,4,252|||||,,,,,Fighting","Iron Valiant||BoosterEnergy|QuarkDrive|CloseCombat,SpiritBreak,Encore,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Fairy]Tera Captain|GreninjaBond|ExpertBelt|BattleBond|HydroPump,DarkPulse,LowKick,IceBeam|Naive|,4,,252,,252|||||,,,,,Water]Garchomp||Leftovers|RoughSkin|Earthquake,ScaleShot,StealthRock,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Dragon]Metagross||Leftovers|ClearBody|IronHead,KnockOff,BodyPress,StoneEdge|Careful|252,,4,,252,|||||,,,,,Steel]Moltres||HeavyDutyBoots|FlameBody|Flamethrower,Roost,Uturn,WillOWisp|Bold|248,,252,,8,|||||,,,,,Fire]Decidueye||HeavyDutyBoots|LongReach|LeafBlade,KnockOff,Roost,Uturn|Adamant|252,252,4,,,|||||,,,,,Grass"],
+ ["Primarina||AssaultVest|Torrent|Surf,Moonblast,FlipTurn,PsychicNoise|Calm|252,,16,36,204,|||||,,,,,Steel]Tera Captain|Scrafty|Leftovers|ShedSkin|BulkUp,KnockOff,DrainPunch,Rest|Careful|252,,,,164,92|||||,,,,,Poison]Tera Captain|Gholdengo|AirBalloon|GoodasGold|ShadowBall,MakeItRain,NastyPlot,FocusBlast|Modest|160,,44,68,,236||,0,,,,|||,,,,,Fairy]Magnezone||ChoiceScarf|MagnetPull|Thunderbolt,FlashCannon,VoltSwitch,MirrorCoat|Timid|4,,4,248,,252||,0,,,,|||,,,,,Electric]Gliscor||ToxicOrb|PoisonHeal|Earthquake,Spikes,Protect,Toxic|Impish|244,,248,,16,|||||,,,,,Water]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,FlareBlitz,Earthquake,MorningSun|Jolly|,252,4,,,252|||||,,,,,Fairy","Blaziken||Leftovers|SpeedBoost|FlareBlitz,PoisonJab,CloseCombat,SwordsDance|Adamant|4,252,,,,252|||||,,,,,Fire]Mabosstiff||SitrusBerry|Intimidate|FireFang,IceFang,Outrage,PlayRough|Impish|152,252,104,,,|||||,,,,,Dark]Tera Captain|Latias|AssaultVest|Levitate|IceBeam,AuraSphere,Thunderbolt,ShadowBall|Calm|,,,40,252,216||,0,,,,|||,,,,,Electric]Rotom-Wash||Leftovers|Levitate|VoltSwitch,HydroPump,Thunderbolt,ThunderWave|Bold|252,,212,,44,||,0,,,,|||,,,,,Electric]Iron Treads||Leftovers|QuarkDrive|VoltSwitch,RapidSpin,Earthquake,IceFang|Impish|252,,96,,160,|||S||,,,,,Ground]Iron Bundle||ChoiceSpecs|QuarkDrive|FlipTurn,FreezeDry,HydroPump,ChillingWater|Rash|72,,,252,,184|||S||,,,,,Ice"],
+ ["Chi-Yu||ChoiceSpecs|BeadsofRuin|DarkPulse,Overheat,LavaPlume,Psychic|Timid|80,,,252,,176||,0,,,,|||,,,,,Dark]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,KnockOff,IcyWind,Uturn|Timid|160,,236,8,,104|||||,,,,,Flying]Metagross||WeaknessPolicy|ClearBody|Agility,ZenHeadbutt,StoneEdge,IcePunch|Adamant|208,252,,,,48|||||,,,,,Steel]Tera Captain|Quaquaval|ChoiceBand|Moxie|AquaStep,IceSpinner,RapidSpin,FlipTurn|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|Gardevoir|ChoiceScarf|Trace|Psychic,Moonblast,Thunderbolt,Trick|Modest|32,,,252,4,220||,0,,,,|||,,,,,Electric]Sandy Shocks||HeavyDutyBoots|Protosynthesis|StealthRock,ThunderWave,EarthPower,VoltSwitch|Timid|112,,,228,,168||,0,,,,|||,,,,,Electric","Garchomp||LoadedDice|RoughSkin|StealthRock,ScaleShot,Earthquake,PoisonJab|Jolly|,252,,,8,248|||||,,,,,Dragon]Tera Captain|Annihilape|ChoiceScarf|Defiant|CloseCombat,RageFist,TeraBlast,FinalGambit|Jolly|,252,40,,,216|||||,,,,,Electric]Samurott-Hisui||AssaultVest|Sharpness|CeaselessEdge,RazorShell,KnockOff,AquaJet|Careful|,28,,,252,228|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Taunt,BleakwindStorm,KnockOff,Uturn|Timid|32,,232,92,56,96|||||,,,,,Flying]Tera Captain|Moltres|HeavyDutyBoots|FlameBody|Flamethrower,WillOWisp,Roost,Uturn|Bold|248,,208,,52,|||||,,,,,Water]Brambleghast||HeavyDutyBoots|WindRider|NightShade,PowerWhip,StrengthSap,RapidSpin|Careful|252,,56,,200,|||||,,,,,Grass"],
+ ["Weezing||ShucaBerry|NeutralizingGas|FireBlast,PainSplit,SludgeBomb,WillOWisp|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Tera Captain|Latias|Leftovers|Levitate|Recover,CalmMind,StoredPower,Agility|Calm|252,,,,48,208||,0,,,,|||,,,,,Steel]Rotom-Wash||YacheBerry|Levitate|VoltSwitch,PainSplit,ThunderWave,HydroPump|Bold|252,,188,68,,||,0,,,,|||,,,,,Electric]Meowscarada||ChoiceScarf|Protean|FlowerTrick,Uturn,KnockOff,ThunderPunch|Jolly|20,252,,,,236|||||,,,,,Grass]Tinkaton||Leftovers|MoldBreaker|StealthRock,ThunderWave,KnockOff,GigatonHammer|Careful|252,4,,,252,|||||,,,,,Fairy]Ursaring||Eviolite|Guts|CloseCombat,Facade,SleepTalk,Rest|Careful|252,84,,,172,|||||,,,,,Normal","Pelipper||DampRock|Drizzle|Hurricane,Surf,Uturn,Roost|Relaxed|248,,252,,8,||,,,,,0|||,,,,,Stellar]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Glare,Substitute|Timid|,,4,252,,252||,0,,,,|||,,,,,Fire]Tera Captain|Ditto|ChoiceScarf|Imposter|Transform|Relaxed|252,4,252,,,||,,,,,0|||,,,,,Stellar]Basculegion||ChoiceBand|SwiftSwim|WaveCrash,FlipTurn,AquaJet,IceFang|Adamant|,252,4,,,252|||||,,,,,Water]Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,HydroPump,IceBeam,ElectricTerrain|Timid|,,,252,4,252||,0,,,,|||,,,,,Ice]Cyclizar||HeavyDutyBoots|Regenerator|DragonTail,KnockOff,ShedTail,RapidSpin|Jolly|252,4,,,,252|||||,,,,,Electric"],
+ ["Klefki||LightClay|Prankster|ThunderWave,SunnyDay,LightScreen,Reflect|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel]Tera Captain|Ditto|ChoiceScarf|Imposter|Transform|Calm|252,,252,,4,|||||,,,,,Stellar]Blaziken||HeavyDutyBoots|SpeedBoost|CloseCombat,Detect,FlareBlitz,SwordsDance|Adamant|4,252,108,,,144|||||,,,,,Fire]Tera Captain|Latias|ExpertBelt|Levitate|TeraBlast,AirSlash,EnergyBall,Agility|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Charizard||ChoiceScarf|SolarPower|Flamethrower,Overheat,AncientPower,SolarBeam|Modest|248,,,252,,8||,0,,,,|||,,,,,Fire]Cyclizar||MentalHerb|Regenerator|ShedTail,SunnyDay,KnockOff,DracoMeteor|Timid|248,,,8,,252||,0,,,,|||,,,,,Dragon","Iron Valiant||LifeOrb|QuarkDrive|AuraSphere,Thunderbolt,CloseCombat,Moonblast|Naive|,4,,252,,252|||||,,,,,Fairy]Iron Boulder||BoosterEnergy|QuarkDrive|SacredSword,MightyCleave,SwordsDance,ThroatChop|Jolly|,252,,,4,252|||||,,,,,Rock]Tera Captain|RotomWash|ChoiceScarf|Levitate|VoltSwitch,HydroPump,Trick,ThunderWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Tinkaton||Leftovers|MoldBreaker|FakeOut,GigatonHammer,Encore,StealthRock|Jolly|,252,,,4,252|||||,,,,,Fairy]Tera Captain|OricorioPomPom|MirrorHerb|Dancer|AlluringVoice,RevelationDance,QuiverDance,Roost|Bold|252,,252,4,,||,0,,,,|||,,,,,Water]Toedscruel||Leftovers|MyceliumMight|KnockOff,RapidSpin,Hex,StunSpore|Gentle|252,4,,,252,|||||,,,,,Ground"],
+ ["Thwackey||Eviolite|GrassySurge|KnockOff,Uturn,FakeOut,WoodHammer|Impish|,252,252,,4,|||||,,,,,Grass]Sneasler||GrassySeed|Unburden|CloseCombat,DireClaw,SwordsDance,Uturn|Adamant|,252,,,4,252|||||,,,,,Dark]Clodsire||Leftovers|Unaware|StealthRock,Recover,Earthquake,Toxic|Careful|252,4,,,252,|||||,,,,,Poison]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|IvyCudgel,WoodHammer,SpikyShield,Synthesis|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|Espathra|Leftovers|SpeedBoost|StoredPower,CalmMind,Protect,Roost|Modest|,,,252,4,252||,0,,,,|||,,,,,Fairy]Chi-Yu||FocusSash|BeadsofRuin|Overheat,DarkPulse,Hex,WillOWisp|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark","Skeledirge||HeavyDutyBoots|Unaware|AlluringVoice,ShadowBall,WillOWisp,SlackOff|Bold|252,,16,,240,||,0,,,,|||,,,,,Fire]Weezing-Galar||CustapBerry|Levitate|Defog,WillOWisp,ClearSmog,PainSplit|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Ting-Lu||Leftovers|VesselofRuin|Earthquake,Whirlwind,Spikes,Rest|Careful|252,4,,,252,|||||,,,,,Dark]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Substitute,GastroAcid|Timid|24,,,252,,232||,0,,,,|||,,,,,Ground]Palafin||RindoBerry|ZerotoHero|BulkUp,JetPunch,Acrobatics,DrainPunch|Adamant|252,252,,,4,|||||,,,,,Water]Tinkaton||LightClay|MoldBreaker|IceHammer,Reflect,LightScreen,StealthRock|Careful|252,,80,,176,|||||,,,,,Fairy"],
+ ["Urshifu-Rapid-Strike||ChoiceScarf|UnseenFist|SurgingStrikes,CloseCombat,Uturn,DynamicPunch|Adamant|,252,,,4,252|||||,,,,,Stellar]Thundurus||UtilityUmbrella|Prankster|RainDance,ThunderWave,WeatherBall,Thunderbolt|Timid|,,,252,4,252||,0,,,,|||,,,,,Stellar]Tera Captain|DeoxysDefense|CovertCloak|Pressure|Spikes,IceBeam,Recover,Teleport|Calm|248,,,72,188,||,0,,,,|||,,,,,Ice]Medicham||SalacBerry|PurePower|BulkUp,HighJumpKick,ZenHeadbutt,Substitute|Naive|,252,,,4,252|||||,,,,,Stellar]Skarmory||Leftovers|Sturdy|IronDefense,Roost,Roar,BodyPress|Bold|252,,160,,96,||,0,,,,|||,,,,,Stellar]Decidueye||AssaultVest|Overgrow|Trailblaze,LeafBlade,SpiritShackle,ShadowSneak|Adamant|248,252,,,8,|||||,,,,,Stellar","Ursaluna-Bloodmoon||CovertCloak|MindsEye|BloodMoon,EarthPower,CalmMind,Moonlight|Modest|252,,,252,4,||,0,,,,|||,,,,,Normal]Whimsicott||RockyHelmet|Prankster|Uturn,LeechSeed,Substitute,Moonblast|Bold|248,,252,8,,|||||,,,,,Normal]Tera Captain|Zebstrika|HeavyDutyBoots|LightningRod|VoltSwitch,Thunderbolt,TeraBlast,Taunt|Modest|,,,252,4,252||,0,,,,|||,,,,,Ice]Tentacruel||BlackSludge|LiquidOoze|ToxicSpikes,Haze,RapidSpin,Surf|Calm|252,,,,240,16|||||,,,,,Normal]Greninja||ChoiceSpecs|Protean|Uturn,Surf,IceBeam,Extrasensory|Timid|,,,252,4,252|||||,,,,,Normal]Tera Captain|Annihilape|CovertCloak|Defiant|Substitute,BulkUp,RageFist,DrainPunch|Impish|252,,160,,,96|||||,,,,,Ground"],
+ ["Slowking-Galar||HeavyDutyBoots|Regenerator|ToxicSpikes,ThunderWave,SludgeBomb,SlackOff|Calm|252,,100,,156,||,0,,,,|||,,,,,Poison]Cyclizar||HeavyDutyBoots|Regenerator|ShedTail,KnockOff,RapidSpin,IceSpinner|Jolly|252,,88,,,168|||||,,,,,Dragon]Tera Captain|Espathra|Leftovers|SpeedBoost|CalmMind,Protect,DazzlingGleam,StoredPower|Modest|216,,,252,,40||,0,,,,|||,,,,,Dark]Quagsire||Leftovers|Unaware|Recover,Toxic,IceBeam,Protect|Bold|252,,252,,4,||,0,,,,|||,,,,,Water]Mienshao||AssaultVest|Regenerator|Uturn,KnockOff,CloseCombat,TripleAxel|Careful|252,,4,,252,|||||,,,,,Fighting]Hydrapple||HeavyDutyBoots|Regenerator|FickleBeam,DracoMeteor,GigaDrain,Recover|Modest|252,,184,72,,||,0,,,,|||,,,,,Grass","Darkrai||BlunderPolicy|BadDreams|IceBeam,Hypnosis,DarkPulse,Psychic|Hasty|,4,,252,,224||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,PlayRough,HornLeech,Uturn|Jolly|,252,40,,,216|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Tailwind,Uturn,Hurricane,SludgeBomb|Hasty|,,,252,8,248|||||,,,,,Flying]Garchomp||LifeOrb|RoughSkin|SwordsDance,ScaleShot,Earthquake,DracoMeteor|Hasty|,252,,88,,168|||||,,,,,Dragon]Ditto||ChoiceScarf|Imposter|Transform|Impish|252,4,252,,,|||||,,,,,Normal]Tera Captain|Brambleghast|LoadedDice|WindRider|TeraBlast,Trailblaze,BulletSeed,Poltergeist|Adamant|,252,,,100,156|||||,,,,,Dragon"],
+ ["Samurott-Hisui||LifeOrb|Sharpness|CeaselessEdge,FlipTurn,KnockOff,RazorShell|Jolly|,252,,,4,252|||||,,,,,Water]Iron Treads||ChoiceBand|QuarkDrive|Earthquake,IronHead,ZenHeadbutt,KnockOff|Jolly|,252,,,32,224|||||,,,,,Ground]Iron Valiant||BoosterEnergy|QuarkDrive|CloseCombat,KnockOff,LeafBlade,SpiritBreak|Naive|4,252,,,,252|||||,,,,,Fairy]Tera Captain|Gyarados|WacanBerry|Intimidate|DragonDance,Earthquake,TeraBlast,Taunt|Adamant|,252,,,4,252|||||,,,,,Flying]Golurk||SpellTag|NoGuard|Earthquake,Poltergeist,Curse,StealthRock|Brave|252,252,4,,,|||||,,,,,Ground]Tera Captain|Latias|MirrorHerb|Levitate|HealingWish,ShadowBall,Roar,EnergyBall|Timid|252,,,64,,192||,0,,,,|||,,,,,Poison","Electrode-Hisui||EjectPack|Soundproof|LeafStorm,VoltSwitch,FoulPlay,Taunt|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Gastrodon||RockyHelmet|StormDrain|Earthquake,StealthRock,Recover,IceBeam|Relaxed|252,4,252,,,|||||,,,,,Water]Tera Captain|Grimmsnarl|LightClay|Prankster|PlayRough,Reflect,LightScreen,PartingShot|Careful|252,4,,,252,|||||,,,,,Dark]Tera Captain|Hatterene|Leftovers|MagicBounce|CalmMind,DrainingKiss,Psyshock,Nuzzle|Relaxed|252,,208,48,,|||||,,,,,Water]Annihilape||Leftovers|Defiant|BulkUp,DrainPunch,RageFist,Taunt|Careful|252,68,,,188,|||||,,,,,Fighting]Chi-Yu||ChoiceScarf|BeadsofRuin|Overheat,Flamethrower,DarkPulse,Memento|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark"],
+ ["Archaludon||AssaultVest|Stamina|ElectroShot,Earthquake,DracoMeteor,BodyPress|Naive|,4,,252,,252|||||,,,,,Steel]Pelipper||DampRock|Drizzle|Surf,Hurricane,Uturn,Roost|Bold|248,,76,,184,|||||,,,,,Water]Ting-Lu||RedCard|VesselofRuin|StealthRock,Spikes,Earthquake,HeavySlam|Careful|252,4,,,252,|||||,,,,,Dark]Barraskewda||ChoiceBand|SwiftSwim|Liquidation,FlipTurn,RainDance,AquaJet|Adamant|,252,,,4,252|||||,,,,,Water]Tera Captain|Kingdra|ChoiceSpecs|SwiftSwim|WeatherBall,DracoMeteor,HydroPump,IceBeam|Timid|,,4,252,,252||,0,,,,|||,,,,,Water]Tera Captain|IronHands|BoosterEnergy|QuarkDrive|CloseCombat,Thunder,FakeOut,IcePunch|Brave|248,252,,8,,|||||,,,,,Ice","Torkoal||EjectButton|Drought|StealthRock,SunnyDay,RapidSpin,WillOWisp|Bold|252,,252,,4,|||||,,,,,Fire]Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,DracoMeteor,DragonPulse,FlipTurn|Modest|32,,,252,,224|||||,,,,,Water]Weezing||BlackSludge|Levitate|ToxicSpikes,WillOWisp,SludgeBomb,PainSplit|Bold|252,,240,,,16||,0,,,,|||,,,,,Poison]Great Tusk||PasshoBerry|Protosynthesis|IceSpinner,ThunderFang,CloseCombat,RapidSpin|Jolly|16,252,,,,240|||||,,,,,Ground]Scream Tail||Leftovers|Protosynthesis|CalmMind,DazzlingGleam,Wish,Protect|Timid|252,,172,,36,48||,0,,,,|||,,,,,Fairy]Tera Captain|Venusaur|Leftovers|Chlorophyll|SunnyDay,GigaDrain,EarthPower,SleepPowder|Modest|184,,,252,,72||,0,,,,|||,,,,,Grass"],
+ ["Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Substitute,Synthesis|Timid|64,,,252,,192||,0,,,,|||,,,,,Ice]Donphan||Leftovers|Sturdy|RapidSpin,Earthquake,StoneEdge,IceShard|Impish|248,8,252,,,|||||,,,,,Steel]Palafin-Hero||Leftovers|ZerotoHero|GrassKnot,JetPunch,BulkUp,IceBeam|Relaxed|248,,236,24,,|||||,,,,,Electric]Zapdos||HeavyDutyBoots|Static|Uturn,Hurricane,Roost,Thunderbolt|Modest|224,,,252,,32|||||,,,,,Grass]Lokix||HeavyDutyBoots|TintedLens|FirstImpression,KnockOff,Uturn,SuckerPunch|Adamant|160,252,,,,96|||||,,,,,Fighting]Tinkaton||Leftovers|MoldBreaker|StealthRock,KnockOff,PlayRough,GigatonHammer|Careful|248,8,,,252,|||||,,,,,Poison","Palafin||ChoiceSpecs|ZerotoHero|Boomburst,IceBeam,FlipTurn,HydroPump|Modest|,,,252,4,252|||||,,,,,Water]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Spikes,KnockOff,Earthquake,Protect|Impish|252,,252,,,|||||,,,,,Water]Tera Captain|Tyranitar|PasshoBerry|SandStream|DragonDance,Earthquake,StoneEdge,FirePunch|Jolly|,216,52,,,240|||||,,,,,Fire]Zapdos||HeavyDutyBoots|Static|Thunderbolt,ThunderWave,Roost,Hurricane|Bold|252,,252,,,4||,0,,,,|||,,,,,Electric]Dragalge||AssaultVest|Adaptability|SludgeBomb,FlipTurn,DracoMeteor,DragonTail|Calm|252,,,4,252,|||||,,,,,Poison]Tinkaton||Leftovers|MoldBreaker|StealthRock,KnockOff,GigatonHammer,ThunderWave|Careful|252,,,,252,|||||,,,,,Fairy"],
+ ["Tera Captain|Ceruledge|AirBalloon|WeakArmor|SwordsDance,TeraBlast,Poltergeist,BrickBreak|Adamant|152,252,,,,104|||||,,,,,Fairy]Darkrai||FocusSash|BadDreams|Hypnosis,NastyPlot,DarkPulse,SludgeBomb|Timid|,,,252,8,248||,0,,,,|||,,,,,Dark]Iron Treads||HeavyDutyBoots|QuarkDrive|RapidSpin,VoltSwitch,FlashCannon,EarthPower|Timid|64,,,252,,192|||||,,,,,Ground]Mesprit||ColburBerry|Levitate|ThunderWave,Psychic,Uturn,StealthRock|Impish|248,,216,,,44|||||,,,,,Psychic]Tera Captain|Diancie|ShucaBerry|ClearBody|Spikes,Moonblast,DiamondStorm,Reflect|Relaxed|248,,148,112,,|||||,,,,,Water]Palafin-Hero||YacheBerry|ZerotoHero|BulkUp,Taunt,DrainPunch,JetPunch|Adamant|212,124,,,,172|||||,,,,,Water","Ninetales-Alola||LightClay|SnowWarning|AuroraVeil,Moonblast,Encore,FreezeDry|Timid|252,,,136,,120||,0,,,,|||,,,,,Ice]Baxcalibur||LoadedDice|ThermalExchange|SwordsDance,ScaleShot,IcicleSpear,Earthquake|Adamant|252,84,96,,,76|||||,,,,,Dragon]Great Tusk||BoosterEnergy|Protosynthesis|BulkUp,Earthquake,CloseCombat,KnockOff|Jolly|252,4,,,,252|||||,,,,,Ground]Tera Captain|Heatran|Leftovers|FlashFire|StealthRock,TeraBlast,EarthPower,WillOWisp|Calm|252,,,4,252,||,0,,,,|||,,,,,Bug]Tera Captain|Hydreigon|ChoiceScarf|Levitate|Uturn,FlashCannon,TeraBlast,EarthPower|Rash|128,32,,252,,96|||||,,,,,Electric]Ribombee||FocusSash|ShieldDust|StickyWeb,StunSpore,Moonblast,EnergyBall|Modest|144,,,252,,112||,0,,,,|||,,,,,Bug"],
+ ["Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,Thunderbolt,AuraSphere,ShadowBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Goodra-Hisui||Leftovers|ShellArmor|IceBeam,DracoMeteor,Thunderbolt,FireBlast|Modest|252,,,252,4,||,0,,,,|||,,,,,Steel]Tera Captain|Salamence|Leftovers|Moxie|DragonDance,FireFang,DragonClaw,DualWingbeat|Adamant|,252,,,4,252|||||,,,,,Steel]Arcanine-Hisui||ChoiceScarf|RockHead|ExtremeSpeed,FlareBlitz,HeadSmash,CloseCombat|Adamant|,252,,,96,160|||||,,,,,Fire]Rotom-Wash||Leftovers|Levitate|VoltSwitch,HydroPump,Thunderbolt,WillOWisp|Modest|252,,,252,4,||,0,,,,|||,,,,,Electric]Tera Captain|OricorioPomPom|Leftovers|Dancer|QuiverDance,RevelationDance,Roost,Taunt|Timid|96,,,252,,160||,0,,,,|||,,,,,Fire","Darkrai||ChoiceSpecs|BadDreams|IceBeam,DarkPulse,SludgeBomb,FocusBlast|Timid|4,,,252,,252||,0,,,,|||,,,,,Dark]Enamorus||ChoiceScarf|Contrary|Moonblast,EarthPower,FocusBlast,HealingWish|Timid|4,,,252,,252||,0,,,,|||,,,,,Fairy]Scizor||Leftovers|Technician|BulletPunch,Defog,CloseCombat,Uturn|Adamant|252,252,,,4,|||||,,,,,Bug]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Protect,ToxicSpikes,StealthRock,Earthquake|Impish|252,,140,,116,|||||,,,,,Ghost]Tera Captain|Volcanion|AssaultVest|WaterAbsorb|SteamEruption,EarthPower,Flamethrower,SludgeWave|Modest|252,,,208,48,||,0,,,,|||,,,,,Ground]Meowstic||LightClay|Prankster|ThunderWave,Psychic,Reflect,LightScreen|Calm|248,,,8,252,||,0,,,,|||,,,,,Psychic"],
+ ["Tera Captain|Venusaur|CobaBerry|Chlorophyll|Growth,SludgeBomb,WeatherBall,SolarBeam|Modest|,,,252,4,252||,0,,,,|||,,,,,Fire]Torkoal||HeatRock|Drought|RapidSpin,StealthRock,Yawn,LavaPlume|Calm|248,,,8,252,|||||,,,,,Stellar]Hatterene||Leftovers|MagicBounce|Nuzzle,DrainingKiss,CalmMind,Psyshock|Bold|252,,252,,4,|||||,,,,,Stellar]Great Tusk||HeavyDutyBoots|Protosynthesis|IceSpinner,RapidSpin,CloseCombat,Earthquake|Jolly|,252,,,4,252|||||,,,,,Stellar]Tera Captain|ThundurusTherian|ChoiceSpecs|VoltAbsorb|Uturn,Thunderbolt,TeraBlast,GrassKnot|Timid|,,,252,4,252|||||,,,,,Flying]Volcanion||ChoiceScarf|WaterAbsorb|SteamEruption,Flamethrower,EarthPower,SludgeWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Stellar","Great Tusk||Leftovers|Protosynthesis|Earthquake,KnockOff,StealthRock,RapidSpin|Impish|252,4,252,,,|||||,,,,,Ground]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,Uturn,KnockOff,StompingTantrum|Jolly|68,252,,,,188|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Hurricane,WeatherBall,RainDance,SludgeBomb|Modest|36,,,252,,220||,0,,,,|||,,,,,Flying]Tera Captain|Appletun|Leftovers|ThickFat|AppleAcid,Substitute,Recover,DragonPulse|Calm|252,,,4,252,||,0,,,,|||,,,,,Electric]Umbreon||ChopleBerry|Synchronize|DarkPulse,AlluringVoice,Moonlight,CalmMind|Calm|252,,4,,252,||,0,,,,|||,,,,,Dark]Lanturn||Leftovers|VoltAbsorb|Scald,IceBeam,FlipTurn,RainDance|Calm|252,,4,,252,|||||,,,,,Water"],
+ ["Corviknight||Leftovers|Pressure|IronDefense,BodyPress,BraveBird,Roost|Careful|252,4,,,252,|||||,,,,,Flying]Rotom-Heat||ChoiceScarf|Levitate|Trick,WillOWisp,Overheat,VoltSwitch|Bold|252,,252,,4,||,0,,,,|||,,,,,Electric]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,KnockOff,Substitute|Modest|12,,,252,,244|||||,,,,,Stellar]Garchomp||RockyHelmet|RoughSkin|Earthquake,StealthRock,DracoMeteor,Surf|Relaxed|252,,252,4,,|||||,,,,,Dragon]Tera Captain|IronThorns|BoosterEnergy|QuarkDrive|DragonDance,IcePunch,TeraBlast,Earthquake|Adamant|,252,,,4,252|||||,,,,,Fairy]Sylveon||BabiriBerry|Pixilate|HyperVoice,Wish,Protect,Yawn|Bold|228,,144,,136,||,0,,,,|||,,,,,Fairy","Iron Bundle||BoosterEnergy|QuarkDrive|FreezeDry,HydroPump,IceBeam,Encore|Timid|,,,252,4,252||,0,,,,|||,,,,,Ice]Tera Captain|Sceptile|MirrorHerb|Unburden|Synthesis,TeraBlast,EnergyBall,DragonPulse|Modest|,,,252,4,252||,0,,,,|||,,,,,Water]Kingambit||AssaultVest|SupremeOverlord|SuckerPunch,KowtowCleave,IronHead,StoneEdge|Adamant|252,252,,,4,|||||,,,,,Dark]Iron Boulder||BoosterEnergy|QuarkDrive|MightyCleave,ZenHeadbutt,SwordsDance,Megahorn|Jolly|,252,,,4,252|||||,,,,,Rock]Tera Captain|LandorusTherian|HeavyDutyBoots|Intimidate|Earthquake,Uturn,StoneEdge,StealthRock|Jolly|,252,,,4,252|||||,,,,,Flying]Urshifu||HeavyDutyBoots|UnseenFist|CloseCombat,WickedBlow,SuckerPunch,Trailblaze|Jolly|,252,,,4,252|||||,,,,,Fighting"],
+ ["Iron Boulder||BoosterEnergy|QuarkDrive|Earthquake,SwordsDance,MightyCleave,CloseCombat|Jolly|,252,,,4,252|||||,,,,,Rock]Tera Captain|SandyShocks|HeavyDutyBoots|Protosynthesis|EarthPower,StealthRock,VoltSwitch,TeraBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|HornLeech,KnockOff,IvyCudgel,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Fire]Tera Captain|ZoroarkHisui|ChoiceSpecs|Illusion|HyperVoice,Psychic,TeraBlast,ShadowBall|Timid|,,,252,4,252||,0,,,,|S||,,,,,Fairy]Weezing-Galar||BlackSludge|NeutralizingGas|WillOWisp,Defog,SludgeBomb,Taunt|Calm|252,,,4,252,||,0,,,,|S||,,,,,Poison]Eiscue||SitrusBerry|IceFace|IceSpinner,BellyDrum,Liquidation,ZenHeadbutt|Jolly|,252,,,4,252|||||,,,,,Ice","Tyranitar||SmoothRock|SandStream|StealthRock,KnockOff,BrickBreak,StoneEdge|Impish|240,24,244,,,|||||,,,,,Rock]Tera Captain|Excadrill|LumBerry|SandRush|SwordsDance,Earthquake,IronHead,TeraBlast|Jolly|32,252,,,32,192|||||,,,,,Fairy]Palafin||ChoiceBand|ZerotoHero|FlipTurn,JetPunch,CloseCombat,Facade|Adamant|192,252,,,40,24|||||,,,,,Water]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,DragonClaw,MorningSun,HeatCrash|Adamant|,168,192,,,148|||||,,,,,Fire]Cyclizar||HeavyDutyBoots|Regenerator|DragonTail,ShedTail,KnockOff,RapidSpin|Jolly|240,,96,,4,168|||||,,,,,Dragon]Tera Captain|RotomMow|LightClay|Levitate|Reflect,LightScreen,VoltSwitch,FoulPlay|Timid|248,,,,8,252||,0,,,,|||,,,,,Electric"],
+ ["Kleavor||ChoiceScarf|Sharpness|Uturn,StoneAxe,Tailwind,XScissor|Jolly|84,252,,,,172|||||,,,,,Bug]Entei||ChoiceBand|InnerFocus|ExtremeSpeed,IronHead,StompingTantrum,SacredFire|Jolly|48,252,,,,208|||||,,,,,Fire]Landorus-Therian||Leftovers|Intimidate|Uturn,SmackDown,Earthquake,Fly|Impish|252,4,252,,,|||||,,,,,Ground]Tera Captain|Gengar|ChoiceScarf|CursedBody|ShadowBall,SludgeBomb,DazzlingGleam,Thunderbolt|Timid|16,,,252,,240||,0,,,,|||,,,,,Ghost]Kingambit||AssaultVest|SupremeOverlord|KowtowCleave,SuckerPunch,IronHead,LowKick|Careful|252,4,,,252,|||||,,,,,Dark]Urshifu-Rapid-Strike||ChoiceBand|UnseenFist|SurgingStrikes,CloseCombat,Uturn,AquaJet|Jolly|,252,,,4,252|||||,,,,,Fighting","Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,Encore,Uturn|Modest|,,80,252,,176|||||,,,,,Ice]Slowking-Galar||AssaultVest|Regenerator|AcidSpray,Psychic,ShadowBall,FocusBlast|Calm|252,,4,,252,||,0,,,,|||,,,,,Poison]Infernape||HeavyDutyBoots|Blaze|FireBlast,FocusBlast,Uturn,WillOWisp|Timid|,,172,172,,164|||||,,,,,Fire]Corviknight||RockyHelmet|Pressure|Defog,Roost,BodyPress,Uturn|Bold|248,,140,,,120|||||,,,,,Flying]Tera Captain|Torterra|Leftovers|ShellArmor|StealthRock,LeafStorm,TeraBlast,Synthesis|Bold|248,,252,,8,||,0,,,,|||,,,,,Bug]Tera Captain|Hydreigon|ChopleBerry|Levitate|DracoMeteor,FocusBlast,DarkPulse,Roar|Modest|24,,,232,252,||,0,,,,|||,,,,,Steel"],
+ ["Great Tusk||HeavyDutyBoots|Protosynthesis|CloseCombat,HeadlongRush,KnockOff,RapidSpin|Jolly|24,252,,,,232|||||,,,,,Ground]Greninja-Bond||LifeOrb|BattleBond|DarkPulse,GrassKnot,IceBeam,Surf|Timid|8,,,252,,248|||||,,,,,Water]Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|DragonPulse,TeraBlast,Thunderclap,CalmMind|Modest|236,,,252,,20||,20,,,,|||,,,,,Water]Uxie||SitrusBerry|Levitate|Uturn,Psychic,Encore,StealthRock|Bold|248,,252,,8,|||||,,,,,Psychic]Brambleghast||SpellTag|WindRider|Poltergeist,PowerWhip,RapidSpin,ShadowSneak|Adamant|,252,4,,,252|||||,,,,,Grass]Tera Captain|Delphox|BabiriBerry|Magician|DazzlingGleam,Flamethrower,GrassKnot,NastyPlot|Timid|32,,,252,,224||,0,,,,|S||,,,,,Fairy","Ting-Lu||Leftovers|VesselofRuin|Earthquake,ThroatChop,SandTomb,Protect|Careful|252,,4,,252,|||||,,,,,Dark]Baxcalibur||LumBerry|ThermalExchange|IcicleCrash,GlaiveRush,HighHorsepower,DragonDance|Adamant|88,252,,,,168|||||,,,,,Dragon]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,HeatWave,KnockOff,Uturn|Modest|160,,4,252,,92|||||,,,,,Flying]Typhlosion||ChoiceSpecs|FlashFire|Eruption,Flamethrower,ScorchingSands,FocusBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Tera Captain|Gholdengo|ChoiceScarf|GoodasGold|MakeItRain,DazzlingGleam,ShadowBall,Trick|Modest|64,,,252,,192||,0,,,,|||,,,,,Fairy]Tera Captain|Tsareena|HeavyDutyBoots|QueenlyMajesty|PetalBlizzard,KnockOff,RapidSpin,Uturn|Impish|252,,252,,4,|||||,,,,,Fire"],
+ ["Tera Captain|Amoonguss|BlackSludge|EffectSpore|GigaDrain,Spore,SludgeBomb,FoulPlay|Modest|,,252,4,252,||,0,,,,|||,,,,,Steel]Tornadus||LifeOrb|Prankster|Psychic,BleakwindStorm,NastyPlot,Uturn|Timid|100,,,156,,252|||||,,,,,Flying]Overqwil||ShucaBerry|Intimidate|AquaJet,DestinyBond,PoisonJab,Spikes|Jolly|,56,,,200,252|||||,,,,,Dark]Raikou||Leftovers|InnerFocus|CalmMind,Scald,Substitute,Thunderbolt|Bold|252,,56,100,,100||,0,,,,|||,,,,,Electric]Tera Captain|Archaludon|AssaultVest|Stamina|BodyPress,ElectroShot,DracoMeteor,FlashCannon|Calm|200,,,56,252,||,0,,,,|||,,,,,Flying]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,SwordsDance,Protect|Jolly|,252,4,,,252|||||,,,,,Water","Palafin||ChoiceSpecs|ZerotoHero|Boomburst,JetPunch,CloseCombat,ZenHeadbutt|Mild|,16,,252,,240|||||,,,,,Water]Meowscarada||HeavyDutyBoots|Protean|FlowerTrick,KnockOff,AuraSphere,Uturn|Naive|,252,,64,,192|||||,,,,,Grass]Garchomp||HabanBerry|RoughSkin|Earthquake,ScaleShot,SwordsDance,Spikes|Jolly|,252,,,16,240|||||,,,,,Dragon]Tera Captain|Pecharunt|HeavyDutyBoots|PoisonPuppeteer|Recover,MalignantChain,ShadowBall,PartingShot|Bold|248,,,88,160,12||,0,,,,|||,,,,,Grass]Tera Captain|Heatran|Leftovers|FlashFire|StealthRock,MagmaStorm,EarthPower,RockSlide|Modest|168,,,252,4,84|||||,,,,,Electric]Altaria||SafetyGoggles|NaturalCure|Roost,Defog,WillOWisp,BraveBird|Impish|248,,252,,8,|||||,,,,,Dragon"],
+ ["Greninja-Bond||LifeOrb|BattleBond|Surf,DarkPulse,HydroPump,IceBeam|Timid|,,,252,4,252|||||,,,,,Water]Urshifu||ChoiceScarf|UnseenFist|Uturn,CloseCombat,WickedBlow,IronHead|Adamant|,252,,,4,252|||||,,,,,Fighting]Slowking-Galar||SitrusBerry|Regenerator|ToxicSpikes,SludgeBomb,SlackOff,ChillyReception|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison]Tera Captain|Hydrapple|AssaultVest|Regenerator|DracoMeteor,Infestation,LeafStorm,DragonPulse|Modest|248,,252,8,,||,0,,,,|||,,,,,Dragon]Tera Captain|Palossand|PasshoBerry|WaterCompaction|StealthRock,EarthPower,ShadowBall,ShoreUp|Calm|252,,,4,252,||,0,,,,|||,,,,,Ghost]Carbink||AssaultVest|ClearBody|Moonblast,PowerGem,MistyExplosion,EarthPower|Modest|248,,,252,8,||,0,,,,|||,,,,,Rock","Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,FlipTurn,Flamethrower,DracoMeteor|Timid|72,,,252,,184|||||,,,,,Water]Torkoal||HeatRock|Drought|RapidSpin,SolarBeam,LavaPlume,StealthRock|Modest|252,,4,252,,|||||,,,,,Fire]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|Spikes,IvyCudgel,KnockOff,Synthesis|Careful|96,,,,252,160|||||,,,,,Fire]Cyclizar||HeavyDutyBoots|Regenerator|ShedTail,RapidSpin,KnockOff,Taunt|Jolly|252,,,,168,88|||||,,,,,Dragon]Enamorus-Therian||RockyHelmet|Overcoat|Rest,HealingWish,EarthPower,Moonblast|Modest|,,252,252,4,||,0,,,,|||,,,,,Fairy]Darkrai||Leftovers|BadDreams|NastyPlot,Hypnosis,DarkPulse,FocusBlast|Timid|24,,,252,,232||,0,,,,|||,,,,,Dark"],
+ ["Meowscarada||HeavyDutyBoots|Protean|KnockOff,FlowerTrick,PowerGem,Spikes|Naughty|,208,,92,,208|||||,,,,,Grass]Gengar||ChoiceSpecs|CursedBody|ShadowBall,SludgeBomb,Thunderbolt,DazzlingGleam|Timid|64,,,252,,192||,0,,,,|||,,,,,Ghost]Landorus-Therian||Leftovers|Intimidate|BulkUp,Earthquake,RockSlide,Uturn|Impish|248,24,212,,,24|||||,,,,,Ground]Tera Captain|Quaquaval|ProtectivePads|Moxie|AquaStep,CloseCombat,BraveBird,RapidSpin|Adamant|,248,124,,,136|||||,,,,,Fighting]Heatran||Leftovers|FlashFire|StealthRock,MagmaStorm,EarthPower,WillOWisp|Modest|248,,156,104,,||,0,,,,|||,,,,,Fire]Bellibolt||RockyHelmet|Static|VoltSwitch,Toxic,SlackOff,Thunderbolt|Modest|248,,208,52,,||,0,,,,|||,,,,,Electric","Sandslash-Alola||HeavyDutyBoots|SlushRush|IcicleCrash,IceShard,IronHead,RapidSpin|Adamant|252,252,,,4,|||||,,,,,Ice]Slowking-Galar||BlackSludge|Regenerator|ChillyReception,IceBeam,Psyshock,ThunderWave|Modest|252,,,252,4,||,0,,,,|||,,,,,Poison]Tera Captain|Annihilape|AssaultVest|Defiant|DrainPunch,RageFist,TeraBlast,IcePunch|Adamant|248,252,,,,8|||||,,,,,Steel]Garchomp||LoadedDice|RoughSkin|ScaleShot,IronHead,Earthquake,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Dragon]Meowscarada||ChoiceScarf|Overgrow|Uturn,KnockOff,FlowerTrick,LowKick|Jolly|,252,,,4,252|||||,,,,,Grass]Vaporeon||Leftovers|WaterAbsorb|Scald,Protect,Wish,IceBeam|Bold|248,,252,8,,||,0,,,,|||,,,,,Water"],
+ ["Tera Captain|Serperior|AssaultVest|Contrary|LeafStorm,TeraBlast,DragonPulse,GigaDrain|Timid|24,,,252,,232||,0,,,,|||,,,,,Psychic]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,DarkPulse,Flamethrower,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Corviknight||Leftovers|MirrorArmor|Roost,Defog,Uturn,BraveBird|Impish|252,4,252,,,|||||,,,,,Flying]Tera Captain|Raichu|RockyHelmet|Static|Discharge,GrassKnot,Encore,Wish|Timid|76,,,252,4,176||,0,,,,|||,,,,,Electric]Spidops||HeavyDutyBoots|Stakeout|StickyWeb,CircleThrow,Uturn,ToxicSpikes||252,,,,252,4|||||,,,,,Bug]Quaquaval||ChoiceBand|Moxie|AquaStep,AquaJet,CloseCombat,FlipTurn|Adamant|120,252,,,,136|||||,,,,,Water","Tera Captain|Latias|SoulDew|Levitate|CalmMind,Recover,Psyshock,Surf|Bold|252,,252,4,,||,0,,,,|||,,,,,Fire]Clefable||Leftovers|MagicGuard|KnockOff,Psychic,ThunderWave,Moonlight|Sassy|252,4,,,252,|||||,,,,,Fairy]Torkoal||EjectButton|Drought|Flamethrower,EarthPower,StealthRock,RapidSpin|Modest|248,,,252,8,|||||,,,,,Fire]Tera Captain|Victreebel|LifeOrb|Chlorophyll|Growth,WeatherBall,LeafBlade,PoisonJab|Lonely|,252,,4,,252|||||,,,,,Fire]Jirachi||PowerHerb|SereneGrace|Substitute,MeteorBeam,Thunderbolt,Psyshock|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel]Sableye|||Prankster|FocusPunch,Taunt,Thief,KnockOff|Careful|124,132,,,252,|||||,,,,,Dark"],
+ ["Tera Captain|Landorus|LifeOrb|SheerForce|EarthPower,SludgeWave,RockSlide,Gravity|Timid|88,,,252,,168|||||,,,,,Water]Pecharunt||ColburBerry|PoisonPuppeteer|ShadowBall,Recover,MalignantChain,NastyPlot|Modest|224,,,252,,32||,0,,,,|||,,,,,Poison]Heatran||ChoiceScarf|FlashFire|Overheat,SteelBeam,AncientPower,EarthPower|Timid|80,,,252,,176||,0,,,,|||,,,,,Fire]Weavile||FocusSash|Pressure|IcicleSpear,KnockOff,BrickBreak,IceShard|Jolly|,252,,,4,252|||||,,,,,Dark]Tentacruel||ChoiceSpecs|ClearBody|FlipTurn,RapidSpin,IceBeam,HydroPump|Timid|80,,,252,,176|||||,,,,,Water]Latios||WeaknessPolicy|Levitate|Agility,AuraSphere,LusterPurge,Recover|Bold|252,,252,4,,||,0,,,,|||,,,,,Dragon","Weavile||HeavyDutyBoots|Pressure|BrickBreak,KnockOff,IceShard,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Dark]Iron Treads||Leftovers|QuarkDrive|IceSpinner,RapidSpin,Earthquake,VoltSwitch|Jolly|252,40,,,,216|||||,,,,,Ground]Tera Captain|Latias|Leftovers|Levitate|AuraSphere,Agility,DragonPulse,CalmMind|Bold|252,,252,,4,||,0,,,,|||,,,,,Water]Moltres||ChoiceScarf|FlameBody|ScorchingSands,Flamethrower,Uturn,BraveBird|Rash|,96,,252,,160|||||,,,,,Fire]Clefable||Leftovers|MagicGuard|CosmicPower,StoredPower,Moonlight,Moonblast|Bold|252,,152,,104,||,0,,,,|||,,,,,Fairy]Empoleon||Leftovers|Torrent|StealthRock,FlipTurn,Roost,KnockOff|Careful|252,4,,,252,|||||,,,,,Water"],
+ ["Gliscor||ToxicOrb|PoisonHeal|Earthquake,KnockOff,StealthRock,Protect|Impish|252,,252,,,|||||,,,,,Ground]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,FocusBlast,CalmMind,Encore|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Scizor||ChoiceBand|Technician|BulletPunch,Uturn,CloseCombat,KnockOff|Adamant|248,252,,,8,|||||,,,,,Bug]Tera Captain|Porygon2|Eviolite|Download|Recover,TriAttack,IceBeam,Discharge|Calm|252,,,4,252,||,0,,,,|||,,,,,Dragon]Rotom-Wash||ChoiceScarf|Levitate|VoltSwitch,Thunderbolt,Trick,HydroPump|Modest|,,4,252,,252||,0,,,,|||,,,,,Electric]Kommo-o||ThroatSpray|Bulletproof|ClangorousSoul,Boomburst,ClangingScales,Flamethrower|Timid|,,,252,4,252|||||,,,,,Normal","Gurdurr||Eviolite|Guts|DrainPunch,IcePunch,FirePunch,KnockOff|Adamant|248,252,8,,,|||||,,,,,Fighting]Tera Captain|IronMoth|ChoiceSpecs|QuarkDrive|FieryDance,SludgeWave,EnergyBall,Overheat|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Rotom-Wash||RockyHelmet|Levitate|VoltSwitch,HydroPump,Rest,SleepTalk|Bold|248,,252,,8,||,0,,,,|||,,,,,Electric]Jirachi||WeaknessPolicy|SereneGrace|StoredPower,CosmicPower,Wish,Protect|Timid|248,,,,44,216||,0,,,,|||,,,,,Steel]Tera Captain|Lapras|Leftovers|WaterAbsorb|Whirlpool,PerishSong,Protect,LifeDew|Calm|248,,8,,252,||,0,,,,|||,,,,,Ground]Darkrai||ChoiceScarf|BadDreams|DarkPulse,IceBeam,SludgeBomb,Trick|Timid|72,,,252,,184||,0,,,,|||,,,,,Dark"],
+ ["Great Tusk||BoosterEnergy|Protosynthesis|Earthquake,CloseCombat,IceSpinner,RapidSpin|Adamant|76,252,,,,180|||||,,,,,Ground]Tinkaton||Leftovers|MoldBreaker|GigatonHammer,PlayRough,ThunderWave,Encore|Impish|248,20,188,,52,|||||,,,,,Fairy]Qwilfish||RockyHelmet|Intimidate|BarbBarrage,FlipTurn,ThunderWave,Spikes|Impish|248,8,196,,56,|||||,,,,,Water]Uxie||RedCard|Levitate|Psychic,StealthRock,Uturn,KnockOff|Calm|248,,124,,136,|||||,,,,,Psychic]Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|CalmMind,Thunderclap,DragonPulse,Thunderbolt|Modest|248,,,252,,8||,20,,,,|||,,,,,Dark]Greninja-Bond||LifeOrb|BattleBond|Surf,SludgeWave,DarkPulse,WaterShuriken|Timid|16,,,252,,240|||||,,,,,Water","Iron Boulder||ExpertBelt|QuarkDrive|Megahorn,Earthquake,ZenHeadbutt,SacredSword|Jolly|16,252,,,,240|||||,,,,,Stellar]Sneasler||AirBalloon|Unburden|Acrobatics,CloseCombat,XScissor,SwordsDance|Adamant|12,252,16,,16,212|||||,,,,,Stellar]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,Flamethrower,FireBlast,DarkPulse|Timid|,,,252,4,252||,0,,,,|||,,,,,Stellar]Tera Captain|Espathra|Leftovers|SpeedBoost|StoredPower,DazzlingGleam,CalmMind,Substitute|Bold|32,,164,236,52,24||,0,,,,|||,,,,,Fairy]Rotom-Mow||ChoiceScarf|Levitate|LeafStorm,VoltSwitch,Thunderbolt,Trick|Modest|16,,32,252,32,176||,0,,,,|||,,,,,Stellar]Pincurchin||TerrainExtender|ElectricSurge|Scald,Spikes,Discharge,Memento|Relaxed|252,,252,,4,||,0,,,,|||,,,,,Stellar"],
+ ["Uxie||HeavyDutyBoots|Levitate|StealthRock,Psychic,Uturn,KnockOff|Timid|252,,40,,,216|||||,,,,,Dark]Noivern||HeavyDutyBoots|Infiltrator|DracoMeteor,Flamethrower,Uturn,Roost|Timid|,,,252,4,252|||||,,,,,Flying]Tera Captain|Rhyperior|RockyHelmet|LightningRod|StoneEdge,Earthquake,FirePunch,StealthRock|Adamant|252,252,,,4,|||||,,,,,Flying]Azumarill||AssaultVest|HugePower|PlayRough,AquaJet,Liquidation,KnockOff|Adamant|248,252,,,8,|||||,,,,,Water]Tera Captain|Serperior|Leftovers|Contrary|Glare,Substitute,LeechSeed,LeafStorm|Timid|248,,,8,,252||,0,,,,|||,,,,,Grass]Grafaiai||LifeOrb|Prankster|GunkShot,KnockOff,SwordsDance,Encore|Jolly|,252,,,4,252|||||,,,,,Poison","Darkrai||LifeOrb|BadDreams|NastyPlot,DarkPulse,IceBeam,SludgeBomb|Timid|,,,252,4,252||,0,,,,|||,,,,,Stellar]Slowking-Galar||HeavyDutyBoots|Regenerator|FutureSight,ChillyReception,SludgeBomb,SlackOff|Sassy|252,,16,,240,||,0,,,,0|||,,,,,Stellar]Dragonite||HeavyDutyBoots|Multiscale|DragonDance,ExtremeSpeed,DragonClaw,Roost|Adamant|144,252,,,,112|||||,,,,,Stellar]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|SurgingStrikes,CloseCombat,AquaJet,Uturn|Adamant|,252,,,4,252|||||,,,,,Water]Sandy Shocks||BoosterEnergy|Protosynthesis|StealthRock,Thunderbolt,EarthPower,Spikes|Timid|48,,,208,,252||,0,,,,|||,,,,,Stellar]Forretress||RedCard|Sturdy|GyroBall,RapidSpin,ThunderWave,VoltSwitch|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Stellar"],
+ ["Gouging Fire||BoosterEnergy|Protosynthesis|DragonDance,FlareBlitz,DragonClaw,MorningSun|Adamant|32,252,,,,224|||||,,,,,Fire]Decidueye||ColburBerry|Overgrow|Defog,GigaDrain,Uturn,Roost|Bold|252,,252,4,,|||||,,,,,Grass]Magnezone||AssaultVest|Analytic|FlashCannon,Thunderbolt,VoltSwitch,Discharge|Modest|248,,,252,8,||,0,,,,|||,,,,,Electric]Tera Captain|Landorus|LifeOrb|SheerForce|Psychic,CalmMind,RockSlide,EarthPower|Timid|,4,,252,,252|||||,,,,,Psychic]Hitmontop||LifeOrb|Technician|TripleAxel,CloseCombat,MachPunch,Bulldoze|Adamant|12,252,,,,244|||||,,,,,Fighting]Tera Captain|Bisharp|Eviolite|Defiant|Taunt,IronHead,ThroatChop,StealthRock|Adamant|252,252,,,4,|||||,,,,,Flying","Tera Captain|Annihilape|Leftovers|Defiant|RageFist,DrainPunch,Substitute,Protect|Jolly|252,,,,32,224|||||,,,,,Ghost]Greninja||ChoiceScarf|Protean|ToxicSpikes,Liquidation,Uturn,Switcheroo|Jolly|8,252,,,,248|||||,,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|KnockOff,FoulPlay,IcyWind,Uturn|Jolly|252,,88,,,168|||||,,,,,Flying]Ting-Lu||Leftovers|VesselofRuin|StealthRock,Ruination,Whirlwind,ThroatChop|Careful|252,,4,,252,|||||,,,,,Dark]Tera Captain|Comfey|Leftovers|Triage|CalmMind,DrainingKiss,Substitute,Encore|Modest|188,,,252,,68||,0,,,,|||,,,,,Fairy]Scizor||ChoiceScarf|Technician|Uturn,BulletPunch,CloseCombat,KnockOff|Jolly|,252,,,4,252|||||,,,,,Bug"],
+ ["Rotom-Heat||ChoiceScarf|Levitate|NastyPlot,VoltSwitch,Overheat,Trick|Modest|252,,56,24,,176||,0,,,,|||,,,,,Electric]Ogerpon-Cornerstone||CornerstoneMask|Sturdy|Spikes,HornLeech,IvyCudgel,PowerWhip|Adamant|196,252,,,,60|||||,,,,,Rock]Ribombee||ChoiceSpecs|ShieldDust|SunnyDay,Uturn,Moonblast,Switcheroo|Hasty|16,,,252,,240|||||,,,,,Bug]Terapagos||WeaknessPolicy|TeraShift|StoredPower,RapidSpin,TeraStarstorm,CalmMind|Modest|,,248,252,,8|||||,,,,,Stellar]Tera Captain|RagingBolt|DracoPlate|Protosynthesis|Thunderclap,CalmMind,Thunderbolt,DracoMeteor|Modest|252,,,252,4,||,20,,,,|||,,,,,Poison]Slowking||HeavyDutyBoots|Regenerator|Flamethrower,FocusBlast,TrickRoom,Psyshock|Quiet|252,,,252,4,||,0,,,,0|||,,,,,Water","Tera Captain|Annihilape|Leftovers|Defiant|RageFist,DrainPunch,Substitute,Protect|Jolly|252,,,,32,224|||||,,,,,Ghost]Greninja||ChoiceScarf|Protean|ToxicSpikes,Liquidation,Uturn,Switcheroo|Jolly|8,252,,,,248|||||,,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|KnockOff,FoulPlay,IcyWind,Uturn|Jolly|252,,88,,,168|||||,,,,,Flying]Ting-Lu||Leftovers|VesselofRuin|StealthRock,Ruination,Whirlwind,ThroatChop|Careful|252,,4,,252,|||||,,,,,Dark]Tera Captain|Comfey|Leftovers|Triage|CalmMind,DrainingKiss,Substitute,Encore|Modest|188,,,252,,68||,0,,,,|||,,,,,Fairy]Scizor||ChoiceScarf|Technician|Uturn,BulletPunch,CloseCombat,KnockOff|Jolly|,252,,,4,252|||||,,,,,Bug"],
+ ["Tera Captain|UrshifuRapidStrike|MentalHerb|UnseenFist|SwordsDance,SurgingStrikes,CloseCombat,AquaJet|Adamant|248,252,8,,,|||||,,,,,Dragon]Darkrai||AssaultVest|BadDreams|FocusBlast,DarkPulse,SludgeBomb,IceBeam|Timid|120,,,252,,136||,0,,,,|||,,,,,Dark]Slowking-Galar||ColburBerry|Regenerator|ChillyReception,SludgeBomb,FireBlast,HydroPump|Calm|248,,8,,252,||,0,,,,|||,,,,,Poison]Zapdos||HeavyDutyBoots|Static|Hurricane,VoltSwitch,Thunderbolt,Roost|Modest|248,,8,252,,||,0,,,,|||,,,,,Electric]Donphan||Leftovers|Sturdy|BodyPress,Earthquake,StealthRock,KnockOff|Adamant|248,252,8,,,|||||,,,,,Ground]Glaceon||ChoiceSpecs|IceBody|Blizzard,FreezeDry,AlluringVoice,WaterPulse|Modest|224,,,252,4,28||,0,,,,|||,,,,,Ice","Hippowdon||EjectButton|SandStream|SlackOff,Earthquake,StealthRock,BodyPress|Careful|252,,4,,252,|||||,,,,,Ground]Iron Boulder||BoosterEnergy|QuarkDrive|Substitute,SwordsDance,CloseCombat,MightyCleave|Jolly|152,252,,,,104|||||,,,,,Rock]Alomomola||RockyHelmet|Regenerator|Wish,Protect,BodySlam,FlipTurn|Impish|252,,252,,,|||||,,,,,Water]Corviknight||HeavyDutyBoots|Pressure|Roost,Uturn,Defog,BraveBird|Impish|252,,252,,,|||||,,,,,Flying]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,PlayRough,KnockOff,SwordsDance|Jolly|80,220,,,,208|||||,,,,,Water]Chi-Yu||ChoiceSpecs|BeadsofRuin|DarkPulse,Overheat,Psychic,Flamethrower|Timid|24,,,252,,232||,0,,,,|||,,,,,Dark"],
+ ["Iron Valiant||LifeOrb|QuarkDrive|AuraSphere,EnergyBall,KnockOff,VacuumWave|Naive|16,8,24,252,,208|||||,,,,,Fighting]Feraligatr||LifeOrb|SheerForce|Liquidation,IcePunch,PsychicFangs,DragonDance|Jolly|64,252,28,,,164|||||,,,,,Water]Iron Treads||RockyHelmet|QuarkDrive|HighHorsepower,IceSpinner,RapidSpin,StealthRock|Jolly|72,252,,,,184|||||,,,,,Steel]Rotom-Heat||LightClay|Levitate|VoltSwitch,Reflect,LightScreen,WillOWisp|Bold|248,,252,,,8||,0,,,,|||,,,,,Electric]Tera Captain|MoltresGalar|SitrusBerry|Berserk|FieryWrath,AirSlash,NastyPlot,Agility|Modest|152,,,252,,104||,0,,,,|||,,,,,Steel]Tera Captain|Mew|LifeOrb|Synchronize|Psychic,EarthPower,VacuumWave,NastyPlot|Timid|24,,,252,,232||,0,,,,|||,,,,,Fighting","Weavile||AssaultVest|Pickpocket|IceShard,LowKick,TripleAxel,KnockOff|Jolly|32,252,,,40,184|||||,,,,,Dark]Tera Captain|Armarouge|SafetyGoggles|WeakArmor|ArmorCannon,Psyshock,Endure,CalmMind|Modest|160,,,252,4,92||,0,,,,|S||,,,,,Electric]Rillaboom||ChoiceBand|GrassySurge|GrassyGlide,Uturn,KnockOff,DrainPunch|Adamant|240,252,,,4,12|||||,,,,,Grass]Donphan||LumBerry|Sturdy|StealthRock,RapidSpin,HeadSmash,HighHorsepower|Adamant|236,252,,,4,16|||||,,,,,Ground]Slowking-Galar||ColburBerry|Regenerator|Toxic,ChillyReception,LightScreen,Psychic|Calm|252,,172,,72,12||,0,,,,|||,,,,,Poison]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|Uturn,CloseCombat,SurgingStrikes,IcePunch|Adamant|16,252,,,,240|||||,,,,,Ice"],
+ ["Slowking-Galar||ColburBerry|CuriousMedicine|ChillyReception,FutureSight,Flamethrower,ThunderWave|Calm|248,,8,,252,||,0,,,,|||,,,,,Grass]Tera Captain|Annihilape|Leftovers|Defiant|RageFist,Taunt,DrainPunch,BulkUp|Careful|236,8,216,,48,|||||,,,,,Fairy]Roaring Moon||RoseliBerry|Protosynthesis|IronHead,KnockOff,Uturn,Earthquake|Jolly|72,252,,,,184|||||,,,,,Dragon]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,PlayRough,Encore,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Fire]Tera Captain|Dudunsparce|Leftovers|Rattled|Roost,Boomburst,CalmMind,Agility|Modest|252,,,88,,168||,0,,,,|||,,,,,Normal]Gligar||Eviolite|Immunity|Earthquake,KnockOff,Uturn,StealthRock|Careful|248,,,,252,8|||||,,,,,Ground","Tera Captain|Manaphy|Leftovers|Hydration|AcidArmor,TakeHeart,Scald,TeraBlast|Bold|252,,196,,60,||,0,,,,|||,,,,,Poison]Tornadus-Therian||ChoiceSpecs|Regenerator|BleakwindStorm,HeatWave,Uturn,HammerArm|Hasty|,4,,252,,252|||||,,,,,Flying]Raging Bolt||ChoiceScarf|Protosynthesis|DragonPulse,VoltSwitch,DracoMeteor,Thunderbolt|Modest|,,,252,,252||,20,,,,|||,,,,,Electric]Weezing-Galar||RockyHelmet|Levitate|StrangeSteam,WillOWisp,PainSplit,Taunt|Bold|252,,180,,,76||,0,,,,|||,,,,,Poison]Donphan||AssaultVest|Sturdy|IceSpinner,KnockOff,Earthquake,SmackDown|Adamant|,252,,,,252|||||,,,,,Ground]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|Trailblaze,PlayRough,SwordsDance,IvyCudgel|Jolly|,252,,,4,252|||||,,,,,Fire"],
+ ["Meowscarada||ChoiceScarf|Protean|FlowerTrick,PlayRough,Uturn,Trick|Jolly|,252,,,4,252|||||,,,,,Grass]Palafin-Hero||LumBerry|ZerotoHero|Substitute,JetPunch,DrainPunch,BulkUp|Adamant|,252,,,4,252|||||,,,,,Water]Scream Tail||LumBerry|Protosynthesis|StealthRock,DazzlingGleam,PsychicNoise,ThunderWave|Timid|4,,,,252,252||,0,,,,|||,,,,,Fairy]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|Thunderbolt,Thunderclap,VoltSwitch,DracoMeteor|Modest|240,,,252,,16||,20,,,,|||,,,,,Poison]Rotom-Frost||HeavyDutyBoots|Levitate|Substitute,Blizzard,Thunderbolt,PainSplit|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Tera Captain|Revavroom|Leftovers|Filter|ToxicSpikes,IronHead,HighHorsepower,PartingShot|Careful|252,,,,212,44|||||,,,,,Steel","Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,Encore,Synthesis|Jolly|64,252,,,16,176|||||,,,,,Water]Darkrai||LifeOrb|BadDreams|DarkPulse,SludgeBomb,WillOWisp,Hypnosis|Timid|32,,,236,,240||,0,,,,|||,,,,,Dark]Iron Valiant||LifeOrb|QuarkDrive|Moonblast,CloseCombat,Psychic,VacuumWave|Naive|,40,,252,,216|||||,,,,,Fairy]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,Flamethrower,RapidSpin,CalmMind|Modest|64,,,252,,192|||||,,,,,Stellar]Uxie||Leftovers|Levitate|KnockOff,Uturn,PainSplit,Encore|Calm|248,,8,,228,24|||||,,,,,Psychic]Muk||BlackSludge|StickyHold|PoisonJab,KnockOff,ToxicSpikes,PainSplit|Impish|248,,252,,8,|||||,,,,,Poison"],
+ ["Slowking-Galar||BlackSludge|Regenerator|SludgeBomb,FutureSight,SlackOff,ChillyReception|Calm|248,,8,,252,||,0,,,,|||,,,,,Poison]Slither Wing||RockyHelmet|Protosynthesis|CloseCombat,Uturn,WillOWisp,MorningSun|Impish|248,,252,,8,|||||,,,,,Bug]Tera Captain|Ogerpon|ProtectivePads|Defiant|IvyCudgel,KnockOff,Encore,Uturn|Jolly|80,252,,,,176|||||,,,,,Grass]Hydreigon||YacheBerry|Levitate|DracoMeteor,EarthPower,StealthRock,Taunt|Timid|40,,,252,,216||,0,,,,|||,,,,,Dark]Forretress||HeavyDutyBoots|Sturdy|BodyPress,VoltSwitch,PainSplit,RapidSpin|Relaxed|248,,252,,8,|||||,,,,,Bug]Baxcalibur||LoadedDice|IceBody|ScaleShot,IcicleSpear,Earthquake,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Dragon","Iron Bundle||BoosterEnergy|QuarkDrive|HydroPump,IceBeam,Encore,Protect|Modest|248,,,252,8,||,0,,,,|||,,,,,Ice]Overqwil||ShucaBerry|Intimidate|Crunch,PainSplit,Protect,PoisonJab|Adamant|252,252,,,4,|||||,,,,,Dark]Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|HighHorsepower,PlayRough,BulkUp,RapidSpin|Jolly|252,,,,4,252|||||,,,,,Fairy]Zapdos||RockyHelmet|Static|Uturn,ThunderWave,AncientPower,Discharge|Timid|252,,104,,,152|||||,,,,,Electric]Empoleon||AirBalloon|Torrent|FlashCannon,IceBeam,HydroPump,FlipTurn|Modest|252,,,252,4,|||||,,,,,Water]Tera Captain|Oricorio|MirrorHerb|Dancer|QuiverDance,Roost,RevelationDance,AirSlash|Timid|252,,184,,,72||,0,,,,|||,,,,,Steel"],
+ ["Archaludon||AssaultVest|Stamina|ElectroShot,FlashCannon,DragonPulse,BodyPress|Modest|56,,20,136,144,152||,0,,,,|||,,,,,Steel]Basculegion||WacanBerry|SwiftSwim|PhantomForce,FlipTurn,Liquidation,Crunch|Adamant|8,208,,,60,232|||||,,,,,Water]Vikavolt||OccaBerry|Levitate|StickyWeb,VoltSwitch,BugBuzz,ThunderWave|Modest|96,,20,252,140,||,0,,,,|||,,,,,Bug]Qwilfish-Hisui||Eviolite|SwiftSwim|BarbBarrage,PainSplit,Liquidation,ToxicSpikes|Jolly|128,60,32,,224,64|||||,,,,,Dark]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|Thunderclap,VoltSwitch,DracoMeteor,TeraBlast|Timid|32,,12,252,68,144||,20,,,,|||,,,,,Fairy]Pelipper||DampRock|Drizzle|Roost,Uturn,AirSlash,WeatherBall|Timid|168,,,96,100,144|||||,,,,,Water","Samurott-Hisui||WeaknessPolicy|Sharpness|CeaselessEdge,RazorShell,SacredSword,SuckerPunch|Jolly|8,248,,,,252|||||,,,,,Water]Brambleghast||HeavyDutyBoots|WindRider|LeechSeed,StrengthSap,RapidSpin,Poltergeist|Careful|236,24,,,248,|||||,,,,,Grass]Tera Captain|Jirachi|WeaknessPolicy|SereneGrace|IronDefense,Wish,CalmMind,StoredPower|Bold|252,,220,,,36||,0,,,,|||,,,,,Grass]Tornadus-Therian||WacanBerry|Regenerator|GrassKnot,Hurricane,Uturn,FocusBlast|Modest|120,,12,252,,124|||||,,,,,Flying]Tera Captain|SandyShocks|Leftovers|Protosynthesis|Substitute,Thunderbolt,TeraBlast,EarthPower|Timid|84,,,252,,172||,0,,,,|||,,,,,Water]Iron Valiant||BoosterEnergy|QuarkDrive|DestinyBond,SwordsDance,SpiritBreak,CloseCombat|Jolly|16,252,,,,240|||||,,,,,Fairy"],
+ ["Tera Captain|Armarouge|LightClay|FlashFire|Reflect,LightScreen,Psychic,AuraSphere|Modest|248,,56,132,16,56||,0,,,,|||,,,,,Fighting]Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,SpiritBreak,CloseCombat,ZenHeadbutt|Jolly|,212,,,44,252|||||,,,,,Fairy]Tera Captain|Salamence|LumBerry|Intimidate|DragonDance,DualWingbeat,Earthquake,Roost|Jolly|48,252,36,,36,136|||||,,,,,Fairy]Glimmora||RedCard|ToxicDebris|Memento,Endure,EarthPower,SludgeWave|Modest|248,,16,200,8,36||,0,,,,|||,,,,,Rock]Gholdengo||ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,FocusBlast,DazzlingGleam|Modest|96,,,252,,160||,0,,,,|||,,,,,Steel]Brute Bonnet||BoosterEnergy|Protosynthesis|SeedBomb,Crunch,CloseCombat,SuckerPunch|Adamant|40,248,,,,220|||||,,,,,Grass","Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,ShadowBall,Psychic,CalmMind|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Garchomp||SitrusBerry|RoughSkin|Earthquake,ScaleShot,SwordsDance,Spikes|Adamant|,16,,,252,240|||||,,,,,Dragon]Empoleon||ShucaBerry|Torrent|Surf,KnockOff,Yawn,Roost|Sassy|248,,212,,48,|||||,,,,,Water]Tera Captain|Ceruledge|ChoiceScarf|FlashFire|Poltergeist,TeraBlast,ShadowSneak,DestinyBond|Adamant|,252,,,4,252|||||,,,,,Ghost]Weezing-Galar||EjectPack|Levitate|ClearSmog,Overheat,WillOWisp,PainSplit|Bold|248,,252,4,4,||,0,,,,|||,,,,,Poison]Tsareena||BigNugget|LeafGuard|PowerWhip,KnockOff,Fling,RapidSpin|Adamant|40,216,,,,252|||||,,,,,Grass"],
+ ["Meowscarada||ChoiceScarf|Overgrow|FlowerTrick,KnockOff,Uturn,FoulPlay|Adamant|144,252,,,,112|||||,,,,,Grass]Tera Captain|Latias|Leftovers|Levitate|DragonPulse,Thunderbolt,CalmMind,Recover|Timid|220,,,160,,128||,0,,,,|||,,,,,Steel]Sandy Shocks||BoosterEnergy|Protosynthesis|Thunderbolt,ScorchingSands,StealthRock,Spikes|Timid|,,44,208,4,252||,0,,,,|||,,,,,Electric]Tentacruel||ChoiceScarf|LiquidOoze|Surf,IceBeam,SludgeWave,ToxicSpikes|Timid|72,,,252,,184||,0,,,,|||,,,,,Water]Gholdengo||ChoiceSpecs|GoodasGold|ShadowBall,MakeItRain,DazzlingGleam,Trick|Modest|248,,,252,,8||,0,,,,|||,,,,,Steel]Okidogi||AssaultVest|ToxicChain|DrainPunch,KnockOff,IcePunch,PoisonJab|Serious|248,64,,,32,164|||||,,,,,Poison","Palafin-Hero||ChoiceBand|ZerotoHero|FlipTurn,ZenHeadbutt,WaveCrash,JetPunch|Adamant|128,252,,,,128|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Taunt,Hurricane,KnockOff,Uturn|Timid|248,,28,4,60,168|||||,,,,,Flying]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|Thunderclap,DracoMeteor,Thunderbolt,DragonTail|Modest|56,,104,252,80,16|||||,,,,,Electric]Terapagos||HeavyDutyBoots|TeraShift|Toxic,Earthquake,BodySlam,RapidSpin|Adamant|56,252,,,4,196|||||,,,,,Stellar]Tinkaton||RockyHelmet|MoldBreaker|Encore,StealthRock,PlayRough,KnockOff|Careful|248,,216,,4,40|||||,,,,,Fairy]Tera Captain|Torterra|WhiteHerb|ShellArmor|ShellSmash,WoodHammer,DoubleEdge,Earthquake|Adamant|48,212,,,76,172|||||,,,,,Bug"],
+ ["Tornadus-Therian||WacanBerry|Regenerator|Taunt,KnockOff,BleakwindStorm,IcyWind|Timid|48,,,212,,248|||||,,,,,Flying]Tinkaton||Leftovers|MoldBreaker|StealthRock,PlayRough,StoneEdge,GigatonHammer|Careful|252,172,,,32,52|||||,,,,,Fairy]Ampharos||SitrusBerry|Static|Agility,CottonGuard,DazzlingGleam,Thunderbolt|Modest|152,,,172,,184||,0,,,,|||,,,,,Electric]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,SludgeWave,DazzlingGleam,FireBlast|Timid|48,,76,132,,252||,0,,,,|||,,,,,Fairy]Great Tusk||AssaultVest|Protosynthesis|RapidSpin,Earthquake,IceSpinner,HeadSmash|Adamant|188,80,,,56,184|||||,,,,,Ground]Tera Captain|Mesprit|RockyHelmet|Levitate|PsychicNoise,DazzlingGleam,Reflect,Rest|Bold|252,,252,4,,||,0,,,,|||,,,,,Water","Darkrai||ChoiceScarf|BadDreams|DarkPulse,SludgeBomb,FocusBlast,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Poison]Garchomp||RockyHelmet|RoughSkin|SwordsDance,Earthquake,ScaleShot,FireFang|Jolly|,252,,,4,252|||||,,,,,Fire]Sneasler||ChoiceScarf|PoisonTouch|DireClaw,CloseCombat,Uturn,Switcheroo|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Azumarill|ChoiceBand|HugePower|PlayRough,AquaJet,Liquidation,KnockOff|Adamant|252,152,,,104,|||||,,,,,Water]Zapdos||HeavyDutyBoots|Static|Uturn,Discharge,Hurricane,Roost|Timid|252,,104,,,152|||||,,,,,Steel]Tera Captain|Espeon|ChoiceSpecs|MagicBounce|AlluringVoice,Psychic,ShadowBall,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy"],
+ ["Iron Crown||ChoiceScarf|QuarkDrive|TachyonCutter,Psychic,VoltSwitch,SteelBeam|Timid|64,,,252,,192||,20,,,,|||,,,,,Steel]Dewgong||HeavyDutyBoots|ThickFat|TripleAxel,FlipTurn,KnockOff,PlayRough|Relaxed|248,8,252,,,|||||,,,,,Water]Roaring Moon||HeavyDutyBoots|Protosynthesis|KnockOff,Outrage,DragonDance,Roost|Adamant|124,252,,,,132|||||,,,,,Dragon]Ursaluna-Bloodmoon||Leftovers|MindsEye|Moonlight,BloodMoon,EarthPower,VacuumWave|Modest|252,,,252,4,||,0,,,,|||,,,,,Ground]Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|PowerWhip,KnockOff,IvyCudgel,PlayRough|Adamant|52,252,,,,204|||||,,,,,Rock]Tera Captain|Armarouge|HeavyDutyBoots|WeakArmor|Endure,CalmMind,ArmorCannon,Psychic|Modest|120,,,252,,136||,0,,,,|||,,,,,Fairy","Tera Captain|Annihilape|Leftovers|Defiant|BulkUp,DrainPunch,RageFist,Encore|Adamant|252,128,,,,128|||||,,,,,Steel]Weavile||LumBerry|Pickpocket|SwordsDance,TripleAxel,KnockOff,IceShard|Jolly|48,252,,,,208|||||,,,,,Dark]Gliscor||ToxicOrb|PoisonHeal|Earthquake,Toxic,Spikes,Uturn|Careful|252,,172,,84,|||||,,,,,Ground]Gholdengo||ShucaBerry|GoodasGold|NastyPlot,MakeItRain,ShadowBall,Recover|Modest|252,,,80,,176||,0,,,,|||,,,,,Steel]Tera Captain|Vaporeon|Leftovers|WaterAbsorb|Scald,Wish,Haze,FlipTurn|Calm|252,,4,,252,|||||,,,,,Dark]Cutiefly||ChoiceScarf|ShieldDust|Moonblast,Switcheroo,StickyWeb,Uturn|Timid|4,,,252,,252|||||,,,,,Bug"],
+ ["Great Tusk||PayapaBerry|Protosynthesis|StealthRock,RapidSpin,HeadlongRush,IceSpinner|Jolly|100,208,,,,200|||||,,,,,Ground]Latios||WeaknessPolicy|Levitate|StoredPower,Earthquake,DragonDance,CalmMind|Jolly|224,88,,4,,192|||||,,,,,Dragon]Meowscarada||ChoiceScarf|Protean|FlowerTrick,Uturn,KnockOff,TripleAxel|Adamant|48,252,,,,208|||||,,,,,Grass]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|TeraBlast,Taunt,VoltSwitch,FlashCannon|Modest|156,,,164,,188||,0,,,,|||,,,,,Fairy]Heatran||ChopleBerry|FlashFire|WillOWisp,FlashCannon,MagmaStorm,StealthRock|Modest|128,,36,196,,148||,0,,,,|||,,,,,Fire]Tera Captain|Feraligatr|AssaultVest|SheerForce|Crunch,IcePunch,Liquidation,FlipTurn|Adamant|248,160,48,,,52|||||,,,,,Dark","Palafin-Hero||ChoiceBand|ZerotoHero|FlipTurn,JetPunch,CloseCombat,WaveCrash|Adamant|72,212,,,44,180|||||,,,,,Water]Garchomp||AssaultVest|RoughSkin|Earthquake,DracoMeteor,ScaleShot,Facade|Hasty|,44,,216,,248|||||,,,,,Dragon]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,Taunt,NastyPlot,FocusBlast|Timid|212,,,128,,168||,0,,,,|||,,,,,Flying]Gholdengo||ColburBerry|GoodasGold|ThunderWave,MakeItRain,ShadowBall,Recover|Timid|208,,,92,,208||,0,,,,|||,,,,,Steel]Tera Captain|Gallade|ChoiceScarf|Sharpness|PsychoCut,SacredSword,XScissor,KnockOff|Jolly|20,252,,,4,232|||||,,,,,Psychic]Diancie||BabiriBerry|ClearBody|Moonblast,EarthPower,StealthRock,TrickRoom|Quiet|252,,16,184,56,||,0,,,,0|||,,,,,Rock"],
+ ["Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|HeadlongRush,CloseCombat,BulkUp,SupercellSlam|Jolly|252,4,,,,252|||||,,,,,Fairy]Dragalge||LumBerry|PoisonPoint|SludgeBomb,DragonPulse,FlipTurn,Surf|Sassy|252,,144,,112,||,,,,,0|||,,,,,Poison]Scizor||MuscleBand|Technician|BulletPunch,Uturn,CloseCombat,QuickAttack|Adamant|156,252,100,,,|||||,,,,,Bug]Tera Captain|WoChien|Leftovers|TabletsofRuin|TeraBlast,FoulPlay,Rest,SleepTalk|Calm|248,,204,,56,||,0,,,,|||,,,,,Water]Greninja||ChoiceScarf|Protean|Uturn,GunkShot,Surf,DarkPulse|Naive|,96,,252,,160|||||,,,,,Water]Bellibolt||RockyHelmet|Static|VoltSwitch,MuddyWater,SlackOff,Toxic|Bold|252,,240,,16,||,0,,,,|||,,,,,Electric","Darkrai||HeavyDutyBoots|BadDreams|IceBeam,DarkPulse,FocusBlast,NastyPlot|Timid|24,,,252,,232||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,StompingTantrum,Uturn,Synthesis|Jolly|116,168,,,,224|||||,,,,,Water]Infernape||EjectPack|Blaze|Earthquake,Overheat,FireBlast,StealthRock|Hasty|,16,,252,,240|||||,,,,,Fire]Iron Treads||BoosterEnergy|QuarkDrive|IronHead,Earthquake,RapidSpin,Megahorn|Jolly|,252,,,4,252|||||,,,,,Ground]Slowking-Galar||ColburBerry|Regenerator|ThunderWave,SludgeBomb,FutureSight,Flamethrower|Bold|252,,172,,84,||,0,,,,|||,,,,,Poison]Tera Captain|Braviary|RockyHelmet|SheerForce|BodySlam,BraveBird,Roost,Whirlwind|Impish|248,,192,,68,|||||,,,,,Normal"],
+ ["Terapagos||LifeOrb|TeraShift|TeraStarstorm,EarthPower,RapidSpin,CalmMind|Modest|88,,,252,,168|||||,,,,,Stellar]Sylveon||Leftovers|Pixilate|HyperVoice,Charm,Wish,Protect|Modest|252,,,80,52,124||,0,,,,|||,,,,,Fairy]Tera Captain|Kilowattrel|ExpertBelt|VoltAbsorb|Thunderbolt,Hurricane,TeraBlast,VoltSwitch|Timid|92,,,208,,208||,0,,,,|||,,,,,Fairy]Tera Captain|Latias|LifeOrb|Levitate|DracoMeteor,MistBall,Earthquake,TeraBlast|Naive|,104,,196,,208|||||,,,,,Fairy]Iron Treads||AssaultVest|QuarkDrive|Earthquake,IceSpinner,KnockOff,RapidSpin|Adamant|252,8,144,,,104|||||,,,,,Ground]Annihilape||ChoiceScarf|Defiant|RageFist,CloseCombat,Earthquake,Uturn|Adamant|24,252,,,,232|||||,,,,,Fighting","Tera Captain|RagingBolt|AssaultVest|Protosynthesis|DragonPulse,DragonTail,TeraBlast,Thunderbolt|Modest|136,,88,192,,92|||||,,,,,Ground]Great Tusk||HeavyDutyBoots|Protosynthesis|RapidSpin,CloseCombat,HeadlongRush,IceSpinner|Jolly|,252,16,,,240|||||,,,,,Ground]Cinderace||HeavyDutyBoots|Libero|WillOWisp,PyroBall,HighJumpKick,Uturn|Jolly|72,252,,,,184|||||,,,,,Fire]Tinkaton||RockyHelmet|MoldBreaker|GigatonHammer,Encore,SwordsDance,PlayRough|Jolly|184,100,,,,224|||||,,,,,Fairy]Samurott-Hisui||ChoiceScarf|Sharpness|CeaselessEdge,AquaCutter,FlipTurn,AquaJet|Jolly|,252,,,4,252|||||,,,,,Water]Mesprit||ChoiceScarf|Levitate|Trick,HealingWish,Psychic,Encore|Calm|248,,,8,12,240||,0,,,,|||,,,,,Psychic"],
+ ["Gholdengo||OccaBerry|GoodasGold|NastyPlot,ShadowBall,MakeItRain,PowerGem|Modest|240,,160,100,,||,0,,,,|||,,,,,Steel]Iron Treads||BoosterEnergy|QuarkDrive|Earthquake,StoneEdge,RapidSpin,StealthRock|Jolly|24,252,8,,,224|||||,,,,,Ground]Tera Captain|Keldeo|Leftovers|Justified|TeraBlast,IcyWind,Trailblaze,CalmMind|Timid|,,48,252,,208|||||,,,,,Electric]Meowscarada||FocusSash|Overgrow|Spikes,PowerGem,FoulPlay,GigaDrain|Timid|,,104,252,,152||,0,,,,|||,,,,,Grass]Tera Captain|Entei|DracoPlate|InnerFocus|SacredFire,StoneEdge,TeraBlast,Agility|Adamant|192,252,8,,,56|||||,,,,,Dragon]Smeargle||ChoiceScarf|Technician|StickyWeb,Switcheroo,DestinyBond,RapidSpin|Jolly|76,,252,,,180|||||,,,,,Normal","Garchomp||ChilanBerry|RoughSkin|SwordsDance,ScaleShot,Earthquake,StoneEdge|Adamant|40,252,,,,216|||S||,,,,,Dragon]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,PlayRough,Synthesis,SpikyShield|Jolly|,252,4,,,252|||||,,,,,Water]Zapdos||HeavyDutyBoots|Static|Roost,Thunderbolt,HeatWave,Hurricane|Modest|24,,,252,,232||,0,,,,|||,,,,,Electric]Talonflame||HeavyDutyBoots|FlameBody|Taunt,Roost,Flamethrower,BraveBird|Naive|248,28,,,,232|||||,,,,,Fire]Overqwil||LifeOrb|SwiftSwim|RainDance,Liquidation,GunkShot,Crunch|Adamant|40,252,,,,216|||S||,,,,,Dark]Tera Captain|Hariyama|AssaultVest|Guts|KnockOff,DrainPunch,HeavySlam,Earthquake|Adamant|,4,252,,252,|||S||,,,,,Water"],
+ ["Rillaboom||LifeOrb|GrassySurge|GrassyGlide,StompingTantrum,KnockOff,Uturn|Jolly|40,252,,,,216|||||,,,,,Grass]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Thunderbolt,DracoMeteor,Thunderclap,TeraBlast|Modest|252,,,252,4,||,20,,,,|||,,,,,Fairy]Iron Treads||ShucaBerry|QuarkDrive|IceSpinner,StealthRock,RapidSpin,StompingTantrum|Jolly|32,252,,,,224|||||,,,,,Ground]Slowking||Leftovers|Regenerator|IceBeam,Scald,Psychic,ChillyReception|Calm|252,,,,252,||,0,,,,|||,,,,,Water]Talonflame||HeavyDutyBoots|FlameBody|WillOWisp,BraveBird,Defog,Roost|Jolly|248,,84,,,176|||||,,,,,Fire]Sneasler||GrassySeed|Unburden|SwordsDance,CloseCombat,DireClaw,LashOut|Jolly|28,252,,,4,224|||||,,,,,Fighting","Garchomp||RockyHelmet|RoughSkin|RockSlide,Spikes,DragonTail,Earthquake|Impish|248,24,100,,,136|||||,,,,,Dragon]Tera Captain|Scizor|HeavyDutyBoots|Technician|Defog,BulletPunch,KnockOff,Uturn|Adamant|248,252,,,8,|||||,,,,,Dragon]Uxie||SitrusBerry|Levitate|StealthRock,Encore,Uturn,PainSplit|Careful|248,,8,,252,|||||,,,,,Psychic]Sableye||AirBalloon|Prankster|WillOWisp,Encore,Recover,KnockOff|Impish|248,,76,,184,|||||,,,,,Dark]Rotom-Wash||ChoiceScarf|Levitate|HydroPump,VoltSwitch,PainSplit,Trick|Calm|248,,116,,72,72||,0,,,,|||,,,,,Electric]Tera Captain|Braviary|LifeOrb|SheerForce|Substitute,Roost,Agility,BodySlam|Adamant|104,252,,,48,104|||||,,,,,Dragon"],
+ ["Enamorus||LifeOrb|CuteCharm|Moonblast,CalmMind,EarthPower,Psychic|Timid|80,,,176,,252||,0,,,,|||,,,,,Fairy]Clodsire||ShucaBerry|Unaware|Toxic,Spikes,Counter,Earthquake|Sassy|248,,252,,4,|||||,,,,,Poison]Rotom-Heat||Leftovers|Levitate|WillOWisp,Hex,VoltSwitch,PainSplit|Calm|248,,,,128,132||,0,,,,|||,,,,,Steel]Tera Captain|GreatTusk|ChoiceBand|Protosynthesis|CloseCombat,RapidSpin,HeadlongRush,KnockOff|Jolly|8,252,,,,248|||||,,,,,Ground]Kingambit||BlackGlasses|SupremeOverlord|SwordsDance,SuckerPunch,KowtowCleave,IronHead|Adamant|128,236,,,52,92|||||,,,,,Dark]Iron Bundle||ChoiceSpecs|QuarkDrive|IceBeam,HydroPump,FreezeDry,FlipTurn|Modest|,,4,252,,252|||||,,,,,Ice","Slowking-Galar||ShucaBerry|Regenerator|Psychic,SludgeBomb,Flamethrower,FutureSight|Modest|252,,12,244,,||,0,,,,|||,,,,,Poison]Roaring Moon||BoosterEnergy|Protosynthesis|IronHead,Acrobatics,BrickBreak,KnockOff|Jolly|32,252,,,,224|||||,,,,,Dragon]Primarina||YacheBerry|Torrent|PsychicNoise,Surf,Moonblast,EnergyBall|Bold|252,,152,104,,||,0,,,,|||,,,,,Water]Iron Treads||HeavyDutyBoots|QuarkDrive|StoneEdge,Earthquake,StealthRock,RapidSpin|Jolly|4,252,,,,252|||||,,,,,Ground]Tera Captain|Annihilape|AssaultVest|VitalSpirit|RageFist,DrainPunch,Earthquake,StoneEdge|Adamant|252,132,,,124,|||||,,,,,Fairy]Tera Captain|RotomHeat|HeavyDutyBoots|Levitate|WillOWisp,PainSplit,VoltSwitch,Overheat|Bold|248,,188,,72,||,0,,,,|||,,,,,Poison"],
+ ["Great Tusk||RockyHelmet|Protosynthesis|BodyPress,KnockOff,StealthRock,RapidSpin|Impish|208,20,252,,4,24|||||,,,,,Ground]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,KnockOff,Trailblaze,SwordsDance|Adamant|48,252,24,,4,180|||||,,,,,Water]Moltres||HeavyDutyBoots|FlameBody|Hurricane,FireBlast,Roost,Roar|Modest|248,,24,16,220,||,0,,,,|||,,,,,Fire]Iron Crown||BoosterEnergy|QuarkDrive|Psychic,FocusBlast,Substitute,CalmMind|Timid|56,,20,172,8,252||,20,,,,|||,,,,,Steel]Weavile||ProtectivePads|Pickpocket|TripleAxel,IceShard,LowKick,SwordsDance|Jolly|16,252,16,,,224|||||,,,,,Dark]Tera Captain|Diancie|WeaknessPolicy|ClearBody|Moonblast,TeraBlast,EarthPower,RockPolish|Modest|,,16,252,4,236||,0,,,,|||,,,,,Poison","Tera Captain|Sinistcha|Leftovers|Heatproof|StrengthSap,StunSpore,Hex,MatchaGotcha|Bold|252,,252,,4,||,0,,,,|||,,,,,Dragon]Munkidori||BlackSludge|ToxicChain|SludgeWave,CalmMind,Psyshock,Hex|Timid|,,,252,4,252||,0,,,,|||,,,,,Poison]Samurott-Hisui||FocusSash|Sharpness|CeaselessEdge,Surf,AquaJet,Encore|Naive|,252,,4,,252|||||,,,,,Water]Copperajah||Leftovers|HeavyMetal|StealthRock,KnockOff,Whirlwind,HeavySlam|Sassy|252,4,,,252,|||||,,,,,Steel]Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|Substitute,BulkUp,TeraBlast,Earthquake|Naive|248,,8,,,252|||||,,,,,Water]Cyclizar||Leftovers|Regenerator|ShedTail,RapidSpin,KnockOff,Taunt|Jolly|252,,,,4,252|||||,,,,,Dragon"],
+ ["Tera Captain|Cresselia|Leftovers|Levitate|CalmMind,Moonlight,StoredPower,Moonblast|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Weavile||ChoiceBand|Pressure|KnockOff,TripleAxel,IceShard,LowKick|Jolly|,252,,,4,252|||||,,,,,Dark]Kommo-o||ExpertBelt|Overcoat|SwordsDance,PoisonJab,DrainPunch,ScaleShot|Jolly|,252,,,4,252|||||,,,,,Fairy]Terapagos||LumBerry|TeraShift|RapidSpin,CalmMind,TeraStarstorm,Flamethrower|Modest|80,,,252,,176|||||,,,,,Stellar]Dachsbun||Leftovers|WellBakedBody|Wish,Yawn,BodyPress,Protect|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy]Sandy Shocks||HeavyDutyBoots|Protosynthesis|Spikes,VoltSwitch,EarthPower,Thunderbolt|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric","Smeargle||FocusSash|OwnTempo|StickyWeb,BurningBulwark,ToxicSpikes,RapidSpin|Impish|252,,252,,4,|||||,,,,,Normal]Tera Captain|GreatTusk|YacheBerry|Protosynthesis|CloseCombat,RapidSpin,KnockOff,BulkUp|Jolly|,252,,,16,240|||||,,,,,Steel]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,IvyCudgel,PowerWhip,Encore|Jolly|72,252,,,,184|||||,,,,,Fire]Hatterene||Leftovers|MagicBounce|Psychic,DrainingKiss,Nuzzle,CalmMind|Calm|248,,,8,252,|||||,,,,,Psychic]Tera Captain|OricorioSensu|HeavyDutyBoots|Dancer|QuiverDance,RevelationDance,Hurricane,Roost|Timid|252,,64,,,192||,0,,,,|||,,,,,Fire]Kyurem||LoadedDice|Pressure|DragonDance,IcicleSpear,ScaleShot,Roar|Jolly|,252,,,80,176|||||,,,,,Dragon"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|CloseCombat,Moonblast,Thunderbolt,CalmMind|Naive|,4,,252,,252|||||,,,,,Fairy]Tera Captain|Espathra|Leftovers|SpeedBoost|CalmMind,Roost,LuminaCrash,DazzlingGleam|Bold|248,,252,,,8||,0,,,,|||,,,,,Fairy]Samurott-Hisui||Leftovers|Sharpness|Substitute,SwordsDance,CeaselessEdge,RazorShell|Jolly|40,252,,,,216|||||,,,,,Water]Orthworm||SitrusBerry|EarthEater|ShedTail,Earthquake,StealthRock,BodyPress|Impish|248,,252,,8,|||||,,,,,Steel]Tera Captain|ThundurusTherian|ChoiceScarf|VoltAbsorb|Thunderbolt,VoltSwitch,FocusBlast,Uturn|Timid|,,,252,4,252|||||,,,,,Electric]Donphan||RockyHelmet|Sturdy|Earthquake,RapidSpin,KnockOff,StealthRock|Impish|248,,252,,8,|||||,,,,,Ground","Tera Captain|HoopaUnbound|ChoiceSpecs|Magician|PsychicNoise,DarkPulse,EnergyBall,Psychic|Modest|248,,,252,,8||,0,,,,|||,,,,,Psychic]Cinderace||HeavyDutyBoots|Libero|Uturn,PyroBall,IronHead,CourtChange|Adamant|24,252,,,,232|||||,,,,,Fire]Tera Captain|Clefable|Leftovers|Unaware|Moonlight,StoredPower,Moonblast,CalmMind|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Alomomola||HeavyDutyBoots|Regenerator|FlipTurn,Wish,Protect,PlayRough|Relaxed|252,4,252,,,||,,,,,0|||,,,,,Water]Annihilape||ChoiceScarf|Defiant|Uturn,CloseCombat,RageFist,FinalGambit|Adamant|128,252,,,,128|||||,,,,,Fighting]Goodra-Hisui||AssaultVest|Gooey|HeavySlam,DragonTail,IceBeam,KnockOff|Sassy|252,144,,,112,|||||,,,,,Steel"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|CloseCombat,Moonblast,Thunderbolt,CalmMind|Naive|,4,,252,,252|||||,,,,,Fairy]Tera Captain|Espathra|Leftovers|SpeedBoost|CalmMind,Roost,LuminaCrash,DazzlingGleam|Bold|248,,252,,,8||,0,,,,|||,,,,,Fairy]Samurott-Hisui||Leftovers|Sharpness|Substitute,SwordsDance,CeaselessEdge,RazorShell|Jolly|40,252,,,,216|||||,,,,,Water]Orthworm||SitrusBerry|EarthEater|ShedTail,Earthquake,StealthRock,BodyPress|Impish|248,,252,,8,|||||,,,,,Steel]Tera Captain|ThundurusTherian|ChoiceScarf|VoltAbsorb|Thunderbolt,VoltSwitch,FocusBlast,Uturn|Timid|,,,252,4,252|||||,,,,,Electric]Donphan||RockyHelmet|Sturdy|Earthquake,RapidSpin,KnockOff,StealthRock|Impish|248,,252,,8,|||||,,,,,Ground","Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,AuraSphere,Psychic,Thunderbolt|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Ting-Lu||WeaknessPolicy|VesselofRuin|Earthquake,ThroatChop,StealthRock,Memento|Serious|244,120,8,,136,|||||,,,,,Dark]Tera Captain|Gholdengo|ChoiceSpecs|GoodasGold|ShadowBall,Thunderbolt,DazzlingGleam,Trick|Modest|212,,220,76,,||,0,,,,|||,,,,,Ghost]Dragalge||ShucaBerry|Adaptability|SludgeBomb,ShadowBall,Surf,FlipTurn|Calm|248,,56,184,20,|||||,,,,,Poison]Blastoise||LifeOrb|Torrent|WaveCrash,Earthquake,AquaJet,ShellSmash|Adamant|120,252,24,,,112|||||,,,,,Water]Lokix||LifeOrb|TintedLens|Uturn,FirstImpression,KnockOff,DoubleKick|Adamant|112,252,,,,144|||||,,,,,Bug"],
+ ["Gurdurr||Eviolite|IronFist|MachPunch,Defog,FirePunch,IcePunch|Impish|248,8,252,,,|||||,,,,,Fighting]Gouging Fire||ChoiceBand|Protosynthesis|DragonClaw,FlareBlitz,Outrage,IronHead|Adamant|152,252,104,,,|||||,,,,,Fire]Excadrill||ChopleBerry|MoldBreaker|RapidSpin,BrickBreak,IronHead,Earthquake|Adamant|,252,96,,,160|||||,,,,,Ground]Tera Captain|Espathra|ExpertBelt|SpeedBoost|Uturn,LuminaCrash,DazzlingGleam,EnergyBall|Modest|144,,,252,,112|||||,,,,,Fire]Tera Captain|Primarina|AssaultVest|Torrent|FlipTurn,SparklingAria,Moonblast,AlluringVoice|Sassy|252,,,72,186,|||||,,,,,Grass]Iron Valiant||ChoiceSpecs|QuarkDrive|Thunderbolt,Moonblast,Trick,ShadowBall|Modest|8,,32,252,,216||,0,,,,|||,,,,,Fairy","Landorus-Therian||RockyHelmet|Intimidate|Earthquake,Uturn,StealthRock,SwordsDance|Jolly|248,,8,,,252|||||,,,,,Ground]Scizor||AssaultVest|Technician|BulletPunch,Uturn,KnockOff,DualWingbeat|Adamant|248,188,,,60,12|||||,,,,,Bug]Scream Tail||Leftovers|Protosynthesis|DazzlingGleam,Wish,ThunderWave,Encore|Calm|248,,4,,48,208||,0,,,,|||,,,,,Fairy]Tera Captain|Milotic|Leftovers|MarvelScale|Scald,FlipTurn,Haze,Recover|Calm|248,,68,,192,|||||,,,,,Water]Houndoom||HeavyDutyBoots|FlashFire|SludgeBomb,Flamethrower,DarkPulse,FlameCharge|Timid|,,,252,32,224|||||,,,,,Dark]Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|Thunderclap,DragonPulse,TeraBlast,CalmMind|Bold|,,236,,120,140|||||,,,,,Ground"],
+ ["Tera Captain|Latias|LumBerry|Levitate|Psychic,Thunderbolt,Recover,CalmMind|Modest|76,,,252,,180||,0,,,,|||,,,,,Poison]Tera Captain|Lucario|ChoiceSpecs|InnerFocus|FlashCannon,ShadowBall,AuraSphere,VacuumWave|Timid|24,,,252,,232||,0,,,,|||,,,,,Ghost]Iron Treads||AssaultVest|QuarkDrive|Endeavor,RapidSpin,HighHorsepower,KnockOff|Adamant|120,136,,,252,|||||,,,,,Ground]Meowscarada||ChoiceBand|Protean|KnockOff,TripleAxel,FlowerTrick,Uturn|Jolly|24,252,,,,232|||||,,,,,Grass]Rotom-Heat||HeavyDutyBoots|Levitate|Overheat,VoltSwitch,PainSplit,LightScreen|Bold|252,,8,,,248||,0,,,,|||,,,,,Electric]Tornadus||HeavyDutyBoots|Prankster|Tailwind,BleakwindStorm,FocusBlast,Uturn|Modest|252,,60,148,,48|||||,,,,,Flying","Great Tusk||AssaultVest|Protosynthesis|HeadlongRush,CloseCombat,StoneEdge,RapidSpin|Jolly|128,,,,132,248|||||,,,,,Ground]Tera Captain|RagingBolt|Leftovers|Protosynthesis|CalmMind,Thunderbolt,DragonPulse,Thunderclap|Modest|252,,136,120,,||,20,,,,|||,,,,,Fairy]Sneasler||ProtectivePads|PoisonTouch|FakeOut,CloseCombat,DireClaw,Uturn|Jolly|80,252,,,,176|||||,,,,,Fighting]Rillaboom||RockyHelmet|GrassySurge|GrassyGlide,DrainPunch,KnockOff,Uturn|Impish|248,8,252,,,|||||,,,,,Grass]Empoleon||Leftovers|Torrent|Surf,IceBeam,Roar,Roost|Calm|252,,,4,252,||,0,,,,|||,,,,,Water]Tera Captain|Mesprit|RockyHelmet|Levitate|StealthRock,PsychicNoise,DrainPunch,KnockOff|Relaxed|248,,252,,8,|||||,,,,,Fairy"],
+ ["Tornadus-Therian||CovertCloak|Regenerator|Taunt,Uturn,KnockOff,BleakwindStorm|Timid|248,,,,8,252|||||,,,,,Flying]Ting-Lu||Leftovers|VesselofRuin|SleepTalk,Earthquake,StealthRock,Spikes|Adamant|208,,,,252,48|||||,,,,,Dark]Dragonite||HeavyDutyBoots|Multiscale|ExtremeSpeed,FireBlast,Earthquake,Outrage|Adamant|248,132,,,96,32|||||,,,,,Dragon]Tera Captain|Greninja|ChoiceBand|Protean|TeraBlast,Uturn,GunkShot,Liquidation|Adamant|,252,12,,,244|||||,,,,,Stellar]Tera Captain|Bellibolt|Leftovers|Electromorphosis|VoltSwitch,Toxic,SlackOff,EerieImpulse|Calm|248,,8,,200,52||,0,,,,|||,,,,,Electric]Tsareena||ProtectivePads|QueenlyMajesty|Uturn,RapidSpin,Endeavor,HighJumpKick|Adamant|248,,80,,160,20|||||,,,,,Grass","Sneasler||ProtectivePads|PoisonTouch|DireClaw,Switcheroo,Uturn,FakeOut|Adamant|196,252,,,24,36|||||,,,,,Fighting]Darkrai||Leftovers|BadDreams|CalmMind,WillOWisp,Substitute,DarkPulse|Timid|248,,,24,,236||,0,,,,|||,,,,,Dark]Swampert||AssaultVest|Torrent|FlipTurn,Avalanche,Earthquake,KnockOff|Adamant|200,168,,,140,|||||,,,,,Water]Tera Captain|Latias|ExpertBelt|Levitate|CalmMind,Psychic,IceBeam,Recover|Bold|240,,252,,,16||,0,,,,|||,,,,,Poison]Skarmory||Leftovers|WeakArmor|BodyPress,IronDefense,Roost,Whirlwind|Calm|252,,,,232,24||,0,,,,|||,,,,,Steel]Tera Captain|Diancie|CustapBerry|ClearBody|Endeavor,Endure,StealthRock,Moonblast|Bold|248,,72,52,124,12||,0,,,,|||,,,,,Fairy"],
+ ["Slowking-Galar||ColburBerry|Regenerator|IceBeam,ChillyReception,SludgeBomb,ThunderWave|Sassy|252,,16,,240,||,0,,,,0|||,,,,,Water]Tera Captain|Scizor|HeavyDutyBoots|Technician|SwordsDance,KnockOff,Uturn,BulletPunch|Adamant|248,252,,,8,|||||,,,,,Fire]Great Tusk||RindoBerry|Protosynthesis|Earthquake,StealthRock,KnockOff,RapidSpin|Impish|252,,220,,,36|||||,,,,,Water]Tera Captain|Sylveon|Leftovers|Pixilate|CalmMind,HyperVoice,Wish,Protect|Bold|252,,252,,4,||,0,,,,|||,,,,,Water]Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,FlipTurn,Encore|Timid|,,,252,4,252|||||,,,,,Ice]Rotom-Mow||ChoiceScarf|Levitate|WillOWisp,VoltSwitch,LeafStorm,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric","Tera Captain|GreninjaBond|MysticWater|BattleBond|HydroPump,DarkPulse,IceBeam,WaterShuriken|Modest|168,,,252,4,84|||||,,,,,Water]Garchomp||YacheBerry|RoughSkin|SwordsDance,ScaleShot,Earthquake,PoisonJab|Adamant|8,252,,,4,244|||||,,,,,Dragon]Enamorus||HeavyDutyBoots|CuteCharm|CalmMind,Moonblast,EarthPower,MysticalFire|Modest|40,,4,252,,212||,0,,,,|||,,,,,Fairy]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,IvyCudgel,HornLeech,KnockOff|Adamant|72,252,,,4,180|||||,,,,,Fire]Jirachi||Leftovers|SereneGrace|CalmMind,Psychic,FirePunch,Wish|Timid|248,,,108,,152|||||,,,,,Steel]Rotom-Mow||ChoiceScarf|Levitate|LeafStorm,Discharge,Trick,VoltSwitch|Timid|88,,4,252,,164||,0,,,,|||,,,,,Electric"],
+ ["Tera Captain|Metagross|LumBerry|ClearBody|Agility,IcePunch,HeavySlam,Earthquake|Adamant|248,144,,,,116|||||,,,,,Steel]Urshifu||AssaultVest|UnseenFist|WickedBlow,Uturn,CloseCombat,IcePunch|Adamant|,184,20,,144,160|||||,,,,,Fighting]Donphan||HeavyDutyBoots|Sturdy|RapidSpin,Earthquake,StealthRock,IceSpinner|Adamant|212,12,108,,,176|||||,,,,,Ground]Tera Captain|Blastoise|HeavyDutyBoots|Torrent|Haze,ShellSmash,Surf,IceBeam|Timid|40,,,252,,216||,0,,,,|||,,,,,Ice]Latios||ChoiceSpecs|Levitate|LusterPurge,IceBeam,FlipTurn,AuraSphere|Timid|,,208,140,,160|||||,,,,,Dragon]Tornadus-Therian||HeavyDutyBoots|Regenerator|Uturn,KnockOff,IcyWind,Taunt|Modest|32,,4,116,168,188|||||,,,,,Flying","Iron Bundle||ChoiceSpecs|QuarkDrive|HydroPump,Blizzard,FreezeDry,FlipTurn|Timid|,,,252,4,252|||||,,,,,Stellar]Iron Boulder||BoosterEnergy|QuarkDrive|CloseCombat,MightyCleave,Earthquake,SwordsDance|Jolly|24,252,,,,232|||||,,,,,Stellar]Slowking-Galar||ColburBerry|Regenerator|ChillyReception,FutureSight,SludgeBomb,ThunderWave|Relaxed|252,,252,,4,||,0,,,,0|||,,,,,Stellar]Gliscor||ToxicOrb|PoisonHeal|Protect,Toxic,StealthRock,Earthquake|Impish|252,,252,,4,|||||,,,,,Stellar]Tera Captain|Cetitan|SitrusBerry|SlushRush|IcicleSpear,PlayRough,Earthquake,BellyDrum|Jolly|4,252,20,,,232|||||,,,,,Water]Tera Captain|Hydreigon|MirrorHerb|Levitate|NastyPlot,DarkPulse,EarthPower,TeraBlast|Timid|,,8,252,,248||,0,,,,|||,,,,,Fairy"],
+ ["Meowscarada||HeavyDutyBoots|Protean|TripleAxel,Uturn,FlowerTrick,KnockOff|Jolly|,252,,,8,248|||||,,,,,Grass]Arcanine-Hisui||HeavyDutyBoots|Intimidate|FlareBlitz,WillOWisp,StoneEdge,MorningSun|Careful|252,,4,,252,|||||,,,,,Normal]Zapdos||ChoiceScarf|Static|Hurricane,Thunderbolt,Uturn,ElectricTerrain|Modest|160,,32,252,,64|||||,,,,,Flying]Tera Captain|Latias|ElectricSeed|Levitate|AuraSphere,StoredPower,DrainingKiss,CalmMind|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Tera Captain|Mudsdale|Leftovers|Stamina|StealthRock,Earthquake,BodyPress,Roar|Impish|252,,252,,4,|||||,,,,,Steel]Gholdengo||ChoiceSpecs|GoodasGold|MakeItRain,ShadowBall,FocusBlast,Memento|Modest|108,,,252,,148||,0,,,,|||,,,,,Ghost","Garchomp||LoadedDice|RoughSkin|SwordsDance,Earthquake,ScaleShot,StealthRock|Jolly|92,252,,,4,160|||S||,,,,,Dragon]Dusknoir||Leftovers|Frisk|Poltergeist,ShadowSneak,WillOWisp,PainSplit|Serious|252,,252,,4,|||S||,,,,,Ghost]Terapagos||Leftovers|TeraShift|CalmMind,RapidSpin,TeraStarstorm,DarkPulse|Modest|252,,,252,4,|||||,,,,,Stellar]Greninja-Bond||ExpertBelt|BattleBond|IceBeam,DarkPulse,Surf,Uturn|Timid|,,,252,4,252|||||,,,,,Water]Tera Captain|Ogerpon|ProtectivePads|Defiant|IvyCudgel,KnockOff,Encore,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Diancie|Leftovers|ClearBody|DiamondStorm,BodyPress,Rest,SleepTalk|Careful|252,4,,,252,|||||,,,,,Fire"],
+ ["Glimmora||FocusSash|ToxicDebris|SludgeBomb,PowerGem,MortalSpin,EnergyBall|Naive|,4,,252,,252|||||,,,,,Rock]Iron Valiant||BoosterEnergy|QuarkDrive|ShadowBall,CalmMind,Moonblast,Psyshock|Modest|88,,,252,,168||,0,,,,|||,,,,,Fairy]Rotom-Wash||Leftovers|Levitate|VoltSwitch,HydroPump,WillOWisp,PainSplit|Bold|252,,252,4,,||,0,,,,|||,,,,,Electric]Tera Captain|IronCrown|AssaultVest|QuarkDrive|TachyonCutter,Psyshock,FocusBlast,Psychic|Timid|,,,252,4,252||,20,,,,|||,,,,,Fairy]Tera Captain|Skeledirge|HeavyDutyBoots|Unaware|TorchSong,WillOWisp,SlackOff,AlluringVoice|Calm|248,,,8,252,||,0,,,,|||,,,,,Water]Landorus-Therian||SitrusBerry|Intimidate|GrassKnot,StealthRock,Uturn,Earthquake|Jolly|,252,,,,252|||||,,,,,Ground","Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,FocusBlast,ShadowBall,Psyshock|Timid|,,,252,4,252||,0,,,,|||,,,,,Bug]Chi-Yu||HeavyDutyBoots|BeadsofRuin|Overheat,DarkPulse,Psychic,Flamethrower|Timid|,,,252,16,240||,0,,,,|||,,,,,Bug]Rotom-Wash||HeavyDutyBoots|Levitate|VoltSwitch,HydroPump,PainSplit,ThunderWave|Calm|212,,52,,244,||,0,,,,|||,,,,,Bug]Tera Captain|Sinistcha|ChoiceSpecs|Heatproof|ShadowBall,Scald,MatchaGotcha,LeafStorm|Modest|252,,,192,64,||,0,,,,|||,,,,,Ghost]Forretress||AssaultVest|Sturdy|GyroBall,VoltSwitch,RapidSpin,IceSpinner|Relaxed|252,,172,,84,||,,,,,0|||,,,,,Bug]Mudsdale||CustapBerry|Stamina|BodyPress,Earthquake,StealthRock,Endeavor|Careful|252,4,,,252,|||||,,,,,Bug"],
+ ["Palafin-Hero||RindoBerry|ZerotoHero|BulkUp,JetPunch,IcePunch,WaveCrash|Adamant|252,60,,,,196|||||,,,,,Water]Tera Captain|Latias|SoulDew|Levitate|CalmMind,Recover,MistBall,Roar|Bold|252,,140,,,116||,0,,,,|||,,,,,Poison]Iron Treads||AirBalloon|QuarkDrive|StealthRock,HighHorsepower,IceSpinner,VoltSwitch|Jolly|120,252,,,,136|||||,,,,,Ground]Glimmet||FocusSash|ToxicDebris|Spikes,PowerGem,Endure,Memento|Modest|252,,,252,,4||,0,,,,|||,,,,,Rock]Mandibuzz||CovertCloak|Overcoat|Defog,Roost,Uturn,BraveBird|Impish|252,4,252,,,|||||,,,,,Dark]Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,Trick,Protect,VacuumWave|Modest|88,,,252,,168||,0,,,,|||,,,,,Fairy","Torkoal||HeavyDutyBoots|Drought|LavaPlume,Yawn,StealthRock,RapidSpin|Bold|248,,252,8,,|||||,,,,,Fire]Ursaluna-Bloodmoon||LifeOrb|MindsEye|Moonlight,Moonblast,EarthPower,BloodMoon|Modest|252,,,252,4,||,0,,,,|||,,,,,Ground]Gouging Fire||BoosterEnergy|Protosynthesis|DragonDance,BurningBulwark,HeatCrash,DragonClaw|Jolly|120,136,,,,252|||||,,,,,Fire]Venusaur||FocusSash|Chlorophyll|Growth,GigaDrain,WeatherBall,SludgeBomb|Timid|,,,252,4,252||,0,,,,|||,,,,,Grass]Sneasler||NormalGem|Unburden|FakeOut,LashOut,CloseCombat,DireClaw|Adamant|192,252,,,4,60|||||,,,,,Fighting]Tera Captain|Rillaboom|AssaultVest|GrassySurge|FakeOut,Uturn,KnockOff,GrassyGlide|Adamant|72,252,128,,56,|||||,,,,,Grass"],
+ ["Zapdos||HeavyDutyBoots|Pressure|Discharge,EerieImpulse,HeatWave,Roost|Calm|248,,188,,72,||,0,,,,|||,,,,,Electric]Florges-Blue||HeavyDutyBoots|FlowerVeil|Moonblast,TearfulLook,Wish,Synthesis|Bold|248,,252,,8,||,0,,,,|S||,,,,,Fairy]Tera Captain|Forretress|Leftovers|Sturdy|ThunderWave,IronDefense,BodyPress,RapidSpin|Impish|252,,224,,32,|||||,,,,,Bug]Palafin-Hero||Leftovers|ZerotoHero|JetPunch,Encore,Rest,BulkUp|Impish|252,8,200,,28,20|||||,,,,,Water]Tera Captain|Latias|Leftovers|Levitate|Surf,Roar,CalmMind,Recover|Timid|252,,4,,,252||,0,,,,|||,,,,,Poison]Garchomp||RockyHelmet|RoughSkin|Earthquake,DragonTail,Spikes,StealthRock|Impish|232,,180,,80,16|||||,,,,,Dragon","Tera Captain|Latias|Leftovers|Levitate|Thunderbolt,DrainingKiss,CalmMind,Recover|Timid|252,,72,,,184||,0,,,,|||,,,,,Fairy]Iron Valiant||BoosterEnergy|QuarkDrive|CloseCombat,KnockOff,FirePunch,SwordsDance|Jolly|,252,16,,,240|||||,,,,,Bug]Sandy Shocks||PasshoBerry|Protosynthesis|EarthPower,FlashCannon,VoltSwitch,Spikes|Timid|,,8,252,,248||,0,,,,|||,,,,,Bug]Tera Captain|Lokix|HeavyDutyBoots|TintedLens|FirstImpression,SuckerPunch,LeechLife,SwordsDance|Adamant|40,252,,,,216|||||,,,,,Steel]Bronzong||Leftovers|Levitate|Earthquake,IceSpinner,PsychicNoise,StealthRock|Sassy|252,,88,,168,|||||,,,,,Bug]Mandibuzz||HeavyDutyBoots|BigPecks|FoulPlay,Toxic,Roost,Defog|Impish|252,,232,,,24||,0,,,,|||,,,,,Bug"],
+ ["Tera Captain|Clefable|Leftovers|Unaware|Moonblast,Moonlight,StealthRock,Encore|Bold|252,,252,,4,||,0,,,,|||,,,,,Fire]Great Tusk||BoosterEnergy|Protosynthesis|BulkUp,HeadlongRush,SupercellSlam,CloseCombat|Jolly|252,4,,,,252|||||,,,,,Poison]Meowscarada||ChoiceScarf|Protean|KnockOff,FlowerTrick,TripleAxel,Uturn|Jolly|,252,,,4,252|||||,,,,,Ice]Tera Captain|Oricorio|HeavyDutyBoots|Dancer|QuiverDance,RevelationDance,Roost,Hurricane|Timid|252,,12,4,,240||,0,,,,|||,,,,,Ground]Ditto||ChoiceScarf|Imposter|Transform|Impish|248,8,252,,,||,30,,,,|||,,,,,Fairy]Rotom-Heat||ChoiceSpecs|Levitate|Overheat,VoltSwitch,Trick,Thunderbolt|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel","Samurott-Hisui||FocusSash|Sharpness|CeaselessEdge,KnockOff,RazorShell,Encore|Jolly|,252,,,4,252|||||,,,,,Stellar]Enamorus-Therian||GrassySeed|Overcoat|DrainingKiss,SludgeBomb,CalmMind,IronDefense|Bold|252,,252,4,,||,0,,,,|||,,,,,Stellar]Gholdengo||ColburBerry|GoodasGold|MakeItRain,ShadowBall,Recover,ThunderWave|Modest|252,,,252,4,||,0,,,,|||,,,,,Stellar]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Thunderclap,Thunderbolt,DracoMeteor,CalmMind|Modest|252,,,252,4,||,20,,,,|||,,,,,Flying]Gouging Fire||BoosterEnergy|Protosynthesis|FlareBlitz,StoneEdge,DragonDance,MorningSun|Jolly|24,252,4,,4,224|||||,,,,,Stellar]Thwackey||Eviolite|GrassySurge|GrassyGlide,KnockOff,Uturn,Taunt|Adamant|252,252,4,,,|||||,,,,,Stellar"],
+ ["Urshifu||ChoiceScarf|UnseenFist|CloseCombat,WickedBlow,Uturn,SuckerPunch|Adamant|156,252,,,4,96|||||,,,,,Fighting]Tornadus-Therian||HeavyDutyBoots|Regenerator|Uturn,BleakwindStorm,HeatWave,NastyPlot|Timid|88,,,252,,168|||S||,,,,,Flying]Dragalge||RockyHelmet|PoisonPoint|AcidArmor,ToxicSpikes,FlipTurn,DragonPulse|Bold|252,,252,4,,|||S||,,,,,Poison]Tera Captain|Blastoise|WhiteHerb|Torrent|RapidSpin,TeraBlast,ShellSmash,Surf|Modest|,,252,252,,|||||,,,,,Fairy]Tera Captain|Metagross|RockyHelmet|ClearBody|StealthRock,KnockOff,ZenHeadbutt,Earthquake|Jolly|,252,156,,4,96|||S||,,,,,Water]Entei||LifeOrb|Pressure|SacredFire,Trailblaze,ExtremeSpeed,WillOWisp|Jolly|44,252,,,4,208|||S||,,,,,Fire","Tera Captain|Latias|MentalHerb|Levitate|CalmMind,ShadowBall,DrainingKiss,MistBall|Timid|252,,,80,,176||,0,,,,|||,,,,,Poison]Palafin-Hero||PunchingGlove|ZerotoHero|BulkUp,JetPunch,DrainPunch,IcePunch|Adamant|220,252,,,,36|||||,,,,,Normal]Meowscarada||ChoiceScarf|Protean|FlowerTrick,KnockOff,TripleAxel,Uturn|Jolly|24,252,,,,232|||||,,,,,Normal]Tinkaton||Leftovers|Pickpocket|StealthRock,IceHammer,KnockOff,ThunderWave|Careful|252,,,,244,12|||||,,,,,Normal]Iron Hands||RockyHelmet|QuarkDrive|Rest,SleepTalk,IcePunch,Earthquake|Impish|252,4,252,,,|||||,,,,,Normal]Tera Captain|Cryogonal|MirrorHerb|Levitate|FreezeDry,Reflect,RapidSpin,Recover|Calm|248,,,220,20,20|||||,,,,,Ground"],
+ ["Slowking-Galar||SafetyGoggles|Regenerator|ChillyReception,PsychicNoise,FoulPlay,Toxic|Relaxed|252,,252,,4,||,0,,,,|||,,,,,Poison]Iron Treads||OccaBerry|QuarkDrive|Earthquake,IronDefense,BodyPress,HeavySlam|Impish|252,76,180,,,|||||,,,,,Ground]Swampert||RockyHelmet|Torrent|Earthquake,FlipTurn,StealthRock,Yawn|Adamant|252,192,64,,,|||||,,,,,Water]Tera Captain|Shaymin|Leftovers|NaturalCure|SeedFlare,Synthesis,TeraBlast,DazzlingGleam|Timid|252,,,96,,160||,0,,,,|||,,,,,Water]Hariyama||AssaultVest|SheerForce|HeavySlam,DrainPunch,Earthquake,ThunderPunch|Adamant|252,252,,,4,|||||,,,,,Fighting]Darkrai||LifeOrb|BadDreams|Hypnosis,Thunder,FocusBlast,DarkPulse|Modest|84,,,252,,172||,0,,,,|||,,,,,Dark","Tyranitar||ChopleBerry|SandStream|StealthRock,Protect,KnockOff,LowKick|Adamant|252,240,,,,16|||||,,,,,Rock]Tera Captain|Excadrill|ShucaBerry|SandRush|Earthquake,RapidSpin,TeraBlast,SwordsDance|Adamant|,252,,,80,176|||||,,,,,Ice]Clefable||SafetyGoggles|Unaware|Moonblast,Moonlight,KnockOff,Wish|Calm|252,,4,,252,|||S||,,,,,Fairy]Eelektross||Leftovers|Levitate|KnockOff,GigaDrain,Flamethrower,Uturn||168,160,,84,,96|||||,,,,,Electric]Tera Captain|Amoonguss|RockyHelmet|Regenerator|GigaDrain,Spore,SludgeBomb,StompingTantrum|Sassy|100,,252,,156,|||||,,,,,Steel]Tauros-Paldea-Aqua||ChoiceScarf|Intimidate|CloseCombat,RagingBull,WaveCrash,SleepTalk|Jolly|4,252,,,,252|||||,,,,,Fighting"],
+ ["Tera Captain|Latias|Leftovers|Levitate|AuraSphere,StoredPower,CalmMind,Recover|Timid|252,,,4,,252||,0,,,,|||,,,,,Dark]Enamorus||ChoiceScarf|CuteCharm|Moonblast,MysticalFire,EarthPower,HealingWish|Modest|,,4,252,,252||,0,,,,|||,,,,,Fairy]Tera Captain|Gyarados|HeavyDutyBoots|Moxie|DragonDance,Waterfall,Crunch,Taunt|Adamant|28,252,,,,228|||||,,,,,Dark]Infernape||ChoiceScarf|Blaze|Switcheroo,FireBlast,FocusBlast,KnockOff|Hasty|,4,,252,,252|||||,,,,,Fire]Iron Treads||Leftovers|QuarkDrive|KnockOff,RapidSpin,StealthRock,Earthquake|Jolly|112,252,,,,144|||||,,,,,Ground]Persian-Alola||ChoiceScarf|FurCoat|Uturn,FoulPlay,KnockOff,Switcheroo|Jolly|252,,4,,,252|||||,,,,,Dark","Iron Boulder||HeavyDutyBoots|QuarkDrive|MightyCleave,ZenHeadbutt,Earthquake,SwordsDance|Jolly|,252,72,,,184|||||,,,,,Rock]Tera Captain|Gengar|Leftovers|CursedBody|ShadowBall,SludgeBomb,Hex,Substitute|Timid|,,4,252,,252||,0,,,,|||,,,,,Ghost]Klefki||Leftovers|Prankster|DrainingKiss,IronDefense,CalmMind,StoredPower|Bold|252,,212,,44,||,0,,,,|||,,,,,Steel]Porygon2||Eviolite|Trace|TriAttack,Recover,TrickRoom,FoulPlay|Calm|252,,4,,252,||,0,,,,|||,,,,,Normal]Rotom-Wash||RockyHelmet|Levitate|HydroPump,VoltSwitch,WillOWisp,PainSplit|Bold|252,,252,,4,||,0,,,,|||,,,,,Electric]Primeape||ChoiceScarf|Defiant|CloseCombat,Uturn,SeedBomb,StoneEdge|Jolly|,252,4,,,252||,,,,,0|||,,,,,Fighting"],
+ ["Tera Captain|Latias|HeavyDutyBoots|Levitate|CalmMind,Surf,Thunderbolt,Recover|Bold|248,,168,,,92||,0,,,,|||,,,,,Poison]Weavile||ProtectivePads|Pressure|SwordsDance,TripleAxel,KnockOff,LowKick|Jolly|80,252,,,,176|||||,,,,,Dark]Glimmora||FocusSash|ToxicDebris|SludgeBomb,EarthPower,MortalSpin,Spikes|Timid|72,,,252,,184|||||,,,,,Rock]Quaquaval||HeavyDutyBoots|Moxie|RapidSpin,AquaStep,Roost,Uturn|Impish|248,,148,,,112|||||,,,,,Water]Heatran||PasshoBerry|FlameBody|MagmaStorm,EarthPower,WillOWisp,StealthRock|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Tera Captain|SinistchaMasterpiece|ColburBerry|Heatproof|CalmMind,MatchaGotcha,ShadowBall,StrengthSap|Bold|248,,192,,,68||,0,,,,|||,,,,,Grass","Slowbro||ColburBerry|Regenerator|BodyPress,Scald,SlackOff,PsychicNoise|Bold|252,,252,4,,||,0,,,,|S||,,,,,Water]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,KnockOff,IvyCudgel,HornLeech|Jolly|,252,,,4,252|||||,,,,,Water]Tsareena||HeavyDutyBoots|QueenlyMajesty|RapidSpin,LowKick,Uturn,TripleAxel|Careful|252,4,,,252,|||||,,,,,Grass]Ting-Lu||Leftovers|VesselofRuin|Spikes,Earthquake,Whirlwind,ThroatChop|Careful|236,20,,,252,|||||,,,,,Dark]Fezandipiti||PayapaBerry|ToxicChain|PlayRough,Toxic,Uturn,Roost|Careful|252,,124,,132,|||||,,,,,Poison]Heatran||AirBalloon|FlashFire|EarthPower,StealthRock,MagmaStorm,WillOWisp|Modest|,,,252,4,252||,0,,,,|||,,,,,Fire"],
+ ["Darkrai||HeavyDutyBoots|BadDreams|DarkPulse,FocusBlast,Psychic,WillOWisp|Timid|32,,,252,,224||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,WoodHammer,Trailblaze,SwordsDance|Jolly|60,252,,,4,192|||||,,,,,Water]Skarmory||RockyHelmet|Sturdy|IronDefense,BodyPress,StealthRock,Roost|Impish|248,,252,,8,||,0,,,,|||,,,,,Steel]Gliscor||MirrorHerb|PoisonHeal|SwordsDance,Agility,Earthquake,StoneEdge|Jolly|60,252,20,,,176|||||,,,,,Ground]Tera Captain|Cetitan|HeavyDutyBoots|ThickFat|IceShard,IcicleCrash,Earthquake,BellyDrum|Jolly|20,252,4,,,232|||||,,,,,Dark]Vikavolt||FocusSash|Levitate|StickyWeb,Thunderbolt,BugBuzz,ThunderWave|Modest|248,,,252,8,||,0,,,,|||,,,,,Bug","Chi-Yu||ChoiceSpecs|BeadsofRuin|DarkPulse,Overheat,Flamethrower,Psychic|Modest|40,,,252,,216||,0,,,,|||,,,,,Dark]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,KnockOff,HeatWave,Uturn|Calm|232,40,12,12,164,48|||||,,,,,Flying]Metagross||ChoiceScarf|ClearBody|StealthRock,MeteorMash,IcePunch,Trick|Jolly|120,160,,,,228|||||,,,,,Steel]Tera Captain|Quaquaval|HeavyDutyBoots|Moxie|Roost,RapidSpin,WaveCrash,Uturn|Adamant|192,,116,,,200|||||,,,,,Steel]Tera Captain|Gardevoir|LifeOrb|Trace|Moonblast,Thunderbolt,ShadowBall,VacuumWave|Timid|56,,,252,,200||,0,,,,|||,,,,,Fairy]Meganium||RockyHelmet|Overgrow|Synthesis,PetalBlizzard,Earthquake,LeechSeed|Impish|248,8,252,,,|||||,,,,,Grass"],
+ ["Hatterene||BabiriBerry|MagicBounce|CalmMind,Psyshock,DrainingKiss,MysticalFire|Bold|252,,252,4,,||,0,,,,|||,,,,,Psychic]Gouging Fire||BoosterEnergy|Protosynthesis|DragonDance,MorningSun,Earthquake,DragonClaw|Adamant|,252,,,32,224|||||,,,,,Fire]Iron Boulder||BoosterEnergy|QuarkDrive|MightyCleave,ZenHeadbutt,Earthquake,SwordsDance|Jolly|,252,,,32,224|||||,,,,,Rock]Tera Captain|Crocalor|Eviolite|Unaware|Flamethrower,SlackOff,WillOWisp,Roar|Bold|252,,252,,4,||,0,,,,|||,,,,,Electric]Corviknight||ShedShell|Pressure|Roost,Defog,Uturn,BraveBird|Careful|252,,4,,252,|||||,,,,,Flying]Samurott-Hisui||ChoiceScarf|Sharpness|CeaselessEdge,FlipTurn,AquaCutter,AirSlash|Lonely|,252,,48,,200|||||,,,,,Water","Iron Valiant||ExpertBelt|QuarkDrive|CloseCombat,KnockOff,SpiritBreak,PoisonJab|Jolly|,252,24,,,232|||||,,,,,Fairy]Tera Captain|Weavile|FocusSash|Pickpocket|TripleAxel,KnockOff,SwordsDance,LowKick|Jolly|,252,,,4,252|||||,,,,,Ice]Tera Captain|Moltres|HeavyDutyBoots|FlameBody|Roost,Flamethrower,Hurricane,Uturn|Modest|248,,,252,8,|||||,,,,,Water]Latios||ExpertBelt|Levitate|Thunderbolt,DragonPulse,CalmMind,ShadowBall|Modest|,,40,252,,216||,0,,,,|||,,,,,Dragon]Magnezone||AirBalloon|Analytic|FlashCannon,VoltSwitch,BodyPress,IronDefense|Modest|248,,,252,8,||,0,,,,|||,,,,,Electric]Tentacruel||AssaultVest|ClearBody|RapidSpin,HydroPump,KnockOff,SludgeWave|Calm|252,,96,160,,|||||,,,,,Water"],
+ ["Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,HydroPump,FlipTurn,DrillPeck|Timid|104,,,252,,152|||||,,,,,Ice]Latios||SoulDew|Levitate|AuraSphere,DracoMeteor,LusterPurge,FlipTurn|Timid|,,4,252,,252|||||,,,,,Dragon]Tera Captain|Excadrill|ChoiceBand|SandRush|Earthquake,IronHead,XScissor,TeraBlast|Adamant|,252,32,,,224|||||,,,,,Fire]Tyranitar||ChopleBerry|SandStream|StealthRock,Flamethrower,IcePunch,Earthquake|Sassy|248,,,8,252,|||||,,,,,Rock]Brambleghast||ChoiceBand|WindRider|Spikes,RapidSpin,Poltergeist,PowerWhip|Adamant|216,252,16,,,24|||||,,,,,Grass]Enamorus-Therian||AssaultVest|Overcoat|MysticalFire,EarthPower,Moonblast,SludgeBomb|Calm|248,,,8,252,||,0,,,,|||,,,,,Fairy","Tera Captain|Serperior|ChoiceScarf|Contrary|LeafStorm,DragonPulse,TeraBlast,Glare|Modest|208,,,252,,48||,0,,,,|||,,,,,Poison]Azumarill||AssaultVest|HugePower|PlayRough,AquaJet,Liquidation,Superpower|Adamant|248,252,,,8,|||||,,,,,Water]Uxie||HeavyDutyBoots|Levitate|PsychicNoise,Uturn,KnockOff,ThunderWave|Gentle|252,,,4,252,|||||,,,,,Dark]Tera Captain|Rhyperior|RockyHelmet|LightningRod|StoneEdge,Earthquake,Avalanche,StealthRock|Adamant|252,252,,,4,|||||,,,,,Flying]Noivern||HeavyDutyBoots|Infiltrator|DracoMeteor,Flamethrower,Uturn,SuperFang|Timid|104,,,252,,152|||||,,,,,Flying]Forretress||Leftovers|Sturdy|RapidSpin,IronDefense,BodyPress,GyroBall|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Bug"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|CalmMind,Moonblast,Psyshock,Encore|Timid|40,,,252,,216||,0,,,,|||,,,,,Stellar]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Taunt,Earthquake,Toxic,Protect|Jolly|244,,64,,,200|||||,,,,,Fairy]Empoleon||Leftovers|Competitive|StealthRock,Roar,Roost,FlipTurn|Careful|248,,8,,252,|||||,,,,,Stellar]Sceptile||ChoiceScarf|Unburden|LeafBlade,Outrage,Earthquake,ShedTail|Jolly|8,252,,,,248|||||,,,,,Stellar]Tera Captain|Espathra|MentalHerb|SpeedBoost|Substitute,CalmMind,ShadowBall,DazzlingGleam|Timid|136,,,196,120,56||,0,,,,|||,,,,,Ghost]Gengar||AirBalloon|CursedBody|Taunt,Encore,SludgeWave,ShadowBall|Timid|4,,,252,,252||,0,,,,|||,,,,,Stellar","Ninetales||HeatRock|Drought|Psyshock,HealingWish,Encore,WillOWisp|Bold|248,,252,,,8||,0,,,,|||,,,,,Fire]Roaring Moon||BlackGlasses|Protosynthesis|DragonDance,KnockOff,IronHead,Taunt|Jolly|72,200,,,4,232|||||,,,,,Dragon]Tera Captain|Orthworm|SitrusBerry|EarthEater|ShedTail,StealthRock,Spikes,IronHead|Careful|252,,4,,252,|||||,,,,,Fairy]Venusaur||PayapaBerry|Chlorophyll|KnockOff,PoisonJab,Synthesis,Trailblaze|Jolly|40,252,4,,,212|||||,,,,,Grass]Scream Tail||Leftovers|Protosynthesis|CalmMind,Encore,Psyshock,DazzlingGleam|Timid|252,,,8,,248||,0,,,,|||,,,,,Fairy]Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,TeraBlast,KnockOff,DracoMeteor|Timid|12,,,244,,252|||||,,,,,Ground"],
+ ["Iron Bundle||ChoiceSpecs|QuarkDrive|IceBeam,FreezeDry,HydroPump,Uturn|Modest|80,,,252,4,172|||||,,,,,Ice]Tera Captain|Mew|LifeOrb|Synchronize|NastyPlot,Agility,EarthPower,DrainingKiss|Modest|148,,,252,,108||,0,,,,|||,,,,,Water]Orthworm||SitrusBerry|EarthEater|IronHead,BodyPress,Rest,ShedTail|Careful|248,8,,,252,|||||,,,,,Steel]Great Tusk||AssaultVest|Protosynthesis|KnockOff,IceSpinner,HeadlongRush,RapidSpin|Impish|252,,52,,84,120|||||,,,,,Ground]Pecharunt||RockyHelmet|PoisonPuppeteer|Poltergeist,PartingShot,Recover,MalignantChain|Relaxed|252,,184,,72,|||||,,,,,Poison]Crocalor||Eviolite|Unaware|Roar,FireSpin,Encore,SlackOff|Calm|252,,12,4,240,||,0,,,,|||,,,,,Fire","Iron Treads||ClearAmulet|QuarkDrive|FlashCannon,SteelBeam,RapidSpin,VoltSwitch|Timid|40,,8,252,,208|||||,,,,,Ground]Latios||ChoiceScarf|Levitate|LusterPurge,DracoMeteor,FlipTurn,Trick|Timid|76,,,252,4,176|||S||,,,,,Dragon]Palafin-Hero||AssaultVest|ZerotoHero|DrainPunch,JetPunch,IcePunch,FlipTurn|Adamant|252,252,,,4,|||||,,,,,Water]Qwilfish-Hisui||Eviolite|Intimidate|ThroatChop,Toxic,Taunt,Haze|Careful|252,,,,224,32|||||,,,,,Dark]Tera Captain|LandorusTherian|RockyHelmet|Intimidate|BrickBreak,GrassKnot,Uturn,StealthRock|Timid|252,,,32,,224|||S||,,,,,Fairy]Tera Captain|Comfey|ClearAmulet|Triage|DrainingKiss,StoredPower,CalmMind,Substitute|Timid|204,,84,60,,160||,0,,,,|||,,,,,Poison"],
+ ["Darkrai||WideLens|BadDreams|DarkPulse,FocusBlast,Hypnosis,Taunt|Timid|252,,4,28,,224||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,Superpower,SwordsDance|Jolly|8,252,,,,248|||||,,,,,Water]Kyurem||LumBerry|Pressure|FreezeDry,EarthPower,FlashCannon,Roar|Timid|64,,,252,,192||,0,,,,|||,,,,,Dragon]Klefki||Leftovers|Prankster|FoulPlay,Spikes,MagnetRise,ThunderWave|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel]Landorus-Therian||AssaultVest|Intimidate|Earthquake,StoneEdge,BrickBreak,Uturn|Adamant|224,96,,,8,180|||||,,,,,Ground]Tera Captain|Eelektross|AssaultVest|Levitate|ThunderPunch,FlashCannon,BrickBreak,DragonTail|Brave|252,,52,,204,|||||,,,,,Steel","Ninetales-Alola||MentalHerb|SnowWarning|AuroraVeil,Moonblast,Blizzard,FreezeDry|Timid|,,,252,4,252||,0,,,,|||,,,,,Ice]Baxcalibur||ClearAmulet|ThermalExchange|DragonDance,IceShard,GlaiveRush,Earthquake|Adamant|,252,4,,,252|||||,,,,,Dragon]Manaphy||Leftovers|Hydration|TailGlow,AcidArmor,Scald,EnergyBall|Modest|252,,,252,4,||,0,,,,|||,,,,,Water]Tera Captain|Espathra|ColburBerry|SpeedBoost|CalmMind,StoredPower,DazzlingGleam,Protect|Modest|,,,252,4,252||,0,,,,|||,,,,,Fairy]Cyclizar||HeavyDutyBoots|Regenerator|DracoMeteor,RapidSpin,ShedTail,Uturn|Timid|248,,,8,,252|||||,,,,,Dragon]Tera Captain|Pecharunt|ColburBerry|PoisonPuppeteer|NastyPlot,MalignantChain,Hex,TeraBlast|Modest|252,,,244,12,||,0,,,,|||,,,,,Fairy"],
+ ["Clodsire||Leftovers|Unaware|Toxic,Spikes,Recover,GunkShot|Impish|252,,252,,4,|||||,,,,,Poison]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|Earthquake,Uturn,StoneEdge,TeraBlast|Naive|,252,,4,,252|||||,,,,,Flying]Diancie||Leftovers|ClearBody|StealthRock,DiamondStorm,Moonblast,BodyPress|Sassy|248,,8,,252,|||||,,,,,Rock]Tera Captain|ArticunoGalar|HeavyDutyBoots|Competitive|CalmMind,FreezingGlare,Recover,TeraBlast|Timid|4,,,252,,252||,0,,,,|||,,,,,Fairy]Scizor||Leftovers|Technician|Uturn,KnockOff,BulletPunch,DualWingbeat|Adamant|252,252,4,,,|||||,,,,,Bug]Tatsugiri||HeavyDutyBoots|StormDrain|Surf,DracoMeteor,RapidSpin,NastyPlot|Timid|,,,252,,252|||||,,,,,Dragon","Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,IronHead,HeatCrash,DragonClaw|Jolly|64,252,,,8,184|||||,,,,,Fire]Tyranitar||SmoothRock|SandStream|KnockOff,Flamethrower,PowerGem,StealthRock|Calm|232,,,52,224,|||||,,,,,Rock]Tera Captain|Excadrill|ClearAmulet|SandRush|HighHorsepower,IronHead,RockSlide,SwordsDance|Adamant|112,252,,,4,140|||||,,,,,Steel]Palafin-Hero||HeavyDutyBoots|ZerotoHero|FlipTurn,IcePunch,JetPunch,DrainPunch|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|RotomMow|RockyHelmet|Levitate|WillOWisp,LeafStorm,FoulPlay,VoltSwitch|Bold|232,,252,,24,||,0,,,,|||,,,,,Electric]Cyclizar||HeavyDutyBoots|Regenerator|ShedTail,RapidSpin,Overheat,DragonTail|Timid|248,,172,,,88|||||,,,,,Dragon"],
+ ["Blaziken||CustapBerry|SpeedBoost|FlareBlitz,CloseCombat,Protect,SwordsDance|Adamant|,252,,,4,252|||||,,,,,Fire]Excadrill||ChoiceScarf|SandForce|Earthquake,IronHead,BrickBreak,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Ground]Hydrapple||AssaultVest|Regenerator|BodyPress,FickleBeam,GigaDrain,EarthPower|Modest|248,,,148,112,||,0,,,,|||,,,,,Grass]Mimikyu||ChoiceBand|Disguise|PlayRough,ShadowSneak,ShadowClaw,WoodHammer|Jolly|,252,,,4,252|||||,,,,,Ghost]Tera Captain|UrshifuRapidStrike|ChoiceBand|UnseenFist|AquaJet,CloseCombat,SurgingStrikes,Uturn|Jolly|,252,,,4,252|||||,,,,,Water]Minior||WhiteHerb|ShieldsDown|Acrobatics,ShellSmash,Earthquake,RockSlide|Adamant|,252,,,4,252|||S||,,,,,Grass","Tera Captain|Amoonguss|RockyHelmet|Regenerator|GigaDrain,Spore,Toxic,ClearSmog|Bold|248,,252,8,,||,0,,,,|||,,,,,Water]Darkrai||ChoiceScarf|BadDreams|Trick,IceBeam,Psychic,DarkPulse|Timid|76,,,252,4,172||,0,,,,|||,,,,,Dark]Enamorus||Leftovers|Contrary|Superpower,PlayRough,IronHead,Substitute|Jolly|,252,,,4,252|||||,,,,,Fairy]Volcanion||ChoiceSpecs|WaterAbsorb|SteamEruption,Flamethrower,EarthPower,SludgeWave|Modest|248,,,252,8,||,0,,,,|||,,,,,Fire]Cinccino||LoadedDice|Technician|TidyUp,BulletSeed,TripleAxel,TailSlap|Jolly|4,252,,,,252|||||,,,,,Normal]Tera Captain|Excadrill|AirBalloon|MoldBreaker|RapidSpin,SwordsDance,Earthquake,TeraBlast|Hasty|,252,,4,,252|||||,,,,,Ice"],
+ ["Pelipper||DampRock|Drizzle|KnockOff,RainDance,Uturn,Surf|Bold|252,,252,,,4|||||,,,,,Water]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|SwordsDance,Earthquake,Toxic,StealthRock|Jolly|252,,,,80,176|||||,,,,,Water]Archaludon||AssaultVest|Stamina|FlashCannon,ElectroShot,BodyPress,DracoMeteor|Modest|,,,252,252,4||,0,,,,|||,,,,,Steel]Grafaiai||ChoiceScarf|PoisonTouch|Uturn,KnockOff,GunkShot,Switcheroo|Jolly|,252,,,4,252|||||,,,,,Poison]Tera Captain|Basculegion|ChoiceBand|SwiftSwim|WaveCrash,AquaJet,FlipTurn,PhantomForce|Jolly|68,252,,,,188|||||,,,,,Water]Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,CloseCombat,SpiritBreak,DestinyBond|Jolly|100,208,,,,200|||||,,,,,Fairy","Enamorus||LifeOrb|CuteCharm|Moonblast,Agility,EarthPower,WeatherBall|Modest|144,,,252,8,104||,0,,,,|S||,,,,,Fairy]Tera Captain|Venusaur|AssaultVest|Overgrow|SludgeBomb,GigaDrain,AcidSpray,EarthPower|Modest|248,,,180,80,||,0,,,,|S||,,,,,Grass]Torkoal||HeavyDutyBoots|Drought|StealthRock,RapidSpin,WeatherBall,Yawn|Bold|248,,232,,28,|||||,,,,,Fire]Arbok||PayapaBerry|Intimidate|Glare,KnockOff,ToxicSpikes,PoisonJab|Impish|248,,148,,112,|||||,,,,,Poison]Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,FlipTurn,DracoMeteor,DragonPulse|Timid|56,,,252,16,184|||||,,,,,Water]Hoopa-Unbound||SitrusBerry|Magician|ThunderPunch,TrickRoom,Psychic,HyperspaceFury|Brave|192,252,,,64,||,,,,,0|||,,,,,Psychic"],
+ ["Empoleon||Leftovers|Torrent|FlashCannon,Surf,Roar,StealthRock|Sassy|248,,8,,252,||,0,,,,|||,,,,,Water]Great Tusk||Leftovers|Protosynthesis|HeadlongRush,KnockOff,RapidSpin,IceSpinner|Impish|136,196,176,,,|||||,,,,,Ground]Tera Captain|Latias|Leftovers|Levitate|DrainingKiss,AuraSphere,Psyshock,CalmMind|Timid|248,,36,,,224||,0,,,,|||,,,,,Fairy]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,FocusBlast,KnockOff,Uturn|Hasty|16,,,252,,240|||||,,,,,Flying]Zarude||ChoiceScarf|LeafGuard|PowerWhip,KnockOff,CloseCombat,Uturn|Adamant|,252,,,4,252|||||,,,,,Dark]Diancie||Leftovers|ClearBody|DiamondStorm,BodyPress,Moonblast,Spikes|Sassy|252,4,,,252,|||||,,,,,Rock","Tera Captain|Latias|Leftovers|Levitate|Thunderbolt,AlluringVoice,CalmMind,Recover|Timid|252,,4,,,252||,0,,,,|||,,,,,Electric]Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,Encore,FlipTurn|Timid|120,,,252,,136|||||,,,,,Ice]Cinderace||ChoiceBand|Libero|PyroBall,HighJumpKick,SuckerPunch,Uturn|Jolly|72,252,,,,184|||||,,,,,Fire]Iron Treads||AssaultVest|QuarkDrive|EarthPower,Megahorn,VoltSwitch,RapidSpin|Naive|,4,,252,,252|||||,,,,,Ground]Mandibuzz||HeavyDutyBoots|BigPecks|KnockOff,Uturn,Toxic,Roost|Impish|248,,244,,,16|||||,,,,,Dark]Tera Captain|Diancie|Leftovers|ClearBody|BodyPress,DiamondStorm,Rest,SleepTalk|Impish|252,,252,,,4|||||,,,,,Ghost"],
+ ["Tera Captain|Manaphy|MentalHerb|Hydration|TailGlow,Surf,EnergyBall,HeartSwap|Timid|,,,252,4,252||,0,,,,|||,,,,,Ghost]Landorus-Therian||RockyHelmet|Intimidate|Taunt,Earthquake,StealthRock,Uturn|Impish|252,,252,,4,|||||,,,,,Ground]Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,FirePunch,PoisonJab,CloseCombat|Jolly|,252,,,4,252|||||,,,,,Fire]Tentacruel||AirBalloon|ClearBody|IceBeam,RapidSpin,FlipTurn,Toxic|Calm|252,,,,240,16|||||,,,,,Water]Cinderace||HeavyDutyBoots|Blaze|PyroBall,HighJumpKick,CourtChange,Uturn|Jolly|,252,,,4,252|||||,,,,,Fire]Tera Captain|Mismagius|Leftovers|Levitate|TeraBlast,ShadowBall,NastyPlot,Substitute|Timid|252,,,4,,252||,0,,,,|||,,,,,Poison","Primarina||AssaultVest|Torrent|Surf,Moonblast,FlipTurn,PsychicNoise|Calm|252,,16,36,204,|||||,,,,,Water]Corviknight||Leftovers|Pressure|BodyPress,Uturn,Roost,IronDefense|Impish|252,,136,,,120|||||,,,,,Flying]Magnezone||ChoiceSpecs|MagnetPull|Thunderbolt,FlashCannon,VoltSwitch,MirrorCoat|Modest|,,,252,4,252||,0,,,,|||,,,,,Steel]Tera Captain|Gholdengo|AirBalloon|GoodasGold|NastyPlot,ShadowBall,Recover,MakeItRain|Bold|252,,196,,,60|||||,,,,,Steel]Gliscor||ToxicOrb|PoisonHeal|Earthquake,Spikes,Protect,Toxic|Impish|244,,248,,16,|||||,,,,,Water]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,FlareBlitz,Earthquake,MorningSun|Jolly|,252,4,,,252|||||,,,,,Fairy"],
+ ["Tera Captain|GreatTusk|MirrorHerb|Protosynthesis|CloseCombat,HeadlongRush,IceSpinner,RapidSpin|Jolly|4,252,,,,252|||||,,,,,Fairy]Tera Captain|Espeon|HeavyDutyBoots|MagicBounce|AlluringVoice,PsychicNoise,ThunderWave,ShadowBall|Timid|252,,,120,,136||,0,,,,|||,,,,,Fire]Rotom-Heat||ChoiceScarf|Levitate|VoltSwitch,Overheat,ShadowBall,Thunderbolt|Modest|32,,,252,,224||,0,,,,|||,,,,,Electric]Manaphy||ChoiceScarf|Hydration|HydroPump,FlipTurn,EnergyBall,AlluringVoice|Modest|,,,252,144,112|||||,,,,,Water]Roaring Moon||ChoiceBand|Protosynthesis|KnockOff,Outrage,Uturn,Earthquake|Adamant|,252,,,80,176|||||,,,,,Dragon]Klefki||IronBall|Prankster|Spikes,Switcheroo,Reflect,LightScreen|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel","Baxcalibur||LumBerry|ThermalExchange|DragonDance,GlaiveRush,IcicleCrash,BrickBreak|Adamant|,252,,,4,252|||||,,,,,Dragon]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Protect,Facade,Earthquake,SwordsDance|Impish|248,,252,,,8|||||,,,,,Flying]Ribombee||LightClay|ShieldDust|StickyWeb,Reflect,LightScreen,Uturn|Jolly|248,,,,8,252|||||,,,,,Bug]Gholdengo||ShucaBerry|GoodasGold|MakeItRain,ThunderWave,Recover,ShadowBall|Modest|248,,,252,,8||,0,,,,|||,,,,,Steel]Samurott-Hisui||AssaultVest|Sharpness|CeaselessEdge,SacredSword,AquaJet,AquaCutter|Adamant|248,252,,,8,|||||,,,,,Water]Skeledirge||HeavyDutyBoots|Unaware|Roar,SlackOff,TorchSong,ShadowBall|Calm|248,,,8,252,||,0,,,,|||,,,,,Fire"],
+ ["Typhlosion-Hisui||FocusSash|Frisk|FireBlast,InfernalParade,Endeavor,FlameCharge|Timid|8,,,252,,248|||||,,,,,Fire]Meowscarada||MuscleBand|Protean|FlowerTrick,ThunderPunch,KnockOff,SuckerPunch|Adamant|,236,64,,,208|||||,,,,,Grass]Palafin||MentalHerb|ZerotoHero|BulkUp,CloseCombat,JetPunch,WaveCrash|Adamant|248,188,24,,48,|||||,,,,,Water]Tera Captain|Annihilape|CustapBerry|Defiant|StealthRock,RageFist,Uturn,Endeavor|Impish|244,,220,,44,|||||,,,,,Dragon]Tera Captain|Kilowattrel|HeavyDutyBoots|VoltAbsorb|Discharge,Hurricane,Roost,Uturn|Timid|,,76,188,20,224|||||,,,,,Electric]Glimmora||AssaultVest|ToxicDebris|MortalSpin,EarthPower,SludgeBomb,EnergyBall|Modest|236,,,84,120,68|||||,,,,,Rock","Great Tusk||ChoiceScarf|Protosynthesis|HeadlongRush,CloseCombat,IceSpinner,IronHead|Jolly|4,252,,,,252|||||,,,,,Ground]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,Uturn,KnockOff,HornLeech|Jolly|80,252,,,,176|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Hurricane,Uturn,SludgeWave,Psychic|Modest|52,,,252,,204|||||,,,,,Flying]Gengar||ChoiceSpecs|CursedBody|ShadowBall,SludgeBomb,WillOWisp,Trick|Timid|80,,,252,,176||,0,,,,|||,,,,,Ghost]Tinkaton||Leftovers|MoldBreaker|StealthRock,GigatonHammer,KnockOff,Encore|Careful|252,,4,,252,|||||,,,,,Fairy]Tera Captain|Appletun|Leftovers|ThickFat|AppleAcid,DragonPulse,Recover,LeechSeed|Modest|252,,4,252,,||,0,,,,|||,,,,,Dragon"],
+ ["Tera Captain|Landorus|LifeOrb|SheerForce|EarthPower,FocusBlast,NastyPlot,SludgeWave|Timid|88,,,252,,168||,0,,,,|||,,,,,Fighting]Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,IceBeam,FlipTurn|Timid|88,,,252,,168|||||,,,,,Ice]Cyclizar||HeavyDutyBoots|Regenerator|DracoMeteor,KnockOff,RapidSpin,ShedTail|Bold|248,,144,,,116|||||,,,,,Dragon]Jirachi||ColburBerry|SereneGrace|BodySlam,PsychicNoise,Wish,Protect|Sassy|248,,8,,252,|||||,,,,,Steel]Cinderace||SilkScarf|Libero|SwordsDance,PyroBall,IronHead,QuickAttack|Adamant|120,252,,,4,132|||||,,,,,Fire]Weezing-Galar||BlackSludge|Levitate|StrangeSteam,WillOWisp,PainSplit,Defog|Calm|248,,20,,240,||,0,,,,|||,,,,,Poison","Donphan||CustapBerry|Sturdy|Earthquake,IceShard,Endeavor,StealthRock|Adamant|248,252,,,8,|||||,,,,,Ground]Gholdengo||ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,Trick,Memento|Timid|72,,,252,,184||,0,,,,|||,,,,,Steel]Tera Captain|Comfey|FairyFeather|Triage|CalmMind,DrainingKiss,TeraBlast,Synthesis|Modest|252,,4,252,,||,0,,,,|||,,,,,Fire]Gouging Fire||ShucaBerry|Protosynthesis|DragonDance,MorningSun,RagingFury,Earthquake|Adamant|,252,,,28,228|||||,,,,,Fire]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,Trailblaze,Synthesis|Jolly|,252,,,72,184|||||,,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,IcyWind,KnockOff,Uturn|Timid|252,,,4,,252|||||,,,,,Flying"],
+ ["Moltres||ChoiceScarf|FlameBody|Flamethrower,Hurricane,Uturn,Overheat|Timid|,,,252,4,252|||||,,,,,Fire]Great Tusk||HeavyDutyBoots|Protosynthesis|RapidSpin,HeadlongRush,BulkUp,StoneEdge|Jolly|,252,,,96,160|||||,,,,,Ground]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|SwordsDance,BrickBreak,IvyCudgel,Trailblaze|Jolly|,252,16,,16,224|||||,,,,,Water]Indeedee-F||LightClay|PsychicSurge|Trick,Reflect,LightScreen,Psychic|Timid|252,,80,,,176||,0,,,,|||,,,,,Psychic]Tera Captain|IronCrown|BoosterEnergy|QuarkDrive|CalmMind,Agility,StoredPower,FocusBlast|Modest|52,,,252,,204||,20,,,,|||,,,,,Fairy]Tera Captain|Jolteon|HeavyDutyBoots|VoltAbsorb|CalmMind,Thunderbolt,TeraBlast,ShadowBall|Timid|64,,,252,,192||,0,,,,|||,,,,,Ground","Tera Captain|Annihilape|PunchingGlove|VitalSpirit|DrainPunch,RageFist,StoneEdge,BulkUp|Careful|248,20,68,,164,8|||||,,,,,Dragon]Tera Captain|Toxtricity|SafetyGoggles|PunkRock|Boomburst,Overdrive,SludgeBomb,ShiftGear|Modest|208,,,252,,48||,0,,,,|||,,,,,Bug]Enamorus||ChoiceScarf|CuteCharm|Moonblast,EarthPower,Psychic,HealingWish|Timid|8,,,252,,248||,0,,,,|||,,,,,Normal]Greninja-Bond||ExpertBelt|BattleBond|Surf,DarkPulse,SludgeWave,IceBeam|Timid|96,,,252,,160|||||,,,,,Normal]Iron Treads||SitrusBerry|QuarkDrive|Earthquake,KnockOff,RapidSpin,StealthRock|Careful|192,,,,252,64|||||,,,,,Normal]Alomomola||RockyHelmet|Regenerator|Scald,FlipTurn,Acrobatics,Wish|Relaxed|248,,176,,84,|||||,,,,,Normal"],
+ ["Darkrai||ChoiceScarf|BadDreams|SludgeBomb,DarkPulse,IceBeam,FocusBlast|Timid|,,,168,104,236||,0,,,,|||,,,,,Normal]Urshifu||FocusSash|UnseenFist|DrainPunch,WickedBlow,IronHead,Trailblaze|Jolly|16,252,,,,240|||||,,,,,Normal]Tera Captain|Regidrago|LumBerry|DragonsMaw|TeraBlast,DragonDance,Outrage,Earthquake|Lonely|32,252,,,,224|||||,,,,,Steel]Pecharunt||BlackSludge|PoisonPuppeteer|NastyPlot,Hex,MalignantChain,PartingShot|Timid|52,,,216,,240||,0,,,,|||,,,,,Normal]Tera Captain|ScreamTail|Leftovers|Protosynthesis|ThunderWave,DazzlingGleam,Wish,Protect|Calm|252,,,,244,12||,0,,,,|||,,,,,Steel]Corviknight||EjectButton|Pressure|Roost,Defog,BraveBird,Uturn|Careful|252,4,,,252,|||||,,,,,Normal","Iron Valiant||LifeOrb|QuarkDrive|Moonblast,ShadowBall,Thunderbolt,VacuumWave|Timid|40,,,252,,216||,0,,,,|||,,,,,Fairy]Tera Captain|GreninjaBond|LifeOrb|BattleBond|SwordsDance,Liquidation,UpperHand,GunkShot|Jolly|88,252,,,,168|||||,,,,,Water]Gliscor||ToxicOrb|PoisonHeal|Spikes,Taunt,Earthquake,Protect|Jolly|244,,128,,,136|||||,,,,,Ground]Slowking-Galar||ColburBerry|Regenerator|ThunderWave,SludgeBomb,Flamethrower,PsychicNoise|Modest|252,,72,84,100,||,0,,,,|||,,,,,Poison]Tera Captain|Appletun|SitrusBerry|Ripen|DragonTail,AppleAcid,DragonPulse,Recover|Sassy|252,,164,,92,|||||,,,,,Fairy]Rotom-Wash||StickyBarb|Levitate|Trick,WillOWisp,VoltSwitch,HydroPump|Bold|252,,48,,,208||,0,,,,|S||,,,,,Electric"],
+ ["Chi-Yu||ChoiceScarf|BeadsofRuin|DarkPulse,FireBlast,Flamethrower,Overheat|Timid|,,24,252,,232||,0,,,,|||,,,,,Bug]Iron Bundle||ChoiceSpecs|QuarkDrive|IceBeam,HydroPump,FreezeDry,FlipTurn|Timid|,,48,252,,208|||S||,,,,,Bug]Iron Treads||ClearAmulet|QuarkDrive|Earthquake,IceSpinner,VoltSwitch,RapidSpin|Jolly|252,,32,,,224|||S||,,,,,Bug]Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|IvyCudgel,Trailblaze,SwordsDance,Synthesis|Jolly|32,64,220,,,192|||||,,,,,Rock]Tera Captain|EnamorusTherian|RockyHelmet|Overcoat|DrainingKiss,MysticalFire,EarthPower,CalmMind|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy]Morgrem||Eviolite|Prankster|DazzlingGleam,PartingShot,Reflect,LightScreen|Bold|252,,252,,4,||,0,,,,|S||,,,,,Bug","Garchomp||ChoiceScarf|RoughSkin|Earthquake,IronHead,StoneEdge,StealthRock|Adamant|16,252,,,,240|||||,,,,,Dragon]Corviknight||Leftovers|MirrorArmor|Roost,Uturn,Defog,BodyPress|Impish|252,,252,,4,|||||,,,,,Flying]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|SurgingStrikes,Uturn,CloseCombat,BrickBreak|Adamant|,252,,,84,172|||||,,,,,Water]Florges||Leftovers|FlowerVeil|Moonblast,CalmMind,Synthesis,StoredPower|Calm|252,,,4,252,||,0,,,,|||,,,,,Fairy]Tera Captain|Arcanine|Leftovers|FlashFire|MorningSun,Flamethrower,ExtremeSpeed,CloseCombat|Sassy|252,4,,,252,|||||,,,,,Dark]Overqwil||BlackSludge|Intimidate|Crunch,Spikes,Haze,GunkShot|Impish|252,4,252,,,|||||,,,,,Dark"],
+ ["Tera Captain|Serperior|ChoiceScarf|Contrary|LeafStorm,EnergyBall,KnockOff,Glare|Modest|,,,252,12,244|||||,,,,,Grass]Greninja||FocusSash|Protean|Counter,Extrasensory,IceBeam,Spikes|Modest|48,,,252,,208||,0,,,,|||,,,,,Water]Quaquaval||LifeOrb|Moxie|AquaStep,AquaJet,CloseCombat,KnockOff|Adamant|24,252,4,,,228|||||,,,,,Water]Zapdos||RockyHelmet|Static|Hurricane,Uturn,Roost,HeatWave|Timid|248,,28,,,232|||S||,,,,,Electric]Tinkaton||SitrusBerry|Pickpocket|GigatonHammer,PlayRough,StealthRock,Encore|Careful|248,8,,,252,|||||,,,,,Fairy]Mamoswine||CustapBerry|ThickFat|Earthquake,IceShard,HeavySlam,Endure|Adamant|40,40,,,252,176|||||,,,,,Ice","Weezing-Galar||AssaultVest|Levitate|StrangeSteam,SludgeWave,Flamethrower,AcidSpray|Modest|248,,4,252,4,||,0,,,,|||,,,,,Poison]Brambleghast||LoadedDice|WindRider|BulletSeed,Poltergeist,RapidSpin,Spikes|Jolly|40,252,,,,216|||||,,,,,Grass]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|Thunderbolt,GrassKnot,VoltSwitch,SludgeWave|Timid|80,,,176,,252||,0,,,,|||,,,,,Electric]Darkrai||ChoiceSpecs|BadDreams|DarkPulse,IceBeam,Psychic,FocusBlast|Timid|24,,,252,,232||,0,,,,|||,,,,,Dark]Urshifu-Rapid-Strike||ProtectivePads|UnseenFist|SurgingStrikes,AquaJet,CloseCombat,Uturn|Jolly|24,252,,,,232|||||,,,,,Fighting]Tera Captain|Dudunsparce|Leftovers|SereneGrace|Glare,Roost,StealthRock,Boomburst|Calm|252,,4,,252,||,0,,,,|||,,,,,Ghost"],
+ ["Tera Captain|Annihilape|Leftovers|Defiant|DrainPunch,RageFist,Encore,BulkUp|Careful|240,,,,252,16|||||,,,,,Fairy]Landorus-Therian||Leftovers|Intimidate|StealthRock,Earthquake,Uturn,RockTomb|Impish|252,,132,,124,|||||,,,,,Ground]Meowscarada||ChoiceScarf|Protean|TripleAxel,Uturn,KnockOff,FlowerTrick|Jolly|16,252,,,,240|||||,,,,,Grass]Ribombee||HeavyDutyBoots|ShieldDust|QuiverDance,BugBuzz,Moonblast,EnergyBall|Timid|24,,,252,,232||,0,,,,|||,,,,,Bug]Tera Captain|Sceptile|LifeOrb|Overgrow|GigaDrain,LeafStorm,DragonPulse,Substitute|Modest|56,,,252,,200||29,0,,,,|||,,,,,Rock]Tatsugiri-Droopy||AssaultVest|StormDrain|RapidSpin,DracoMeteor,Whirlpool,Counter|Bold|252,,128,,128,|||||,,,,,Dragon","Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,Trailblaze,IvyCudgel,PowerWhip|Jolly|20,252,,,,236|||||,,,,,Fire]Cyclizar||ChoiceScarf|Regenerator|ShedTail,RapidSpin,Uturn,Overheat|Quirky|84,128,,168,,128|||||,,,,,Dragon]Clodsire||BlackSludge|WaterAbsorb|Toxic,Earthquake,StealthRock,Recover|Careful|248,8,,,252,|||||,,,,,Poison]Tera Captain|Polteageist|FocusSash|WeakArmor|StoredPower,TeraBlast,StrengthSap,ShellSmash|Modest|28,,,252,,228||,0,,,,|S||,,,,,Fighting]Dondozo||RockyHelmet|Unaware|Liquidation,Avalanche,Yawn,Rest|Impish|252,4,252,,,|||||,,,,,Water]Tera Captain|Serperior|ChoiceSpecs|Contrary|LeafStorm,TeraBlast,LeechSeed,Synthesis|Modest|64,,,252,,192||,0,,,,|||,,,,,Stellar"],
+ ["Great Tusk||BoosterEnergy|Protosynthesis|Earthquake,IceSpinner,RapidSpin,CloseCombat|Jolly|108,252,,,4,144|||||,,,,,Ground]Mandibuzz||HeavyDutyBoots|Overcoat|Roost,Taunt,KnockOff,Toxic|Careful|248,8,,,252,|||||,,,,,Dark]Tera Captain|Kilowattrel|Magnet|Competitive|Thunderbolt,TeraBlast,Hurricane,VoltSwitch|Timid|200,,,168,4,136||,0,,,,|||,,,,,Water]Empoleon||Leftovers|Competitive|Haze,Roost,MetalClaw,SwordsDance|Careful|252,4,,,252,|||||,,,,,Water]Weezing||RockyHelmet|Levitate|PainSplit,Toxic,Flamethrower,WillOWisp|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Cinderace||ChoiceBand|Libero|PyroBall,ZenHeadbutt,Uturn,CourtChange|Jolly|64,252,,,4,184|||||,,,,,Fire","Kleavor||ChoiceScarf|Sharpness|Uturn,StoneAxe,Tailwind,XScissor|Jolly|84,252,,,,172|||||,,,,,Bug]Entei||ChoiceBand|InnerFocus|ExtremeSpeed,IronHead,StompingTantrum,SacredFire|Jolly|48,252,,,,208|||||,,,,,Fire]Landorus-Therian||Leftovers|Intimidate|Uturn,SmackDown,Earthquake,Fly|Impish|252,4,252,,,|||||,,,,,Ground]Tera Captain|Gengar|ChoiceScarf|CursedBody|ShadowBall,SludgeBomb,DazzlingGleam,Thunderbolt|Timid|16,,,252,,240||,0,,,,|||,,,,,Ghost]Kingambit||AssaultVest|SupremeOverlord|KowtowCleave,SuckerPunch,IronHead,LowKick|Careful|252,4,,,252,|||||,,,,,Dark]Urshifu-Rapid-Strike||ChoiceBand|UnseenFist|SurgingStrikes,CloseCombat,Uturn,AquaJet|Jolly|,252,,,4,252|||||,,,,,Fighting"],
+ ["Tera Captain|Hatterene|Leftovers|MagicBounce|DrainingKiss,CalmMind,MysticalFire,Psyshock|Bold|252,,204,,52,||,0,,,,|||,,,,,Ground]Archaludon||AssaultVest|Stamina|DracoMeteor,DragonTail,FlashCannon,BodyPress|Modest|252,,16,240,,|||||,,,,,Steel]Urshifu||ProtectivePads|UnseenFist|PoisonJab,Uturn,WickedBlow,SuckerPunch|Adamant|,252,,,4,252|||||,,,,,Fighting]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|VoltSwitch,TeraBlast,KnockOff,Thunderbolt|Modest|4,,,252,,252|||||,,,,,Flying]Chi-Yu||ChoiceScarf|BeadsofRuin|Flamethrower,Overheat,DarkPulse,FireBlast|Modest|,,,252,4,252||,0,,,,|||,,,,,Dark]Clefable||Leftovers|Unaware|Wish,ThunderWave,StealthRock,Moonblast|Calm|252,,4,,252,||,0,,,,|||,,,,,Fairy","Garchomp||HabanBerry|RoughSkin|Earthquake,SwordsDance,ScaleShot,PoisonJab|Jolly|16,252,,,,240|||||,,,,,Dragon]Tera Captain|Revavroom|ExpertBelt|Filter|ShiftGear,HighHorsepower,IronHead,GunkShot|Adamant|156,252,,,,100|||||,,,,,Ground]Granbull||AssaultVest|Intimidate|SuperFang,PlayRough,Earthquake,Trailblaze|Careful|252,4,,,252,|||||,,,,,Fairy]Uxie||LightClay|Levitate|Reflect,LightScreen,Uturn,StealthRock|Careful|252,,8,,248,|||||,,,,,Psychic]Blastoise||WhiteHerb|Torrent|AuraSphere,FlashCannon,ShellSmash,Surf|Modest|60,,,252,,196||,0,,,,|||,,,,,Water]Darkrai||ChopleBerry|BadDreams|DarkPulse,SludgeBomb,FocusBlast,NastyPlot|Modest|72,,,252,,184||,0,,,,|||,,,,,Dark"],
+ ["Glimmora||FocusSash|Corrosion|EarthPower,Spikes,StealthRock,Toxic|Modest|252,,,96,,52||,0,,,,|||,,,,,Rock]Samurott-Hisui||MysticWater|Sharpness|SwordsDance,RazorShell,SuckerPunch,AquaJet|Adamant|196,252,,,,60|||||,,,,,Water]Donphan||PasshoBerry|Sturdy|Earthquake,HeavySlam,IceShard,Encore|Adamant|252,184,60,,12,|||||,,,,,Ground]Tera Captain|Annihilape|MarangaBerry|Defiant|BulkUp,RageFist,DrainPunch,Rest|Adamant|252,72,4,,76,40|||||,,,,,Grass]Electrode-Hisui||Leftovers|Soundproof|Substitute,ChargeBeam,LeafStorm,Discharge|Modest|252,,20,132,,104||,0,,,,|||,,,,,Electric]Tornadus-Therian||WacanBerry|Regenerator|NastyPlot,Hurricane,HeatWave,Taunt|Timid|48,,,252,,208||,0,,,,|||,,,,,Flying","Palafin-Hero||ChoiceBand|ZerotoHero|FlipTurn,JetPunch,WaveCrash,CloseCombat|Adamant|,252,,,4,252|||||,,,,,Water]Iron Treads||BoosterEnergy|QuarkDrive|Earthquake,IronDefense,IceSpinner,RapidSpin|Jolly|,252,16,,4,236|||||,,,,,Ground]Weezing-Galar||BlackSludge|Levitate|StrangeSteam,Defog,Haze,Toxic|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Tera Captain|Cresselia|Leftovers|Levitate|Moonlight,CalmMind,Thunderbolt,Psychic|Bold|252,,252,4,,||,0,,,,|||,,,,,Electric]Tera Captain|Raikou|LifeOrb|InnerFocus|VoltSwitch,Scald,ShadowBall,Thunderbolt|Timid|80,,,252,8,168||,0,,,,|||,,,,,Water]Appletun||EjectPack|ThickFat|DracoMeteor,LeafStorm,Recycle,Recover|Modest|248,,,252,8,||,0,,,,|||,,,,,Grass"],
+ ["Samurott-Hisui||FocusSash|Sharpness|AquaCutter,SuckerPunch,SacredSword,CeaselessEdge|Jolly|,252,,,4,252|||||,,,,,Water]Arboliva||Leftovers|SeedSower|StrengthSap,GigaDrain,HyperVoice,LeechSeed|Bold|248,,252,8,,||,0,,,,|||,,,,,Grass]Clodsire||BlackSludge|Unaware|Earthquake,GunkShot,ToxicSpikes,Recover|Careful|248,,8,,252,|||||,,,,,Poison]Necrozma||WeaknessPolicy|PrismArmor|TrickRoom,Earthquake,PhotonGeyser,XScissor|Adamant|252,252,,,4,|||||,,,,,Psychic]Heatran||ChoiceScarf|FlashFire|FireBlast,MagmaStorm,EarthPower,StealthRock|Timid|,,4,252,,252||,0,,,,|||,,,,,Fire]Tera Captain|IronHands|AssaultVest|QuarkDrive|IcePunch,ThunderPunch,FakeOut,DrainPunch|Adamant|,252,4,,252,|||||,,,,,Grass","Tera Captain|Serperior|HeavyDutyBoots|Contrary|LeafStorm,TeraBlast,Substitute,GastroAcid|Modest|16,,4,252,,236||,0,,,,|||,,,,,Ground]Palafin||ChoiceScarf|ZerotoHero|FlipTurn,WaveCrash,CloseCombat,IcePunch|Adamant|16,252,,,,240|||||,,,,,Water]Heatran||AirBalloon|FlashFire|MagmaStorm,ScorchingSands,DragonPulse,StealthRock|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Tera Captain|Umbreon|HeavyDutyBoots|InnerFocus|FoulPlay,AlluringVoice,Wish,Protect|Calm|252,,4,,252,||,0,,,,|||,,,,,Poison]Latios||SoulDew|Levitate|DracoMeteor,LusterPurge,AuraSphere,FlipTurn|Timid|112,,,252,,144|||||,,,,,Dragon]Dachsbun||Leftovers|WellBakedBody|PlayRough,Copycat,Roar,Protect|Jolly|252,,80,,,176|||||,,,,,Fairy"],
+ ["Great Tusk||ChoiceScarf|Protosynthesis|StealthRock,CloseCombat,HeadlongRush,IceSpinner|Adamant|,252,4,,,252|||||,,,,,Ground]Weavile||HeavyDutyBoots|Pressure|KnockOff,IceShard,TripleAxel,LowKick|Jolly|,252,,,4,252|||S||,,,,,Dark]Alomomola||AssaultVest|Regenerator|FlipTurn,Scald,MirrorCoat,PlayRough|Relaxed|252,,184,,72,|||||,,,,,Water]Tera Captain|Jolteon|HeavyDutyBoots|VoltAbsorb|Discharge,VoltSwitch,ShadowBall,AlluringVoice|Timid|,,40,252,,216||,0,,,,|||,,,,,Fighting]Gholdengo||Leftovers|GoodasGold|ShadowBall,MakeItRain,Recover,ThunderWave|Calm|252,,44,,212,||,0,,,,|||,,,,,Steel]Tera Captain|Mew|LifeOrb|Synchronize|DragonDance,Poltergeist,PlayRough,Earthquake|Jolly|,252,,,4,252|||S||,,,,,Fairy","Urshifu||ChoiceScarf|UnseenFist|Uturn,IronHead,WickedBlow,CloseCombat|Jolly|56,252,,,,200|||||,,,,,Water]Scream Tail||Leftovers|Protosynthesis|Wish,Encore,Protect,DazzlingGleam|Timid|252,,88,,,168||,0,,,,|||,,,,,Normal]Volcanion||ShucaBerry|WaterAbsorb|FlameCharge,EarthPower,SteamEruption,Flamethrower|Modest|80,,,252,,176|||||,,,,,Steel]Brambleghast||HeavyDutyBoots|Infiltrator|StrengthSap,LeechSeed,RapidSpin,Poltergeist|Jolly|252,,24,,,232|||||,,,,,Poison]Tera Captain|Kilowattrel|HeavyDutyBoots|VoltAbsorb|Roost,Uturn,AirSlash,Thunderbolt|Timid|4,,,252,,252|||||,,,,,Water]Goodra||AssaultVest|SapSipper|DragonTail,Flamethrower,Bulldoze,IceBeam|Relaxed|252,,180,,76,|||||,,,,,Steel"],
+ ["Urshifu-Rapid-Strike||ChoiceBand|UnseenFist|SurgingStrikes,CloseCombat,Uturn,ThunderPunch|Adamant|,252,4,,,252|||||,,,,,Fighting]Tera Captain|Incineroar|Leftovers|Intimidate|KnockOff,FlareBlitz,PartingShot,WillOWisp|Adamant|252,252,4,,,|||||,,,,,Water]Tera Captain|Ogerpon|LifeOrb|Defiant|HornLeech,KnockOff,SwordsDance,Encore|Adamant|4,252,,,,252|||||,,,,,Grass]Glimmora||FocusSash|ToxicDebris|MortalSpin,EarthPower,StealthRock,EnergyBall|Timid|4,,,252,,252|||||,,,,,Rock]Gholdengo||ChoiceSpecs|GoodasGold|MakeItRain,ShadowBall,FocusBlast,Trick|Modest|4,,,252,,252||,0,,,,|||,,,,,Steel]Masquerain||FocusSash|Intimidate|EnergyBall,Toxic,StickyWeb,Uturn|Quiet|252,4,,252,,|||||,,,,,Bug","Weezing-Galar||RockyHelmet|NeutralizingGas|Defog,ToxicSpikes,WillOWisp,PainSplit|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Skeledirge||HeavyDutyBoots|Unaware|EarthPower,TorchSong,SlackOff,Yawn|Bold|248,,252,8,,||,0,,,,|||,,,,,Fire]Palafin||ChoiceBand|ZerotoHero|FlipTurn,WaveCrash,JetPunch,ZenHeadbutt|Jolly|,252,,,24,232|||||,,,,,Water]Ting-Lu||LumBerry|VesselofRuin|Payback,Earthquake,StealthRock,Rest|Adamant|4,252,,,252,|||||,,,,,Dark]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,DragonPulse,TeraBlast,Synthesis|Timid|24,,,252,,232||,0,,,,|||,,,,,Stellar]Tinkaton||AssaultVest|OwnTempo|GigatonHammer,KnockOff,PlayRough,Bulldoze|Careful|252,4,,,252,|||||,,,,,Fairy"],
+ ["Tera Captain|Lurantis|HeavyDutyBoots|Contrary|Superpower,Defog,Synthesis,KnockOff|Impish|248,,252,,,8|||||,,,,,Fairy]Tera Captain|Excadrill|LoadedDice|SandRush|SwordsDance,Earthquake,TeraBlast,RockBlast|Adamant|,252,36,,16,204|||||,,,,,Grass]Latios||ColburBerry|Levitate|DracoMeteor,DualWingbeat,FlipTurn,Earthquake|Jolly|64,252,,,,192|||||,,,,,Dragon]Tyranitar||SmoothRock|SandStream|Protect,KnockOff,StealthRock,IceBeam|Sassy|248,,60,,200,|||||,,,,,Rock]Weezing||RockyHelmet|Levitate|WillOWisp,ToxicSpikes,PainSplit,Flamethrower|Bold|248,,204,,56,||,0,,,,|||,,,,,Poison]Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,HydroPump,IceBeam,Uturn|Timid|120,,,252,,136|||||,,,,,Ice","Tornadus-Therian||HeavyDutyBoots|Regenerator|Hurricane,FocusBlast,Tailwind,Uturn|Timid|88,,252,,,168|||||,,,,,Flying]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,HornLeech,Uturn|Jolly|,252,,,4,252|||||,,,,,Water]Garchomp||Leftovers|RoughSkin|Substitute,Protect,DragonTail,Earthquake|Jolly|252,,88,,124,44|||||,,,,,Dragon]Samurott-Hisui||AssaultVest|Sharpness|CeaselessEdge,SacredSword,SuckerPunch,AquaJet|Adamant|224,252,,,,32|||||,,,,,Water]Tinkaton||ShucaBerry|MoldBreaker|StealthRock,Encore,KnockOff,GigatonHammer|Careful|252,,4,,252,|||||,,,,,Fairy]Tera Captain|Bellibolt|HeavyDutyBoots|Electromorphosis|SlackOff,Toxic,VoltSwitch,MuddyWater|Calm|252,,4,,252,||,0,,,,|||,,,,,Water"],
+ ["Palafin-Hero||ThroatSpray|ZerotoHero|Agility,Boomburst,IceBeam,Surf|Modest|252,,4,252,,||,0,,,,|||,,,,,Bug]Iron Treads||HeavyDutyBoots|QuarkDrive|RapidSpin,IronHead,StoneEdge,StealthRock|Adamant|48,252,,,,208|||||,,,,,Bug]Tera Captain|RagingBolt|HeavyDutyBoots|Protosynthesis|AncientPower,Thunderclap,Thunderbolt,CalmMind|Timid|40,,,252,,216||,20,,,,|||,,,,,Bug]Roaring Moon||BoosterEnergy|Protosynthesis|DragonDance,IronHead,KnockOff,Acrobatics|Jolly|36,220,,,,252|||||,,,,,Bug]Tera Captain|EnamorusTherian|Leftovers|Overcoat|CalmMind,IronDefense,DrainingKiss,MysticalFire|Bold|252,,180,76,,||,0,,,,|||,,,,,Poison]Weezing||BlackSludge|Levitate|Flamethrower,SludgeBomb,ToxicSpikes,Protect|Bold|252,,136,,120,||,0,,,,|||,,,,,Bug","Tera Captain|Mamoswine|ChoiceBand|ThickFat|IcicleCrash,IceShard,Earthquake,KnockOff|Jolly|,252,,,4,252|||||,,,,,Ice]Latios||LifeOrb|Levitate|Surf,DracoMeteor,FlipTurn,LusterPurge|Timid|,,,252,4,252|||||,,,,,Dragon]Minior||RockyHelmet|ShieldsDown|StealthRock,Uturn,RockSlide,Protect|Jolly|,252,,,4,252|||||,,,,,Rock]Tera Captain|Clefable|Leftovers|MagicGuard|Substitute,CalmMind,Moonblast,StoredPower|Modest|252,,,252,4,||,0,,,,|||,,,,,Water]Skarmory||HeavyDutyBoots|Sturdy|BodyPress,IronDefense,Spikes,Roost|Bold|252,,160,,,96||,0,,,,|||,,,,,Steel]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,HornLeech,StompingTantrum,SpikyShield|Jolly|,252,,,4,252|||||,,,,,Fire"],
+ ["Tera Captain|Mew|WikiBerry|Synchronize|IceBeam,EarthPower,VoltSwitch,DrainingKiss|Timid|104,,172,,,232||,0,,,,|||,,,,,Fairy]Torkoal||HeatRock|Drought|WillOWisp,StealthRock,Overheat,ScorchingSands|Calm|248,,,8,252,||,0,,,,|||,,,,,Fire]Great Tusk||AssaultVest|Protosynthesis|SupercellSlam,Earthquake,RapidSpin,CloseCombat|Jolly|,188,,,72,248|||||,,,,,Ground]Tera Captain|Venusaur|Leftovers|Chlorophyll|LeechSeed,Substitute,SolarBeam,SludgeBomb|Bold|208,,200,4,,96||,0,,,,|||,,,,,Electric]Gouging Fire||CustapBerry|Protosynthesis|HeatCrash,DragonDance,Outrage,Earthquake|Jolly|4,252,,,24,228|||||,,,,,Fire]Mandibuzz||HeavyDutyBoots|WeakArmor|Uturn,KnockOff,Roost,FoulPlay|Careful|244,,12,,252,||,,,,,24|||,,,,,Dark","Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|ZenHeadbutt,IvyCudgel,PowerWhip,SwordsDance|Jolly|80,252,,,,176|||||,,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|WeatherBall,AirSlash,Uturn,KnockOff|Timid|252,,168,,,88|||||,,,,,Flying]Glimmora||FocusSash|ToxicDebris|MortalSpin,StealthRock,SludgeWave,DazzlingGleam|Modest|248,,8,252,,|||||,,,,,Rock]Alomomola||AssaultVest|Regenerator|FlipTurn,Wish,ChillingWater,HealingWish|Calm|,,252,4,252,|||||,,,,,Water]Urshifu||WeaknessPolicy|UnseenFist|BulkUp,Trailblaze,PoisonJab,DrainPunch|Jolly|88,252,,,,168|||||,,,,,Fighting]Heatran||FocusSash|FlashFire|WillOWisp,EarthPower,StealthRock,SteelBeam|Modest|232,,,252,,24||,0,,,,|||,,,,,Fire"],
+ ["Zoroark-Hisui||FocusSash|Illusion|WillOWisp,BitterMalice,FocusBlast,Uturn|Modest|4,,,252,,252|||S||,,,,,Normal]Tera Captain|Haxorus|Leftovers|MoldBreaker|DragonDance,IronHead,CloseCombat,Earthquake|Adamant|4,252,,,,252|||S||,,,,,Steel]Hatterene||AssaultVest|MagicBounce|DrainingKiss,MysticalFire,Psychic,Nuzzle|Bold|4,,252,252,,|||S||,,,,,Psychic]Iron Hands||AssaultVest|QuarkDrive|FakeOut,DrainPunch,IcePunch,SupercellSlam|Adamant|84,132,40,,252,|||S||,,,,,Fighting]Pecharunt||Leftovers|PoisonPuppeteer|MalignantChain,Recover,ShadowBall,PartingShot|Calm|52,,,204,252,||,0,,,,|||,,,,,Ghost]Minior||WhiteHerb|ShieldsDown|ShellSmash,Acrobatics,RockSlide,TeraBlast|Jolly|4,252,,,,252|||S||,,,,,Electric","Slowbro-Galar||AssaultVest|Regenerator|Psychic,ShellSideArm,FocusBlast,ShadowBall|Calm|252,,4,,252,|||S||,,,,,Poison]Tera Captain|Annihilape|Leftovers|Defiant|RageFist,DrainPunch,BulkUp,Rest|Careful|252,,,,244,12|||S||,,,,,Fairy]Kingambit||LumBerry|SupremeOverlord|StealthRock,IronHead,KowtowCleave,ZenHeadbutt|Jolly|,252,,,4,252|||||,,,,,Dark]Ninetales-Alola||LightClay|SnowWarning|AuroraVeil,Blizzard,Extrasensory,Moonblast|Timid|88,,,252,,168||,0,,,,|S||,,,,,Ice]Tera Captain|Flygon|ChoiceScarf|Levitate|EarthPower,DragonPulse,Boomburst,Uturn|Timid|16,,,252,4,236|||||,,,,,Ground]Tornadus-Therian||Leftovers|Regenerator|Substitute,NastyPlot,AirSlash,Psychic|Timid|,,4,252,,252||,0,,,,|S||,,,,,Flying"],
+ ["Greninja||ChoiceScarf|Protean|Surf,DarkPulse,IceBeam,Uturn|Modest|,,,252,4,252|||||,,,,,Water]Weezing-Galar||BlackSludge|Levitate|StrangeSteam,WillOWisp,Defog,PainSplit|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Tera Captain|Ceruledge|FocusSash|WeakArmor|BitterBlade,Poltergeist,CloseCombat,SwordsDance|Adamant|,252,,,4,252|||||,,,,,Water]Lokix||ChoiceBand|TintedLens|Uturn,FirstImpression,KnockOff,SuckerPunch|Jolly|,252,,,4,252|||||,,,,,Bug]Iron Treads||Leftovers|QuarkDrive|Earthquake,KnockOff,RapidSpin,VoltSwitch|Jolly|,252,,,4,252|||||,,,,,Ground]Rotom-Wash||ChoiceScarf|Levitate|HydroPump,VoltSwitch,WillOWisp,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric","Garchomp||YacheBerry|RoughSkin|StealthRock,Spikes,IronHead,Earthquake|Adamant|252,124,132,,,|||||,,,,,Dragon]Tera Captain|GreninjaBond|LifeOrb|BattleBond|HydroPump,DarkPulse,IceBeam,Protect|Timid|,,4,252,,252|||||,,,,,Dark]Scream Tail||BoosterEnergy|Protosynthesis|PsychicFangs,DrainPunch,BulkUp,PlayRough|Adamant|216,252,4,,,36|||||,,,,,Fairy]Scizor||SitrusBerry|Technician|BulletPunch,Uturn,CloseCombat,SwordsDance|Adamant|240,252,,,,16|||||,,,,,Bug]Terapagos||AssaultVest|TeraShift|TeraStarstorm,EarthPower,RapidSpin,DarkPulse|Modest|72,,,252,,184|||||,,,,,Stellar]Tera Captain|IronThorns|BoosterEnergy|QuarkDrive|DragonDance,StoneEdge,HeavySlam,Earthquake|Jolly|56,252,,,,200|||||,,,,,Grass"],
+ ["Weavile||PowerHerb|Pickpocket|SwordsDance,TripleAxel,LowKick,Dig|Jolly|32,252,,,,224|||||,,,,,Dark]Brambleghast|||WindRider|PowerWhip,Poltergeist,Substitute,StrengthSap|Jolly|,252,,,4,252|||||,,,,,Grass]Weezing-Galar||BlackSludge|Levitate|StrangeSteam,Flamethrower,WillOWisp,PainSplit|Bold|248,,252,,8,||,0,,,,|||,,,,,Poison]Gastrodon-East||Leftovers|StickyHold|Spikes,Recover,Surf,ClearSmog|Calm|252,,,4,252,||,0,,,,|||,,,,,Water]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Thunderbolt,DragonPulse,Substitute,CalmMind|Modest|,,252,252,4,||,20,,,,|||,,,,,Flying]Corviknight||Leftovers|MirrorArmor|BraveBird,Uturn,Defog,Roost|Impish|252,4,252,,,|||||,,,,,Flying","Tera Captain|GreatTusk|Leftovers|Protosynthesis|Substitute,IronHead,BulkUp,BodyPress|Jolly|252,,96,,,160|||||,,,,,Steel]Tornadus-Therian||ChartiBerry|Regenerator|AirSlash,HeatWave,Uturn,Taunt|Timid|248,,32,,76,152|||||,,,,,Flying]Samurott-Hisui||ChoiceScarf|Sharpness|FlipTurn,CeaselessEdge,SacredSword,Encore|Adamant|,252,56,,,200|||||,,,,,Water]Latios||ChoiceSpecs|Levitate|FlipTurn,Thunderbolt,EnergyBall,PsychicNoise|Timid|16,,,252,,240|||||,,,,,Dragon]Tinkaton||RockyHelmet|Pickpocket|Encore,StealthRock,KnockOff,GigatonHammer|Jolly|248,,,,36,224|||||,,,,,Fairy]Tera Captain|Bellibolt|Leftovers|Static|Toxic,SlackOff,VoltSwitch,Thunderbolt|Bold|252,,156,,84,16||,0,,,,|||,,,,,Poison"],
+ ["Klefki||LightClay|Prankster|ThunderWave,DazzlingGleam,LightScreen,Reflect|Modest|252,,,252,4,||,0,,,,|||,,,,,Steel]Oricorio-Sensu||FocusSash|Dancer|Uturn,QuiverDance,AirSlash,RevelationDance|Modest|128,,,252,,128|||||,,,,,Ghost]Blaziken||HeavyDutyBoots|SpeedBoost|CloseCombat,KnockOff,Earthquake,SwordsDance|Adamant|252,252,4,,,|||||,,,,,Fire]Tera Captain|Latias|CheriBerry|Levitate|TeraBlast,IceBeam,AuraSphere,EnergyBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Poison]Excadrill||PasshoBerry|SandRush|Sandstorm,BodySlam,IronHead,BrickBreak|Adamant|228,252,,,,28|||||,,,,,Ground]Cyclizar||ChoiceScarf|Regenerator|ShedTail,Uturn,KnockOff,DracoMeteor|Hasty|252,,,8,,248|||||,,,,,Dragon","Donphan||AssaultVest|Sturdy|Earthquake,StoneEdge,IceShard,RapidSpin|Adamant|248,252,,,8,|||||,,,,,Ground]Sylveon||Leftovers|Pixilate|HyperVoice,Psychic,Wish,Protect|Bold|248,,252,8,,||,0,,,,|||,,,,,Fairy]Tera Captain|Staraptor|ChoiceScarf|Reckless|BraveBird,CloseCombat,Facade,Uturn|Jolly|96,252,,,,160|||||,,,,,Flying]Rotom-Wash||Leftovers|Levitate|Thunderbolt,HydroPump,ThunderWave,VoltSwitch|Modest|232,,,252,,24||,0,,,,|||,,,,,Electric]Tera Captain|Latias|HeavyDutyBoots|Levitate|Surf,IceBeam,MistBall,Recover|Modest|248,,8,252,,||,0,,,,|||,,,,,Water]Heatran||ShucaBerry|FlameBody|StealthRock,LavaPlume,PowerGem,Taunt|Calm|248,,,8,252,||,0,,,,|||,,,,,Fire"],
+ ["Palafin||AssaultVest|ZerotoHero|JetPunch,DrainPunch,IcePunch,FlipTurn|Adamant|252,,180,,76,|||||,,,,,Water]Tera Captain|Clefable|Leftovers|MagicGuard|StoredPower,Moonlight,CalmMind,CosmicPower|Bold|252,,200,,,56||,0,,,,|||,,,,,Steel]Latios||MindPlate|Levitate|Psychic,AuraSphere,CalmMind,Recover|Timid|,,4,252,,252||,0,,,,|||,,,,,Dragon]Sandslash||Leftovers|SandRush|Earthquake,KnockOff,StealthRock,RapidSpin|Impish|252,4,252,,,|||||,,,,,Ground]Wo-Chien||Leftovers|TabletsofRuin|KnockOff,Protect,Substitute,LeechSeed|Careful|252,,244,,,12|||||,,,,,Dark]Blaziken||ShucaBerry|SpeedBoost|FlareBlitz,CloseCombat,Uturn,Protect|Adamant|112,252,,,,144|||||,,,,,Fire","Vaporeon||Leftovers|WaterAbsorb|Scald,Wish,FlipTurn,IceBeam|Bold|248,,252,8,,|||||,,,,,Water]Tera Captain|Magnezone|LifeOrb|MagnetPull|TeraBlast,VoltSwitch,Thunderbolt,FlashCannon|Quiet|248,,,252,8,||,0,,,,0|||,,,,,Bug]Kleavor||FocusSash|Sharpness|StoneAxe,CloseCombat,Tailwind,Uturn|Adamant|252,252,,,4,|||||,,,,,Bug]Toedscruel||HeavyDutyBoots|MyceliumMight|Spore,KnockOff,RapidSpin,LeafStorm|Gentle|252,4,,,252,|||||,,,,,Ground]Enamorus||LifeOrb|CuteCharm|Moonblast,EarthPower,MysticalFire,SludgeBomb|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Dragonite||ChoiceSpecs|Multiscale|Thunderbolt,IceBeam,DracoMeteor,Flamethrower|Timid|,,,252,4,252||,0,,,,|||,,,,,Dragon"],
+ ["Urshifu||ChoiceScarf|UnseenFist|PoisonJab,Uturn,WickedBlow,CloseCombat|Adamant|168,252,,,,88|||||,,,,,Fighting]Slowking-Galar||AssaultVest|Regenerator|SludgeWave,IceBeam,Flamethrower,FutureSight|Calm|252,,,84,172,||,0,,,,|||,,,,,Poison]Tera Captain|Heatran|Leftovers|FlashFire|TeraBlast,FireBlast,FlashCannon,WillOWisp|Timid|252,,,100,,156||,0,,,,|||,,,,,Grass]Swampert||Leftovers|Torrent|StealthRock,PoisonJab,FlipTurn,Liquidation|Impish|252,112,140,,4,|||||,,,,,Water]Thundurus||HeavyDutyBoots|Prankster|FocusBlast,Thunderbolt,ThunderWave,VoltSwitch|Modest|104,,,252,,152||,0,,,,|||,,,,,Electric]Tera Captain|Sylveon|Leftovers|Pixilate|HyperVoice,TeraBlast,CalmMind,Wish|Bold|252,,188,68,,||,0,,,,|||,,,,,Fire","Enamorus||FocusSash|Contrary|HealingWish,SludgeBomb,Moonblast,EarthPower|Timid|64,,,252,8,184||,0,,,,|S||,,,,,Fairy]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,SwordsDance,HornLeech,QuickAttack|Jolly|88,252,16,,,152|||||,,,,,Water]Ursaluna-Bloodmoon||AssaultVest|MindsEye|BloodMoon,EarthPower,HyperVoice,VacuumWave|Modest|208,,,164,136,||,0,,,,|||,,,,,Ground]Emboar||Leftovers|Blaze|DrainPunch,FirePunch,KnockOff,WillOWisp|Impish|248,8,252,,,|||S||,,,,,Fire]Scizor||LifeOrb|Technician|BulletPunch,Trailblaze,CloseCombat,Thief|Adamant|120,252,16,,,120|||||,,,,,Bug]Tera Captain|Hoopa|SitrusBerry|Magician|ShadowBall,Thunderbolt,Psyshock,EnergyBall|Modest|248,,,220,40,||,0,,,,|||,,,,,Psychic"],
+ ["Tera Captain|Latias|RockyHelmet|Levitate|Surf,AuraSphere,DracoMeteor,Recover|Timid|248,,192,,,68||,0,,,,|||,,,,,Water]Sneasler||ChoiceScarf|PoisonTouch|Uturn,CloseCombat,UpperHand,ThroatChop|Adamant|88,188,,,4,228|||||,,,,,Fighting]Tera Captain|Lokix|LifeOrb|TintedLens|FirstImpression,Uturn,SuckerPunch,Taunt|Adamant|,252,4,,,252|||||,,,,,Dark]Sandslash-Alola||ChoiceScarf|SlushRush|KnockOff,Earthquake,StealthRock,Spikes|Jolly|56,12,,,252,188|||||,,,,,Ice]Weezing-Galar||CustapBerry|NeutralizingGas|StrangeSteam,ToxicSpikes,WillOWisp,DestinyBond|Calm|248,,24,,60,176||,0,,,,|||,,,,,Poison]Kilowattrel||HeavyDutyBoots|VoltAbsorb|Thunderbolt,VoltSwitch,EerieImpulse,AirSlash|Timid|16,,,252,,240||,0,,,,|||,,,,,Electric","Tera Captain|Toxtricity|ChoiceScarf|PunkRock|Boomburst,VoltSwitch,Overdrive,SludgeWave|Timid|68,,,252,,188||,0,,,,|||,,,,,Normal]Necrozma||ColburBerry|PrismArmor|StealthRock,PsychicFangs,Moonlight,HeatWave|Relaxed|252,,252,,,|||||,,,,,Psychic]Infernape||ChoiceScarf|IronFist|MachPunch,Uturn,FlareBlitz,BrickBreak|Adamant|16,252,,,,240|||||,,,,,Fire]Kingambit||ChopleBerry|SupremeOverlord|IronHead,SuckerPunch,BrickBreak,SwordsDance|Adamant|168,252,,,,88|||||,,,,,Dark]Palafin||Leftovers|ZerotoHero|BulkUp,Substitute,JetPunch,IronHead|Adamant|56,200,,,252,|||||,,,,,Water]Noivern||Leftovers|Infiltrator|Roost,Defog,Flamethrower,DracoMeteor|Timid|252,,,,24,232||,0,,,,|||,,,,,Flying"],
+ ["Tera Captain|Zarude|HeavyDutyBoots|LeafGuard|PowerWhip,KnockOff,BulkUp,Synthesis|Jolly|248,,,,148,112|||||,,,,,Electric]Iron Valiant||LifeOrb|QuarkDrive|Moonblast,ShadowBall,VacuumWave,CalmMind|Timid|80,,16,252,,160||,0,,,,|||,,,,,Fairy]Ursaluna-Bloodmoon||AssaultVest|MindsEye|BloodMoon,HyperVoice,EarthPower,VacuumWave|Modest|92,,,164,252,||,0,,,,|||,,,,,Ground]Rotom-Wash||RockyHelmet|Levitate|HydroPump,VoltSwitch,WillOWisp,PainSplit|Bold|248,,252,,,8||,0,,,,|||,,,,,Electric]Jirachi||ColburBerry|SereneGrace|DoomDesire,Uturn,LightScreen,StealthRock|Jolly|248,,,,108,152|||||,,,,,Steel]Abomasnow||HeavyDutyBoots|SnowWarning|Blizzard,GigaDrain,Earthquake,IceShard|Quiet|248,,8,252,,|||||,,,,,Grass","Arcanine-Hisui||ChoiceScarf|RockHead|IronHead,StealthRock,HeadSmash,FlareBlitz|Adamant|80,252,,,,176|||S||,,,,,Fire]Landorus||LifeOrb|SheerForce|EarthPower,NastyPlot,SludgeWave,Psychic|Timid|8,,,252,,248||,0,,,,|||,,,,,Ground]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Synthesis,Glare|Modest|12,,,252,,244||,0,,,,|S||,,,,,Poison]Sneasler||NormalGem|Unburden|CloseCombat,DireClaw,SwordsDance,FakeOut|Jolly|40,252,,,,216|||||,,,,,Fighting]Grafaiai||DampRock|Prankster|PartingShot,KnockOff,RainDance,Uturn|Jolly|40,252,,,,216|||||,,,,,Poison]Tera Captain|Floatzel|ChoiceBand|SwiftSwim|WaveCrash,IceSpinner,FlipTurn,AquaJet|Adamant|,252,,,4,252|||S||,,,,,Steel"],
+ ["Tera Captain|Tyranitar|KebiaBerry|Unnerve|Crunch,DragonDance,Substitute,TeraBlast|Jolly|36,252,,,,220|||||,,,,,Fairy]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,Psyshock,ShadowBall,VacuumWave|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Dragalge||BlackSludge|Adaptability|Haze,FlipTurn,DracoMeteor,SludgeWave|Calm|244,,,24,232,8|||||,,,,,Poison]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Earthquake,StealthRock,Uturn,Taunt|Impish|248,,200,,,60|||||,,,,,Water]Scizor||LumBerry|Technician|QuickAttack,Uturn,Thief,DualWingbeat|Adamant|248,76,60,,124,|||||,,,,,Bug]Slowking||ColburBerry|Regenerator|ThunderWave,FutureSight,ChillyReception,ShadowBall|Calm|248,,200,,60,||,0,,,,|||,,,,,Water","Tera Captain|Lapras|LoadedDice|WaterAbsorb|IcicleSpear,Earthquake,DragonDance,Substitute|Adamant|,252,,,4,252|||||,,,,,Ground]Tera Captain|IronMoth|HeavyDutyBoots|QuarkDrive|MorningSun,FieryDance,Uturn,EnergyBall|Modest|8,,,252,,248|||||,,,,,Fire]Garchomp||RoseliBerry|RoughSkin|Spikes,Earthquake,DragonTail,Flamethrower|Jolly|248,,60,,,200|||||,,,,,Dragon]Jirachi||AssaultVest|SereneGrace|IronHead,IcePunch,Uturn,FirePunch|Jolly|40,252,,,,216|||||,,,,,Steel]Rotom-Wash||Leftovers|Levitate|NastyPlot,HydroPump,Thunderbolt,StoredPower|Modest|248,,,84,,176||,0,,,,|||,,,,,Electric]Darkrai||HeavyDutyBoots|BadDreams|DarkPulse,SludgeBomb,IceBeam,FocusBlast|Timid|72,,,252,,184||,0,,,,|||,,,,,Dark"],
+ ["Iron Bundle||ChoiceSpecs|QuarkDrive|FreezeDry,FlipTurn,IceBeam,HydroPump|Timid|,,,252,4,252|||||,,,,,Ice]Overqwil||BlackSludge|Intimidate|Crunch,Taunt,Spikes,Toxic|Impish|248,,76,,,184|||||,,,,,Dark]Cinderace||ChoiceBand|Libero|PyroBall,FlareBlitz,SmackDown,Uturn|Adamant|24,252,,,,232|||||,,,,,Fire]Tera Captain|UrshifuRapidStrike|RindoBerry|UnseenFist|SurgingStrikes,DrainPunch,BulkUp,Trailblaze|Jolly|80,,,,252,176|||||,,,,,Ghost]Tera Captain|Dudunsparce|Leftovers|Rattled|Glare,Roost,Thunderbolt,Boomburst|Bold|248,,100,,160,||,0,,,,|||,,,,,Water]Iron Treads||HeavyDutyBoots|QuarkDrive|RapidSpin,VoltSwitch,StealthRock,Earthquake|Jolly|248,,44,,,216|||||,,,,,Ground","Ceruledge||AirBalloon|WeakArmor|WillOWisp,BitterBlade,ShadowSneak,Poltergeist|Adamant|,252,28,,,228|||||,,,,,Fire]Muk||AssaultVest|PoisonTouch|DrainPunch,ShadowSneak,GunkShot,KnockOff|Careful|248,8,,,252,|||||,,,,,Poison]Corviknight||RockyHelmet|MirrorArmor|Roost,Defog,BodyPress,Uturn|Impish|248,,252,,8,|||||,,,,,Flying]Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|Earthquake,KnockOff,BulkUp,CloseCombat|Jolly|8,,,,252,248|||||,,,,,Fighting]Meowscarada||HeavyDutyBoots|Protean|Taunt,KnockOff,SuckerPunch,Uturn|Jolly|32,252,,,,224|||||,,,,,Grass]Iron Bundle||HeavyDutyBoots|QuarkDrive|FlipTurn,Encore,FreezeDry,HydroPump|Modest|,,,252,4,252|||||,,,,,Ice"],
+ ["Tornadus-Therian||AssaultVest|Regenerator|FoulPlay,Uturn,SludgeWave,FocusBlast|Timid|252,,,,120,136|||||,,,,,Flying]Infernape||LifeOrb|IronFist|FirePunch,StealthRock,WillOWisp,DrainPunch|Jolly|,252,,,16,240|||||,,,,,Fire]Baxcalibur||LumBerry|ThermalExchange|GlaiveRush,DragonDance,IcicleSpear,Substitute|Adamant|4,252,,,,252|||||,,,,,Dragon]Tera Captain|PorygonZ|ChoiceScarf|Adaptability|TriAttack,TeraBlast,Trick,HyperBeam|Modest|100,,,252,,156||,0,,,,|||,,,,,Ground]Milotic||FlameOrb|MarvelScale|Scald,FlipTurn,DragonTail,Recover|Impish|252,4,252,,,|||||,,,,,Water]Gengar||FocusSash|CursedBody|ShadowBall,FocusBlast,WillOWisp,DestinyBond|Timid|32,,,252,,224||,0,,,,|||,,,,,Ghost","Iron Boulder||KasibBerry|QuarkDrive|SwordsDance,MightyCleave,WildCharge,ZenHeadbutt|Jolly|,252,,,24,232|||||,,,,,Rock]Enamorus||ChoiceScarf|CuteCharm|Moonblast,HealingWish,MysticalFire,Psychic|Mild|,,,252,8,248||,0,,,,|||,,,,,Fairy]Tera Captain|Rillaboom|OccaBerry|GrassySurge|HighHorsepower,DrainPunch,DrumBeating,KnockOff|Impish|248,,252,,8,|||||,,,,,Water]Kyurem||LoadedDice|Pressure|DragonDance,IcicleSpear,ScaleShot,EarthPower|Hasty|32,252,,8,,216|||||,,,,,Dragon]Tera Captain|SandyShocks|HeavyDutyBoots|Protosynthesis|Spikes,Reflect,VoltSwitch,ScorchingSands|Calm|248,,,8,252,||,0,,,,|||,,,,,Ghost]Tentacruel||AssaultVest|ClearBody|FlipTurn,SludgeBomb,KnockOff,HydroPump|Timid|,,,252,80,176|||||,,,,,Water"],
+ ["Tera Captain|OricorioSensu|HeavyDutyBoots|Dancer|QuiverDance,Taunt,RevelationDance,AirSlash|Timid|200,,,92,,216||,0,,,,|S||,,,,,Fighting]Heatran||PowerHerb|FlashFire|MagmaStorm,Taunt,SolarBeam,EarthPower||96,,,252,,160||,0,,,,|S||,,,,,Fire]Greninja||LifeOrb|Protean|Surf,DarkPulse,Uturn,IceBeam|Hasty|96,,,252,,160|||S||,,,,,Water]Tinkaton||RockyHelmet|Pickpocket|PlayRough,StealthRock,ThunderWave,KnockOff|Impish|252,,232,,,24|||S||,,,,,Fairy]Tera Captain|Latias|WeaknessPolicy|Levitate|StoredPower,Agility,CalmMind,DrainingKiss|Timid|252,,,,8,248||,0,,,,|||,,,,,Fairy]Great Tusk||BoosterEnergy|Protosynthesis|SmackDown,HeadlongRush,CloseCombat,BulkUp|Jolly|252,4,,,,252|||||,,,,,Ground","Meowscarada|||Protean|Acrobatics,Uturn,FlowerTrick,LowKick|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Latias|ChoiceSpecs|Levitate|IceBeam,DracoMeteor,MistBall,TeraBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Ground]Rotom-Wash||AguavBerry|Levitate|VoltSwitch,HydroPump,WillOWisp,ThunderWave|Bold|252,,252,4,,||,0,,,,|||,,,,,Electric]Great Tusk||HeavyDutyBoots|Protosynthesis|RapidSpin,HeadlongRush,CloseCombat,StealthRock|Adamant|252,252,,,4,|||||,,,,,Ground]Ursaring||Eviolite|Guts|BulkUp,Rest,BodySlam,SleepTalk|Careful|252,4,,,252,|||||,,,,,Normal]Tinkaton||Leftovers|MoldBreaker|ThunderWave,GigatonHammer,PlayRough,Encore|Careful|252,4,,,252,|||||,,,,,Fairy"],
+ ["Meowscarada||HeavyDutyBoots|Protean|KnockOff,FlowerTrick,TripleAxel,BrickBreak|Adamant|144,252,,,,112|||||,,,,,Grass]Gengar||ChoiceScarf|CursedBody|ShadowBall,DazzlingGleam,Thunderbolt,EnergyBall|Modest|40,,,252,,216||,0,,,,|||,,,,,Ghost]Landorus-Therian||Leftovers|Intimidate|StealthRock,EarthPower,Uturn,Taunt|Bold|248,,252,,,8|||||,,,,,Ground]Bellibolt||RockyHelmet|Static|VoltSwitch,MuddyWater,SlackOff,Toxic|Calm|248,,112,,148,||,0,,,,|||,,,,,Electric]Heatran||Leftovers|FlameBody|LavaPlume,WillOWisp,Protect,HeavySlam|Sassy|248,36,,,224,|||||,,,,,Fire]Tera Captain|Comfey|Leftovers|Triage|CalmMind,DrainingKiss,TeraBlast,Synthesis|Modest|248,,8,252,,||,0,,,,|||,,,,,Ground","Archaludon||ChestoBerry|Stamina|FlashCannon,BodyPress,Rest,StealthRock|Modest|96,,,132,252,28||,0,,,,|||,,,,,Steel]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|TeraBlast,Fly,Earthquake,Uturn|Jolly|48,252,,,,208|||||,,,,,Flying]Tera Captain|Diancie|WeaknessPolicy|ClearBody|DiamondStorm,PlayRough,EarthPower,TrickRoom|Brave|252,184,,72,,|||||,,,,,Dragon]Quaquaval||Leftovers|Moxie|AquaStep,CloseCombat,BulkUp,Roost|Adamant|252,56,,,,200|||||,,,,,Water]Darkrai||Leftovers|BadDreams|DarkPulse,SludgeBomb,Substitute,Hypnosis|Timid|8,,,252,,248||,0,,,,|||,,,,,Dark]Arbok||RockyHelmet|Intimidate|GunkShot,Earthquake,Glare,PainSplit|Impish|220,,252,,,36|||||,,,,,Poison"],
+ ["Tera Captain|Vikavolt|HeavyDutyBoots|Levitate|StickyWeb,VoltSwitch,BugBuzz,Thunderbolt|Modest|252,,,252,4,||,0,,,,|||,,,,,Electric]Tera Captain|Latias|SalacBerry|Levitate|CalmMind,Recover,StoredPower,AuraSphere|Timid|252,,,4,,252||,0,,,,|||,,,,,Dark]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,Flamethrower,DarkPulse,Memento|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Rillaboom||AssaultVest|GrassySurge|GrassyGlide,StompingTantrum,DrumBeating,Uturn|Adamant|252,252,,,,|||||,,,,,Grass]Sneasler||BlackBelt|PoisonTouch|FakeOut,Uturn,DireClaw,CloseCombat|Jolly|76,252,,,4,176|||||,,,,,Fighting]Quagsire||Leftovers|WaterAbsorb|StealthRock,Earthquake,Liquidation,Recover|Impish|252,4,240,,12,|||||,,,,,Water","Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|IvyCudgel,Trailblaze,SpikyShield,Spikes|Jolly|,252,,,4,252|||||,,,,,Rock]Kilowattrel||CustapBerry|VoltAbsorb|VoltSwitch,Hurricane,ThunderWave,Endure|Timid|,,40,252,,216||,0,,,,|||,,,,,Electric]Palafin||PunchingGlove|ZerotoHero|JetPunch,GrassKnot,IcePunch,Taunt|Jolly|,216,,,40,252|||||,,,,,Water]Kingambit||FocusSash|SupremeOverlord|IronHead,BrickBreak,SuckerPunch,MetalBurst|Adamant|248,252,,,,8|||||,,,,,Dark]Palossand||ColburBerry|WaterCompaction|Poltergeist,EarthPower,StealthRock,ShoreUp|Relaxed|248,,252,8,,|||||,,,,,Ghost]Gouging Fire||Leftovers|Protosynthesis|FlareBlitz,DragonTail,BurningBulwark,MorningSun|Impish|248,,64,,188,8|||||,,,,,Fire"],
+ ["Greninja||HeavyDutyBoots|Protean|SludgeWave,IceBeam,DarkPulse,Uturn|Timid|,,,252,4,252|||S||,,,,,Water]Ursaluna-Bloodmoon||YacheBerry|MindsEye|BloodMoon,VacuumWave,Moonlight,CalmMind|Modest|252,,,252,,||,0,,,,|||,,,,,Ground]Talonflame||HeavyDutyBoots|FlameBody|Defog,TemperFlare,Roost,Uturn|Impish|212,,252,,,44|||||,,,,,Fire]Jirachi||ChoiceScarf|SereneGrace|IronHead,Uturn,HealingWish,Encore|Jolly|,252,,,4,252|||||,,,,,Steel]Tera Captain|Annihilape|Leftovers|Defiant|RageFist,DrainPunch,BulkUp,IcePunch|Careful|160,,,,252,96|||||,,,,,Water]Whimsicott||RockyHelmet|Prankster|Taunt,Uturn,Moonblast,LeechSeed|Bold|252,,252,4,,|||||,,,,,Grass","Tera Captain|Gholdengo|ChoiceSpecs|GoodasGold|MakeItRain,ShadowBall,DazzlingGleam,Thunderbolt|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Dondozo||ChestoBerry|Unaware|WaveCrash,BodyPress,Curse,Rest|Impish|248,8,252,,,|||||,,,,,Water]Typhlosion||ChoiceScarf|FlashFire|Eruption,FireBlast,Extrasensory,FocusBlast|Modest|,,,252,4,252||,0,,,,|||,,,,,Fire]Ting-Lu||Leftovers|VesselofRuin|Earthquake,BodyPress,StealthRock,Protect|Impish|252,4,252,,,|||||,,,,,Dark]Tornadus-Therian||Leftovers|Regenerator|AirSlash,DarkPulse,Taunt,NastyPlot|Timid|168,,,252,,88||,0,,,,|||,,,,,Flying]Tera Captain|Tsareena|HeavyDutyBoots|QueenlyMajesty|PowerWhip,KnockOff,Synthesis,RapidSpin|Adamant|80,252,,,4,172|||||,,,,,Grass"],
+ ["Garchomp||LoadedDice|RoughSkin|ScaleShot,Earthquake,RockSlide,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Dragon]Sylveon||Leftovers|Pixilate|CalmMind,HyperVoice,Wish,Protect|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy]Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,Encore,HydroPump,FlipTurn|Timid|,,,252,4,252|||||,,,,,Ice]Tentacruel||BlackSludge|LiquidOoze|RapidSpin,FlipTurn,KnockOff,Surf|Bold|252,,252,4,,|||||,,,,,Water]Tera Captain|ThundurusTherian|LifeOrb|VoltAbsorb|TeraBlast,Thunderbolt,NastyPlot,DarkPulse|Timid|,,,252,4,252||,0,,,,|S||,,,,,Fighting]Glimmet||FocusSash|ToxicDebris|StealthRock,Spikes,RainDance,Memento|Timid|4,,252,,,252||,0,,,,|||,,,,,Rock","Latios||ChoiceScarf|Levitate|DracoMeteor,LusterPurge,ShadowBall,FlipTurn|Timid|64,,,252,,192|||||,,,,,Dragon]Tyranitar||ChoiceScarf|SandStream|RockSlide,HeavySlam,IcePunch,KnockOff|Jolly|,252,,,76,180|||||,,,,,Rock]Tera Captain|Excadrill|HeavyDutyBoots|SandRush|StealthRock,Earthquake,IronHead,TeraBlast|Jolly|32,252,,,,224|||||,,,,,Ice]Fezandipiti||CovertCloak|ToxicChain|Moonblast,GunkShot,Uturn,Roost|Adamant|252,60,,,196,|||||,,,,,Poison]Talonflame||HeavyDutyBoots|GaleWings|SwordsDance,BraveBird,FlareBlitz,Roost|Adamant|72,252,,,,184|||||,,,,,Fire]Alomomola||AssaultVest|Regenerator|FlipTurn,Scald,IceBeam,MirrorCoat|Relaxed|,,160,96,252,||,,,,,0|||,,,,,Water"],
+ ["Chi-Yu||ChoiceScarf|BeadsofRuin|HeatWave,DarkPulse,Psychic,Hex|Modest|,,,252,4,252||,0,,,,|||,,,,,Dark]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,Uturn,SludgeWave,GrassKnot|Timid|80,,,176,,252|||S||,,,,,Flying]Tera Captain|LandorusTherian|AssaultVest|Intimidate|Uturn,Earthquake,BrickBreak,StoneEdge|Jolly|,252,,,4,252|||S||,,,,,Fighting]Tera Captain|Tinkaton|LightClay|MoldBreaker|FakeOut,KnockOff,GigatonHammer,LightScreen|Jolly|,252,,,4,252|||||,,,,,Poison]Terapagos||Leftovers|TeraShift|BugBuzz,StoredPower,CalmMind,RapidSpin|Modest|248,,20,220,20,|||||,,,,,Stellar]Electrode||FocusSash|Aftermath|ThunderWave,VoltSwitch,Explosion,Taunt|Hasty|156,160,,136,,56|||S||,,,,,Electric","Electabuzz||Eviolite|Static|VoltSwitch,Thunderbolt,KnockOff,IcePunch|Hasty|,40,,252,,216|||S||,,,,,Electric]Swampert||Leftovers|Torrent|StealthRock,Earthquake,FlipTurn,Protect|Careful|252,,4,,252,|||S||,,,,,Water]Darkrai||FocusSash|BadDreams|DarkPulse,IceBeam,NastyPlot,Hypnosis|Timid|,,32,252,,224||,0,,,,|S||,,,,,Dark]Tera Captain|Infernape|LifeOrb|Blaze|FireBlast,VacuumWave,TeraBlast,NastyPlot|Timid|,,,252,64,192||,0,,,,|S||,,,,,Electric]Slowking-Galar||ColburBerry|Regenerator|SludgeBomb,IceBeam,ThunderWave,ChillyReception|Calm|252,,4,,252,||,0,,,,|S||,,,,,Poison]Hydrapple||AssaultVest|Regenerator|DracoMeteor,GigaDrain,EarthPower,FickleBeam|Modest|248,,,56,204,||,0,,,,|S||,,,,,Grass"],
+ ["Meowscarada||ProtectivePads|Protean|KnockOff,BrickBreak,PowerGem,Uturn|Naive|104,252,,,,152|||||,,,,,Grass]Gouging Fire||BoosterEnergy|Protosynthesis|DragonClaw,FlareBlitz,DragonDance,MorningSun|Jolly|,252,4,,,252|||||,,,,,Fire]Slowking||HeavyDutyBoots|Regenerator|Scald,Yawn,ShadowBall,ChillyReception|Calm|252,,68,,188,||,0,,,,|||,,,,,Water]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|TeraBlast,Uturn,RockSlide,Earthquake|Jolly|,252,4,,,252|||||,,,,,Steel]Orthworm||SitrusBerry|EarthEater|ShedTail,IronHead,StealthRock,BodyPress|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Steel]Weezing-Galar||BlackSludge|Levitate|Defog,StrangeSteam,Thunderbolt,Flamethrower|Impish|252,,252,,4,||,0,,,,|||,,,,,Poison","Iron Treads||BoosterEnergy|QuarkDrive|Earthquake,IceSpinner,KnockOff,RapidSpin|Jolly|,252,,,40,216|||||,,,,,Ground]Clefable||RockyHelmet|Unaware|Moonlight,Moonblast,StealthRock,ThunderWave|Bold|252,,252,,,4||,0,,,,|||,,,,,Fairy]Weavile||HeavyDutyBoots|Pickpocket|IceShard,KnockOff,IceSpinner,SwordsDance|Jolly|16,252,,,,240|||||,,,,,Dark]Tera Captain|Latias|Leftovers|Levitate|Agility,DragonPulse,CalmMind,StoredPower|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Empoleon||Leftovers|Competitive|Surf,FlipTurn,Roost,IceBeam|Bold|252,,112,,100,44|||||,,,,,Water]Moltres||HeavyDutyBoots|FlameBody|ScorchingSands,Flamethrower,Roost,Uturn|Bold|248,,248,,,12|||||,,,,,Fire"],
+ ["Kingambit||ChopleBerry|SupremeOverlord|SwordsDance,SuckerPunch,LowKick,KowtowCleave|Adamant|4,252,252,,,|||||,,,,,Dark]Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,HydroPump,FlipTurn,Encore|Timid|,,,252,4,252|||||,,,,,Ice]Raging Bolt||BoosterEnergy|Protosynthesis|Thunderclap,DracoMeteor,Thunderbolt,CalmMind|Modest|212,,,252,,44||,20,,,,|||,,,,,Electric]Weezing-Galar||RockyHelmet|Levitate|Defog,StrangeSteam,ClearSmog,PainSplit|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Kilowattrel||HeavyDutyBoots|VoltAbsorb|Hurricane,Thunderbolt,VoltSwitch,ThunderWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Tera Captain|LilligantHisui|WideLens|Hustle|CloseCombat,TeraBlast,LeafBlade,VictoryDance|Adamant|,252,,4,,252|||||,,,,,Ghost","Tera Captain|Latias|Leftovers|Levitate|StoredPower,AuraSphere,Substitute,CalmMind|Bold|248,,240,,16,4||,0,,,,|||,,,,,Steel]Mamoswine||LoadedDice|ThickFat|Earthquake,IcicleSpear,RockBlast,IceShard|Adamant|8,252,16,,16,216|||||,,,,,Ice]Samurott-Hisui||HeavyDutyBoots|Sharpness|CeaselessEdge,RazorShell,Taunt,SacredSword|Adamant|8,248,24,,224,4|||||,,,,,Water]Empoleon||Leftovers|Competitive|FlashCannon,FlipTurn,Roost,StealthRock|Calm|240,,,16,252,|||||,,,,,Water]Muk||RockyHelmet|PoisonTouch|DrainPunch,KnockOff,IcePunch,ShadowSneak|Impish|232,,248,,28,|||||,,,,,Poison]Tera Captain|IronThorns|BoosterEnergy|QuarkDrive|StoneEdge,FirePunch,Taunt,DragonDance||32,252,8,,4,212|||||,,,,,Poison"],
+ ["Chi-Yu||ChoiceSpecs|BeadsofRuin|DarkPulse,Overheat,FireBlast,Flamethrower|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Greninja-Bond||LifeOrb|BattleBond|HydroPump,DarkPulse,GrassKnot,GunkShot|Hasty|,96,,252,,160|||||,,,,,Water]Uxie||Leftovers|Levitate|KnockOff,Uturn,Encore,ThunderWave|Careful|252,,4,,252,|||||,,,,,Psychic]Tera Captain|IronHands|ChoiceBand|QuarkDrive|WildCharge,CloseCombat,PlayRough,HeavySlam|Adamant|,236,,,180,92|||||,,,,,Fighting]Iron Treads||Leftovers|QuarkDrive|StealthRock,Earthquake,RapidSpin,VoltSwitch|Jolly|248,,,,52,208|||||,,,,,Ground]Tera Captain|Ursaring|FlameOrb|Guts|Facade,PlayRough,CloseCombat,Trailblaze|Jolly|40,252,,,,216|||||,,,,,Normal","Tera Captain|Latias|Leftovers|Levitate|Recover,ThunderWave,Psychic,AuraSphere|Modest|252,,,252,4,||,0,,,,|||,,,,,Water]Chi-Yu||ChoiceScarf|BeadsofRuin|FireBlast,DarkPulse,Ruination,Flamethrower|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Jirachi||Leftovers|SereneGrace|Substitute,CalmMind,Psychic,AuraSphere|Bold|224,,252,,,32||,0,,,,|||,,,,,Steel]Quagsire||Leftovers|WaterAbsorb|Spikes,Recover,Earthquake,Waterfall|Impish|252,4,252,,,|||||,,,,,Water]Sableye||Leftovers|Prankster|Taunt,WillOWisp,Recover,KnockOff|Careful|252,4,,,252,|||||,,,,,Dark]Clefable||Leftovers|MagicGuard|CosmicPower,CalmMind,StoredPower,DrainingKiss|Calm|252,,,4,252,||,0,,,,|||,,,,,Fairy"],
+ ["Urshifu||PunchingGlove|UnseenFist|WickedBlow,IronHead,DrainPunch,SuckerPunch|Jolly|56,252,,,,200|||||,,,,,Fighting]Enamorus||HeavyDutyBoots|CuteCharm|EarthPower,Imprison,Moonblast,SludgeBomb|Timid|128,,,252,,128||,0,,,,|||,,,,,Fairy]Tera Captain|Regidrago|LumBerry|DragonsMaw|DragonDance,Earthquake,DragonClaw,ScaleShot|Jolly|,252,,,4,252|||||,,,,,Dragon]Azelf||FocusSash|Levitate|StealthRock,Psychic,GrassKnot,Taunt|Timid|200,,,252,,56||,0,,,,|||,,,,,Psychic]Tsareena||HeavyDutyBoots|QueenlyMajesty|Synthesis,RapidSpin,Uturn,PowerWhip|Careful|248,,24,,236,|||S||,,,,,Grass]Tera Captain|Gholdengo|EjectButton|GoodasGold|Recover,ShadowBall,FocusBlast,ThunderWave|Calm|248,,8,,252,||,0,,,,|||,,,,,Normal","Tera Captain|Annihilape|Leftovers|Defiant|RageFist,DrainPunch,Substitute,Protect|Jolly|252,,,,32,224|||||,,,,,Ghost]Greninja||ChoiceScarf|Protean|ToxicSpikes,Liquidation,Uturn,Switcheroo|Jolly|8,252,,,,248|||||,,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|KnockOff,FoulPlay,IcyWind,Uturn|Jolly|252,,88,,,168|||||,,,,,Flying]Ting-Lu||Leftovers|VesselofRuin|StealthRock,Ruination,Whirlwind,ThroatChop|Careful|252,,4,,252,|||||,,,,,Dark]Comfey||Leftovers|Triage|CalmMind,DrainingKiss,Substitute,Encore|Modest|188,,,252,,68||,0,,,,|||,,,,,Fairy]Scizor||ChoiceScarf|Technician|Uturn,BulletPunch,CloseCombat,KnockOff|Jolly|,252,,,4,252|||||,,,,,Bug"],
+ ["Ting-Lu||EjectButton|VesselofRuin|StealthRock,Whirlwind,RockTomb,Earthquake|Sassy|252,4,104,,148,|||||,,,,,Dark]Palafin||ChoiceSpecs|ZerotoHero|FlipTurn,HydroPump,AuraSphere,Boomburst|Hasty|,,,252,4,252|||||,,,,,Water]Tera Captain|Gholdengo|ChoiceScarf|GoodasGold|DazzlingGleam,ShadowBall,Trick,FocusBlast|Modest|52,,,252,4,200||,0,,,,|||,,,,,Fairy]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|Trailblaze,IvyCudgel,Uturn,ZenHeadbutt|Jolly|36,252,,,4,216|||||,,,,,Fire]Tera Captain|EnamorusTherian|WeaknessPolicy|Overcoat|Agility,EarthPower,Moonblast,Psychic|Bold|,,32,224,4,248||,0,,,,|||,,,,,Ground]Cyclizar||ChoiceScarf|Regenerator|Uturn,ShedTail,RapidSpin,DracoMeteor|Naughty|252,36,124,,4,92|||||,,,,,Dragon","Zapdos||HeavyDutyBoots|Static|VoltSwitch,HeatWave,Uturn,Roost|Timid|248,,,,112,148|||||,,,,,Electric]Meowscarada||ChoiceScarf|Protean|TripleAxel,KnockOff,FlowerTrick,Uturn|Jolly|,252,12,,,244|||||,,,,,Grass]Qwilfish||RockyHelmet|Intimidate|ToxicSpikes,FlipTurn,SelfDestruct,DestinyBond|Jolly|252,,8,,,248|||||,,,,,Water]Dragonite||WeaknessPolicy|Multiscale|DragonDance,ExtremeSpeed,IceSpinner,Roost|Adamant|244,252,,,12,|||||,,,,,Dragon]Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|BulkUp,BodyPress,TemperFlare,RapidSpin|Jolly|248,4,4,,,252|||||,,,,,Fire]Empoleon||ChopleBerry|Competitive|StealthRock,Surf,Roar,GrassKnot|Bold|252,,184,,72,||,0,,,,|||,,,,,Water"],
+ ["Tentacruel||AssaultVest|ClearBody|HydroPump,SludgeWave,IceBeam,RapidSpin|Calm|252,,,4,252,|||||,,,,,Water]Tera Captain|Latias|FocusSash|Levitate|MistBall,Surf,IceBeam,ThunderWave|Timid|,,32,252,,224||,0,,,,|||,,,,,Steel]Gyarados||Leftovers|Intimidate|Waterfall,Earthquake,Avalanche,Roar|Impish|4,252,252,,,|||||,,,,,Water]Meowscarada||ExpertBelt|Protean|FlowerTrick,KnockOff,TripleAxel,BrickBreak|Adamant|,252,12,,,244|||||,,,,,Grass]Heatran||RockyHelmet|FlashFire|Flamethrower,MagmaStorm,EarthPower,StealthRock|Bold|188,,252,64,4,||,0,,,,|||,,,,,Fire]Tera Captain|Jolteon|LifeOrb|VoltAbsorb|VoltSwitch,Thunderbolt,AlluringVoice,TeraBlast|Modest|,,,252,68,188||,0,,,,|||,,,,,Fire","Sneasler||ChoiceScarf|PoisonTouch|Switcheroo,Uturn,DireClaw,CloseCombat|Jolly|80,252,,,,176|||||,,,,,Fighting]Iron Treads||FocusSash|QuarkDrive|SteelBeam,KnockOff,StealthRock,RapidSpin|Modest|,,,252,4,252|||||,,,,,Ground]Chi-Yu||HeavyDutyBoots|BeadsofRuin|FlameCharge,Flamethrower,DarkPulse,NastyPlot|Modest|144,,,252,,112|||||,,,,,Fire]Tera Captain|Primarina|AssaultVest|LiquidVoice|Psychic,Surf,Moonblast,FlipTurn|Calm|248,,,56,204,|||||,,,,,Psychic]Tera Captain|Rillaboom|ChoiceBand|GrassySurge|GrassyGlide,DrainPunch,WoodHammer,Uturn|Adamant|128,252,4,,,124|||||,,,,,Grass]Weezing||RockyHelmet|Levitate|SludgeBomb,Memento,WillOWisp,Flamethrower|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison"],
+ ["Meowscarada||ChoiceScarf|Protean|Uturn,FlowerTrick,KnockOff,TripleAxel|Adamant|12,252,,,,244|||||,,,,,Grass]Tera Captain|Latias|RockyHelmet|Levitate|StoredPower,CalmMind,Recover,DrainingKiss|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Zapdos||HeavyDutyBoots|Static|ThunderWave,Discharge,Roost,Hurricane|Bold|252,,252,,,4||,0,,,,|||,,,,,Electric]Glimmora||ShucaBerry|ToxicDebris|PowerGem,Spikes,SludgeWave,EarthPower|Timid|,,,252,4,252||,0,,,,|||,,,,,Rock]Swampert||HeavyDutyBoots|Torrent|Earthquake,Yawn,StealthRock,FlipTurn|Careful|252,4,,,252,|||||,,,,,Water]Tera Captain|Lucario|SilkScarf|InnerFocus|MeteorMash,SwordsDance,ExtremeSpeed,Earthquake|Jolly|32,252,,,,224|||||,,,,,Normal","Slowking-Galar||SitrusBerry|Regenerator|TrickRoom,Psyshock,SludgeBomb,NastyPlot|Bold|248,,208,52,,||,0,,,,|||,,,,,Poison]Glimmora||LightClay|ToxicDebris|LightScreen,Reflect,MortalSpin,StealthRock|Jolly|248,,,,8,252|||||,,,,,Rock]Tera Captain|Quaquaval|SitrusBerry|Moxie|AquaStep,TripleAxel,BrickBreak,SwordsDance|Adamant|56,252,4,,4,192|||||,,,,,Electric]Darkrai||Leftovers|BadDreams|SwordsDance,DrainPunch,KnockOff,Substitute|Jolly|16,252,,,,240|||||,,,,,Dark]Enamorus||ChoiceScarf|CuteCharm|Moonblast,GrassKnot,HealingWish,EarthPower|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Tera Captain|Cetitan|SitrusBerry|SheerForce|BellyDrum,IceShard,IcicleCrash,Earthquake|Adamant|4,252,228,,,24|||||,,,,,Ghost"],
+ ["Chi-Yu||HeavyDutyBoots|BeadsofRuin|NastyPlot,Flamethrower,DarkPulse,FlameCharge|Timid|,,,252,4,252|||||,,,,,Dark]Excadrill||Leftovers|MoldBreaker|RapidSpin,IronHead,Earthquake,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Ground]Iron Bundle||ChoiceSpecs|QuarkDrive|HydroPump,IceBeam,FreezeDry,Uturn|Timid|,,,252,4,252|||||,,,,,Ice]Latios||ChoiceScarf|Levitate|DracoMeteor,LusterPurge,FlipTurn,IceBeam|Timid|,,,252,4,252|||||,,,,,Dragon]Tera Captain|LilligantHisui|WideLens|Hustle|VictoryDance,LeafBlade,CloseCombat,IceSpinner|Jolly|,252,,,4,252|||||,,,,,Steel]Tera Captain|Crabominable|ChoiceBand|IronFist|CloseCombat,IceHammer,Earthquake,Crabhammer|Adamant|252,252,,,4,|||||,,,,,Water","Garchomp||ChoiceScarf|RoughSkin|StealthRock,Earthquake,Outrage,PoisonJab|Jolly|,252,,,4,252|||||,,,,,Dragon]Greninja||ChoiceScarf|Protean|HydroPump,DarkPulse,Uturn,Spikes|Timid|,,,252,4,252|||||,,,,,Water]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,BugBuzz,DazzlingGleam,Substitute|Timid|,,,252,4,252||,0,,,,|||,,,,,Poison]Rotom-Wash||LaggingTail|Levitate|Trick,VoltSwitch,HydroPump,Thunder|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Tera Captain|Braviary|ChoiceScarf|SheerForce|DoubleEdge,BraveBird,ZenHeadbutt,IronHead|Adamant|,252,,,4,252|||||,,,,,Normal]Brambleghast||ColburBerry|WindRider|RapidSpin,PowerWhip,Poltergeist,ShadowSneak|Jolly|,252,,,4,252|||||,,,,,Grass"],
+ ["Tera Captain|Gholdengo|RedCard|GoodasGold|ShadowBall,MakeItRain,FocusBlast,Thunderbolt|Modest|252,,228,28,,||,0,,,,|||,,,,,Water]Gliscor||ToxicOrb|PoisonHeal|DualWingbeat,HighHorsepower,StealthRock,StoneEdge|Adamant|252,252,,,4,|||||,,,,,Ground]Samurott-Hisui||ChoiceScarf|Sharpness|AquaJet,CeaselessEdge,AquaCutter,SacredSword|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|Hitmonlee|GrassySeed|Unburden|SwordsDance,CloseCombat,StoneEdge,StompingTantrum|Adamant|,252,,,4,252|||||,,,,,Ghost]Ribombee||FocusSash|ShieldDust|StickyWeb,StunSpore,Moonblast,Tailwind|Timid|248,,,8,,252||,0,,,,|||,,,,,Bug]Armarouge||SalacBerry|WeakArmor|Endure,ArmorCannon,Psychic,EnergyBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire","Tera Captain|RagingBolt|HeavyDutyBoots|Protosynthesis|Thunderclap,DracoMeteor,TeraBlast,CalmMind|Calm|56,,,204,248,||,20,,,,|||,,,,,Fairy]Talonflame||HeavyDutyBoots|FlameBody|FlareBlitz,Roost,Defog,WillOWisp|Jolly|252,,,,80,176|||||,,,,,Fire]Froslass||HeavyDutyBoots|CursedBody|TripleAxel,Poltergeist,WillOWisp,Spikes|Jolly|252,,,,4,252|||||,,,,,Ice]Rillaboom||Leftovers|GrassySurge|WoodHammer,GrassyGlide,KnockOff,Uturn|Adamant|84,252,,,,172|||||,,,,,Grass]Sneasler||GrassySeed|Unburden|CloseCombat,PoisonJab,ThroatChop,SwordsDance|Jolly|32,252,,,,224|||||,,,,,Fighting]Heatran||Leftovers|FlashFire|MagmaStorm,EarthPower,StealthRock,WillOWisp|Calm|252,,4,,252,||,0,,,,|||,,,,,Fire"],
+ ["Palafin||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,WaveCrash,ZenHeadbutt|Adamant|,252,4,,,252|||||,,,,,Water]Enamorus||ChoiceSpecs|Contrary|Moonblast,EarthPower,TeraBlast,MysticalFire|Timid|,,,252,4,252|||||,,,,,Stellar]Samurott-Hisui||ChoiceScarf|Sharpness|CeaselessEdge,RazorShell,KnockOff,FlipTurn|Jolly|,252,4,,,252|||||,,,,,Water]Donphan||Leftovers|Sturdy|Earthquake,KnockOff,RapidSpin,IceSpinner|Adamant|252,24,,,148,48|||||,,,,,Ghost]Tera Captain|IronMoth|HeavyDutyBoots|QuarkDrive|FieryDance,SludgeWave,DazzlingGleam,Substitute|Timid|,,,252,4,252|||||,,,,,Fairy]Tera Captain|Sinistcha|Leftovers|Heatproof|CalmMind,MatchaGotcha,ShadowBall,StrengthSap|Bold|252,,160,,,96||,0,,,,|||,,,,,Poison","Garchomp||YacheBerry|RoughSkin|ScaleShot,Earthquake,IronHead,Liquidation|Jolly|52,252,,,4,200|||||,,,,,Dragon]Sandslash-Alola||FocusSash|SlushRush|IcicleCrash,IronHead,Spikes,Earthquake|Adamant|252,252,,,4,|||||,,,,,Ice]Slowking-Galar||ShucaBerry|Regenerator|ChillyReception,SludgeBomb,FutureSight,IceBeam|Modest|252,,,252,4,||,0,,,,|||,,,,,Poison]Meowscarada||ChoiceScarf|Protean|KnockOff,FlowerTrick,TripleAxel,Uturn|Jolly|,252,,,4,252|||||,,,,,Grass]Vaporeon||Leftovers|WaterAbsorb|Trailblaze,Whirlpool,Scald,Wish|Bold|248,,252,8,,|||||,,,,,Water]Tera Captain|Annihilape|Leftovers|VitalSpirit|TeraBlast,RageFist,Uturn,StealthRock|Hasty|36,252,,4,,216|||||,,,,,Grass"],
+ ["Rotom-Heat||LightClay|Levitate|VoltSwitch,Reflect,LightScreen,Overheat|Modest|252,,252,4,,||,0,,,,|||,,,,,Electric]Iron Treads||RockyHelmet|QuarkDrive|IceSpinner,Earthquake,StealthRock,RapidSpin|Jolly|,84,200,,,224|||||,,,,,Ground]Iron Valiant||AirBalloon|QuarkDrive|Moonblast,Substitute,AuraSphere,Thunderbolt|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Tera Captain|Latias|Leftovers|Levitate|CalmMind,TeraBlast,DragonPulse,EnergyBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Ground]Tera Captain|Gyarados|HeavyDutyBoots|Moxie|DragonDance,Waterfall,TeraBlast,Taunt|Naughty|,252,,4,,252|||||,,,,,Flying]Samurott-Hisui||LifeOrb|Sharpness|FlipTurn,CeaselessEdge,SacredSword,SuckerPunch|Jolly|,252,,,4,252|||||,,,,,Water","Garchomp||LoadedDice|RoughSkin|ScaleShot,Earthquake,IronHead,SwordsDance|Adamant|,252,,,20,236|||||,,,,,Dragon]Tera Captain|Annihilape|ChestoBerry|Defiant|DrainPunch,RageFist,BulkUp,Rest|Impish|248,20,240,,,|||||,,,,,Fairy]Samurott-Hisui||ChoiceBand|Sharpness|CeaselessEdge,RazorShell,KnockOff,AquaJet|Jolly|,252,,,4,252|||||,,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,HeatWave,KnockOff,Uturn|Timid|252,,,,40,216|||||,,,,,Flying]Tinkaton||Leftovers|MoldBreaker|FakeOut,PlayRough,Encore,StealthRock|Jolly|,92,224,,,192|||||,,,,,Fairy]Tera Captain|Moltres|HeavyDutyBoots|FlameBody|Flamethrower,Uturn,WillOWisp,Roost|Calm|248,,,8,252,|||||,,,,,Water"],
+ ["Tera Captain|Venusaur|LifeOrb|Chlorophyll|Growth,WeatherBall,SludgeBomb,EarthPower|Modest|,,,252,4,252||,0,,,,|||,,,,,Fire]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|Agility,TeraBlast,Thunderbolt,NastyPlot|Modest|,,,252,4,252||,0,,,,|||,,,,,Flying]Great Tusk||Leftovers|Protosynthesis|RapidSpin,Earthquake,IceSpinner,CloseCombat|Jolly|,252,,,4,252|||||,,,,,Stellar]Torkoal||HeatRock|Drought|RapidSpin,StealthRock,Yawn,LavaPlume|Calm|252,,4,,252,|||||,,,,,Stellar]Hatterene||Leftovers|MagicBounce|Nuzzle,CalmMind,DrainingKiss,PsychicNoise|Modest|,,,252,4,252|||||,,,,,Stellar]Kingambit||ChopleBerry|SupremeOverlord|SwordsDance,LowKick,IronHead,SuckerPunch|Adamant|252,252,,,4,|||||,,,,,Stellar","Tera Captain|Landorus|LifeOrb|SheerForce|Gravity,EarthPower,Uturn,Protect|Timid|252,,,4,,252|||||,,,,,Ground]Slaking||ChoiceBand|Truant|GigaImpact,DoubleEdge,Earthquake,SuckerPunch|Adamant|,252,,,4,252|||||,,,,,Normal]Weavile||FocusSash|Pressure|SwordsDance,LowKick,IceShard,KnockOff|Adamant|68,252,,,,188|||||,,,,,Dark]Tentacruel||HeavyDutyBoots|ClearBody|RapidSpin,FlipTurn,Toxic,KnockOff|Careful|252,,,,240,16|||||,,,,,Water]Latios||Leftovers|Levitate|LusterPurge,AuraSphere,Reflect,Recover|Timid|72,,,252,,184||,0,,,,|||,,,,,Dragon]Tera Captain|Orthworm|SitrusBerry|EarthEater|ShedTail,StealthRock,Spikes,BodyPress|Calm|248,,8,,252,||,0,,,,|||,,,,,Electric"],
+ ["Tera Captain|Scrafty|Leftovers|ShedSkin|BulkUp,DrainPunch,KnockOff,Rest|Impish|252,4,252,,,|||||,,,,,Water]Scizor||Leftovers|Technician|SwordsDance,BulletPunch,BrickBreak,Facade|Adamant|252,252,,,4,|||||,,,,,Bug]Cinderace||HeavyDutyBoots|Libero|PyroBall,Uturn,CourtChange,GunkShot|Adamant|,252,,,4,252|||||,,,,,Fire]Ninetales-Alola||IcyRock|SnowWarning|AuroraVeil,NastyPlot,Moonblast,FreezeDry|Modest|,,,252,44,212||,0,,,,|||,,,,,Ice]Tera Captain|Cetitan|SitrusBerry|SlushRush|BellyDrum,Substitute,Earthquake,PlayRough|Jolly|64,252,,,,192|||||,,,,,Fairy]Rotom-Wash||AbilityShield|Levitate|HydroPump,ThunderWave,VoltSwitch,WillOWisp|Bold|252,,252,4,,||,0,,,,|||,,,,,Electric","Baxcalibur||LoadedDice|ThermalExchange|IcicleSpear,ScaleShot,Earthquake,SwordsDance|Adamant|,252,4,,,252|||||,,,,,Normal]Ninetales-Alola||LightClay|SnowWarning|AuroraVeil,Encore,PainSplit,Moonblast|Timid|212,,,96,,200||,0,,,,|||,,,,,Normal]Tera Captain|Annihilape|Leftovers|Defiant|BulkUp,Taunt,DrainPunch,RageFist|Careful|152,,44,,252,60|||||,,,,,Fairy]Excadrill||SitrusBerry|MoldBreaker|Earthquake,IronHead,StealthRock,RapidSpin|Jolly|16,252,,,,240|||||,,,,,Normal]Alomomola||RockyHelmet|Regenerator|Scald,FlipTurn,Wish,Protect|Relaxed|252,,252,4,,|||||,,,,,Normal]Tera Captain|SandslashAlola|LifeOrb|SlushRush|IceSpinner,IronHead,Earthquake,SwordsDance|Jolly|24,,252,,,232|||||,,,,,Ground"],
+ ["Volcarona||HeavyDutyBoots|FlameBody|QuiverDance,BugBuzz,FieryDance,Psychic|Modest|,,,252,4,252||,0,,,,|||,,,,,Bug]Politoed||ChoiceScarf|Drizzle|Surf,EarthPower,FocusBlast,Psychic|Timid|,,4,252,,252||,0,,,,|||,,,,,Water]Tera Captain|Archaludon|AssaultVest|Stamina|DarkPulse,BodyPress,DracoMeteor,DragonTail|Calm|200,,56,,252,|||||,,,,,Dark]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|SpikyShield,HornLeech,IvyCudgel,KnockOff|Jolly|,100,128,,28,252|||||,,,,,Water]Overqwil||Leftovers|Intimidate|Spikes,ToxicSpikes,BarbBarrage,DestinyBond|Careful|,,4,,252,252|||||,,,,,Dark]Tornadus||FocusSash|Prankster|Acrobatics,BulkUp,Uturn,KnockOff|Jolly|,252,28,,28,200|||||,,,,,Flying","Sandy Shocks||ChoiceScarf|Protosynthesis|VoltSwitch,Thunder,EarthPower,TriAttack|Modest|4,,,252,,252||,0,,,,|||,,,,,Electric]Tera Captain|Zarude|ChoiceBand|LeafGuard|Uturn,DrainPunch,KnockOff,StompingTantrum|Jolly|252,4,,,,252|||||,,,,,Fighting]Slither Wing||ChoiceScarf|Protosynthesis|Uturn,LeechLife,Earthquake,CloseCombat|Jolly|4,252,,,,252|||||,,,,,Bug]Iron Crown||Leftovers|QuarkDrive|Protect,AirSlash,IronDefense,CalmMind|Timid|252,,136,,112,8||,20,,,,|||,,,,,Steel]Blastoise||Leftovers|RainDish|AquaRing,Protect,ChillingWater,IceBeam|Bold|252,,252,,,4||,0,,,,|||,,,,,Water]Fezandipiti||BlackSludge|ToxicChain|Roost,Protect,Taunt,PlayRough|Jolly|252,,,,252,4|||||,,,,,Poison"],
+ ["Iron Bundle||ChoiceScarf|QuarkDrive|HydroPump,FreezeDry,IceBeam,FlipTurn|Timid|,,,252,4,252|||||,,,,,Ice]Tera Captain|Manaphy|SalacBerry|Hydration|AcidArmor,TakeHeart,Rest,Surf|Calm|252,,,4,252,||,0,,,,|||,,,,,Water]Tera Captain|Polteageist|WhiteHerb|CursedBody|ShellSmash,ShadowBall,StoredPower,TeraBlast|Modest|252,,,196,,60||,0,,,,|||,,,,,Water]Cyclizar||SitrusBerry|Regenerator|RapidSpin,ShedTail,QuickAttack,RainDance|Jolly|248,8,,,,252|||||,,,,,Dragon]Dodrio||ChoiceBand|EarlyBird|BraveBird,GigaImpact,DrillRun,Lunge|Jolly|,252,,,4,252|||||,,,,,Normal]Klefki||LightClay|Prankster|Reflect,LightScreen,ThunderWave,RainDance|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel","Iron Valiant||BoosterEnergy|QuarkDrive|AuraSphere,CalmMind,ShadowBall,VacuumWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Iron Boulder||ChoiceScarf|QuarkDrive|MightyCleave,SacredSword,BrickBreak,PsychoCut|Adamant|,252,,,4,252|||||,,,,,Rock]Chi-Yu||ChoiceScarf|BeadsofRuin|DarkPulse,Psychic,Overheat,Flamethrower|Modest|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|OricorioPomPom|MirrorHerb|Dancer|AlluringVoice,RevelationDance,QuiverDance,Roost|Timid|252,,,4,,252||,0,,,,|||,,,,,Electric]Tera Captain|RotomWash|Leftovers|Levitate|LightScreen,VoltSwitch,HydroPump,ThunderWave|Calm|252,,,,244,12||,0,,,,|||,,,,,Electric]Tinkaton||Leftovers|MoldBreaker|KnockOff,FakeOut,BrickBreak,GigatonHammer|Adamant|,252,,,4,252|||||,,,,,Fairy"],
+ ["Grimmsnarl||LightClay|Prankster|Reflect,LightScreen,SpiritBreak,Taunt|Careful|252,4,,,252,|||||,,,,,Dark]Tera Captain|Virizion|SitrusBerry|Justified|AirSlash,AuraSphere,CalmMind,EnergyBall|Modest|,,,252,4,252||,0,,,,|||,,,,,Steel]Terapagos||RockyHelmet|TeraShift|RockPolish,IceBeam,CalmMind,Flamethrower|Modest|220,,224,64,,||,15,,,,|||,,,,,Stellar]Gliscor||ToxicOrb|PoisonHeal|Protect,Earthquake,StealthRock,Toxic|Impish|252,,184,,,72|||||,,,,,Ground]Gholdengo||ChoiceScarf|GoodasGold|ShadowBall,MakeItRain,FocusBlast,Trick||4,,,252,,252||,0,,,,|||,,,,,Steel]Tera Captain|GreninjaBond|ChoiceSpecs|BattleBond|IceBeam,SludgeWave,Surf,TeraBlast||,,,252,4,252|||||,,,,,Fire","Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Substitute,Protect|Timid|40,,,252,,216||,0,,,,|||,,,,,Ice]Tinkaton||ShucaBerry|MoldBreaker|ThunderWave,Encore,GigatonHammer,KnockOff|Jolly|240,92,,,,176|||||,,,,,Fairy]Rotom-Heat||HeavyDutyBoots|Levitate|VoltSwitch,Overheat,PainSplit,WillOWisp|Timid|252,,,16,,240||,0,,,,|||,,,,,Electric]Tera Captain|Ribombee|ChoiceSpecs|ShieldDust|Moonblast,BugBuzz,StickyWeb,Uturn|Timid|16,,,252,,240|||||,,,,,Fairy]Weavile||FocusSash|Pressure|KnockOff,IceSpinner,BrickBreak,UpperHand|Jolly|16,252,,,8,232|||||,,,,,Dark]Garchomp||HabanBerry|RoughSkin|EarthPower,DracoMeteor,StealthRock,FireBlast|Modest|24,,,252,12,220||,0,,,,|||,,,,,Dragon"],
+ ["Tera Captain|Drifblim|ChopleBerry|Unburden|CalmMind,ShadowBall,StoredPower,StrengthSap|Bold|,,252,,184,72||,0,,,,|||,,,,,Dark]Tera Captain|Meowscarada|ChoiceScarf|Protean|Uturn,Trick,FlowerTrick,KnockOff|Jolly|104,252,,,,152|||||,,,,,Grass]Iron Boulder||BoosterEnergy|QuarkDrive|CloseCombat,ZenHeadbutt,MightyCleave,Agility||184,252,,,,72|||||,,,,,Rock]Moltres||HeavyDutyBoots|FlameBody|BraveBird,Roar,Uturn,Roost|Impish|248,,252,,8,|||||,,,,,Fire]Slowking-Galar||AssaultVest|Regenerator|Flamethrower,SludgeBomb,Psychic,FocusBlast|Calm|252,,,56,200,||,0,,,,|||,,,,,Poison]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|Encore,Trailblaze,KnockOff,IvyCudgel|Jolly|,252,,,4,252|||||,,,,,Water","Iron Bundle||BoosterEnergy|QuarkDrive|FreezeDry,IceBeam,HydroPump,Protect|Timid|,,96,252,,160||,0,,,,|||,,,,,Ice]Tera Captain|Dewgong|RockyHelmet|ThickFat|IceShard,Charm,Stockpile,Rest|Impish|184,72,252,,,|||||,,,,,Grass]Rotom-Wash||Leftovers|Levitate|HydroPump,VoltSwitch,PainSplit,DarkPulse|Modest|252,,252,,4,||,0,,,,|||,,,,,Electric]Iron Treads||Leftovers|QuarkDrive|StealthRock,VoltSwitch,RapidSpin,KnockOff|Careful|252,,252,,4,|||||,,,,,Ground]Tera Captain|Latias|SoulDew|Levitate|ReflectType,Outrage,DragonDance,Recover|Adamant|24,252,108,,,124|||||,,,,,Dark]Blaziken||ChoiceBand|SpeedBoost|KnockOff,Uturn,BraveBird,CloseCombat|Adamant|4,252,,,,252|||||,,,,,Fire"],
+ ["Sneasler||WhiteHerb|Unburden|Acrobatics,CloseCombat,DireClaw,Uturn|Adamant|60,252,,,,196|||||,,,,,Stellar]Iron Boulder||BoosterEnergy|QuarkDrive|MightyCleave,CloseCombat,IronHead,SwordsDance|Jolly|48,252,68,,12,128|||||,,,,,Stellar]Chi-Yu||FocusSash|BeadsofRuin|DarkPulse,Flamethrower,Ruination,NastyPlot|Timid|16,,,252,,240||,0,,,,|||,,,,,Stellar]Tera Captain|Espathra|ColburBerry|SpeedBoost|StoredPower,DazzlingGleam,CalmMind,Protect|Modest|8,,92,252,48,108||,0,,,,|||,,,,,Fairy]Rotom-Mow||Leftovers|Levitate|VoltSwitch,LeafStorm,PainSplit,ThunderWave|Timid|252,,,4,,252||,0,,,,|||,,,,,Stellar]Tera Captain|Azumarill|Leftovers|SapSipper|KnockOff,ChillingWater,Whirlpool,AlluringVoice|Bold|252,,200,,56,|||||,,,,,Water","Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,Encore,FlipTurn|Timid|,,96,252,,160|||||,,,,,Ice]Tera Captain|Hydreigon|Leftovers|Levitate|DarkPulse,FlashCannon,StealthRock,Roar|Calm|248,,8,,252,||,0,,,,|||,,,,,Fairy]Dachsbun||Leftovers|WellBakedBody|Wish,Protect,PlayRough,BodyPress|Careful|248,,8,,252,|||||,,,,,Fairy]Brambleghast||ColburBerry|WindRider|PowerWhip,RapidSpin,Spikes,ShadowSneak|Adamant|,252,24,,,232|||||,,,,,Grass]Corviknight||RockyHelmet|Pressure|BraveBird,Uturn,Defog,Roost|Impish|248,,252,,8,|||||,,,,,Flying]Tera Captain|Torterra|WhiteHerb|ShellArmor|ShellSmash,Earthquake,TeraBlast,ZenHeadbutt|Adamant|96,252,4,,,156|||||,,,,,Poison"],
+ ["Great Tusk||ClearAmulet|Protosynthesis|BulkUp,IceSpinner,HeadlongRush,HeavySlam|Adamant|84,252,,,,172|||||,,,,,Ground]Meowscarada||BlackGlasses|Protean|KnockOff,SuckerPunch,TripleAxel,FlowerTrick|Adamant|144,252,,,,112|||||,,,,,Grass]Latios||ChoiceScarf|Levitate|LusterPurge,CalmMind,ShadowBall,Trick|Modest|40,,,252,,216||,0,,,,|||,,,,,Dragon]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|SludgeBomb,Thunderbolt,TeraBlast,NastyPlot|Modest|108,,,252,,148||,0,,,,|||,,,,,Water]Heatran||ChopleBerry|FlameBody|EarthPower,MagmaStorm,StealthRock,HeavySlam|Modest|248,,,80,20,160|||||,,,,,Fire]Alcremie||Leftovers|SweetVeil|AlluringVoice,Encore,Recover,CalmMind|Calm|248,,8,,252,||,0,,,,|||,,,,,Fairy","Landorus-Therian||RockyHelmet|Intimidate|Earthquake,Uturn,StealthRock,GrassKnot|Jolly|248,,36,,,224|||||,,,,,Ground]Scizor||ProtectivePads|Technician|BulletPunch,Uturn,KnockOff,CloseCombat|Adamant|248,252,,,8,|||||,,,,,Bug]Scream Tail||LightClay|Protosynthesis|DazzlingGleam,Encore,LightScreen,Reflect|Timid|200,,,,60,248||,0,,,,|||,,,,,Fairy]Tera Captain|RagingBolt|SitrusBerry|Protosynthesis|Thunderbolt,DragonPulse,Earthquake,CalmMind|Timid|88,,,252,,168|||||,,,,,Fairy]Tera Captain|Milotic|FlameOrb|MarvelScale|Scald,Recover,Haze,FlipTurn|Bold|248,,204,,56,|||||,,,,,Bug]Cyclizar||LifeOrb|Regenerator|DracoMeteor,ShedTail,RapidSpin,Taunt|Timid|248,,,92,,168|||||,,,,,Dragon"],
+ ["Clodsire||EjectButton|Unaware|ToxicSpikes,Recover,Earthquake,Haze|Careful|28,,248,,232,|||||,,,,,Poison]Tera Captain|Cinccino|LoadedDice|Technician|TailSlap,KnockOff,TidyUp,RockBlast|Jolly|,252,4,,,240|||||,,,,,Normal]Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|TeraBlast,BulkUp,Earthquake,IceSpinner|Jolly|,4,,,252,252|||||,,,,,Electric]Enamorus||ChoiceScarf|CuteCharm|Moonblast,EarthPower,DrainingKiss,HealingWish|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Iron Bundle||ChoiceSpecs|QuarkDrive|HydroPump,FlipTurn,IceBeam,FreezeDry|Modest|56,,,252,,200|||||,,,,,Ice]Kingambit||BlackGlasses|SupremeOverlord|IronHead,SuckerPunch,BrickBreak,KowtowCleave|Adamant|220,220,,,68,|||||,,,,,Dark","Gouging Fire||Leftovers|Protosynthesis|HeatCrash,BreakingSwipe,DragonDance,MorningSun|Impish|240,40,128,,4,96|||||,,,,,Fire]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,LeechSeed,Substitute|Timid|56,,,252,,200||,0,,,,|||,,,,,Stellar]Quaquaval||YacheBerry|Moxie|AquaStep,CloseCombat,RapidSpin,Taunt|Adamant|112,252,,,,144|||||,,,,,Water]Zapdos||Leftovers|Pressure|Hurricane,WeatherBall,Substitute,RainDance|Timid|224,,,52,80,152||,0,,,,|||,,,,,Electric]Jirachi||PowerHerb|SereneGrace|Psychic,AuraSphere,MeteorBeam,Substitute|Timid|128,,,228,,152||,0,,,,|||,,,,,Steel]Grimmsnarl||LightClay|Prankster|LowKick,Reflect,ThunderWave,LightScreen|Jolly|120,212,,,,176|||||,,,,,Dark"],
+ ["Iron Hands||AssaultVest|QuarkDrive|CloseCombat,HeavySlam,ThunderPunch,VoltSwitch|Jolly|4,252,,,,252|||||,,,,,Fighting]Tera Captain|Hydreigon|AssaultVest|Levitate|FlashCannon,DarkPulse,DracoMeteor,Uturn|Modest|4,,,252,252,|||||,,,,,Poison]Tera Captain|Okidogi|Leftovers|ToxicChain|Substitute,BulkUp,DrainPunch,IronHead|Careful|248,,,,252,|||||,,,,,Water]Mandibuzz||HeavyDutyBoots|Overcoat|FoulPlay,Uturn,Roost,Defog|Impish|248,,252,,8,|||||,,,,,Dark]Fezandipiti||AssaultVest|ToxicChain|Moonblast,Uturn,SludgeBomb,HeatWave|Calm|,,,252,252,|||||,,,,,Poison]Scizor||ChoiceScarf|Technician|DualWingbeat,Uturn,BulletPunch,AerialAce|Jolly|,252,,,4,252|||||,,,,,Bug","Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,Flamethrower,DracoMeteor,KnockOff|Timid|20,,,240,,248|||||,,,,,Water]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,Flamethrower,DarkPulse,Ruination|Timid|4,,,252,,252||,0,,,,|||,,,,,Dark]Torkoal||HeatRock|Drought|Overheat,StealthRock,RapidSpin,Yawn|Bold|248,,32,,228,|||||,,,,,Fire]Bronzong||EjectButton|Levitate|FutureSight,Hypnosis,Psyshock,WeatherBall|Calm|252,,40,,216,||,0,,,,|||,,,,,Steel]Weezing-Galar||RockyHelmet|Levitate|WillOWisp,Psybeam,Flamethrower,Defog|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Ursaluna-Bloodmoon||AssaultVest|MindsEye|BloodMoon,EarthPower,VacuumWave,FocusBlast|Modest|252,,,252,4,||,0,,,,|||,,,,,Ground"],
+ ["Iron Boulder||ShucaBerry|QuarkDrive|MightyCleave,CloseCombat,SwordsDance,Substitute|Jolly|112,252,,,,144|||||,,,,,Rock]Corviknight||LightClay|MirrorArmor|Uturn,Roost,Reflect,LightScreen|Impish|252,,152,,104,|||||,,,,,Flying]Pincurchin||TerrainExtender|ElectricSurge|Spikes,PoisonJab,PainSplit,Memento|Impish|4,,252,,252,|||||,,,,,Electric]Iron Bundle||ChoiceScarf|QuarkDrive|FreezeDry,IceBeam,HydroPump,FlipTurn|Modest|172,,,252,,84|||||,,,,,Ice]Tera Captain|WeezingGalar|CustapBerry|Levitate|StrangeSteam,SludgeBomb,Defog,Haze|Bold|252,,4,,252,||,0,,,,|||,,,,,Electric]Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|Thunderclap,Thunderbolt,DragonPulse,CalmMind|Modest|,,100,252,,156||,20,,,,|||,,,,,Fairy","Smeargle||MentalHerb|OwnTempo|StickyWeb,RapidSpin,ToxicSpikes,Taunt|Impish|252,,252,,4,|||||,,,,,Normal]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,IvyCudgel,HornLeech,Encore|Adamant|,252,,,32,224|||||,,,,,Fire]Tera Captain|GreatTusk|Leftovers|Protosynthesis|HeadlongRush,HeavySlam,RapidSpin,Taunt|Jolly|252,,96,,,160|||||,,,,,Steel]Tera Captain|OricorioSensu|HeavyDutyBoots|Dancer|QuiverDance,RevelationDance,Taunt,Roost|Modest|228,,,76,,204||,0,,,,|||,,,,,Fighting]Hatterene||AssaultVest|MagicBounce|DazzlingGleam,MysticalFire,DrainingKiss,Nuzzle|Bold|248,,136,,124,|||||,,,,,Psychic]Bisharp||Eviolite|Defiant|SwordsDance,NightSlash,IronHead,SuckerPunch|Jolly|48,252,,,,208|||||,,,,,Dark"],
+ ["Tera Captain|RagingBolt|AssaultVest|Protosynthesis|Thunderclap,VoltSwitch,DracoMeteor,TeraBlast|Timid|32,,12,252,28,184||,20,,,,|||,,,,,Ice]Vikavolt||ChartiBerry|Levitate|StickyWeb,VoltSwitch,BugBuzz,ThunderWave|Modest|96,,20,228,140,24||,0,,,,|||,,,,,Bug]Qwilfish-Hisui||Eviolite|SwiftSwim|BarbBarrage,PainSplit,Liquidation,ToxicSpikes|Jolly|64,60,56,,224,104|||||,,,,,Dark]Pelipper||DampRock|Drizzle|Roost,Uturn,AirSlash,WeatherBall|Modest|228,,60,120,100,|||||,,,,,Water]Archaludon||AssaultVest|Stamina|ElectroShot,FlashCannon,DragonPulse,BodyPress|Modest|,,20,148,144,196||,0,,,,|||,,,,,Steel]Basculegion||KasibBerry|SwiftSwim|PhantomForce,FlipTurn,Liquidation,NightShade|Adamant|8,188,,,60,252|||||,,,,,Water","Iron Boulder||PasshoBerry|QuarkDrive|MightyCleave,CloseCombat,ZenHeadbutt,QuickAttack|Adamant|,252,,,4,252|||||,,,,,Rock]Skarmory||RockyHelmet|Sturdy|Spikes,BraveBird,Whirlwind,Roost|Impish|252,,160,,,96|||||,,,,,Steel]Gliscor||ToxicOrb|PoisonHeal|KnockOff,ToxicSpikes,Taunt,Protect|Jolly|252,,4,,,252|||||,,,,,Ground]Iron Bundle||ChoiceScarf|QuarkDrive|IceBeam,FreezeDry,HydroPump,FlipTurn|Timid|,,,252,4,252|||||,,,,,Ice]Tera Captain|Skeledirge|HeavyDutyBoots|Unaware|TorchSong,Hex,WillOWisp,SlackOff|Bold|252,,88,,168,||,0,,,,|||,,,,,Grass]Clodsire||HeavyDutyBoots|Unaware|Earthquake,PoisonJab,StealthRock,Recover|Careful|248,,168,,92,|||||,,,,,Poison"],
+ ["Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,Trailblaze,PlayRough,SwordsDance|Jolly|64,252,,,,192|||||,,,,,Water]Tera Captain|Braviary|HeavyDutyBoots|SheerForce|Agility,BodySlam,BraveBird,ShadowClaw|Jolly|4,252,,,,252|||||,,,,,Ghost]Carbink||SitrusBerry|ClearBody|Moonblast,StealthRock,Spikes,Reflect|Calm|248,,,8,252,||,0,,,,|||,,,,,Rock]Darkrai||HeavyDutyBoots|BadDreams|DarkPulse,IceBeam,FocusBlast,NastyPlot|Timid|16,,,252,,240||,0,,,,|||,,,,,Dark]Infernape||RockyHelmet|Blaze|FlareBlitz,WillOWisp,SlackOff,CloseCombat|Jolly|252,,64,,,192|||||,,,,,Fire]Iron Treads||ShucaBerry|QuarkDrive|IceSpinner,RapidSpin,Earthquake,VoltSwitch|Jolly|32,252,,,,224|||||,,,,,Ground","Tera Captain|Gholdengo|AirBalloon|GoodasGold|Recover,ShadowBall,FocusBlast,NastyPlot|Modest|252,,176,80,,||,0,,,,|||,,,,,Dragon]Meowscarada||ChoiceScarf|Protean|FlowerTrick,TripleAxel,KnockOff,Uturn|Adamant|252,252,,,4,|||||,,,,,Grass]Tera Captain|ArticunoGalar|HeavyDutyBoots|Competitive|FreezingGlare,CalmMind,Hurricane,Recover|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Garchomp||Leftovers|RoughSkin|Earthquake,Spikes,StealthRock,DragonTail|Impish|252,,252,,4,|||||,,,,,Dragon]Chi-Yu||ChoiceScarf|BeadsofRuin|FireBlast,DarkPulse,Psychic,Flamethrower|Modest|176,,,252,,80||,0,,,,|||,,,,,Dark]Maushold||WideLens|Technician|TidyUp,PopulationBomb,Encore,LowKick|Jolly|156,104,,,,248|||||,,,,,Normal"],
+ ["Mesprit||Leftovers|Levitate|PsychUp,StoredPower,DazzlingGleam,Imprison|Timid|248,,16,12,16,216||,0,,,,|||,,,,,Psychic]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|TeraBlast,Earthquake,DragonPulse,Thunderbolt|Quiet|248,52,,196,,12|||||,,,,,Poison]Cinderace||HeavyDutyBoots|Libero|GunkShot,PyroBall,Uturn,HighJumpKick|Jolly|24,252,,,,232|||||,,,,,Fire]Samurott-Hisui||ChopleBerry|Sharpness|AquaJet,CeaselessEdge,SacredSword,AquaCutter|Jolly|,252,4,,,252|||||,,,,,Water]Great Tusk||HeavyDutyBoots|Protosynthesis|RapidSpin,CloseCombat,HeadlongRush,IceSpinner|Jolly|,252,16,,,240|||||,,,,,Ground]Tinkaton||HeavyDutyBoots|MoldBreaker|Encore,GigatonHammer,PlayRough,StealthRock|Jolly|248,8,,,68,184|||||,,,,,Fairy","Iron Valiant||ChoiceScarf|QuarkDrive|CloseCombat,Moonblast,Trick,KnockOff|Mild|,124,,252,,132|||||,,,,,Fairy]Tera Captain|Espathra|MentalHerb|SpeedBoost|Roost,CalmMind,LuminaCrash,TeraBlast|Bold|252,,248,,,8||,0,,,,|||,,,,,Electric]Tera Captain|ThundurusTherian|ChoiceScarf|VoltAbsorb|Thunderbolt,VoltSwitch,TeraBlast,GrassKnot|Timid|108,,4,252,,144||,0,,,,|||,,,,,Fairy]Orthworm||ChopleBerry|EarthEater|ShedTail,StealthRock,BodyPress,HeavySlam|Impish|248,8,252,,,|||||,,,,,Steel]Samurott-Hisui||ChopleBerry|Sharpness|CeaselessEdge,SacredSword,AquaJet,RazorShell|Jolly|,252,4,,,252|||||,,,,,Water]Donphan||RockyHelmet|Sturdy|Earthquake,RapidSpin,StealthRock,Counter|Impish|248,8,252,,,|||||,,,,,Ground"],
+ ["Darkrai||ChoiceScarf|BadDreams|SludgeBomb,DarkPulse,IceBeam,Trick|Timid|32,,,252,,224||,0,,,,|||,,,,,Dark]Primarina||RindoBerry|Torrent|Moonblast,FlipTurn,DrainingKiss,EnergyBall|Modest|192,,4,252,,60|||||,,,,,Water]Decidueye||ColburBerry|Overgrow|Defog,Uturn,GigaDrain,NightShade|Relaxed|252,,252,,4,|||||,,,,,Grass]Tera Captain|Landorus|LifeOrb|SandForce|EarthPower,SludgeWave,Psychic,StealthRock||152,,4,252,,100||,0,,,,|||,,,,,Ground]Gouging Fire||HeavyDutyBoots|Protosynthesis|FlareBlitz,ScaleShot,Earthquake,BurningBulwark|Jolly|72,252,,,4,180|||||,,,,,Fire]Hitmontop||LifeOrb|Technician|RapidSpin,TripleAxel,CloseCombat,MachPunch|Jolly|44,252,,,,212|||||,,,,,Fighting","Iron Valiant||LifeOrb|QuarkDrive|KnockOff,CloseCombat,SpiritBreak,VacuumWave|Naive|,180,,192,,136|||||,,,,,Fairy]Garchomp||ChoiceScarf|RoughSkin|Earthquake,Outrage,ScaleShot,PoisonJab|Jolly|,252,8,,,248|||||,,,,,Dragon]Koffing||RockyHelmet|Levitate|ToxicSpikes,Haze,SludgeBomb,Explosion|Bold|252,,232,,24,|||||,,,,,Poison]Tornadus-Therian||HeavyDutyBoots|Regenerator|KnockOff,BleakwindStorm,HeatWave,Taunt|Modest|128,,,252,,128|||||,,,,,Flying]Tera Captain|Zarude|HeavyDutyBoots|LeafGuard|Uturn,KnockOff,CloseCombat,PowerWhip|Jolly|,252,,,32,224|||||,,,,,Fighting]Tera Captain|Lanturn|SitrusBerry|VoltAbsorb|ThunderWave,SleepTalk,IceBeam,VoltSwitch|Calm|240,,,,252,16||,0,,,,|||,,,,,Dark"],
+ ["Zapdos||ChilanBerry|Static|Discharge,Hurricane,HeatWave,Roost|Timid|80,,,252,,176||,0,,,,|||,,,,,Electric]Darkrai||Leftovers|BadDreams|WillOWisp,DarkPulse,SludgeBomb,FocusBlast|Timid|16,,,252,,240||,0,,,,|||,,,,,Poison]Slowking-Galar||BlackSludge|Regenerator|SludgeBomb,Flamethrower,ChillyReception,Trick|Calm|248,,8,,252,||,0,,,,|||,,,,,Water]Donphan||Leftovers|Sturdy|RapidSpin,StealthRock,Roar,Earthquake|Impish|252,,252,,4,|||||,,,,,Poison]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|Uturn,SurgingStrikes,CloseCombat,PoisonJab|Jolly|88,252,,,,168|||||,,,,,Water]Glaceon||ChoiceSpecs|IceBody|Blizzard,FreezeDry,WaterPulse,AlluringVoice|Modest|80,,4,252,,172||,0,,,,|||,,,,,Ice","Primarina||SitrusBerry|LiquidVoice|FlipTurn,IceBeam,Moonblast,PsychicNoise|Calm|252,,168,32,56,|||||,,,,,Water]Rotom-Heat||LightClay|Levitate|WillOWisp,VoltSwitch,LightScreen,Reflect|Calm|252,,4,,252,||,0,,,,|||,,,,,Electric]Tera Captain|Lucario|SalacBerry|InnerFocus|NastyPlot,ShadowBall,VacuumWave,Endure|Modest|152,,,252,,104||,0,,,,|||,,,,,Ghost]Meowscarada||ProtectivePads|Protean|TripleAxel,FlowerTrick,KnockOff,LowKick|Adamant|32,252,,,,224|||||,,,,,Grass]Tera Captain|Latias|RockyHelmet|Levitate|Psyshock,AuraSphere,Recover,CalmMind|Timid|120,,232,,,156||,0,,,,|||,,,,,Electric]Iron Treads||ExpertBelt|QuarkDrive|StoneEdge,Earthquake,BodyPress,RapidSpin|Jolly|16,252,,,,240|||||,,,,,Ground"],
+ ["Tera Captain|Latias|RockyHelmet|Levitate|FutureSight,Thunderbolt,Recover,IceBeam|Modest|248,,,124,,136||,0,,,,|||,,,,,Poison]Gholdengo||ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,Thunderbolt,Recover|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel]Sandy Shocks||AirBalloon|Protosynthesis|Thunderbolt,StealthRock,ScorchingSands,VoltSwitch|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Meowscarada||LifeOrb|Overgrow|GigaDrain,DarkPulse,PowerGem,NastyPlot|Modest|152,,4,252,,100||,0,,,,|||,,,,,Grass]Tera Captain|Ribombee|HeavyDutyBoots|ShieldDust|Moonblast,TeraBlast,QuiverDance,StickyWeb|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Tentacruel||Leftovers|LiquidOoze|Surf,SludgeWave,RapidSpin,Toxic|Timid|112,,,252,4,140|||||,,,,,Water","Donphan||AssaultVest|Sturdy|RapidSpin,Earthquake,KnockOff,IceShard|Careful|252,,,,208,48|||||,,,,,Ground]Tera Captain|Gyarados|ExpertBelt|Intimidate|DragonDance,Waterfall,Earthquake,IceFang|Jolly|72,252,,,,184|||||,,,,,Ground]Gholdengo||ColburBerry|GoodasGold|Recover,MakeItRain,NastyPlot,ShadowBall|Bold|252,,192,,,64||,0,,,,|||,,,,,Steel]Qwilfish-Hisui||Eviolite|Intimidate|Crunch,Spikes,PainSplit,BarbBarrage|Careful|252,,,,160,96|||||,,,,,Dark]Tera Captain|Latias|ChoiceScarf|Levitate|Psychic,DracoMeteor,ShadowBall,HealingWish|Timid|72,,,252,,184||,0,,,,|||,,,,,Electric]Iron Valiant||HeavyDutyBoots|QuarkDrive|Moonblast,ShadowBall,CalmMind,Psyshock|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy"],
+ ["Donphan||AssaultVest|Sturdy|RapidSpin,KnockOff,StoneEdge,Earthquake|Adamant|,252,,,156,100|||||,,,,,Ground]Iron Moth||HeavyDutyBoots|QuarkDrive|Overheat,EnergyBall,SludgeWave,Toxic|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Alomomola||AssaultVest|Regenerator|FlipTurn,Liquidation,AquaJet,MirrorCoat|Careful|252,,4,,252,|||||,,,,,Water]Roaring Moon||ChoiceBand|Protosynthesis|Crunch,ScaleShot,Outrage,Uturn|Jolly|,252,,,72,184|||||,,,,,Dragon]Skarmory||OccaBerry|WeakArmor|StealthRock,BraveBird,Roost,Whirlwind|Impish|252,164,44,,,48|||||,,,,,Steel]Tera Captain|Annihilape|CovertCloak|InnerFocus|Encore,RockTomb,RageFist,DrainPunch|Adamant|252,24,,,,232|||||,,,,,Fairy","Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,Trailblaze,IvyCudgel,PlayRough|Jolly|,252,,,4,252|||||,,,,,Fire]Tera Captain|Manaphy|SalacBerry|Hydration|Substitute,TailGlow,Surf,IceBeam|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|NastyPlot,BleakwindStorm,HeatWave,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Flying]Donphan||HeavyDutyBoots|Sturdy|RapidSpin,KnockOff,Earthquake,StealthRock|Adamant|248,252,,,8,|||||,,,,,Ground]Tera Captain|Bisharp|Eviolite|Defiant|SwordsDance,SuckerPunch,IronHead,ThroatChop|Adamant|252,252,,,4,|||||,,,,,Fairy]Weezing-Galar||RockyHelmet|Levitate|Defog,PainSplit,StrangeSteam,Haze|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison"],
+ ["Iron Bundle||BoosterEnergy|QuarkDrive|HydroPump,IceBeam,FreezeDry,ElectricTerrain|Timid|,,,252,4,252||,0,,,,|||,,,,,Ice]Politoed||DampRock|Drizzle|Haze,Encore,PerishSong,Surf|Calm|248,,,8,252,||,0,,,,|||,,,,,Water]Rotom-Wash||EjectButton|Levitate|VoltSwitch,HydroPump,WillOWisp,Protect|Calm|248,,,8,252,||,0,,,,|||,,,,,Electric]Tera Captain|Archaludon|AssaultVest|Stamina|BodyPress,ElectroShot,FlashCannon,Earthquake|Sassy|,4,,200,252,|||||,,,,,Steel]Clodsire||BlackSludge|Unaware|Earthquake,Toxic,StealthRock,Recover|Careful|252,4,,,252,|||||,,,,,Poison]Meowscarada||FocusSash|Protean|BrickBreak,FlowerTrick,SuckerPunch,KnockOff|Jolly|,252,,,4,252|||||,,,,,Grass","Ogerpon-Wellspring||WellspringMask|WaterAbsorb|Uturn,LowKick,PowerWhip,Taunt|Adamant|184,252,,,,72|||||,,,,,Water]Tera Captain|Revavroom|AirBalloon|Filter|ShiftGear,Substitute,GunkShot,HighHorsepower|Jolly|80,252,,,,176|||||,,,,,Ground]Great Tusk||CobaBerry|Protosynthesis|SupercellSlam,CloseCombat,HeadlongRush,RapidSpin|Adamant|232,252,,,,24|||||,,,,,Ground]Tera Captain|Eelektross|AssaultVest|Levitate|Uturn,SuperFang,StompingTantrum,KnockOff|Careful|248,,8,,252,|||||,,,,,Electric]Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,CloseCombat,ZenHeadbutt,MightyCleave|Jolly|8,252,,,,248|||||,,,,,Rock]Chi-Yu||ChoiceScarf|BeadsofRuin|Overheat,DarkPulse,FireBlast,Psychic|Modest|,,4,252,,252||,0,,,,|||,,,,,Dark"],
+ ["Sandy Shocks||ExpertBelt|Protosynthesis|VoltSwitch,EarthPower,Thunderbolt,Spikes|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Weavile||ProtectivePads|Pressure|TripleAxel,KnockOff,SwordsDance,IceShard|Jolly|,252,,,4,252|||||,,,,,Dark]Kommo-o||ThroatSpray|Bulletproof|ClangorousSoul,Boomburst,Flamethrower,DrainPunch|Naive|,4,,252,,252|||||,,,,,Normal]Terapagos||HeavyDutyBoots|TeraShift|RapidSpin,TeraStarstorm,Flamethrower,CalmMind|Modest|60,,,252,,196|||||,,,,,Stellar]Tera Captain|Cresselia|Leftovers|Levitate|CalmMind,StoredPower,Moonblast,Moonlight|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Manaphy||RindoBerry|Hydration|TailGlow,IceBeam,Surf,EnergyBall|Timid|68,,,252,4,184||,0,,,,|||,,,,,Water","Hatterene||Leftovers|MagicBounce|CalmMind,Psyshock,GigaDrain,MysticalFire|Bold|252,,4,252,,||,0,,,,|||,,,,,Psychic]Corviknight||Leftovers|Pressure|Roost,Defog,Uturn,Taunt|Careful|248,,,,252,8|||||,,,,,Flying]Iron Boulder||BoosterEnergy|QuarkDrive|MightyCleave,CloseCombat,IronHead,SwordsDance|Jolly|,252,,,184,72|||||,,,,,Rock]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,DragonPulse,TeraBlast,Substitute|Timid|,,,252,96,160||,0,,,,|||,,,,,Fire]Tera Captain|Crocalor|Eviolite|Unaware|Flamethrower,SlackOff,Roar,Yawn|Calm|252,,4,,252,||,0,,,,|||,,,,,Dragon]Gouging Fire||LumBerry|Protosynthesis|DragonDance,IronHead,DragonClaw,FlareBlitz|Jolly|,252,,,48,208|||||,,,,,Fire"],
+ ["Zapdos||HeavyDutyBoots|Static|Discharge,VoltSwitch,Hurricane,Roost|Bold|248,,252,,8,||,0,,,,|||,,,,,Electric]Tera Captain|Latias|ChoiceScarf|Levitate|Thunderbolt,Trick,CalmMind,Recover|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Garchomp||HeavyDutyBoots|RoughSkin|StealthRock,Earthquake,ScaleShot,SwordsDance|Jolly|200,,84,,4,220|||||,,,,,Dragon]Tera Captain|Forretress|HeavyDutyBoots|Sturdy|ThunderWave,Spikes,BodyPress,VoltSwitch|Bold|248,,252,,8,||,0,,,,|||,,,,,Bug]Florges-Blue||HeavyDutyBoots|FlowerVeil|Moonblast,Wish,CalmMind,Synthesis|Calm|252,,224,,32,||,0,,,,|S||,,,,,Fairy]Palafin-Hero||LumBerry|ZerotoHero|JetPunch,Acrobatics,Rest,BulkUp|Adamant|240,76,112,,28,52|||||,,,,,Water","Alomomola||AssaultVest|Regenerator|MirrorCoat,FlipTurn,IceBeam,AlluringVoice|Calm|252,,4,,252,|||||,,,,,Water]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,Encore,Synthesis,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|SludgeBomb,NastyPlot,Taunt,BleakwindStorm|Timid|88,,,252,,168||,0,,,,|||,,,,,Flying]Glimmora||ChoiceScarf|ToxicDebris|Memento,PowerGem,SludgeWave,DazzlingGleam|Modest|152,,,252,,104||,0,,,,|||,,,,,Rock]Urshifu||ProtectivePads|UnseenFist|Trailblaze,SwordsDance,WickedBlow,IronHead|Adamant|240,252,,,,16|||||,,,,,Fighting]Heatran||ShucaBerry|FlameBody|StealthRock,Taunt,MagmaStorm,Protect|Calm|252,,,4,252,||,0,,,,|||,,,,,Fire"],
+ ["Tera Captain|GreatTusk|LumBerry|Protosynthesis|HeadlongRush,RapidSpin,CloseCombat,TemperFlare|Adamant|,252,164,,,92|||||,,,,,Fighting]Manaphy||CovertCloak|Hydration|Surf,EnergyBall,TailGlow,SkillSwap|Modest|252,,148,108,,||,0,,,,|||,,,,,Water]Rotom-Heat||MirrorHerb|Levitate|Overheat,PainSplit,VoltSwitch,NastyPlot|Calm|252,,,,156,100||,0,,,,|||,,,,,Electric]Rillaboom||MiracleSeed|GrassySurge|WoodHammer,LeechSeed,Taunt,Substitute|Impish|148,,252,,,108|||||,,,,,Grass]Klefki||HeatRock|Prankster|SunnyDay,Spikes,LightScreen,Reflect|Calm|252,,4,,252,||,0,,,,|||,,,,,Steel]Roaring Moon||ChoiceScarf|Protosynthesis|KnockOff,StoneEdge,Uturn,Outrage|Adamant|212,252,,,,44|||||,,,,,Dragon","Palafin||ChoiceBand|ZerotoHero|CloseCombat,FlipTurn,WaveCrash,JetPunch|Jolly|,252,,,4,252|||||,,,,,Water]Corviknight||Leftovers|Pressure|IronDefense,BodyPress,Uturn,Roost|Impish|248,,252,,,8|||||,,,,,Flying]Tera Captain|Garganacl|Leftovers|PurifyingSalt|BodyPress,IronDefense,Recover,SaltCure|Careful|252,4,,,252,|||||,,,,,Ghost]Torterra||LoadedDice|Overgrow|BulletSeed,RockBlast,ShellSmash,HeadlongRush|Jolly|32,252,,,,224|||||,,,,,Grass]Tera Captain|Skeledirge|Leftovers|Unaware|TorchSong,SlackOff,TeraBlast,ShadowBall|Calm|248,,,84,176,||,0,,,,|||,,,,,Fairy]Gardevoir||ChoiceScarf|Synchronize|HealingWish,Moonblast,MysticalFire,Memento|Timid|,,,252,4,252||,0,,,,|||,,,,,Psychic"],
+ ["Great Tusk||Leftovers|Protosynthesis|StealthRock,KnockOff,Earthquake,TemperFlare|Jolly|252,,8,,,248|||||,,,,,Ground]Moltres||HeavyDutyBoots|FlameBody|Roar,Hurricane,Uturn,Roost|Calm|252,,,,248,8|||||,,,,,Fire]Tera Captain|IronCrown|MirrorHerb|QuarkDrive|Agility,FocusBlast,TachyonCutter,Psyshock|Modest|88,,,252,,168||,20,,,,|||,Fighting,,,,Dark]Indeedee||ChoiceScarf|PsychicSurge|ExpandingForce,HyperVoice,Trick,HealingWish|Timid|32,,,252,,224||,0,,,,|||,,,,,Psychic]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|ScaryFace,IvyCudgel,HornLeech,Encore|Jolly|252,,,,152,104|||||,,,,,Water]Tera Captain|Jolteon|Leftovers|VoltAbsorb|ThunderWave,Thunderbolt,TeraBlast,VoltSwitch|Timid|252,,100,12,,144||,0,,,,|||,,,,,Ground","Iron Valiant||LifeOrb|QuarkDrive|Thunderbolt,Moonblast,Psychic,DestinyBond|Modest|16,,32,252,,208||,0,,,,|S||,,,,,Fairy]Gouging Fire||BoosterEnergy|Protosynthesis|DragonDance,StoneEdge,FlareBlitz,Earthquake|Adamant|72,252,,,,184|||||,,,,,Fire]Rotom-Mow||Leftovers|Levitate|WillOWisp,LeafStorm,VoltSwitch,Thunderbolt|Bold|252,,252,4,,||,0,,,,|||,,,,,Electric]Excadrill||SafetyGoggles|MoldBreaker|SwordsDance,RapidSpin,RockSlide,Earthquake|Jolly|,252,,,4,252|||S||,,,,,Ground]Tera Captain|Espathra|Leftovers|SpeedBoost|CalmMind,StoredPower,Substitute,ShadowBall|Bold|8,,252,248,,||,0,,,,|||,,,,,Steel]Tera Captain|Primarina|AssaultVest|Torrent|Moonblast,Surf,FlipTurn,ShadowBall|Relaxed|252,,252,,4,|||||,,,,,Flying"],
+ ["Ogerpon-Cornerstone||CornerstoneMask|Sturdy|HornLeech,Superpower,IvyCudgel,Spikes|Adamant|80,252,,,,176|||||,,,,,Rock]Slowking||HeavyDutyBoots|Regenerator|Scald,ChillyReception,FocusBlast,FutureSight|Calm|252,,4,,252,||,0,,,,0|||,,,,,Stellar]Cyclizar||SitrusBerry|Regenerator|ShedTail,RapidSpin,KnockOff,Taunt|Jolly|252,,,,48,208|||||,,,,,Stellar]Tera Captain|RagingBolt|EjectPack|Protosynthesis|CalmMind,Thunderclap,Thunderbolt,DracoMeteor|Modest|88,,252,168,,||,20,,,,|||,,,,,Steel]Ribombee||ExpertBelt|ShieldDust|Uturn,StickyWeb,BugBuzz,PsychicNoise|Timid|72,,,252,,184|||S||,,,,,Stellar]Tera Captain|Flygon|LifeOrb|Levitate|DragonDance,TeraBlast,Earthquake,Superpower|Adamant|84,252,,,,172|||||,,,,,Bug","Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,PlayRough,HornLeech|Jolly|,252,,,4,252|||||,,,,,Water]Tsareena||ExpertBelt|LeafGuard|TripleAxel,RapidSpin,Synthesis,HighJumpKick|Jolly|200,,176,,,132|||||,,,,,Grass]Ting-Lu||Leftovers|VesselofRuin|Spikes,Earthquake,Ruination,Whirlwind|Sassy|252,4,,,252,|||||,,,,,Dark]Fezandipiti||BlackSludge|ToxicChain|Uturn,PlayRough,Toxic,Roost|Careful|252,4,120,,132,|||||,,,,,Poison]Slowbro||RindoBerry|Regenerator|Scald,SlackOff,PsychicNoise,IceBeam|Bold|252,,252,4,,||,0,,,,|S||,,,,,Water]Heatran||AirBalloon|FlashFire|MagmaStorm,WillOWisp,StealthRock,EarthPower|Bold|252,,204,,52,||,0,,,,|||,,,,,Fire"],
+ ["Iron Jugulis||ChoiceScarf|QuarkDrive|Uturn,DarkPulse,FlashCannon,Hurricane|Modest|,,,252,4,252|||||,,,,,Dark]Tera Captain|Latias|ColburBerry|Levitate|MistBall,Recover,Reflect,ThunderWave|Timid|252,,208,,,48||,0,,,,|||,,,,,Steel]Mimikyu||RedCard|Disguise|SwordsDance,ShadowSneak,DrainPunch,DestinyBond|Jolly|,252,40,,,216|||||,,,,,Ghost]Tera Captain|Torterra|LoadedDice|ShellArmor|ShellSmash,TeraBlast,Earthquake,BulletSeed|Adamant|,252,,,96,160|||||,,,,,Electric]Palafin||RindoBerry|ZerotoHero|BulkUp,JetPunch,Acrobatics,DrainPunch|Careful|252,56,,,200,|||||,,,,,Water]Empoleon||RockyHelmet|Competitive|AirSlash,Roost,FlipTurn,Yawn|Calm|252,,,4,252,|||||,,,,,Water","Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,HornLeech,Encore|Jolly|,252,,,4,252|||||,,,,,Water]Tornadus-Therian||ChoiceScarf|Regenerator|IcyWind,BleakwindStorm,FoulPlay,Uturn|Timid|252,,,84,4,168|||||,,,,,Flying]Gholdengo||ShucaBerry|GoodasGold|NastyPlot,ShadowBall,Thunderbolt,Recover|Calm|252,,88,,160,8||,0,,,,|||,,,,,Steel]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,MorningSun,DragonClaw,HeatCrash|Jolly|,252,,,40,216|||||,,,,,Fire]Donphan||CustapBerry|Sturdy|Earthquake,RapidSpin,IceShard,StealthRock|Adamant|248,252,,,8,|||||,,,,,Ground]Tera Captain|Comfey|LaggingTail|Triage|CalmMind,DrainingKiss,GigaDrain,Trick|Modest|252,,4,252,,||,0,,,,|||,,,,,Dark"],
+ ["Garchomp||RockyHelmet|RoughSkin|StompingTantrum,PoisonJab,StealthRock,DragonTail|Jolly|252,16,,,,240|||||,,,,,Dragon]Meowscarada||ChoiceScarf|Protean|FlowerTrick,AerialAce,BrickBreak,Uturn|Jolly|24,252,,,,232|||||,,,,,Grass]Gholdengo||SitrusBerry|GoodasGold|ShadowBall,Recover,ThunderWave,Trick|Bold|252,,216,40,,||,0,,,,|||,,,,,Steel]Tentacruel||SitrusBerry|LiquidOoze|RapidSpin,Toxic,KnockOff,FlipTurn|Careful|252,4,,,252,||,,,,,0|||,,,,,Water]Florges||SitrusBerry|FlowerVeil|Moonblast,EnergyBall,Wish,Trick|Calm|248,,,8,252,||,0,,,,|||,,,,,Fairy]Tera Captain|RagingBolt|ChoiceSpecs|Protosynthesis|Thunderclap,TeraBlast,DragonPulse,VoltSwitch|Modest|188,,252,68,,||,20,,,,|||,,,,,Poison","Tera Captain|Rillaboom|Leftovers|GrassySurge|SwordsDance,Trailblaze,HighHorsepower,TeraBlast|Adamant|64,252,,,,192|||||,,,,,Poison]Weezing||RockyHelmet|Levitate|SludgeBomb,WillOWisp,PainSplit,Toxic|Bold|248,,252,,,||,0,,,,|||,,,,,Poison]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,Flamethrower,DarkPulse,FireBlast|Modest|16,,,252,4,236||,0,,,,|||,,,,,Dark]Tera Captain|Primarina|AssaultVest|Torrent|Moonblast,Surf,FlipTurn,IceBeam|Calm|248,,,124,136,|||||,,,,,Ground]Sneasler||ChoiceScarf|PoisonTouch|DireClaw,CloseCombat,Uturn,Switcheroo|Adamant|24,252,,,,232|||||,,,,,Fighting]Iron Treads||HeavyDutyBoots|QuarkDrive|Earthquake,RapidSpin,StealthRock,VoltSwitch|Careful|252,4,,,252,||,,16,,,|||,,,,,Ground"],
+ ["Iron Valiant||ExpertBelt|QuarkDrive|Encore,Moonblast,CloseCombat,FirePunch|Hasty|232,64,,4,,208|||||,,,,,Fairy]Chi-Yu||AssaultVest|BeadsofRuin|Flamethrower,Overheat,DarkPulse,Ruination|Timid|,,,252,48,208||,0,,,,|||,,,,,Dark]Tera Captain|Serperior|ChoiceScarf|Contrary|LeafStorm,TeraBlast,Glare,DragonPulse|Timid|,,,252,24,232||,0,,,,|||,,,,,Stellar]Tera Captain|SinistchaMasterpiece|SitrusBerry|Heatproof|ShadowBall,LeafStorm,StrengthSap,Curse|Calm|252,,,4,252,||,0,,,,|||,,,,,Grass]Rotom-Wash||Leftovers|Levitate|HydroPump,VoltSwitch,ThunderWave,Hex|Calm|252,,,100,156,||,0,,,,|||,,,,,Electric]Forretress||CustapBerry|Sturdy|RapidSpin,StealthRock,Explosion,GyroBall|Brave|252,252,,,4,||,,,,,0|||,,,,,Bug","Greninja||ChoiceSpecs|Protean|Uturn,Surf,DarkPulse,IceBeam|Timid|48,,,252,,208|||||,,,,,Water]Tera Captain|Latias|ChoiceScarf|Levitate|HealingWish,AirSlash,Psyshock,DracoMeteor|Timid|80,,,252,,176||,0,,,,|||,,,,,Flying]Tinkaton||Leftovers|MoldBreaker|StealthRock,PlayRough,ThunderWave,GigatonHammer|Careful|252,,116,,140,|||S||,,,,,Fairy]Tera Captain|OricorioPomPom|HeavyDutyBoots|Dancer|QuiverDance,Taunt,RevelationDance,Roost|Modest|168,,,252,,88||,0,,,,|||,,,,,Flying]Heatran||Leftovers|FlashFire|MagmaStorm,Taunt,Protect,EarthPower|Calm|252,,,,244,12||,0,,,,|||,,,,,Fire]Amoonguss||RedCard|Regenerator|ClearSmog,SludgeBomb,GigaDrain,Toxic|Calm|252,,,,212,44||,0,,,,|||,,,,,Grass"],
+ ["Palafin-Hero||Leftovers|ZerotoHero|IcePunch,BulkUp,ThroatChop,JetPunch|Impish|72,,240,,,196|||||,,,,,Ice]Iron Treads||AssaultVest|QuarkDrive|RapidSpin,IronHead,Earthquake,SteelRoller|Careful|36,252,,,220,|||||,,,,,Ice]Tera Captain|RagingBolt|PowerHerb|Protosynthesis|Thunderbolt,Thunderclap,DracoMeteor,SolarBeam|Modest|48,,,240,,220||,20,,,,|||,,,,,Fairy]Roaring Moon||ChoiceBand|Protosynthesis|Uturn,KnockOff,Outrage,FireFang|Jolly|,252,,,72,184|||||,,,,,Ice]Mesprit||ChoiceScarf|Levitate|Trick,Uturn,HealingWish,StealthRock|Adamant|4,252,,,,240|||||,,,,,Ice]Weezing||CovertCloak|Levitate|PainSplit,ToxicSpikes,GyroBall,WillOWisp|Relaxed|252,240,16,,,||,,,,,0|||,,,,,Poison","Tera Captain|Latias|GrassySeed|Levitate|CalmMind,Thunderbolt,Surf,DrainingKiss|Bold|184,,252,,,72||,0,,,,|||,,,,,Electric]Sneasler||FocusSash|PoisonTouch|DireClaw,Taunt,Uturn,CloseCombat|Jolly|,252,,,4,252|||||,,,,,Fighting]Thwackey||Eviolite|GrassySurge|Uturn,LeechSeed,GrassyGlide,KnockOff|Impish|248,,180,,68,12|||||,,,,,Grass]Darkrai||Leftovers|BadDreams|Snarl,CalmMind,IceBeam,DarkPulse|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Swampert||Leftovers|Torrent|FlipTurn,KnockOff,HighHorsepower,ChillingWater|Impish|136,,252,,120,|||||,,,,,Water]Tera Captain|Diancie|Leftovers|ClearBody|BodyPress,DiamondStorm,StealthRock,Psychic|Sassy|248,,8,,252,|||||,,,,,Steel"],
+ ["Palafin||SitrusBerry|ZerotoHero|JetPunch,Acrobatics,Taunt,BulkUp|Adamant|8,252,,,8,240|||||,,,,,Water]Latios||ChoiceScarf|Levitate|DracoMeteor,LusterPurge,ShadowBall,FlipTurn|Modest|72,,,252,,184|||||,,,,,Dragon]Heatran||Leftovers|FlashFire|MagmaStorm,EarthPower,StealthRock,Protect|Calm|252,,,,56,200||,0,,,,|||,,,,,Fire]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,DragonPulse,Glare|Timid|96,,,252,,160||,0,,,,|||,,,,,Fire]Tera Captain|Umbreon|Leftovers|Synchronize|FoulPlay,ThunderWave,Wish,Protect|Calm|252,,4,,252,||,0,,,,|||,,,,,Ghost]Donphan||AssaultVest|Sturdy|Earthquake,KnockOff,IceSpinner,RapidSpin|Adamant|160,252,,,,96|||||,,,,,Ground","Chi-Yu||ChoiceScarf|BeadsofRuin|DarkPulse,Overheat,Psychic,Memento|Modest|80,,4,252,,172||,0,,,,|||,,,,,Dark]Tornadus-Therian||HeavyDutyBoots|Regenerator|NastyPlot,BleakwindStorm,FocusBlast,Substitute|Timid|68,,,248,,192||,0,,,,|||,,,,,Flying]Metagross||AssaultVest|ClearBody|MeteorMash,Earthquake,BulletPunch,Explosion|Adamant|248,228,,,32,|||||,,,,,Steel]Tera Captain|Gardevoir|AssaultVest|Trace|Moonblast,FocusBlast,ChargeBeam,DrainingKiss|Modest|24,,,252,,232||,0,,,,|||,,,,,Psychic]Sandy Shocks||SitrusBerry|Protosynthesis|StealthRock,EarthPower,ThunderWave,VoltSwitch|Modest|248,,,12,184,64||,0,,,,|||,,,,,Electric]Meganium||RockyHelmet|Overgrow|Synthesis,GigaDrain,KnockOff,LightScreen|Bold|248,,252,8,,|||||,,,,,Grass"],
+ ["Tera Captain|Annihilape|Leftovers|Defiant|BulkUp,Taunt,DrainPunch,RageFist|Jolly|252,,,,4,252|||||,,,,,Grass]Roaring Moon||BoosterEnergy|Protosynthesis|KnockOff,IronHead,Uturn,BrickBreak|Jolly|72,252,,,,184|||||,,,,,Dragon]Iron Treads||HeavyDutyBoots|QuarkDrive|KnockOff,Earthquake,VoltSwitch,RapidSpin|Careful|20,,,,252,236|||||,,,,,Ground]Tera Captain|RotomHeat|HeavyDutyBoots|Levitate|WillOWisp,PainSplit,VoltSwitch,Hex|Bold|248,,252,,8,||,0,,,,|||,,,,,Dragon]Slowking-Galar||BlackSludge|Regenerator|NastyPlot,Psychic,FocusBlast,TrickRoom|Quiet|252,,,252,4,||,0,,,,0|||,,,,,Poison]Primarina||ChoiceScarf|LiquidVoice|FlipTurn,PsychicNoise,HydroPump,Moonblast|Timid|28,,,252,,228|||||,,,,,Water","Skarmory||RockyHelmet|Sturdy|BodyPress,IronDefense,Spikes,Roost|Bold|240,,252,,,16||,0,,,,|||,,,,,Stellar]Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,WaveCrash,DrainPunch,ZenHeadbutt|Adamant|240,252,,,,16|||||,,,,,Stellar]Tera Captain|Annihilape|Leftovers|Defiant|RageFist,DrainPunch,BulkUp,Taunt|Jolly|248,,8,,,252|||||,,,,,Water]Cyclizar||LifeOrb|Regenerator|KnockOff,DragonClaw,PowerWhip,ShiftGear|Jolly|112,252,8,,,136|||||,,,,,Stellar]Pecharunt||AirBalloon|PoisonPuppeteer|ShadowBall,MalignantChain,NastyPlot,Recover|Bold|248,,16,24,200,20||,0,,,,|||,,,,,Stellar]Tera Captain|Mudsdale|Leftovers|Stamina|Earthquake,RockSlide,CloseCombat,StealthRock|Adamant|248,252,,,,8|||||,,,,,Water"],
+ ["Garchomp||RoseliBerry|RoughSkin|SwordsDance,ScaleShot,Earthquake,StoneEdge|Jolly|,100,,,156,252|||||,,,,,Dragon]Urshifu||PunchingGlove|UnseenFist|WickedBlow,SuckerPunch,CloseCombat,ThunderPunch|Jolly|,252,,,4,252|||||,,,,,Fighting]Rotom-Wash||Leftovers|Levitate|VoltSwitch,HydroPump,WillOWisp,PainSplit|Bold|252,,164,8,84,||,0,,,,|||,,,,,Electric]Sylveon||Leftovers|Pixilate|CalmMind,Psyshock,Wish,HyperVoice|Bold|252,,232,,24,||,0,,,,|||,,,,,Fairy]Tsareena||HeavyDutyBoots|QueenlyMajesty|RapidSpin,PowerWhip,TripleAxel,KnockOff|Adamant|252,252,,,4,|||||,,,,,Grass]Tera Captain|Revavroom|LifeOrb|Filter|ShiftGear,TeraBlast,IronHead,GunkShot|Naughty|4,252,,,,252|||||,,,,,Electric","Palafin||ThroatSpray|ZerotoHero|JetPunch,Boomburst,DrainingKiss,IceBeam|Timid|24,,,252,,232|||||,,,,,Water]Volcarona||LumBerry|FlameBody|Screech,FireSpin,FlareBlitz,MorningSun|Impish|248,,240,,,20|||S||,,,,,Bug]Tyranitar||ChopleBerry|SandStream|StealthRock,HeavySlam,KnockOff,IceBeam|Sassy|252,4,,,252,|||||,,,,,Rock]Tera Captain|Chesnaught|RockyHelmet|Overgrow|BodyPress,LeechSeed,Synthesis,Spikes|Impish|252,4,252,,,||,0,,,,|||,,,,,Fairy]Tera Captain|Gyarados|LumBerry|Moxie|DragonDance,Waterfall,TeraBlast,IceFang|Adamant|,252,44,,,212|||S||,,,,,Grass]Espeon||ChoiceScarf|Synchronize|AlluringVoice,Trick,Wish,Psychic|Timid|,,64,252,,192||,0,,,,|S||,,,,,Ghost"],
+ ["Overqwil||BlackSludge|Intimidate|Spikes,BarbBarrage,Haze,Crunch|Lax|248,8,252,,,|||||,,,,,Dark]Enamorus||SitrusBerry|CuteCharm|IronDefense,MysticalFire,Taunt,Moonblast|Timid|,,32,252,,224||,0,,,,|||,,,,,Fairy]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|GrassyGlide,Uturn,GrassyTerrain,IvyCudgel|Jolly|56,252,8,,,192|||||,,,,,Water]Ursaluna-Bloodmoon||HeavyDutyBoots|MindsEye|BloodMoon,CalmMind,VacuumWave,Moonlight|Bold|184,,248,76,,||,0,,,,|||,,,,,Ground]Emboar||CustapBerry|Reckless|Endure,FlareBlitz,WildCharge,SuckerPunch|Adamant|208,252,48,,,|||||,,,,,Fire]Tera Captain|Hoopa|HeavyDutyBoots|Magician|FocusBlast,Psychic,EnergyBall,ThunderWave|Relaxed|248,,252,8,,||,0,,,,|||,,,,,Grass","Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,WoodHammer,Synthesis,Trailblaze|Jolly|,252,36,,,220|||||,,,,,Water]Scizor||AssaultVest|Technician|Uturn,BulletPunch,KnockOff,CloseCombat|Adamant|,252,,,204,52|||||,,,,,Bug]Zapdos||LightClay|Static|LightScreen,Roost,Discharge,Hurricane|Modest|,,,184,216,108||,0,,,,|||,,,,,Electric]Talonflame||ChoiceBand|GaleWings|BraveBird,TemperFlare,Roost,Uturn|Adamant|,252,,,4,252|||||,,,,,Fire]Overqwil||ShucaBerry|PoisonPoint|PoisonJab,Crunch,Taunt,Spikes|Jolly|,60,,,196,252|||||,,,,,Dark]Tera Captain|Hariyama|AssaultVest|ThickFat|DrainPunch,HeavySlam,Earthquake,ThunderPunch|Adamant|,52,184,,252,20|||||,,,,,Fairy"],
+ ["Darkrai||ExpertBelt|BadDreams|DarkPulse,IceBeam,Psyshock,SludgeBomb|Timid|16,,12,240,,240||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,Encore,Uturn|Jolly|152,168,12,,,176|||||,,,,,Water]Klefki||RockyHelmet|Prankster|FoulPlay,Spikes,MagnetRise,ThunderWave|Bold|248,,208,,52,||,0,,,,|||,,,,,Steel]Landorus-Therian||LumBerry|Intimidate|StealthRock,Earthquake,Gravity,Uturn|Adamant|240,152,4,,64,48|||||,,,,,Ground]Tera Captain|Eelektross|AssaultVest|Levitate|Thunderbolt,TeraBlast,KnockOff,DragonTail|Brave|252,4,,,252,|||||,,,,,Steel]Arbok||RockyHelmet|Intimidate|GunkShot,Earthquake,FireFang,Glare|Adamant|248,96,156,,,8|||||,,,,,Poison","Palafin||ChoiceScarf|ZerotoHero|Boomburst,Surf,SleepTalk,CloseCombat|Naive|,,40,252,,216|||||,,,,,Water]Tera Captain|Latias|Leftovers|Levitate|CalmMind,Thunderbolt,Psychic,Recover|Timid|248,,,124,,136||,0,,,,|||,,,,,Electric]Meowscarada||HeavyDutyBoots|Protean|KnockOff,FlowerTrick,LowKick,Uturn|Jolly|104,252,,,,152|||||,,,,,Grass]Scizor||Leftovers|LightMetal|SwordsDance,BulletPunch,Uturn,AerialAce|Careful|248,64,,,196,|||||,,,,,Bug]Tera Captain|Comfey|BigRoot|Triage|CalmMind,DrainingKiss,GigaDrain,TeraBlast|Modest|252,,,252,4,||,0,,,,|||,,,,,Ground]Typhlosion-Hisui||HeavyDutyBoots|Frisk|Eruption,InfernalParade,Flamethrower,Roar|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire"],
+ ["Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,WaveCrash,CloseCombat,FlipTurn|Adamant|,252,200,,36,20|||||,,,,,Water]Garchomp||LifeOrb|RoughSkin|Earthquake,StealthRock,FireBlast,ScaleShot|Naive|,176,4,76,,252|||||,,,,,Dragon]Gholdengo||ShucaBerry|GoodasGold|NastyPlot,MakeItRain,ShadowBall,Recover|Modest|180,,252,68,,8||,0,,,,|||,,,,,Steel]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,HeatWave,IcyWind,Uturn|Timid|112,,,176,4,216|||||,,,,,Flying]Diancie||PowerHerb|ClearBody|TrickRoom,MeteorBeam,Moonblast,PowerGem|Quiet|248,,,252,8,||,0,,,,0|||,,,,,Rock]Tera Captain|Gallade|LumBerry|Sharpness|SacredSword,PsychoCut,Agility,SwordsDance|Jolly|128,252,,,,128|||||,,,,,Psychic","Iron Valiant||BoosterEnergy|QuarkDrive|FocusBlast,Moonblast,Psychic,CalmMind|Timid|84,,,252,,172||,0,,,,|||,,,,,Fairy]Arbok||ChoiceBand|Intimidate|GunkShot,Earthquake,IceFang,Switcheroo|Adamant|72,252,4,,,180|||||,,,,,Poison]Tera Captain|DudunsparceThreeSegment|Leftovers|SereneGrace|Boomburst,EarthPower,CalmMind,Roost|Calm|252,,88,,168,||,0,,,,|||,,,,,Water]Tera Captain|Serperior|ChoiceScarf|Contrary|LeafStorm,TeraBlast,KnockOff,Glare|Timid|56,,4,252,,196|||||,,,,,Stellar]Pawniard||Eviolite|Defiant|IronHead,SuckerPunch,SwordsDance,Substitute|Adamant|152,252,,,4,100|||||,,,,,Dark]Garchomp||ChoiceScarf|RoughSkin|Outrage,Earthquake,IronHead,StealthRock|Jolly|16,252,,,,240|||||,,,,,Dragon"],
+ ["Darkrai||ChoiceScarf|BadDreams|SludgeBomb,DarkPulse,IceBeam,FocusBlast|Timid|,,,252,,232||,0,,,,|||,,,,,Dark]Tera Captain|Diancie|PasshoBerry|ClearBody|Moonblast,Spikes,StealthRock,PowerGem|Calm|248,,,8,252,||,0,,,,|||,,,,,Water]Tera Captain|Annihilape|Leftovers|Defiant|Encore,RageFist,CloseCombat,IcePunch|Jolly|32,252,,,,224|||||,,,,,Ghost]Slowking-Galar||ShucaBerry|Regenerator|IceBeam,ChillyReception,SludgeWave,Flamethrower|Relaxed|248,,100,160,,||,0,,,,0|||,,,,,Poison]Gliscor||ToxicOrb|PoisonHeal|SwordsDance,Agility,Facade,Earthquake|Jolly|,252,,,,252|||||,,,,,Ground]Blastoise||AssaultVest|Torrent|RapidSpin,AuraSphere,Surf,Earthquake|Sassy|248,,,8,252,|||||,,,,,Water","Iron Valiant||LifeOrb|QuarkDrive|Moonblast,ShadowBall,Thunderbolt,VacuumWave|Timid|40,,,252,,216||,0,,,,|||,,,,,Fairy]Tera Captain|GreninjaBond|LifeOrb|BattleBond|SwordsDance,Liquidation,UpperHand,GunkShot|Jolly|88,252,,,,168|||||,,,,,Water]Gliscor||ToxicOrb|PoisonHeal|Spikes,Taunt,Earthquake,Protect|Jolly|244,,128,,,136|||||,,,,,Ground]Slowking-Galar||ColburBerry|Regenerator|ThunderWave,SludgeBomb,Flamethrower,PsychicNoise|Modest|252,,72,84,100,||,0,,,,|||,,,,,Poison]Tera Captain|Appletun|SitrusBerry|Ripen|DragonTail,AppleAcid,DragonPulse,Recover|Sassy|252,,164,,92,|||||,,,,,Fairy]Rotom-Wash||StickyBarb|Levitate|Trick,WillOWisp,VoltSwitch,HydroPump|Bold|252,,48,,,208||,0,,,,|S||,,,,,Electric"],
+ ["Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,ShadowBall,FocusBlast,VacuumWave|Modest|124,,,252,,132||,0,,,,|||,,,,,Fairy]Iron Treads||ShucaBerry|QuarkDrive|StealthRock,RapidSpin,Earthquake,IceSpinner||44,252,,,,212|||||,,,,,Ground]Tera Captain|Zapdos|RockyHelmet|Pressure|Hurricane,ThunderWave,Roost,VoltSwitch|Timid|252,,104,,,152||,0,,,,|||,,,,,Ghost]Tera Captain|Suicune|Leftovers|Pressure|CalmMind,Scald,Substitute,IceBeam|Bold|252,,80,,,176||,0,,,,|||,,,,,Poison]Dragalge||RockyHelmet|Adaptability|DracoMeteor,SludgeWave,FlipTurn,Toxic|Relaxed|252,,252,4,,|||||,,,,,Poison]Sinistcha||Leftovers|Heatproof|CalmMind,MatchaGotcha,ShadowBall,StrengthSap|Bold|252,,160,,96,||,0,,,,|||,,,,,Grass","Great Tusk||ProtectivePads|Protosynthesis|StealthRock,HeadlongRush,CloseCombat,IceSpinner|Adamant|16,252,,,,240|||||,,,,,Ground]Tera Captain|RagingBolt|Leftovers|Protosynthesis|CalmMind,DragonPulse,TeraBlast,Thunderclap|Modest|252,,136,120,,||,20,,,,|||,,,,,Fire]Sneasler||ProtectivePads|PoisonTouch|CloseCombat,DireClaw,Taunt,Uturn|Jolly|32,252,,,,224|||||,,,,,Fighting]Rillaboom||AssaultVest|GrassySurge|GrassyGlide,HighHorsepower,KnockOff,Endeavor|Adamant|252,252,,,4,|||||,,,,,Grass]Empoleon||Leftovers|Competitive|Surf,IceBeam,Roar,Roost|Calm|252,,,4,252,||,0,,,,|||,,,,,Water]Tera Captain|Mesprit|ChoiceScarf|Levitate|IceBeam,ThunderWave,Trick,HealingWish|Timid|252,,,,56,200||,0,,,,|||,,,,,Electric"],
+ ["Gliscor||ToxicOrb|PoisonHeal|KnockOff,Uturn,Earthquake,Spikes|Adamant|252,184,,,,72|||||,,,,,Ground]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Thunderclap,CalmMind,DragonPulse,Thunderbolt|Modest|252,,,252,4,||,20,,,,|||,,,,,Electric]Coalossal||HeavyDutyBoots|FlameBody|RapidSpin,Overheat,StoneEdge,StealthRock|Sassy|76,,,4,252,|||||,,,,,Rock]Gholdengo||AirBalloon|GoodasGold|MakeItRain,ShadowBall,Recover,Thunderbolt|Modest|252,,,252,4,||,0,,,,|||,,,,,Steel]Scream Tail||Leftovers|Protosynthesis|Encore,DazzlingGleam,Wish,ThunderWave|Timid|252,,,4,,252||,0,,,,|||,,,,,Fairy]Tera Captain|Cloyster|FocusSash|SkillLink|IceShard,IcicleSpear,RockBlast,ShellSmash|Adamant|80,252,,,,176|||||,,,,,Ice","Blastoise||WhiteHerb|Torrent|ShellSmash,Surf,IceBeam,FlashCannon|Modest|60,,4,252,4,188||,0,,,,|||,,,,,Water]Garchomp||MentalHerb|RoughSkin|SwordsDance,Earthquake,ScaleShot,IronHead|Jolly|40,252,,,,216|||||,,,,,Dragon]Granbull||RockyHelmet|Intimidate|PlayRough,Earthquake,SuperFang,Roar|Impish|252,,216,,40,|||||,,,,,Fairy]Uxie||RedCard|Levitate|StealthRock,KnockOff,Encore,Uturn|Impish|252,,252,,4,|||||,,,,,Psychic]Darkrai||ChopleBerry|BadDreams|SludgeBomb,DarkPulse,IceBeam,NastyPlot|Timid|80,,,252,,176||,0,,,,|||,,,,,Dark]Tera Captain|Revavroom|MirrorHerb|Filter|ShiftGear,HighHorsepower,GunkShot,IronHead|Adamant|72,252,,,,184|||||,,,,,Ground"],
+ ["Tera Captain|Excadrill|LumBerry|SandRush|Earthquake,IronHead,ThroatChop,SwordsDance|Hasty|,252,,4,,192|||||,,,,,Ground]Tyranitar||SmoothRock|SandStream|StealthRock,Avalanche,KnockOff,HeavySlam|Careful|192,,64,,252,|||||,,,,,Rock]Palafin-Hero||ChoiceBand|ZerotoHero|FlipTurn,JetPunch,IcePunch,WaveCrash|Adamant|16,252,,,,240|||||,,,,,Water]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonDance,HeatCrash,DragonClaw,Earthquake|Adamant|112,252,4,,4,136|||||,,,,,Fire]Tera Captain|RotomMow|Leftovers|Levitate|WillOWisp,VoltSwitch,LeafStorm,PainSplit|Bold|,,252,12,156,88||,0,,,,|||,,,,,Electric]Cyclizar||HeavyDutyBoots|Regenerator|ShedTail,RapidSpin,Overheat,DracoMeteor|Timid|248,,,,8,252|||||,,,,,Dragon","Garchomp||YacheBerry|RoughSkin|StealthRock,Earthquake,PoisonJab,Spikes|Jolly|252,88,,,,168|||||,,,,,Dragon]Tera Captain|GreninjaBond|LumBerry|BattleBond|TeraBlast,Trailblaze,SwordsDance,Liquidation|Jolly|,252,8,,,248|||||,,,,,Dragon]Scream Tail||BoosterEnergy|Protosynthesis|Wish,Reflect,Encore,DazzlingGleam|Timid|248,,164,,,96||,0,,,,|||,,,,,Fairy]Terapagos||Leftovers|TeraShift|TeraStarstorm,AuraSphere,CalmMind,DarkPulse|Modest|72,,4,252,,180||,15,,,,|||,,,,,Stellar]Tera Captain|IronThorns|LumBerry|QuarkDrive|DragonDance,RockSlide,Earthquake,WildCharge|Jolly|56,252,4,,,196|||||,,,,,Grass]Drifblim||RedCard|Unburden|WillOWisp,StrengthSap,Memento,AirSlash|Bold|248,,252,,8,||,0,,,,|||,,,,,Ghost"],
+ ["Tera Captain|Heatran|ChoiceScarf|FlashFire|MagmaStorm,FlashCannon,EarthPower,TeraBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Bug]Scizor||HeavyDutyBoots|Technician|BulletPunch,Defog,Uturn,CloseCombat|Adamant|248,252,,,8,|||||,,,,,Bug]Rotom-Wash||MirrorHerb|Levitate|ThunderWave,PainSplit,HydroPump,VoltSwitch|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Galvantula||FocusSash|CompoundEyes|StickyWeb,VoltSwitch,BugBuzz,Thunder|Timid|,,,252,4,252||,0,,,,|||,,,,,Bug]Tera Captain|Kilowattrel|SitrusBerry|WindPower|Hurricane,Uturn,Substitute,Thunderbolt|Timid|,,,252,4,252|||||,,,,,Ghost]Azumarill||Leftovers|SapSipper|Whirlpool,PerishSong,ChillingWater,Encore|Bold|248,,252,,8,||,0,,,,|||,,,,,Water","Necrozma||WeaknessPolicy|PrismArmor|DragonDance,PhotonGeyser,HeatWave,EarthPower|Modest|104,,,252,,152|||||,,,,,Psychic]Infernape||PasshoBerry|Blaze|GrassKnot,GunkShot,FlameCharge,CloseCombat|Naive|168,252,,,,88|||||,,,,,Fire]Tera Captain|Torterra|HeavyDutyBoots|ShellArmor|ShellSmash,Earthquake,TeraBlast,SeedBomb|Jolly|148,252,,,,108|||||,,,,,Fire]Tera Captain|Toxtricity|AssaultVest|PunkRock|Boomburst,VoltSwitch,FirePunch,Trailblaze|Timid|176,,,156,,176|||||,,,,,Normal]Noivern||HeavyDutyBoots|Infiltrator|Defog,Flamethrower,Hurricane,DragonPulse|Timid|252,,60,,60,136||,0,,,,|||,,,,,Flying]Palafin-Hero||ChoiceBand|ZerotoHero|WaveCrash,JetPunch,FlipTurn,ThroatChop|Adamant|,252,,,4,252|||||,,,,,Water"],
+ ["Tornadus-Therian||WacanBerry|Regenerator|NastyPlot,BleakwindStorm,IcyWind,FocusBlast|Timid|248,,32,66,,162||,0,,,,|||,,,,,Flying]Garchomp||ChoiceScarf|RoughSkin|Outrage,Earthquake,ScaleShot,StoneEdge|Naive|16,252,,,,240|||||,,,,,Dragon]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|Encore,IvyCudgel,HornLeech,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Water]Samurott-Hisui||ChopleBerry|Sharpness|CeaselessEdge,SuckerPunch,SacredSword,AerialAce|Adamant|,252,200,,,56|||||,,,,,Water]Tera Captain|Bellibolt|Leftovers|Electromorphosis|Toxic,SlackOff,VoltSwitch,LightScreen|Calm|252,,4,,252,||,0,,,,|||,,,,,Water]Tinkaton||RockyHelmet|MoldBreaker|StealthRock,Encore,GigatonHammer,BrickBreak|||||||,,,,,Fairy","Palafin-Hero||ChoiceSpecs|ZerotoHero|Surf,IceBeam,Boomburst,JetPunch|Naive|,48,,252,,208|||||,,,,,Water]Gouging Fire||LoadedDice|Protosynthesis|HeatCrash,ScaleShot,Substitute,DragonDance|Jolly|,252,,,48,208|||||,,,,,Fire]Decidueye-Hisui||RoseliBerry|Overgrow|LeafStorm,Roost,Defog,Uturn|Modest|176,,252,80,,|||||,,,,,Grass]Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|IvyCudgel,StompingTantrum,Spikes,Counter|Hasty|,252,,,4,252||,,20,,,|||,,,,,Rock]Kilowattrel||LifeOrb|VoltAbsorb|VoltSwitch,Hurricane,Endure,Endeavor|Timid|,,,252,32,224||,0,,,,|||,,,,,Electric]Kingambit||ChopleBerry|SupremeOverlord|SwordsDance,SuckerPunch,IronHead,LowKick|Adamant|248,248,,,,12|||||,,,,,Dark"],
+ ["Great Tusk||LumBerry|Protosynthesis|HeadlongRush,RapidSpin,CloseCombat,TemperFlare|Adamant|,252,164,,,92|||||,,,,,Fighting]Manaphy||CovertCloak|Hydration|Surf,EnergyBall,TailGlow,SkillSwap|Modest|252,,148,108,,||,0,,,,|||,,,,,Water]Rotom-Heat||MirrorHerb|Levitate|Overheat,PainSplit,VoltSwitch,NastyPlot|Calm|252,,,,156,100||,0,,,,|||,,,,,Electric]Rillaboom||MiracleSeed|GrassySurge|WoodHammer,LeechSeed,Taunt,Substitute|Impish|148,,252,,,108|||||,,,,,Grass]Klefki||HeatRock|Prankster|SunnyDay,Spikes,LightScreen,Reflect|Calm|252,,4,,252,||,0,,,,|||,,,,,Steel]Roaring Moon||ChoiceScarf|Protosynthesis|KnockOff,StoneEdge,Uturn,Outrage|Adamant|212,252,,,,44|||||,,,,,Dragon","Tera Captain|TyphlosionHisui|Leftovers|Frisk|ShadowBall,Flamethrower,CalmMind,FlameCharge|Bold|252,,248,8,,|||||,,,,,Electric]Tera Captain|Latias|Leftovers|Levitate|CalmMind,Thunderbolt,Psyshock,Recover|Timid|252,,,,120,136||,0,,,,|||,,,,,Steel]Meowscarada||FocusSash|Protean|Spikes,Uturn,KnockOff,Acrobatics|Jolly|,252,,,4,252|||||,,,,,Grass]Great Tusk||HeavyDutyBoots|Protosynthesis|RapidSpin,CloseCombat,HeadlongRush,TemperFlare|Impish|160,92,16,,,240|||||,,,,,Ground]Weezing||Leftovers|NeutralizingGas|GunkShot,WillOWisp,PainSplit,Flamethrower|Relaxed|252,4,252,,,|||||,,,,,Poison]Rotom-Wash||ChestoBerry|Levitate|HydroPump,VoltSwitch,PainSplit,ThunderWave|Calm|252,,,4,252,||,0,,,,|||,,,,,Electric"],
+ ["Slowking-Galar||CovertCloak|Regenerator|Psychic,SludgeBomb,IceBeam,ChillyReception|Bold|252,,180,76,,||,0,,,,|||,,,,,Flying]Tera Captain|Sylveon|Leftovers|Pixilate|HyperVoice,TeraBlast,CalmMind,Psychic|Bold|252,,120,76,,60||,0,,,,|||,,,,,Bug]Tera Captain|Heatran|ChoiceScarf|FlashFire|MagmaStorm,FireBlast,FlashCannon,DarkPulse|Modest|20,,,252,,236||,0,,,,|||,,,,,Fire]Swampert||Leftovers|Torrent|StealthRock,SmackDown,Earthquake,FlipTurn|Impish|252,84,172,,,|||||,,,,,Ghost]Urshifu||ChopleBerry|UnseenFist|IronHead,CloseCombat,WickedBlow,SwordsDance|Adamant|88,252,,,,168|||||,,,,,Poison]Tsareena||KebiaBerry|QueenlyMajesty|ZenHeadbutt,RapidSpin,PowerWhip,KnockOff|Jolly|68,252,,,,188|||||,,,,,Grass","Sandslash-Alola||LoadedDice|SlushRush|SwordsDance,IcicleSpear,Earthquake,IceShard|Adamant|40,252,,,,216|||||,,,,,Ice]Sneasler||ChoiceBand|PoisonTouch|CloseCombat,ThroatChop,Uturn,DireClaw|Jolly|64,252,8,,,184|||||,,,,,Fighting]Tera Captain|Latias|SoulDew|Levitate|CalmMind,Psyshock,DracoMeteor,Recover|Modest|24,,,252,,228||,0,,,,|||,,,,,Poison]Tera Captain|Lokix|FocusSash|TintedLens|KnockOff,LowKick,Trailblaze,SuckerPunch|Jolly|,252,64,,,192|||||,,,,,Water]Ninetales-Alola||IcyRock|SnowWarning|AuroraVeil,Moonblast,Hypnosis,Encore|Timid|248,,,44,56,160||,0,,,,|||,,,,,Ice]Landorus||LifeOrb|SheerForce|EarthPower,SludgeWave,WeatherBall,StealthRock|Timid|32,,,252,,224||,0,,,,|||,,,,,Ground"],
+ ["Great Tusk||YacheBerry|Protosynthesis|BulkUp,BodyPress,RapidSpin,KnockOff|Jolly|252,4,16,,,236|||||,,,,,Ground]Torkoal||HeatRock|Drought|WillOWisp,StealthRock,Overheat,RapidSpin|Bold|248,,252,8,,|||||,,,,,Fire]Mandibuzz||HeavyDutyBoots|BigPecks|Uturn,KnockOff,Roost,FoulPlay|Careful|244,,12,,252,||,,,,,0|||,,,,,Dark]Gouging Fire||Leftovers|Protosynthesis|HeatCrash,DragonDance,BreakingSwipe,MorningSun|Adamant|240,48,,,156,64|||||,,,,,Fire]Tera Captain|Mew|Leftovers|Synchronize|Hex,WillOWisp,Psyshock,Spikes|Calm|240,,48,,124,96||,0,,,,|||,,,,,Ghost]Primarina||AssaultVest|Torrent|Moonblast,PsychicNoise,FlipTurn,AlluringVoice|Modest|252,,,172,,84|||||,,,,,Water","Tera Captain|Mamoswine|ChoiceScarf|ThickFat|Earthquake,IcicleCrash,IceShard,RockSlide|Jolly|,252,,,4,252|||||,,,,,Ice]Minior||WhiteHerb|ShieldsDown|ShellSmash,RockSlide,Acrobatics,IronHead|Adamant|,252,,,4,252|||||,,,,,Rock]Tera Captain|Clefable|Leftovers|MagicGuard|Protect,RainDance,Wish,Moonblast|Calm|252,,,4,252,||,0,,,,|||,,,,,Water]Skarmory||RockyHelmet|Sturdy|IronDefense,BodyPress,Spikes,Roost|Calm|252,,,,232,24||,0,,,,|||,,,,,Steel]Weezing-Galar||HeavyDutyBoots|NeutralizingGas|Defog,StrangeSteam,WillOWisp,ToxicSpikes|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|PlayRough,IvyCudgel,PowerWhip,KnockOff|Jolly|,252,,,4,252|||||,,,,,Fire"],
+ ["Baxcalibur||LoadedDice|ThermalExchange|SwordsDance,ScaleShot,IcicleSpear,Earthquake|Jolly|,252,,,4,252|||||,,,,,Dragon]Tera Captain|Serperior|Leftovers|Contrary|Glare,Substitute,LeafStorm,TeraBlast|Timid|,,,252,4,252||,0,,,,|S||,,,,,Stellar]Landorus-Therian||RockyHelmet|Intimidate|StealthRock,Earthquake,Uturn,Taunt|Impish|252,,252,,,4|||||,,,,,Water]Walking Wake||ChoiceSpecs|Protosynthesis|HydroSteam,Flamethrower,DracoMeteor,DragonPulse|Timid|12,,,244,,252|||||,,,,,Water]Moltres||HeavyDutyBoots|FlameBody|Flamethrower,WillOWisp,Uturn,Roost|Calm|248,,,,248,12|||||,,,,,Fairy]Glimmora||PowerHerb|ToxicDebris|MeteorBeam,Spikes,MortalSpin,EarthPower|Timid|,4,,252,,252|||||,,,,,Rock","Darkrai||ChoiceScarf|BadDreams|DarkPulse,FoulPlay,IceBeam,SludgeBomb|Timid|96,,,252,,160||,0,,,,|||,,,,,Dark]Scizor||ProtectivePads|Technician|BulletPunch,SwordsDance,Uturn,Defog|Impish|248,8,252,,,|||||,,,,,Bug]Tera Captain|UrshifuRapidStrike|PunchingGlove|UnseenFist|SurgingStrikes,DrainPunch,SwordsDance,Trailblaze|Jolly|48,252,,,,208|||||,,,,,Steel]Slowking-Galar||AssaultVest|Regenerator|SludgeBomb,IceBeam,FutureSight,Psychic|Calm|248,,60,124,76,||,0,,,,|||,,,,,Poison]Tera Captain|Diancie|CustapBerry|ClearBody|PowerGem,EarthPower,Endure,Moonblast|Modest|248,,,216,,44||,0,,,,|||,,,,,Rock]Tauros||LifeOrb|SheerForce|BodySlam,IceBeam,RockSlide,Earthquake|Naive|,252,,8,,248|||||,,,,,Normal"],
+ ["Ninetales||HeatRock|Drought|Flamethrower,ScorchingSands,WillOWisp,HealingWish|Calm|248,,36,,224,||,0,,,,|||,,,,,Fire]Venusaur||BlackSludge|Chlorophyll|Growth,EarthPower,WeatherBall,SludgeBomb|Modest|48,,4,252,,204||,0,,,,|||,,,,,Grass]Tera Captain|WalkingWake|DragonFang|Protosynthesis|HydroSteam,DracoMeteor,FlipTurn,Flamethrower|Timid|,,,244,12,252|||||,,,,,Dragon]Scream Tail||Leftovers|Protosynthesis|CalmMind,Wish,Flamethrower,DazzlingGleam|Calm|248,,,,108,152||,0,,,,|||,,,,,Fairy]Roaring Moon||ExpertBelt|Protosynthesis|Earthquake,IronHead,FireFang,DragonDance|Jolly|,252,,,48,208|||||,,,,,Dragon]Tera Captain|Orthworm|ChopleBerry|EarthEater|ShedTail,StealthRock,Spikes,BodyPress|Bold|248,,8,,252,||,0,,,,|||,,,,,Steel","Quaquaval||WeaknessPolicy|Moxie|AquaStep,CloseCombat,SwordsDance,Substitute|Adamant|,252,,,4,252|||||,,,,,Water]Tera Captain|Serperior|AssaultVest|Contrary|LeafStorm,Trailblaze,MirrorCoat,TeraBlast|Timid|4,,,252,,252|||S||,,,,,Fairy]Corviknight||RockyHelmet|Pressure|BodyPress,Roost,Uturn,Defog|Impish|248,,252,,8,|||||,,,,,Flying]Chi-Yu||ChoiceScarf|BeadsofRuin|Flamethrower,DarkPulse,WillOWisp,Overheat|Modest|,,4,252,,252||,0,,,,|||,,,,,Dark]Spidops||SitrusBerry|Stakeout|FirstImpression,StickyWeb,Uturn,SuckerPunch|Adamant|252,252,,,4,|||||,,,,,Bug]Clodsire||BlackSludge|Unaware|Curse,GunkShot,BodyPress,Recover|Careful|248,,252,,8,|||||,,,,,Poison"],
+ ["Tera Captain|Zapdos|HeavyDutyBoots|Static|Thunderbolt,Roost,Uturn,TeraBlast|Timid|48,,,252,,208|||||,,,,,Dragon]Samurott-Hisui||MirrorHerb|Sharpness|CeaselessEdge,RazorShell,SuckerPunch,Encore|Jolly|80,252,,,,176|||||,,,,,Water]Tera Captain|Sinistcha|Leftovers|Heatproof|MatchaGotcha,StrengthSap,CalmMind,ShadowBall|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Iron Treads||AssaultVest|QuarkDrive|RapidSpin,Earthquake,IceSpinner,KnockOff|Jolly|,252,,,48,208|||||,,,,,Ground]Deoxys-Defense||Leftovers|Pressure|Recover,Spikes,Teleport,PsychicNoise|Bold|252,,252,,4,||,0,,,,|||,,,,,Psychic]Iron Valiant||ChoiceSpecs|QuarkDrive|Trick,Thunderbolt,Moonblast,AuraSphere|Modest|,,,252,12,244||,0,,,,|||,,,,,Fairy","Palafin-Hero||PunchingGlove|ZerotoHero|BulkUp,DrainPunch,IcePunch,JetPunch|Adamant|248,72,56,,72,60|||||,,,,,Water]Tornadus-Therian||WacanBerry|Regenerator|NastyPlot,Hurricane,HeatWave,IcyWind|Timid|152,,,148,64,144||,0,,,,|||,,,,,Flying]Tera Captain|RagingBolt|MentalHerb|Protosynthesis|CalmMind,DragonPulse,Thunderclap,TeraBlast|Modest|56,,92,164,72,124||,20,,,,|||,,,,,Ghost]Terapagos||HeavyDutyBoots|TeraShift|CalmMind,TeraStarstorm,IceBeam,RapidSpin|Modest|144,,,212,,152|||||,,,,,Stellar]Tera Captain|Torterra|LoadedDice|Overgrow|ShellSmash,BulletSeed,RockBlast,Crunch|Adamant|216,112,4,,16,160|||||,,,,,Dark]Qwilfish-Hisui||Eviolite|Intimidate|Spikes,BarbBarrage,ToxicSpikes,Surf|Relaxed|248,80,168,12,,|||||,,,,,Dark"],
+ ["Tera Captain|Jolteon|HeavyDutyBoots|VoltAbsorb|Thunderbolt,TeraBlast,AlluringVoice,VoltSwitch|Modest|68,,,252,,188||,0,,,,|||,,,,,Fire]Slowking-Galar||HeavyDutyBoots|Regenerator|Psychic,SludgeBomb,SlackOff,ChillyReception|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Slither Wing||AssaultVest|Protosynthesis|Uturn,CloseCombat,FlareBlitz,Earthquake|Adamant|252,128,,,,128|||||,,,,,Bug]Hydreigon||EarthPlate|Levitate|DracoMeteor,EarthPower,ThunderWave,StealthRock|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Baxcalibur||BabiriBerry|IceBody|GlaiveRush,IcicleCrash,Earthquake,DragonDance|Adamant|56,252,,,,200|||||,,,,,Dragon]Forretress||RockyHelmet|Sturdy|GyroBall,Spikes,RapidSpin,VoltSwitch|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Bug","Scizor||ChoiceBand|Technician|BulletPunch,Uturn,KnockOff,CloseCombat|Adamant|248,252,,,8,|||||,,,,,Bug]Tera Captain|Hydreigon|ChoiceSpecs|Levitate|DarkPulse,DracoMeteor,Flamethrower,FlashCannon|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Iron Hands||AssaultVest|QuarkDrive|CloseCombat,VoltSwitch,Earthquake,HeavySlam|Adamant|248,252,,,8,|||||,,,,,Fighting]Tera Captain|Okidogi|AssaultVest|ToxicChain|FirePunch,HighHorsepower,DrainPunch,IronHead|Adamant|252,252,,,4,|||||,,,,,Ground]Fezandipiti||MentalHerb|ToxicChain|CalmMind,Moonblast,Roost,ShadowBall|Timid|252,,,4,,252||,0,,,,|||,,,,,Poison]Mandibuzz||HeavyDutyBoots|Overcoat|Defog,Uturn,BraveBird,Roost|Jolly|248,8,,,,252|||||,,,,,Dark"],
+ ["Ursaluna-Bloodmoon||AssaultVest|MindsEye|EarthPower,BloodMoon,Counter,HyperVoice|Modest|124,,,252,,132||,0,,,,|||,,,,,Ground]Enamorus-Therian||HeavyDutyBoots|Overcoat|DrainingKiss,IronDefense,CalmMind,EarthPower|Modest|252,,,60,,196||,0,,,,|||,,,,,Fairy]Dewgong||HeavyDutyBoots|ThickFat|IceBeam,KnockOff,FlipTurn,Encore|Relaxed|248,8,252,,,|||||,,,,,Water]Pecharunt||BlackSludge|PoisonPuppeteer|NastyPlot,MalignantChain,Recover,Hex|Modest|252,,,252,4,||,0,,,,|||,,,,,Poison]Tera Captain|Armarouge|WeaknessPolicy|WeakArmor|Endure,ArmorCannon,Psyshock,DestinyBond|Modest|,,,252,4,252||,0,,,,|||,,,,,Psychic]Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|HornLeech,SwordsDance,IvyCudgel,PlayRough|Jolly|64,252,,,,192|||||,,,,,Rock","Iron Valiant||LifeOrb|QuarkDrive|Moonblast,VacuumWave,ShadowBall,Encore|Modest|,,,252,28,228||,0,,,,|||,,,,,Fairy]Garchomp||RockyHelmet|RoughSkin|SwordsDance,Earthquake,IronHead,Spikes|Jolly|112,,172,,,224|||||,,,,,Dragon]Metagross||PowerHerb|ClearBody|MeteorBeam,GrassKnot,ShadowBall,FlashCannon|Modest|64,,,252,,192||,0,,,,|||,,,,,Steel]Tornadus-Therian||HeavyDutyBoots|Regenerator|NastyPlot,BleakwindStorm,HeatWave,GrassKnot|Timid|16,,,252,,240||,0,,,,|||,,,,,Flying]Tera Captain|Zarude|HeavyDutyBoots|LeafGuard|PowerWhip,TeraBlast,Uturn,Synthesis|Careful|252,,,,180,76|||||,,,,,Fairy]Morgrem||Eviolite|Prankster|Reflect,LightScreen,PartingShot,DazzlingGleam|Bold|252,,252,4,,||,0,,,,|||,,,,,Dark"],
+ ["Tera Captain|Feraligatr|ChestoBerry|SheerForce|DragonDance,Liquidation,Crunch,Rest|Adamant|232,108,,,,168|||||,,,,,Dark]Meowscarada||ProtectivePads|Protean|KnockOff,TripleAxel,Uturn,LowKick|Jolly|104,252,,,,152|||||,,,,,Grass]Latios||ChoiceScarf|Levitate|LusterPurge,DracoMeteor,Trick,AuraSphere|Modest|140,,,252,,116||,0,,,,|||,,,,,Dragon]Great Tusk||Leftovers|Protosynthesis|Substitute,BulkUp,HeadlongRush,StoneEdge|Jolly|204,128,,,,176|||||,,,,,Ground]Heatran||CustapBerry|FlameBody|EarthPower,MagmaStorm,Overheat,Endure|Modest|248,,,112,,148||,0,,,,|||,,,,,Fire]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|Discharge,Uturn,Taunt,FocusBlast|Timid|248,,60,,136,64|||||,,,,,Water","Tera Captain|Gliscor|ChoiceScarf|HyperCutter|Earthquake,Uturn,GunkShot,DualWingbeat|Jolly|32,252,,,,224|||||,,,,,Ground]Dachsbun||Leftovers|WellBakedBody|PlayRough,Roar,Wish,Protect|Impish|248,,44,,216,|||||,,,,,Fairy]Weavile||ChoiceBand|Pickpocket|KnockOff,BeatUp,IceShard,TripleAxel|Adamant|,252,4,,,252|||||,,,,,Dark]Tera Captain|Heatran|AssaultVest|FlashFire|TeraBlast,FlashCannon,EarthPower,Flamethrower|Modest|248,,76,176,,8||,0,,,,|||,,,,,Fairy]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|WoodHammer,IvyCudgel,PlayRough,Synthesis|Jolly|8,252,,,,248|||||,,,,,Water]Slowking-Galar||ShucaBerry|Regenerator|ChillyReception,ToxicSpikes,SlackOff,Psychic|Calm|248,,156,,104,||,0,,,,26|||,,,,,Poison"],
+ ["Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|BulkUp,Earthquake,TeraBlast,Taunt|Jolly|,4,,,252,252|||||,,,,,Dragon]Iron Bundle||ChoiceSpecs|QuarkDrive|HydroPump,FlipTurn,IceBeam,FreezeDry|Modest|,,,252,172,84|||||,,,,,Ice]Enamorus||ChoiceSpecs|CuteCharm|Moonblast,HealingWish,DrainingKiss,EarthPower|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Kingambit||BlackGlasses|SupremeOverlord|LowKick,SwordsDance,SuckerPunch,KowtowCleave|Adamant|248,252,8,,,|||||,,,,,Dark]Clodsire||BlackSludge|WaterAbsorb|Toxic,Recover,Earthquake,Curse|Careful|248,,252,,,|||||,,,,,Poison]Rotom-Heat||LightClay|Levitate|WillOWisp,VoltSwitch,LightScreen,Reflect|Timid|248,,,,12,248||,0,,,,|||,,,,,Electric","Tera Captain|Annihilape|MarangaBerry|Defiant|Taunt,BulkUp,RageFist,DrainPunch|Careful|252,,,,252,|||S||,,,,,Fairy]Electrode-Hisui||KeeBerry|Soundproof|Substitute,LeechSeed,ChargeBeam,EnergyBall|Bold|,,204,160,,144||,0,,,,|S||,,,,,Electric]Archaludon||AirBalloon|Stamina|BodyPress,FlashCannon,LightScreen,IronDefense|Modest|76,,,180,252,||,0,,,,|||,,,,,Steel]Politoed||SalacBerry|Drizzle|BellyDrum,Substitute,Liquidation,Earthquake|Adamant|12,108,,,176,212|||||,,,,,Water]Zapdos||Leftovers|Pressure|Substitute,Charge,Hurricane,Thunderbolt|Timid|236,,,,128,144||,0,,,,|||,,,,,Electric]Palafin||YacheBerry|ZerotoHero|JetPunch,BulkUp,DrainPunch,Taunt|Adamant|,252,104,,,152|||||,,,,,Water"],
+ ["Great Tusk||EjectPack|Protosynthesis|CloseCombat,Earthquake,Facade,RapidSpin|Jolly|56,252,16,,4,180|||||,,,,,Ground]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,Synthesis,Encore|Jolly|248,16,20,,48,176|||||,,,,,Water]Weavile||FocusSash|Pickpocket|TripleAxel,KnockOff,Counter,UpperHand|Hasty|,252,,,8,248||,,0,,,|||,,,,,Dark]Alomomola||RockyHelmet|Regenerator|FlipTurn,ChillingWater,Wish,Protect|Relaxed|248,,248,,12,|||||,,,,,Water]Iron Crown||BoosterEnergy|QuarkDrive|Psychic,FocusBlast,CalmMind,Substitute|Timid|192,,16,108,,192||,20,,,,|||,,,,,Steel]Tera Captain|Diancie|Leftovers|ClearBody|BodyPress,DrainingKiss,IronDefense,CalmMind|Calm|252,,16,4,96,140||,0,,,,|||,,,,,Poison","Palafin||RindoBerry|ZerotoHero|BulkUp,Acrobatics,JetPunch,DrainPunch|Adamant|240,244,24,,,|||||,,,,,Water]Tera Captain|PorygonZ|MiracleSeed|Adaptability|TeraBlast,Agility,Thunderbolt,NastyPlot|Modest|24,,,252,,232||,0,,,,|||,,,,,Grass]Donphan||HeavyDutyBoots|Sturdy|StoneEdge,Earthquake,GunkShot,RapidSpin|Adamant|,196,,,68,244|||||,,,,,Ground]Ribombee||KeeBerry|ShieldDust|StickyWeb,Uturn,StunSpore,Moonblast|Timid|96,,,228,,184|||||,,,,,Bug]Tera Captain|RagingBolt|ChoiceScarf|Protosynthesis|TeraBlast,Thunderclap,Thunderbolt,DracoMeteor|Modest|32,,,252,,224||,20,,,,|||,,,,,Water]Cinderace||ChoiceBand|Libero|Uturn,PyroBall,ZenHeadbutt,SuckerPunch|Adamant|,252,52,,,204|||||,,,,,Fire"],
+ ["Okidogi||AssaultVest|ToxicChain|KnockOff,DrainPunch,ThunderPunch,PoisonJab|Adamant|252,32,,,224,|||||,,,,,Poison]Meowscarada||ProtectivePads|Overgrow|FlowerTrick,KnockOff,ThunderPunch,Uturn|Jolly|104,252,,,,152|||||,,,,,Grass]Tera Captain|Latias|ChoiceSpecs|Levitate|DracoMeteor,ShadowBall,Surf,Trick|Modest|64,,,252,4,188||,0,,,,|||,,,,,Steel]Sandy Shocks||BoosterEnergy|Protosynthesis|Thunderbolt,EarthPower,StealthRock,VoltSwitch|Timid|48,,,208,,252||,0,,,,|||,,,,,Electric]Tentacruel||WiseGlasses|LiquidOoze|Surf,GigaDrain,SludgeWave,RapidSpin|Modest|48,,,252,,208|||||,,,,,Water]Gholdengo||AirBalloon|GoodasGold|MakeItRain,ShadowBall,Reflect,Recover|Modest|248,,28,72,,160||,0,,,,|||,,,,,Steel","Moltres||RockyHelmet|FlameBody|Flamethrower,Roar,Roost,Uturn|Bold|248,,100,,160,|||||,,,,,Fire]Iron Bundle||HeavyDutyBoots|QuarkDrive|IceBeam,FreezeDry,HydroPump,Encore|Timid|96,,,252,,160||,0,,,,|||,,,,,Ice]Tera Captain|Gyarados|WacanBerry|Moxie|TeraBlast,Earthquake,Waterfall,DragonDance|Adamant|24,252,,,,232|||||,,,,,Flying]Tera Captain|Excadrill|AirBalloon|MoldBreaker|Earthquake,StealthRock,RapidSpin,IronHead|Adamant|80,252,,,,176|||||,,,,,Ground]Latios||ColburBerry|Levitate|Agility,CalmMind,LusterPurge,AuraSphere|Timid|180,,,76,,252||,0,,,,|||,,,,,Dragon]Hatterene||AssaultVest|MagicBounce|DrainingKiss,ShadowBall,Nuzzle,Psyshock|Modest|252,,116,140,,|||||,,,,,Psychic"],
+ ["Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|Uturn,CloseCombat,PoisonJab,SurgingStrikes|Adamant|124,252,,,,132|||||,,,,,Poison]Tera Captain|Armarouge|ChoiceSpecs|FlashFire|ArmorCannon,Psyshock,Trick,EnergyBall|Timid|40,,,252,,216||,0,,,,|||,,,,,Ground]Weavile||HeavyDutyBoots|Pickpocket|UpperHand,TripleAxel,KnockOff,IceShard|Jolly|96,252,,,24,136|||||,,,,,Dark]Rillaboom||AssaultVest|GrassySurge|Uturn,GrassyGlide,HighHorsepower,KnockOff|Adamant|176,172,,,152,8|||S||,,,,,Grass]Slowking-Galar||AssaultVest|Regenerator|GrassKnot,PsychicNoise,SludgeBomb,FutureSight|Calm|252,,20,,236,||,0,,,,|||,,,,,Poison]Forretress||RockyHelmet|Sturdy|StealthRock,BodyPress,VoltSwitch,RapidSpin|Impish|252,,252,,4,|||S||,,,,,Bug","Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|Trailblaze,IvyCudgel,Uturn,PowerWhip|Jolly|88,252,16,,,152|||||,,,,,Water]Scizor||RockyHelmet|Technician|BulletPunch,Uturn,KnockOff,Defog|Impish|160,96,252,,,|||||,,,,,Bug]Tera Captain|Hoopa|SitrusBerry|Magician|Psychic,ShadowBall,FocusBlast,LightScreen|Bold|240,,192,76,,||,0,,,,|||,,,,,Dragon]Ursaluna-Bloodmoon||AssaultVest|MindsEye|BloodMoon,EarthPower,VacuumWave,Moonblast|Calm|248,,,8,252,||,0,,,,|||,,,,,Ground]Enamorus||ChoiceSpecs|Contrary|Moonblast,EarthPower,MysticalFire,HealingWish|Timid|72,,,252,,184||,0,,,,|||,,,,,Fairy]Overqwil||RockyHelmet|Intimidate|PainSplit,BarbBarrage,Crunch,Haze|Impish|248,16,244,,,|||||,,,,,Dark"],
+ ["Dewgong||AssaultVest|ThickFat|FlipTurn,KnockOff,IceBeam,AlluringVoice|Sassy|252,,,4,252,||,,,,,0|S||,,,,,Water]Palafin-Hero||ChoiceBand|ZerotoHero|FlipTurn,JetPunch,WaveCrash,CloseCombat|Jolly|,252,,,16,240|||S||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Tailwind,Uturn,KnockOff,BleakwindStorm|Timid|248,,16,,172,72|||S||,,,,,Flying]Iron Treads||ShedShell|QuarkDrive|StealthRock,RapidSpin,IceSpinner,HighHorsepower|Jolly|64,252,,,,192|||S||,,,,,Ground]Tera Captain|Rillaboom|Leftovers|GrassySurge|LeechSeed,Uturn,KnockOff,GrassyGlide|Impish|252,4,252,,,|||S||,,,,,Steel]Tera Captain|Armarouge|ChoiceScarf|WeakArmor|Trick,DarkPulse,AuraSphere,ArmorCannon|Timid|,,,252,4,252||,0,,,,|S||,,,,,Dark","Magnezone||ChoiceScarf|Sturdy|VoltSwitch,Thunderbolt,FlashCannon,BodyPress|Modest|,,44,252,,212||,0,,,,|||,,,,,Stellar]Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,Encore,FreezeDry,FlipTurn|Timid|120,,,252,,136|||||,,,,,Stellar]Tera Captain|Hydreigon|Leftovers|Levitate|TeraBlast,DarkPulse,NastyPlot,ThunderWave|Timid|,,92,252,,164||,0,,,,|||,,,,,Electric]Slowking-Galar||ColburBerry|Regenerator|SludgeBomb,ThunderWave,ChillyReception,FutureSight|Bold|252,,252,,4,||,0,,,,|||,,,,,Stellar]Gliscor||ToxicOrb|PoisonHeal|HighHorsepower,BrickBreak,Spikes,Uturn|Impish|252,,252,,,4|||||,,,,,Stellar]Tera Captain|Cetitan|SitrusBerry|SlushRush|IceSpinner,HighHorsepower,IceShard,BellyDrum|Adamant|100,232,152,,,24|||||,,,,,Dragon"],
+ ["Magnezone||Magnet|MagnetPull|Thunderbolt,FlashCannon,VoltSwitch,ThunderWave|Modest|248,,,252,,8||,0,,,,|||,,,,,Electric]Primarina||ChoiceSpecs|Torrent|Moonblast,FlipTurn,Psychic,IceBeam|Modest|52,,,252,,204|||||,,,,,Water]Hitmontop||ProtectivePads|Intimidate|TripleAxel,RapidSpin,Earthquake,MachPunch|Impish|248,,252,,8,|||||,,,,,Fighting]Gouging Fire||LoadedDice|Protosynthesis|IronHead,Earthquake,ScaleShot,DragonDance|Adamant|88,252,,,,168|||||,,,,,Fire]Darkrai||ChoiceScarf|BadDreams|DarkPulse,IceBeam,Trick,WillOWisp|Timid|16,,,252,,240||,0,,,,|||,,,,,Dark]Tera Captain|Landorus|LifeOrb|SheerForce|EarthPower,TeraBlast,StealthRock,Taunt|Timid|,,,252,4,252||,0,,,,|||,,,,,Ice","Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|BulkUp,Earthquake,IceSpinner,RapidSpin|Jolly|248,,4,,4,252|||||,,,,,Fairy]Meowscarada||FocusSash|Protean|FlowerTrick,LowKick,KnockOff,Spikes|Jolly|,252,,,68,188|||||,,,,,Grass]Dragonite||HeavyDutyBoots|Multiscale|WingAttack,Earthquake,ExtremeSpeed,DragonClaw|Adamant|76,252,,,,180|||||,,,,,Dragon]Empoleon||EjectButton|Competitive|FlipTurn,VacuumWave,Roar,Yawn|Sassy|252,,208,,48,||,,,,,0|||,,,,,Water]Zapdos||HeavyDutyBoots|Static|Agility,Thunderbolt,HeatWave,Hurricane|Modest|,,48,252,,208||,0,,,,|||,,,,,Electric]Carbink||CustapBerry|Sturdy|Endure,PowerGem,MistyExplosion,StealthRock|Modest|252,,,252,,4||,0,,,,0|||,,,,,Rock"],
+ ["Ribombee||ChoiceScarf|ShieldDust|Moonblast,EnergyBall,StickyWeb,Uturn|Timid|,,,252,16,240|||||,,,,,Bug]Cyclizar||HeavyDutyBoots|Regenerator|ShedTail,RapidSpin,Overheat,Uturn|Timid|252,,,,88,168|||||,,,,,Dragon]Terapagos||HeavyDutyBoots|TeraShift|RapidSpin,CalmMind,TeraStarstorm,Flamethrower|Modest|,,,252,144,112|||||,,,,,Stellar]Tera Captain|Flygon|ExpertBelt|Levitate|StealthRock,Earthquake,FirePunch,TeraBlast|Adamant|4,252,252,,,|||||,,,,,Steel]Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|CalmMind,DragonPulse,Thunderbolt,DracoMeteor|Modest|252,,4,252,,||,20,,,,|||,,,,,Electric]Slowking||ColburBerry|Regenerator|Psyshock,ChillyReception,FocusBlast,IceBeam|Bold|252,,96,160,,||,0,,,,|||,,,,,Water","Tera Captain|Latias|ChoiceSpecs|Levitate|HealingWish,Psyshock,DragonPulse,DracoMeteor|Timid|,,,252,4,252||,0,,,,|S||,,,,,Dragon]Thwackey||ChoiceBand|GrassySurge|GrassyGlide,KnockOff,Uturn,WoodHammer|Adamant|232,252,,,4,20|||S||,,,,,Grass]Tera Captain|Bellibolt|Leftovers|Electromorphosis|Discharge,VoltSwitch,SlackOff,Toxic|Calm|248,,,28,232,||,0,,,,|||,,,,,Fairy]Heatran||AirBalloon|FlameBody|StealthRock,MagmaStorm,Taunt,DarkPulse|Calm|240,,,20,208,40||,0,,,,|S||,,,,,Fire]Scizor||HeavyDutyBoots|Technician|BulletPunch,KnockOff,Uturn,CloseCombat|Adamant|248,216,36,,,8|||||,,,,,Bug]Greninja||HeavyDutyBoots|Protean|Uturn,Spikes,Liquidation,LowKick|Jolly|80,252,,,4,172|||||,,,,,Water"],
+ ["Great Tusk||BoosterEnergy|Protosynthesis|HeadlongRush,IceSpinner,KnockOff,BulkUp|Jolly|248,4,4,,,252|||||,,,,,Ground]Tera Captain|Latias|Leftovers|Levitate|Thunderbolt,IceBeam,CalmMind,Recover|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Greninja||ChoiceSpecs|Protean|Uturn,DarkPulse,IceBeam,WaterShuriken|Naive|,16,,252,,240|||||,,,,,Water]Tinkaton||Leftovers|MoldBreaker|GigatonHammer,StealthRock,Encore,LightScreen|Jolly|248,,,,116,144|||||,,,,,Fairy]Muk||BlackSludge|PoisonTouch|PoisonJab,DrainPunch,KnockOff,Toxic|Careful|248,8,,,252,|||||,,,,,Poison]Tera Captain|Frosmoth|HeavyDutyBoots|IceScales|IceBeam,TeraBlast,QuiverDance,Substitute|Timid|,,,252,12,244||,0,,,,|||,,,,,Electric","Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,SpiritBreak,CloseCombat,PsychoCut|Jolly|,252,16,,,240|||||,,,,,Stellar]Tera Captain|Espathra|GrassySeed|SpeedBoost|CalmMind,StoredPower,EnergyBall,TeraBlast|Bold|252,,40,104,,112||,0,,,,|||,,,,,Fire]Sceptile||ChoiceScarf|Unburden|LeafStorm,ShedTail,GigaDrain,Roar|Timid|252,,,80,,176||,0,,,,|||,,,,,Stellar]Gengar||ChoiceScarf|CursedBody|ShadowBall,SludgeWave,EnergyBall,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Stellar]Braviary||AssaultVest|Defiant|Uturn,BraveBird,CloseCombat,GigaImpact|Adamant|,252,4,,252,|||||,,,,,Stellar]Empoleon||ChopleBerry|Torrent|Surf,GrassKnot,VacuumWave,StealthRock|Modest|248,,,252,8,||,0,,,,|||,,,,,Stellar"],
+ ["Heatran||Leftovers|FlashFire|MagmaStorm,WillOWisp,StealthRock,Taunt|Modest|184,,,252,,68||,0,,,,|||,,,,,Fire]Donphan||Leftovers|Sturdy|Earthquake,IceSpinner,IceShard,RapidSpin|Adamant|252,252,,,4,|||||,,,,,Ground]Palafin||PunchingGlove|ZerotoHero|JetPunch,IcePunch,WaveCrash,BulkUp|Jolly|24,252,,,,232|||||,,,,,Water]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,LeechSeed,KnockOff|Timid|,,88,252,,168|||||,,,,,Grass]Dachsbun||RockyHelmet|WellBakedBody|PlayRough,BodyPress,Wish,Protect|Impish|252,,252,,4,|||||,,,,,Fairy]Latios||ChoiceScarf|Levitate|DracoMeteor,LusterPurge,Thunderbolt,FlipTurn|Timid|64,,,252,,192|||||,,,,,Dragon","Garchomp||EarthPlate|RoughSkin|Earthquake,ScaleShot,SwordsDance,StealthRock|Jolly|16,252,,,,240|||||,,,,,Dragon]Corviknight||Leftovers|MirrorArmor|Uturn,Roost,Defog,BraveBird|Relaxed|248,4,252,,4,||,,,,,0|||,,,,,Flying]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|SurgingStrikes,Uturn,CloseCombat,Facade|Adamant|208,252,,,,48|||||,,,,,Water]Tera Captain|Arcanine|Leftovers|Intimidate|MorningSun,DragonPulse,TeraBlast,WillOWisp|Bold|248,,252,4,,4||,0,,,,|||,,,,,Water]Florges||Leftovers|FlowerVeil|AlluringVoice,Wish,Synthesis,CalmMind|Calm|248,,,8,252,||,0,,,,|||,,,,,Fairy]Overqwil||BlackSludge|Intimidate|Spikes,ToxicSpikes,Crunch,GunkShot|Careful|248,16,,,244,|||||,,,,,Dark"],
+ ["Enamorus||ChoiceScarf|CuteCharm|Moonblast,EarthPower,HealingWish,AlluringVoice|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Greninja-Bond||LoadedDice|BattleBond|GunkShot,Surf,Uturn,WaterShuriken|Hasty|48,48,,252,,160|||||,,,,,Water]Tera Captain|GreatTusk|ChoiceScarf|Protosynthesis|CloseCombat,HeadlongRush,HeadSmash,TeraBlast|Adamant|,252,,,4,252|||||,,,,,Fighting]Dragalge||ChoiceSpecs|Adaptability|DracoMeteor,DragonPulse,FlipTurn,SludgeWave|Modest|248,,,252,8,|||||,,,,,Poison]Bellibolt||ShucaBerry|Static|VoltSwitch,Toxic,SlackOff,ChillingWater|Bold|252,,252,4,,||,0,,,,|||,,,,,Electric]Tera Captain|WoChien|ChopleBerry|TabletsofRuin|FoulPlay,GigaDrain,BodyPress,Taunt|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel","Great Tusk||AssaultVest|Protosynthesis|HeadlongRush,CloseCombat,HeavySlam,RapidSpin|Careful|248,,,,180,80|||||,,,,,Ground]Wigglytuff||Leftovers|Competitive|Flamethrower,HyperVoice,Wish,Protect|Calm|248,,8,,252,||,0,,,,|||,,,,,Normal]Tera Captain|Revavroom|LumBerry|Filter|Overheat,GunkShot,ShiftGear,IronHead|Adamant|88,252,,,,168|||||,,,,,Steel]Tera Captain|Eelektross|RockyHelmet|Levitate|Uturn,GigaDrain,SuperFang,VoltSwitch|Bold|248,,252,,8,|||||,,,,,Electric]Chi-Yu||FocusSash|BeadsofRuin|Psychic,FireBlast,NastyPlot,Protect|Modest|104,,,252,,152||,0,,,,|||,,,,,Dark]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|SwordsDance,StompingTantrum,Trailblaze,IvyCudgel|Jolly|32,252,,,,224|||||,,,,,Water"],
+ ["Dudunsparce-Three-Segment||Leftovers|SereneGrace|Glare,Headbutt,Earthquake,Coil|Impish|,44,232,,124,108|||||,,,,,Normal]Brambleghast||RockyHelmet|Infiltrator|RapidSpin,StrengthSap,PowerWhip,Poltergeist|Impish|248,,208,,,52|||||,,,,,Grass]Tera Captain|SandyShocks|Leftovers|Protosynthesis|EarthPower,Thunderbolt,VoltSwitch,StealthRock|Timid|,,12,248,,248||,0,,,,|||,,,,,Grass]Tera Captain|Jirachi|Leftovers|SereneGrace|IronDefense,CalmMind,Wish,StoredPower|Timid|252,,76,,,180||,0,,,,|||,,,,,Dark]Samurott-Hisui||AssaultVest|Sharpness|CeaselessEdge,SacredSword,AquaJet,HydroPump|Adamant|168,248,,,36,56|||||,,,,,Water]Iron Valiant||LifeOrb|QuarkDrive|CloseCombat,Psychic,KnockOff,DestinyBond|Naive|,244,,16,,248|||||,,,,,Fairy","Tera Captain|Cresselia|Leftovers|Levitate|Psychic,Thunderbolt,Moonlight,CalmMind|Bold|236,,252,,,16||,0,,,,|S||,,,,,Electric]Palafin-Hero||ChoiceBand|ZerotoHero|WaveCrash,FlipTurn,JetPunch,CloseCombat|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|Raikou|LifeOrb|InnerFocus|VoltSwitch,Thunderbolt,Scald,AuraSphere|Timid|108,,,252,4,144||,0,,,,|||,,,,,Water]Iron Treads||SoftSand|QuarkDrive|RapidSpin,Earthquake,VoltSwitch,KnockOff|Jolly|32,252,,,4,220|||||,,,,,Ground]Arcanine-Hisui||ChoiceScarf|RockHead|FlareBlitz,HeadSmash,ExtremeSpeed,CloseCombat|Jolly|36,252,,,4,216|||||,,,,,Fire]Weezing-Galar||BlackSludge|Levitate|Toxic,PainSplit,StrangeSteam,Flamethrower|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison"],
+ ["Tera Captain|Cetitan|HeavyDutyBoots|SlushRush|BellyDrum,IceShard,Earthquake,TeraBlast|Adamant|104,252,,,,152|||||,,,,,Ghost]Tera Captain|SlowkingGalar|IcyRock|Regenerator|ChillyReception,FireBlast,SludgeBomb,FutureSight|Calm|248,,,68,192,||,0,,,,|||,,,,,Fire]Great Tusk||BoosterEnergy|Protosynthesis|RapidSpin,Earthquake,HeadSmash,StealthRock|Adamant|80,252,,,,176|||||,,,,,Ground]Zapdos||ExpertBelt|Static|Agility,Thunderbolt,HeatWave,Roost|Modest|160,,,252,4,92||,0,,,,|S||,,,,,Ice]Grimmsnarl||LightClay|Prankster|LightScreen,Reflect,FirePunch,PartingShot|Impish|248,8,252,,,|||||,,,,,Dark]Palafin-Hero||ChoiceScarf|ZerotoHero|WaveCrash,CloseCombat,Haze,FlipTurn|Adamant|184,252,,,,72|||||,,,,,Water","Gholdengo||ChoiceScarf|GoodasGold|Memento,MakeItRain,Thunderbolt,Trick|Bold|232,,176,16,16,68||,0,,,,|||,,,,,Steel]Iron Treads||BoosterEnergy|QuarkDrive|StealthRock,Endeavor,SteelBeam,EarthPower|Modest|40,,4,252,,212||,0,,,,|||,,,,,Ground]Tera Captain|KeldeoResolute|ClearAmulet|Justified|CalmMind,Surf,Substitute,SecretSword|Timid|,,64,252,,192||,0,,,,|||,,,,,Water]Meowscarada||LifeOrb|Protean|KnockOff,TripleAxel,PlayRough,FlowerTrick|Adamant|24,252,44,,,188|||||,,,,,Grass]Enamorus-Therian||ThroatSpray|Overcoat|AlluringVoice,HealingWish,EarthPower,Tailwind|Modest|200,,60,100,,148||,0,,,,|||,,,,,Fairy]Tera Captain|Entei|MirrorHerb|Pressure|SacredFire,ExtremeSpeed,Swagger,BodySlam|Adamant|96,252,8,,,152|||||,,,,,Normal"],
+ ["Tera Captain|Latias|ColburBerry|Levitate|CalmMind,ShadowBall,Thunderbolt,Recover|Modest|252,,12,128,,116||,0,,,,|||,,,,,Ghost]Meowscarada||ChoiceScarf|Protean|FlowerTrick,KnockOff,TripleAxel,Trick|Jolly|,252,,,4,252|||||,,,,,Normal]Tinkaton||RockyHelmet|Pickpocket|Encore,StealthRock,ThunderWave,GigatonHammer|Impish|252,4,252,,,|||||,,,,,Normal]Iron Hands||ShucaBerry|QuarkDrive|SwordsDance,DrainPunch,ThunderPunch,IcePunch|Adamant|,252,4,,252,|||||,,,,,Normal]Donphan||MuscleBand|Sturdy|IceSpinner,Earthquake,KnockOff,IceShard|Adamant|36,252,,,,220|||||,,,,,Normal]Tera Captain|Cryogonal|FocusSash|Levitate|Reflect,LightScreen,RapidSpin,Explosion|Jolly|144,252,,,,112|||||,,,,,Electric","Great Tusk||AssaultVest|Protosynthesis|HeadlongRush,CloseCombat,ZenHeadbutt,RapidSpin|Adamant|104,252,,,152,|||||,,,,,Ground]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|DracoMeteor,Thunderbolt,BodyPress,DragonTail|Modest|252,,136,120,,|||||,,,,,Dark]Sneasler||ChoiceBand|PoisonTouch|CloseCombat,DireClaw,Switcheroo,Uturn|Jolly|80,252,,,,176|||||,,,,,Fighting]Rillaboom||RockyHelmet|GrassySurge|GrassyGlide,HighHorsepower,Endeavor,Uturn|Impish|248,8,252,,,|||||,,,,,Grass]Empoleon||ChopleBerry|Competitive|StealthRock,Surf,FlashCannon,GrassKnot|Modest|252,,4,252,,||,0,,,,|||,,,,,Water]Tera Captain|Mesprit|RockyHelmet|Levitate|IceBeam,KnockOff,Encore,HealingWish|Bold|252,,252,,4,|||||,,,,,Fairy"],
+ ["Gholdengo||ColburBerry|GoodasGold|MakeItRain,ShadowBall,DazzlingGleam,Recover|Modest|184,,,248,60,16||,0,,,,|||,,,,,Steel]Garchomp||ChoiceScarf|RoughSkin|Outrage,Earthquake,IronHead,DragonClaw|Jolly|,252,,,4,252|||||,,,,,Dragon]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,KnockOff,Uturn,Taunt|Timid|248,,,156,,104|||||,,,,,Flying]Palafin-Hero||AssaultVest|ZerotoHero|JetPunch,DrainPunch,FlipTurn,IcePunch|Adamant|160,68,56,,200,24|||||,,,,,Water]Tera Captain|Gallade|ChoiceBand|Sharpness|SacredSword,PsychoCut,ShadowSneak,KnockOff|Adamant|160,252,,,4,92|||||,,,,,Fighting]Grimer-Alola||Eviolite|PoisonTouch|KnockOff,Toxic,PoisonJab,Protect|Impish|252,4,252,,,|||||,,,,,Poison","Tera Captain|Ogerpon|Leftovers|Defiant|Uturn,KnockOff,IvyCudgel,SwordsDance|Jolly|64,252,,,,192|||||,,,,,Grass]Tera Captain|Diancie|Leftovers|ClearBody|DrainingKiss,DiamondStorm,BodyPress,EarthPower|Relaxed|252,4,252,,,|||S||,,,,,Water]Greninja||ExpertBelt|Protean|IceBeam,DarkPulse,RockSlide,Uturn|Hasty|,4,,252,,252|||||,,,,,Water]Uxie||ColburBerry|Levitate|Uturn,StealthRock,FoulPlay,Encore|Impish|252,,252,,4,|||||,,,,,Psychic]Terapagos||HeavyDutyBoots|TeraShift|RapidSpin,IceBeam,EarthPower,Roar|Modest|252,,,252,4,|||||,,,,,Stellar]Garchomp||LoadedDice|RoughSkin|SwordsDance,ScaleShot,Earthquake,StoneEdge|Jolly|,252,,,4,252|||S||,,,,,Dragon"],
+ ["Tera Captain|GreninjaBond|ExpertBelt|BattleBond|Surf,IceBeam,LowKick,GrassKnot|Modest|16,,,252,,240|||||,,,,,Grass]Garchomp||LoadedDice|RoughSkin|SwordsDance,ScaleShot,Earthquake,StoneEdge|Jolly|,252,4,,,252|||||,,,,,Dragon]Enamorus||HeavyDutyBoots|Contrary|Substitute,Moonblast,EarthPower,Superpower|Timid|8,,,252,,248|||||,,,,,Fairy]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,IvyCudgel,HornLeech,PlayRough|Jolly|40,252,,,,216|||||,,,,,Fire]Jirachi||Leftovers|SereneGrace|DoomDesire,Psychic,ChargeBeam,WaterPulse|Modest|232,,,252,,24||,0,,,,|||,,,,,Steel]Rotom-Mow||ChoiceScarf|Levitate|LeafStorm,Discharge,Trick,VoltSwitch|Modest|80,,,252,,176||,0,,,,|||,,,,,Electric","Palafin||ChoiceBand|ZerotoHero|JetPunch,WaveCrash,DrainPunch,IcePunch|Adamant|,252,,,4,252|||||,,,,,Water]Meowscarada||ChoiceScarf|Protean|FlowerTrick,KnockOff,Uturn,TripleAxel|Jolly|,252,,,8,248|||||,,,,,Grass]Garchomp||LoadedDice|RoughSkin|StealthRock,ScaleShot,Earthquake,PoisonJab|Jolly|104,148,4,,,252|||||,,,,,Dragon]Tera Captain|Pecharunt|SitrusBerry|PoisonPuppeteer|Recover,NastyPlot,MalignantChain,ShadowBall|Bold|248,,24,100,124,12||,0,,,,|||,,,,,Fairy]Tera Captain|Heatran|ChoiceScarf|FlameBody|MagmaStorm,Flamethrower,DragonPulse,FlashCannon|Modest|8,,,252,,248||,0,,,,|||,,,,,Dragon]Cryogonal||HeavyDutyBoots|Levitate|Recover,RapidSpin,FreezeDry,Haze|Calm|248,,8,,252,|||||,,,,,Ice"],
+ ["Tera Captain|Gengar|BlackSludge|CursedBody|Hex,FocusBlast,WillOWisp,Substitute|Timid|,,,252,4,252||,0,,,,|||,,,,,Fighting]Kingambit||ChopleBerry|SupremeOverlord|SuckerPunch,KowtowCleave,IronHead,BrickBreak|Adamant|248,252,,,,8|||||,,,,,Dark]Tera Captain|Espathra|LifeOrb|SpeedBoost|StoredPower,DazzlingGleam,TeraBlast,CalmMind|Timid|40,,,252,,216||,0,,,,|||,,,,,Fighting]Urshifu-Rapid-Strike||ChoiceScarf|UnseenFist|SurgingStrikes,BrickBreak,Uturn,CloseCombat|Serious|56,252,,,,200|||||,,,,,Fighting]Kleavor||FocusSash|Sharpness|StoneAxe,XScissor,DualWingbeat,BrickBreak|Jolly|4,252,,,,252|||||,,,,,Ghost]Entei||ChoiceBand|Pressure|SacredFire,ExtremeSpeed,FlareBlitz,WeatherBall|Jolly|,252,,4,,252|||||,,,,,Fire","Slowbro-Galar||BlackSludge|Regenerator|Psyshock,IceBeam,FocusBlast,SkillSwap|Calm|252,,4,,252,||,0,,,,|S||,,,,,Poison]Tera Captain|Annihilape|Leftovers|Defiant|RageFist,DrainPunch,IcePunch,BulkUp|Careful|252,,4,,252,|||S||,,,,,Dark]Tornadus-Therian||AssaultVest|Regenerator|AirSlash,KnockOff,FocusBlast,Uturn|Timid|80,,4,252,,172|||S||,,,,,Flying]Kingambit||ChopleBerry|Defiant|SuckerPunch,BrickBreak,KowtowCleave,IronHead|Adamant|232,252,,,,24|||||,,,,,Dark]Ninetales-Alola||LightClay|SnowWarning|AuroraVeil,Blizzard,Moonblast,Hypnosis|Timid|32,,,252,,224||,0,,,,|||,,,,,Ice]Quaquaval||AssaultVest|Moxie|AquaStep,IceSpinner,CloseCombat,RapidSpin|Jolly|,252,4,,,252|||||,,,,,Water"],
+ ["Palafin-Hero||AssaultVest|ZerotoHero|FlipTurn,DrainPunch,WaveCrash,JetPunch|Adamant|248,220,,,40,|||||,,,,,Water]Tera Captain|Gholdengo|ChoiceSpecs|GoodasGold|ShadowBall,DazzlingGleam,Trick,MakeItRain|Modest|232,,,248,,28||,0,,,,|||,,,,,Ghost]Tera Captain|Jolteon|AssaultVest|VoltAbsorb|VoltSwitch,ShadowBall,AlluringVoice,TeraBlast|Timid|,,,252,64,192||,0,,,,|||,,,,,Water]Hydreigon||ChoiceScarf|Levitate|DracoMeteor,DarkPulse,FlashCannon,Uturn|Modest|24,,,252,,232|||||,,,,,Dark]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,HornLeech,Uturn,PlayRough|Adamant|8,252,,,,248|||||,,,,,Fire]Weezing-Galar||PayapaBerry|Levitate|SludgeWave,Defog,StrangeSteam,Flamethrower|Calm|248,,20,,240,||,0,,,,|||,,,,,Poison","Iron Valiant||ChoiceScarf|QuarkDrive|Moonblast,ShadowBall,Psychic,CloseCombat|Naive|,48,,252,,208|||||,,,,,Fairy]Tera Captain|Appletun|AbilityShield|ThickFat|DragonTail,Earthquake,AppleAcid,Recover|Relaxed|252,,192,,64,|||||,,,,,Ghost]Gliscor||ToxicOrb|PoisonHeal|Toxic,Uturn,Earthquake,Protect|Careful|252,,,,216,40|||||,,,,,Ground]Slowking-Galar||KasibBerry|Regenerator|Flamethrower,IceBeam,SludgeBomb,ChillyReception|Calm|252,,204,,52,||,0,,,,|||,,,,,Poison]Forretress||SitrusBerry|Sturdy|StealthRock,GigaDrain,FlashCannon,Earthquake|Sassy|252,,56,,200,|||S||,,,,,Bug]Tera Captain|GreninjaBond|LifeOrb|BattleBond|DarkPulse,IceBeam,GrassKnot,Surf|Timid|,,96,252,,160|||||,,,,,Water"],
+ ["Enamorus||HeavyDutyBoots|CuteCharm|Moonblast,EarthPower,SludgeBomb,Imprison|Timid|,,,252,80,176||,0,,,,|||,,,,,Fairy]Weezing||RockyHelmet|Levitate|PainSplit,WillOWisp,SludgeBomb,Thief|Bold|248,,252,,8,|||||,,,,,Poison]Urshifu||ChoiceScarf|UnseenFist|WickedBlow,CloseCombat,SuckerPunch,Uturn|Adamant|,252,,,148,108|||||,,,,,Fighting]Tera Captain|Gholdengo|Leftovers|GoodasGold|Recover,MakeItRain,ShadowBall,NastyPlot|Bold|248,,252,,8,||,0,,,,|||,,,,,Steel]Azelf||SalacBerry|Levitate|Substitute,NastyPlot,Psyshock,Flamethrower|Timid|52,,,252,4,200||,0,,,,|||,,,,,Psychic]Gastrodon||Leftovers|StormDrain|Recover,Spikes,ClearSmog,Earthquake|Careful|248,,8,,252,|||||,,,,,Water","Tera Captain|Mimikyu|LifeOrb|Disguise|ShadowClaw,ShadowSneak,PlayRough,SwordsDance|Jolly|,252,96,,,160|||S||,,,,,Fairy]Tera Captain|Infernape|LifeOrb|Blaze|CloseCombat,FireBlast,TeraBlast,VacuumWave|Naive|,104,,164,,240|||S||,,,,,Dark]Forretress||Leftovers|Sturdy|Spikes,RapidSpin,VoltSwitch,BodyPress|Bold|252,,252,,4,|||||,,,,,Bug]Swampert||Leftovers|Torrent|StealthRock,FlipTurn,Earthquake,Yawn|Careful|252,,4,,252,|||S||,,,,,Water]Darkrai||WiseGlasses|BadDreams|DarkPulse,IceBeam,Hypnosis,NastyPlot|Timid|80,,,252,,176||,0,,,,|S||,,,,,Dark]Hydrapple||AssaultVest|Regenerator|GigaDrain,EarthPower,FickleBeam,GyroBall|Quiet|248,,,52,192,16|||S||,,,,,Grass"],
+ ["Glimmora||FocusSash|ToxicDebris|EarthPower,Spikes,PowerGem,SpikyShield|Timid|,,,252,4,252||,0,,,,|||,,,,,Rock]Alomomola||AssaultVest|Regenerator|FlipTurn,AlluringVoice,MirrorCoat,Scald|Calm|,,252,4,252,|||||,,,,,Water]Charjabug||Eviolite|Battery|StickyWeb,VoltSwitch,Lunge,MudShot|Sassy|252,4,,,252,|||||,,,,,Bug]Heatran||Leftovers|FlameBody|MagmaStorm,Protect,StealthRock,DragonPulse|Calm|252,,,4,252,||,0,,,,|||,,,,,Fire]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|PlayRough,IvyCudgel,HornLeech,Trailblaze|Jolly|16,252,,,,240|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Taunt,BleakwindStorm,Uturn,FocusBlast|Timid|248,,108,,,152|||||,,,,,Flying","Palafin-Hero||Leftovers|ZerotoHero|Substitute,BulkUp,JetPunch,BodySlam|Jolly|248,188,,,,72|||||,,,,,Water]Tera Captain|Torterra|HeavyDutyBoots|ShellArmor|Synthesis,TeraBlast,Earthquake,StealthRock|Impish|252,4,252,,,|||||,,,,,Fairy]Noivern||HeavyDutyBoots|Infiltrator|Hurricane,FocusBlast,Roost,Defog|Timid|160,,,196,,152||,0,,,,|||,,,,,Flying]Necrozma||HeavyDutyBoots|PrismArmor|DragonDance,PhotonGeyser,BrickBreak,Substitute|Jolly|120,252,,,,136|||||,,,,,Psychic]Kingambit||AssaultVest|Defiant|IronHead,KowtowCleave,LowKick,SuckerPunch|Adamant|252,76,,,180,|||||,,,,,Dark]Tera Captain|Toxtricity|ThroatSpray|PunkRock|Overdrive,TeraBlast,Boomburst,ShiftGear|Modest|200,,,252,,56||,0,,,,|||,,,,,Ground"],
+ ["Tera Captain|Mudsdale|Leftovers|Stamina|Earthquake,StoneEdge,BodyPress,StealthRock|Impish|252,,252,,4,|||||,,,,,Dragon]Tera Captain|Annihilape|MentalHerb|Defiant|RageFist,DrainPunch,BulkUp,Taunt|Adamant|248,20,136,,56,48|||||,,,,,Fairy]Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,CloseCombat,IcePunch|Adamant|232,252,,,,24|||||,,,,,Stellar]Cyclizar||HeavyDutyBoots|Regenerator|DracoMeteor,KnockOff,RapidSpin,ShedTail|Timid|88,,,244,,176|||||,,,,,Stellar]Pecharunt||CustapBerry|PoisonPuppeteer|FoulPlay,Toxic,PartingShot,DestinyBond|Bold|252,,248,,8,||,0,,,,|||,,,,,Stellar]Skarmory||RockyHelmet|Sturdy|BodyPress,IronDefense,Spikes,Roost|Bold|252,,252,,4,||,0,,,,|||,,,,,Stellar","Tornadus-Therian||HeavyDutyBoots|Regenerator|Taunt,NastyPlot,Hurricane,HeatWave|Timid|252,,44,36,,176||,0,,,,|||,,,,,Flying]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|Taunt,IvyCudgel,HornLeech,Encore|Jolly|80,252,,,,176|||||,,,,,Water]Garchomp||HabanBerry|RoughSkin|SwordsDance,Earthquake,DragonTail,FireFang|Adamant|124,168,,,,216|||||,,,,,Dragon]Samurott-Hisui||ChopleBerry|Sharpness|CeaselessEdge,SuckerPunch,HydroPump,Taunt|Naughty|112,232,,64,,100|||||,,,,,Water]Muk||RockyHelmet|StickyHold|PainSplit,Taunt,GunkShot,KnockOff|Impish|44,16,252,,,196|||||,,,,,Poison]Misdreavus||Eviolite|Levitate|Taunt,PainSplit,NightShade,DazzlingGleam|Timid|252,,152,60,16,28||,0,,,,|||,,,,,Ghost"],
+ ["Meowscarada||HeavyDutyBoots|Protean|PlayRough,TripleAxel,Uturn,FlowerTrick|Jolly|120,140,,,,248|||||,,,,,Grass]Chi-Yu||ChoiceSpecs|BeadsofRuin|FireBlast,Flamethrower,Overheat,DarkPulse|Modest|16,,,252,,240||,0,,,,|||,,,,,Dark]Maushold||HeavyDutyBoots|Technician|TidyUp,ThunderWave,Encore,PlayRough|Jolly|248,,172,,,88|||||,,,,,Normal]Tera Captain|Gholdengo|HeavyDutyBoots|GoodasGold|Recover,ShadowBall,FocusBlast,TeraBlast|Bold|248,,252,8,,||,0,,,,|||,,,,,Fire]Milotic||HeavyDutyBoots|CuteCharm|Scald,Recover,FlipTurn,Haze|Calm|248,,8,,252,|||||,,,,,Grass]Garchomp||Leftovers|RoughSkin|DragonTail,Spikes,StealthRock,FireBlast|Lax|200,,196,52,,60|||||,,,,,Dragon","Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,VacuumWave,Thunderbolt,Psyshock|Modest|,,4,252,,252||,0,,,,|||,,,,,Fairy]Garchomp||ChoiceBand|RoughSkin|Earthquake,DragonClaw,IronHead,Outrage|Jolly|,252,,,4,252|||||,,,,,Dragon]Tera Captain|Lanturn|AssaultVest|WaterAbsorb|FlipTurn,Discharge,IceBeam,Scald|Calm|252,,4,,252,|||||,,,,,Flying]Metagross||FocusSash|ClearBody|StealthRock,HammerArm,Explosion,MeteorMash|Jolly|,252,,,4,252|||||,,,,,Steel]Tera Captain|Zarude|HeavyDutyBoots|LeafGuard|KnockOff,Trailblaze,PowerWhip,CloseCombat|Jolly|,252,24,,,232|||||,,,,,Fighting]Tornadus-Therian||HeavyDutyBoots|Regenerator|NastyPlot,Taunt,BleakwindStorm,Uturn|Timid|176,,,212,16,104|||||,,,,,Flying"],
+ ["Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|CloseCombat,HeadlongRush,KnockOff,IceSpinner|Jolly|,252,4,,,252|||||,,,,,Stellar]Enamorus||ChoiceSpecs|Contrary|Moonblast,MysticalFire,HealingWish,AlluringVoice|Timid|,,32,252,,224||,0,,,,|||,,,,,Fairy]Rotom-Heat||ChoiceScarf|Levitate|VoltSwitch,WillOWisp,Trick,ThunderWave|Calm|248,,,,112,148||,0,,,,|||,,,,,Electric]Clodsire||BlackSludge|Unaware|Toxic,Earthquake,Recover,Spikes|Impish|248,,220,,40,|||||,,,,,Poison]Kingambit||ChoiceBand|SupremeOverlord|KowtowCleave,IronHead,Fling,SuckerPunch|Adamant|248,252,8,,,|||||,,,,,Dark]Iron Bundle||ChoiceSpecs|QuarkDrive|FreezeDry,IceBeam,HydroPump,FlipTurn|Modest|28,,,252,,228|||||,,,,,Ice","Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,AuraSphere,Psychic,Encore|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Garchomp||LifeOrb|RoughSkin|Earthquake,Substitute,StoneEdge,Surf|Naive|248,,,124,,136|||||,,,,,Dragon]Rotom-Wash||MentalHerb|Levitate|Substitute,NastyPlot,StoredPower,HydroPump|Timid|248,,24,,152,84||,0,,,,|||,,,,,Electric]Tera Captain|Scizor|RockyHelmet|Technician|BulletPunch,Uturn,VacuumWave,QuickAttack|Brave|248,96,164,,,|||||,,,,,Rock]Tera Captain|Braviary|ChoiceScarf|SheerForce|BodySlam,Facade,CloseCombat,DoubleEdge|Adamant|8,252,4,,,244|||||,,,,,Normal]Uxie||SitrusBerry|Levitate|StealthRock,Uturn,Encore,PainSplit|Careful|252,,4,,252,|||||,,,,,Psychic"],
+ ["Primarina||RockyHelmet|Torrent|FlipTurn,Moonblast,Surf,Encore|Bold|252,,252,4,,|||||,,,,,Water]Scrafty||AssaultVest|Intimidate|KnockOff,DrainPunch,IronHead,SuperFang|Impish|252,,232,,,24|||||,,,,,Dark]Pecharunt||ShucaBerry|PoisonPuppeteer|DestinyBond,Recover,PartingShot,MalignantChain|Bold|252,,252,,,||,0,,,,|||,,,,,Poison]Iron Treads||OccaBerry|QuarkDrive|IronHead,StealthRock,RapidSpin,Earthquake|Careful|252,4,,,252,|||||,,,,,Ground]Tera Captain|Kilowattrel|ChoiceSpecs|VoltAbsorb|Uturn,Thunderbolt,TeraBlast,AirSlash|Timid|48,,,252,,208|||||,,,,,Fairy]Tera Captain|Latias|Leftovers|Levitate|Recover,AuraSphere,MistBall,CalmMind|Timid|252,,160,,,96||,0,,,,|||,,,,,Fairy","Ribombee||HeavyDutyBoots|ShieldDust|QuiverDance,BugBuzz,Moonblast,Psychic|Modest|,,16,252,,240||,0,,,,|||,,,,,Bug]Cinderace||HeavyDutyBoots|Libero|Uturn,GunkShot,CourtChange,PyroBall|Jolly|,252,,,64,192|||||,,,,,Fire]Donphan||SafetyGoggles|Sturdy|RapidSpin,Encore,Earthquake,StealthRock|Careful|252,60,,,108,88|||||,,,,,Ground]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Thunderclap,TeraBlast,DragonPulse,CalmMind|Modest|120,,,252,,136||,20,,,,|||,,,,,Ground]Kingambit||Leftovers|SupremeOverlord|KowtowCleave,SuckerPunch,IronHead,SwordsDance|Adamant|,252,,,172,84|||||,,,,,Dark]Palafin||ChoiceBand|ZerotoHero|FlipTurn,JetPunch,WaveCrash,ZenHeadbutt|Adamant|,252,,,96,160|||||,,,,,Water"],
+ ["Palafin-Hero||PunchingGlove|ZerotoHero|BulkUp,DrainPunch,BodySlam,JetPunch|Adamant|184,224,4,,,96|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|NastyPlot,SludgeBomb,HeatWave,Hurricane|Timid|248,,28,48,8,176||,0,,,,|||,,,,,Flying]Tera Captain|RagingBolt|Leftovers|Protosynthesis|CalmMind,DragonPulse,Thunderbolt,Thunderclap|Modest|56,,244,124,84,||,20,,,,|||,,,,,Bug]Terapagos||HeavyDutyBoots|TeraShift|Toxic,TeraStarstorm,EarthPower,RapidSpin|Modest|96,,,220,,192|||||,,,,,Stellar]Tinkaton||RockyHelmet|MoldBreaker|Encore,StealthRock,PlayRough,KnockOff|Careful|248,,248,,12,|||||,,,,,Fairy]Dusclops||Eviolite|Pressure|Curse,NightShade,PainSplit,Haze|Calm|72,,184,,252,||,0,,,,|||,,,,,Ghost","Iron Treads||AssaultVest|QuarkDrive|IceSpinner,RapidSpin,Earthquake,VoltSwitch|Adamant|120,128,,,252,8|||||,,,,,Ground]Tera Captain|Latias|Leftovers|Levitate|Thunderbolt,Psyshock,CalmMind,Recover|Timid|252,,104,52,,100||,0,,,,|||,,,,,Poison]Tera Captain|Lucario|LifeOrb|Steadfast|FlashCannon,AuraSphere,NastyPlot,VacuumWave|Modest|32,,8,252,,216||,0,,,,|||,,,,,Electric]Meowscarada||FocusSash|Protean|FlowerTrick,KnockOff,TripleAxel,Spikes|Jolly|16,252,,,,240|||||,,,,,Grass]Eiscue||RockyHelmet|IceFace|FreezeDry,Whirlpool,Snowscape,AuroraVeil|Timid|252,,,72,,184||,0,,,,|||,,,,,Ice]Rotom-Heat||ChoiceScarf|Levitate|Thunderbolt,VoltSwitch,Overheat,Trick|Modest|84,,,252,,172||,0,,,,|||,,,,,Electric"],
+ ["Slither Wing||RockyHelmet|Protosynthesis|Uturn,CloseCombat,WillOWisp,MorningSun|Impish|252,,252,,4,|||||,,,,,Bug]Slowking-Galar||ColburBerry|Regenerator|Psychic,FireBlast,ThunderWave,ChillyReception|Calm|248,,8,,252,||,0,,,,|||,,,,,Poison]Tera Captain|Jolteon|ThroatSpray|VoltAbsorb|Thunderbolt,AlluringVoice,TeraBlast,VoltSwitch|Timid|72,,,252,,184||,0,,,,|||,,,,,Ground]Tera Captain|Ogerpon|HeavyDutyBoots|Defiant|IvyCudgel,KnockOff,Uturn,Encore|Jolly|,252,4,,,252|||||,,,,,Grass]Baxcalibur||HeavyDutyBoots|ThermalExchange|IcicleCrash,Earthquake,IceShard,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Dragon]Hydreigon||RoseliBerry|Levitate|DracoMeteor,EarthPower,FireBlast,NastyPlot|Timid|,,,196,88,224||,0,,,,|||,,,,,Dark","Tornadus-Therian||HeavyDutyBoots|Regenerator|Taunt,KnockOff,Hurricane,Uturn|Timid|160,,96,84,,168|||||,,,,,Flying]Zarude|||LeafGuard|KnockOff,Acrobatics,CloseCombat,Taunt|Jolly|80,196,,,32,200|||||,,,,,Dark]Tinkaton||ShucaBerry|Pickpocket|StealthRock,KnockOff,GigatonHammer,PlayRough|Impish|252,48,208,,,|||||,,,,,Fairy]Tera Captain|Mesprit|Leftovers|Levitate|CalmMind,Psyshock,DrainingKiss,Encore|Modest|252,,132,124,,||,0,,,,|||,,,,,Fairy]Great Tusk||AssaultVest|Protosynthesis|HeadlongRush,PlayRough,KnockOff,RapidSpin|Jolly|,200,,,56,252|||||,,,,,Ground]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,DazzlingGleam,FireBlast,FlashCannon|Timid|120,,4,132,,252||,0,,,,|||,,,,,Fire"],
+ ["Tera Captain|Feraligatr|LifeOrb|SheerForce|SwordsDance,Liquidation,AquaJet,IcePunch|Adamant|176,252,,,,80|||||,,,,,Water]Great Tusk||BoosterEnergy|Protosynthesis|BulkUp,HeadlongRush,ZenHeadbutt,IceSpinner|Jolly|248,4,,,4,252|||||,,,,,Ground]Latios||ColburBerry|Levitate|CalmMind,Thunderbolt,LusterPurge,AuraSphere|Timid|64,,,252,,192||,0,,,,|||,,,,,Dragon]Meowscarada||MeadowPlate|Overgrow|KnockOff,ToxicSpikes,FlowerTrick,Taunt|Jolly|56,252,,,,200|||||,,,,,Grass]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|Agility,TeraBlast,SludgeWave,Thunderbolt|Modest|112,,,252,,144||,0,,,,|||,,,,,Fairy]Heatran||ChopleBerry|FlameBody|WillOWisp,Earthquake,HeavySlam,StealthRock|Impish|64,108,244,,,92|||||,,,,,Fire","Iron Valiant||ChoiceScarf|QuarkDrive|Moonblast,CloseCombat,SpiritBreak,DestinyBond|Naive|,108,,192,,208|||||,,,,,Fairy]Garchomp||EjectPack|RoughSkin|Earthquake,DracoMeteor,ScaleShot,StealthRock|Jolly|,252,,,8,248|||||,,,,,Dragon]Empoleon||CustapBerry|Torrent|FlipTurn,Endure,Haze,Roost|Sassy|252,8,,,248,|||||,,,,,Water]Tera Captain|Ceruledge|AirBalloon|FlashFire|BitterBlade,Poltergeist,ShadowSneak,BulkUp|Jolly|56,252,,,,200|||||,,,,,Grass]Tsareena||ChoiceScarf|QueenlyMajesty|PowerWhip,TripleAxel,LowKick,Uturn|Jolly|40,252,4,,,212|||||,,,,,Grass]Weezing-Galar||BabiriBerry|Levitate|StrangeSteam,Thief,Defog,PainSplit|Bold|252,,252,4,,|||||,,,,,Poison"],
+ ["Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|HeadlongRush,CloseCombat,IceSpinner,BulkUp|Jolly|248,4,4,,,252|||||,,,,,Steel]Manaphy||Leftovers|Hydration|TakeHeart,AcidArmor,Scald,AlluringVoice|Timid|,,,252,16,240||,0,,,,|||,,,,,Water]Hatterene||Leftovers|MagicBounce|CalmMind,Psyshock,MysticalFire,Nuzzle|Calm|252,,,4,252,|||||,,,,,Psychic]Smeargle||FocusSash|OwnTempo|StickyWeb,Spikes,StealthRock,Nuzzle|Careful|252,,4,,252,|||||,,,,,Normal]Kyurem||LoadedDice|Pressure|DragonDance,IcicleSpear,StoneEdge,EarthPower|Lonely|,252,,64,,192|||||,,,,,Dragon]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,IvyCudgel,KnockOff,LowKick|Jolly|,252,,,4,252|||||,,,,,Fire","Iron Crown||BoosterEnergy|QuarkDrive|TachyonCutter,Psychic,FocusBlast,CalmMind|Timid|84,,,172,,252||,20,,,,|||,,,,,Steel]Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|IvyCudgel,PowerWhip,Superpower,Uturn|Jolly|,252,,,4,252|||||,,,,,Rock]Dewgong||HeavyDutyBoots|ThickFat|FlipTurn,KnockOff,AlluringVoice,Charm|Sassy|248,,8,,252,|||||,,,,,Water]Tera Captain|Armarouge|WeaknessPolicy|WeakArmor|ArmorCannon,PsychicTerrain,Endure,Psychic|Timid|40,,,252,,216||,0,,,,|||,,,,,Dark]Roaring Moon||ChoiceScarf|Protosynthesis|Uturn,KnockOff,DragonClaw,BrickBreak|Jolly|72,252,,,,184|||||,,,,,Dragon]Ursaluna-Bloodmoon||ChopleBerry|MindsEye|BloodMoon,EarthPower,VacuumWave,CalmMind|Modest|252,,,252,,4||,0,,,,|||,,,,,Ground"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,DrainPunch,SpiritBreak,DestinyBond|Jolly|48,252,,,,208|||||,,,,,Fairy]Tera Captain|Zapdos|HeavyDutyBoots|Static|Discharge,Roost,VoltSwitch,Hurricane|Bold|212,,252,,,44||,0,,,,|||,,,,,Grass]Iron Treads||PasshoBerry|QuarkDrive|RapidSpin,SupercellSlam,IceSpinner,Earthquake|Jolly|,252,48,,,208|||||,,,,,Ground]Tera Captain|Sinistcha|Leftovers|Heatproof|CalmMind,MatchaGotcha,StrengthSap,ShadowBall|Bold|252,,160,,,96||,0,,,,|||,,,,,Steel]Crocalor||Eviolite|Unaware|WillOWisp,Roar,Flamethrower,SlackOff|Calm|252,,172,,84,||,0,,,,|||,,,,,Fire]Deoxys-Defense||HeavyDutyBoots|Pressure|Recover,Spikes,Teleport,PsychicNoise|Bold|252,,108,,148,||,0,,,,|||,,,,,Psychic","Tera Captain|Latias|MentalHerb|Levitate|CalmMind,Recover,Thunderbolt,MistBall|Modest|184,,,252,,72||,0,,,,|||,,,,,Electric]Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,WaveCrash,FlipTurn,IcePunch|Adamant|160,252,,,,96|||||,,,,,Normal]Meowscarada||ProtectivePads|Protean|TripleAxel,KnockOff,FlowerTrick,Taunt|Jolly|56,252,,,,200|||||,,,,,Normal]Tinkaton||SitrusBerry|Pickpocket|StealthRock,Encore,KnockOff,GigatonHammer|Careful|252,,,,220,36|||||,,,,,Normal]Iron Hands||RoseliBerry|QuarkDrive|SwordsDance,DrainPunch,IcePunch,ThunderPunch|Adamant|,252,52,,204,|||||,,,,,Normal]Donphan||RockyHelmet|Sturdy|Earthquake,KnockOff,IceShard,RapidSpin|Impish|252,4,252,,,|||||,,,,,Normal"],
+ ["Tera Captain|Mew|Leftovers|Synchronize|Psychic,AuraSphere,VacuumWave,NastyPlot|Modest|44,,16,252,,196||,0,,,,|||,,,,,Fighting]Tera Captain|MoltresGalar|SitrusBerry|Berserk|AirSlash,TeraBlast,NastyPlot,Agility|Timid|68,,12,252,,176||,0,,,,|||,,,,,Ground]Rotom-Heat||RockyHelmet|Levitate|VoltSwitch,Overheat,WillOWisp,PainSplit|Bold|248,,252,8,,||,0,,,,|||,,,,,Stellar]Iron Treads||AirBalloon|QuarkDrive|KnockOff,IceSpinner,RapidSpin,StealthRock|Adamant|108,252,,,,148|||||,,,,,Stellar]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,Psychic,ShadowBall,VacuumWave|Modest|184,,,252,4,68||,0,,,,|||,,,,,Stellar]Amoonguss||RockyHelmet|Regenerator|SludgeBomb,GigaDrain,Spore,Synthesis|Calm|252,,,4,252,||,0,,,,|||,,,,,Stellar","Politoed||ChestoBerry|Drizzle|Encore,Surf,Psychic,Rest|Bold|252,,252,,4,||,0,,,,|S||,,,,,Water]Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,WaveCrash,IcePunch|Adamant|,252,4,,,252|||||,,,,,Water]Archaludon||Leftovers|Stamina|DracoMeteor,BodyPress,StealthRock,FlashCannon|Modest|120,,128,4,252,4||,0,,,,|||,,,,,Steel]Tera Captain|Annihilape|ChoiceScarf|VitalSpirit|Uturn,GunkShot,RageFist,DrainPunch|Adamant|,144,60,,192,112|||S||,,,,,Poison]Zapdos||Leftovers|Pressure|Substitute,Charge,HeatWave,Discharge|Timid|240,,124,,,144||,0,,,,|||,,,,,Electric]Tera Captain|Overqwil|PoisonBarb|SwiftSwim|SwordsDance,GunkShot,Liquidation,RainDance|Adamant|128,252,128,,,|||S||,,,,,Water"],
+ ["Tera Captain|Annihilape|Leftovers|Defiant|DrainPunch,RageFist,BulkUp,Taunt|Careful|252,,,,88,168|||||,,,,,Poison]Roaring Moon||HeavyDutyBoots|Protosynthesis|Uturn,KnockOff,IronHead,Roost|Adamant|208,252,4,,,44|||||,,,,,Steel]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,Encore,HornLeech,LeechSeed|Adamant|136,252,,,4,116|||||,,,,,Fire]Corviknight||Leftovers|Pressure|Defog,IronDefense,BodyPress,Roost|Bold|248,,252,,,8||,0,,,,|||,,,,,Dragon]Gligar||Eviolite|Immunity|KnockOff,DualWingbeat,Toxic,StealthRock|Careful|248,,76,,176,8|||||,,,,,Water]Tera Captain|Dudunsparce|HeavyDutyBoots|Rattled|Roost,Toxic,CalmMind,ShadowBall|Calm|252,,92,,120,44||,0,,,,|||,,,,,Fairy","Meowscarada||ChoiceBand|Protean|KnockOff,TripleAxel,FlowerTrick,Uturn|Jolly|56,252,,,,200|||||,,,,,Grass]Tera Captain|RagingBolt|EjectPack|Protosynthesis|Thunderclap,DracoMeteor,VoltSwitch,Discharge|Modest|252,,,252,4,||,20,,,,|||,,,,,Fairy]Tera Captain|Chandelure|ChoiceScarf|FlameBody|Flamethrower,Overheat,EnergyBall,Memento|Timid|8,,,252,,248||,0,,,,|||,,,,,Fire]Ting-Lu||MentalHerb|VesselofRuin|Memento,StealthRock,StoneEdge,Earthquake|Impish|252,164,92,,,|||||,,,,,Dark]Hawlucha||WhiteHerb|Unburden|SwordsDance,CloseCombat,Acrobatics,BraveBird|Jolly|16,252,,,,240|||||,,,,,Fighting]Araquanid||Leftovers|WaterBubble|Liquidation,StickyWeb,Infestation,Protect|Adamant|252,120,92,,36,8|||||,,,,,Water"],
+ ["Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,PlayRough,Trailblaze,SwordsDance|Adamant|8,252,56,,4,188|||||,,,,,Water]Weavile||HeavyDutyBoots|Pickpocket|KnockOff,TripleAxel,LowKick,Taunt|Jolly|56,252,8,,8,184|||||,,,,,Dark]Iron Crown||Leftovers|QuarkDrive|TachyonCutter,Psyshock,CalmMind,Substitute|Modest|228,,20,148,40,72||,20,,,,|||,,,,,Steel]Great Tusk||RockyHelmet|Protosynthesis|BodyPress,Earthquake,StealthRock,RapidSpin|Impish|176,8,208,,4,112|||||,,,,,Ground]Tera Captain|Diancie|Leftovers|ClearBody|BodyPress,PlayRough,TrickRoom,Encore|Careful|252,4,36,,216,|||||,,,,,Grass]Alomomola||RedCard|Regenerator|FlipTurn,Acrobatics,Wish,Protect|Relaxed|248,8,252,,,||,,,,,0|||,,,,,Water","Tyranitar||SmoothRock|SandStream|IceBeam,ThunderWave,KnockOff,Thunderbolt|Quiet|252,,,252,,|||||,,,,,Rock]Tera Captain|Excadrill|ExpertBelt|SandRush|SwordsDance,TeraBlast,RockSlide,Earthquake|Jolly|,252,56,,,200|||||,,,,,Grass]Terapagos||ChoiceSpecs|TeraShift|EarthPower,TeraStarstorm,FlashCannon,Thunderbolt|Modest|196,,,252,8,52||,15,,,,|||,,,,,Stellar]Latios||ChoiceScarf|Levitate|DracoMeteor,AuraSphere,LusterPurge,ShadowBall|Timid|92,,,252,4,160||,0,,,,|||,,,,,Dragon]Tera Captain|Milotic|FlameOrb|MarvelScale|Recover,AlluringVoice,Scald,Haze|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Sableye||RockyHelmet|Prankster|BulkUp,DrainPunch,WillOWisp,KnockOff|Impish|252,,252,,4,|||||,,,,,Dark"],
+ ["Tera Captain|Ogerpon|LumBerry|Defiant|WoodHammer,StompingTantrum,Encore,KnockOff|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Lokix|HeavyDutyBoots|TintedLens|FirstImpression,Substitute,SuckerPunch,KnockOff|Adamant|248,252,,,,8|||||,,,,,Dark]Copperajah||Leftovers|SheerForce|SleepTalk,Earthquake,IronHead,PlayRough|Adamant|248,216,8,,36,|||||,,,,,Steel]Rotom-Heat||ChoiceScarf|Levitate|Trick,WillOWisp,VoltSwitch,Overheat|Modest|248,,,84,,176||,0,,,,|||,,,,,Electric]Iron Valiant||HeavyDutyBoots|QuarkDrive|FocusBlast,Moonblast,VacuumWave,Psyshock|Timid|,,,252,48,208||,0,,,,|||,,,,,Fairy]Tentacruel||BlackSludge|LiquidOoze|MirrorCoat,RapidSpin,FlipTurn,Surf|Calm|248,,8,,252,|||||,,,,,Water","Tera Captain|Latias|Leftovers|Levitate|CalmMind,Recover,Psyshock,DragonPulse|Timid|252,,124,,,132||,0,,,,|||,,,,,Poison]Greninja-Bond||LifeOrb|BattleBond|WaterShuriken,IceBeam,DarkPulse,Surf|Timid|48,,,252,,208|||||,,,,,Water]Tinkaton||AirBalloon|Pickpocket|StealthRock,PlayRough,ThunderWave,GigatonHammer|Careful|252,,116,,140,|||S||,,,,,Fairy]Amoonguss||RockyHelmet|Regenerator|Synthesis,SludgeBomb,ClearSmog,Toxic|Bold|252,,208,,48,||,0,,,,|||,,,,,Grass]Heatran||ChopleBerry|FlashFire|MagmaStorm,Protect,PowerGem,EarthPower|Calm|252,,,96,160,||,0,,,,|S||,,,,,Fire]Great Tusk||CustapBerry|Protosynthesis|RapidSpin,IceSpinner,HeadlongRush,Endeavor|Jolly|252,,,,208,48|||||,,,,,Ground"],
+ ["Tera Captain|Okidogi|Leftovers|ToxicChain|Substitute,BulkUp,DrainPunch,HighHorsepower|Adamant|140,252,,,4,112|||||,,,,,Fire]Iron Hands||PunchingGlove|QuarkDrive|ThunderPunch,DrainPunch,Substitute,SwordsDance|Adamant|,248,124,,,136|||||,,,,,Fighting]Tera Captain|Hydreigon|ChoiceSpecs|Levitate|DarkPulse,DracoMeteor,StealthRock,FlashCannon|Modest|84,,,252,4,168||,0,,,,|||,,,,,Dark]Scizor||RockyHelmet|Technician|Uturn,Defog,BulletPunch,KnockOff|Impish|248,,252,,8,|||||,,,,,Bug]Fezandipiti||ChoiceScarf|ToxicChain|Uturn,PlayRough,BeatUp,Facade|Jolly|,252,,,4,252|||||,,,,,Poison]Mandibuzz||HeavyDutyBoots|Overcoat|Uturn,FoulPlay,Roost,Defog|Impish|248,,252,,8,|||||,,,,,Dark","Tera Captain|Alomomola|AssaultVest|Regenerator|FlipTurn,PlayRough,Liquidation,Scald|Sassy|252,,4,,252,|||||,,,,,Fairy]Slowking-Galar||ShucaBerry|Regenerator|ChillyReception,Flamethrower,Psychic,Toxic|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Moltres||ChoiceSpecs|FlameBody|Overheat,Flamethrower,Hurricane,AirSlash|Timid|24,,4,252,,228||,0,,,,|||,,,,,Fire]Tera Captain|RagingBolt|ChoiceScarf|Protosynthesis|VoltSwitch,Thunderbolt,DracoMeteor,DragonPulse|Modest|80,,,252,,176||,20,,,,|||,,,,,Electric]Meowscarada||ChoiceBand|Protean|Uturn,KnockOff,TripleAxel,Trick|Adamant|8,252,4,,,244|||||,,,,,Grass]Iron Treads||FocusSash|QuarkDrive|Earthquake,IceSpinner,RapidSpin,StealthRock|Jolly|,252,,,4,252|||||,,,,,Ground"],
+ ["Garchomp||LumBerry|RoughSkin|SwordsDance,IronHead,Earthquake,ScaleShot|Jolly|16,252,,,,240|||S||,,,,,Dragon]Tera Captain|Diancie|Leftovers|ClearBody|Spikes,EarthPower,CalmMind,Psychic|Sassy|252,,,4,252,||,0,,,,|||,,,,,Grass]Greninja||ExpertBelt|Protean|Extrasensory,GrassKnot,IceBeam,Surf|Timid|72,,,252,,184||,0,,,,|||,,,,,Water]Terapagos||Leftovers|TeraShift|RapidSpin,CalmMind,TeraStarstorm,EarthPower|Modest|120,,,252,4,132|||||,,,,,Stellar]Tera Captain|Ogerpon|LumBerry|Defiant|HornLeech,KnockOff,ZenHeadbutt,Synthesis|Jolly|248,84,,,,176|||||,,,,,Grass]Swalot||BlackSludge|StickyHold|Earthquake,KnockOff,ClearSmog,PainSplit|Sassy|248,8,,,252,|||||,,,,,Poison","Tera Captain|Serperior|Leftovers|Contrary|Glare,LeechSeed,Substitute,LeafStorm|Timid|252,,,88,,168||,0,,,,|||,,,,,Poison]Skeledirge||ShucaBerry|Unaware|TorchSong,AlluringVoice,WillOWisp,SlackOff|Calm|248,,,8,252,||,0,,,,|||,,,,,Fire]Weezing-Galar||Leftovers|Levitate|StrangeSteam,WillOWisp,Defog,PainSplit|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Tinkaton||AirBalloon|MoldBreaker|ThunderWave,Encore,Endeavor,PlayRough|Careful|252,48,,,208,|||||,,,,,Fairy]Palafin||ChoiceBand|ZerotoHero|WaveCrash,JetPunch,FlipTurn,CloseCombat|Jolly|40,252,,,,216|||||,,,,,Water]Ting-Lu||RindoBerry|VesselofRuin|Payback,Earthquake,StealthRock,Whirlwind|Adamant|4,252,,,252,|||||,,,,,Dark"],
+ ["Iron Treads||Leftovers|QuarkDrive|BodyPress,RapidSpin,IronDefense,Protect|Jolly|48,,252,,,208|||||,,,,,Ground]Tera Captain|Latias|BabiriBerry|Levitate|Recover,CalmMind,DrainingKiss,Psyshock|Timid|248,,4,184,,72||,0,,,,|||,,,,,Fairy]Gouging Fire||HeavyDutyBoots|Protosynthesis|MorningSun,FlareBlitz,BreakingSwipe,DragonDance|Jolly|248,32,4,,,224|||||,,,,,Fire]Greninja||Leftovers|Protean|Haze,DarkPulse,IceBeam,ToxicSpikes|Timid|248,,,4,96,160||,0,,,,|||,,,,,Water]Tera Captain|Toxicroak|LifeOrb|DrySkin|NastyPlot,VacuumWave,SludgeWave,FocusBlast|Modest|168,,4,252,,84||,0,,,,|||,,,,,Fighting]Snorlax||Leftovers|ThickFat|Facade,Protect,Yawn,Curse|Careful|88,4,228,,188,|||||,,,,,Normal","Roaring Moon||LoadedDice|Protosynthesis|ScaleShot,KnockOff,StoneEdge,Uturn|Adamant|4,252,,,,252|||||,,,,,Dragon]Klefki||LightClay|Prankster|PlayRough,Spikes,Reflect,LightScreen|Careful|252,4,,,252,|||||,,,,,Steel]Tera Captain|GreatTusk|HeavyDutyBoots|Protosynthesis|HeadlongRush,HeavySlam,RapidSpin,StoneEdge|Jolly|,252,,,4,252|||S||,,,,,Fairy]Rotom-Heat||HeavyDutyBoots|Levitate|ThunderWave,FoulPlay,Overheat,VoltSwitch|Bold|252,,252,,,4||,0,,,,|||,,,,,Electric]Manaphy||Leftovers|Hydration|FlipTurn,Scald,Haze,AlluringVoice|Bold|252,,252,,,4|||||,,,,,Water]Tera Captain|Espeon|AssaultVest|MagicBounce|AlluringVoice,Psyshock,PsychicNoise,GrassKnot|Modest|72,,,184,252,||,0,,,,|||,,,,,Dark"],
+ ["Palafin-Hero||LifeOrb|ZerotoHero|Boomburst,JetPunch,IceBeam,WaveCrash|Naive|,4,,252,,252|||||,,,,,Water]Iron Treads||Leftovers|QuarkDrive|StealthRock,RapidSpin,IceSpinner,HighHorsepower|Jolly|252,,,,48,208|||||,,,,,Ground]Tera Captain|Rillaboom|ChoiceBand|GrassySurge|GrassyGlide,Uturn,KnockOff,BrickBreak|Adamant|128,252,,,,128|||||,,,,,Electric]Tera Captain|Armarouge|ChoiceScarf|FlashFire|Trick,Psychic,TeraBlast,ArmorCannon|Modest|,,4,252,,252||,0,,,,|||,,,,,Fairy]Weezing||Leftovers|NeutralizingGas|ToxicSpikes,PainSplit,SludgeBomb,Flamethrower|Calm|252,,4,,252,||,0,,,,|||,,,,,Poison]Tornadus-Therian||AssaultVest|Regenerator|HeatWave,Uturn,KnockOff,BleakwindStorm|Timid|248,,,,68,192|||||,,,,,Flying","Gouging Fire||BoosterEnergy|Protosynthesis|FlareBlitz,DoubleEdge,PsychicFangs,DragonDance|Adamant|120,252,4,,,132|||||,,,,,Fire]Zapdos||HeavyDutyBoots|Static|Discharge,HeatWave,EerieImpulse,Roost|Timid|248,,104,,20,136||,0,,,,|||,,,,,Electric]Quaquaval||LumBerry|Moxie|AquaStep,BrickBreak,UpperHand,SwordsDance|Adamant|76,252,,,,180|||||,,,,,Water]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,Glare,Substitute,LeechSeed|Timid|248,,4,56,,200||,0,,,,|||,,,,,Grass]Jirachi||Leftovers|SereneGrace|IronHead,BodySlam,Wish,Protect|Jolly|248,124,,,,136|||||,,,,,Steel]Grimmsnarl||LightClay|Prankster|DarkPulse,Reflect,Taunt,LightScreen|Modest|252,,,156,,100||,0,,,,|||,,,,,Dark"],
+ ["Great Tusk||HeavyDutyBoots|Protosynthesis|Earthquake,IceSpinner,KnockOff,RapidSpin|Adamant|248,164,,,,96|||||,,,,,Ground]Tera Captain|Latias|Leftovers|Levitate|Thunderbolt,MistBall,CalmMind,Recover|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Greninja-Bond||ExpertBelt|BattleBond|HydroPump,IceBeam,GunkShot,WaterShuriken|Naive|,96,,252,,160|||||,,,,,Water]Tinkaton||AirBalloon|Pickpocket|GigatonHammer,KnockOff,Reflect,Encore|Jolly|248,,196,,,64|||||,,,,,Fairy]Muk||BlackSludge|PoisonTouch|PoisonJab,KnockOff,IcePunch,RockTomb|Careful|232,,,,252,24|||||,,,,,Poison]Tera Captain|Frosmoth|HeavyDutyBoots|IceScales|IceBeam,TeraBlast,GigaDrain,QuiverDance|Timid|64,,,252,4,188||,0,,,,|||,,,,,Water","Tera Captain|IronHands|KeeBerry|QuarkDrive|SwordsDance,DrainPunch,HeavySlam,Earthquake|Careful|248,,,,252,8|||||,,,,,Fairy]Garchomp||LifeOrb|RoughSkin|Earthquake,DracoMeteor,IronHead,Liquidation|Naive|,252,,4,,252|||||,,,,,Dragon]Iron Moth||BoosterEnergy|QuarkDrive|FieryDance,SludgeWave,AcidSpray,EnergyBall|Timid|,,,132,124,252||,0,,,,|||,,,,,Fire]Primarina||Leftovers|LiquidVoice|Moonblast,PsychicNoise,Encore,DrainingKiss|Calm|252,,4,,252,||,0,,,,|||,,,,,Water]Bronzong||ColburBerry|Levitate|GyroBall,StealthRock,BodyPress,Psychic|Relaxed|252,4,252,,,||,,,,,0|||,,,,,Steel]Volbeat||RockyHelmet|Prankster|Encore,Uturn,Roost,SeismicToss|Careful|252,,4,,252,|||||,,,,,Bug"],
+ ["Palafin-Hero||ChoiceScarf|ZerotoHero|WaveCrash,CloseCombat,JetPunch,FlipTurn|Adamant|16,252,,,,240|||||,,,,,Water]Tera Captain|Clefable|Leftovers|Unaware|Moonblast,ThunderWave,Protect,Wish|Bold|252,,248,,8,||,0,,,,|||,,,,,Steel]Blaziken||Charcoal|SpeedBoost|CloseCombat,TemperFlare,Uturn,Protect|Adamant|,252,24,,,232|||||,,,,,Fire]Tera Captain|Toxtricity|ThroatSpray|PunkRock|Boomburst,TeraBlast,VoltSwitch,ShiftGear|Timid|40,,,252,,216||,0,,,,|||,,,,,Ground]Latios||ColburBerry|Levitate|Psyshock,AuraSphere,CalmMind,Recover|Timid|252,,,,4,252||,0,,,,|||,,,,,Dragon]Sandslash||AssaultVest|SandVeil|Earthquake,KnockOff,RapidSpin,SuperFang|Careful|252,4,,,252,|||||,,,,,Ground","Meowscarada||ChoiceBand|Protean|KnockOff,FlowerTrick,Trick,SuckerPunch|Jolly|,252,104,,,152|||||,,,,,Grass]Gengar||RockyHelmet|CursedBody|ShadowBall,WillOWisp,Encore,Psychic|Timid|248,,192,,,68||,0,,,,|||,,,,,Ghost]Landorus-Therian||Leftovers|Intimidate|BulkUp,Earthquake,Taunt,Uturn|Careful|248,,32,,228,|||||,,,,,Ground]Tera Captain|Quaquaval|Leftovers|Moxie|AquaStep,Roost,Uturn,RapidSpin|Impish|252,4,252,,,|||||,,,,,Water]Heatran||Leftovers|FlameBody|StealthRock,HeavySlam,EarthPower,Protect|Sassy|248,,8,,252,|||||,,,,,Fire]Bellibolt||RockyHelmet|Static|VoltSwitch,MuddyWater,SlackOff,Toxic|Bold|252,,152,,104,||,0,,,,|||,,,,,Electric"],
+ ["Dachsbun||Leftovers|WellBakedBody|Wish,Protect,BodyPress,Yawn|Impish|252,,252,,4,||,0,,,,|||,,,,,Fairy]Slowking||Leftovers|Regenerator|ChillyReception,Psychic,IceBeam,ThunderWave|Calm|252,,,4,252,||,0,,,,|||,,,,,Water]Talonflame||HeavyDutyBoots|GaleWings|DualWingbeat,Defog,Roost,Overheat|Naive|,252,,16,,240|||||,,,,,Fire]Sneasler||AirBalloon|Unburden|RockSlide,DireClaw,CloseCombat,SwordsDance|Jolly|84,252,,,,172|||||,,,,,Fighting]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|Thunderbolt,DracoMeteor,WeatherBall,Thunderclap|Modest|252,,,252,4,||,20,,,,|||,,,,,Grass]Tera Captain|Froslass|LifeOrb|CursedBody|TeraBlast,Blizzard,ShadowBall,Spikes|Timid|,,,252,4,252||,0,,,,|||,,,,,Ground","Torkoal||HeatRock|Drought|LavaPlume,Yawn,StealthRock,RapidSpin|Bold|248,,252,8,,|||||,,,,,Fire]Gouging Fire||GrassySeed|Protosynthesis|DragonDance,HeatCrash,MorningSun,DragonClaw|Adamant|48,244,8,,,208|||||,,,,,Fire]Mandibuzz||RockyHelmet|BigPecks|Roost,Whirlwind,Toxic,Uturn|Impish|248,,244,,16,|||||,,,,,Dark]Iron Treads||AssaultVest|QuarkDrive|VoltSwitch,HighHorsepower,IronHead,RapidSpin|Adamant|252,244,,,4,8|||||,,,,,Ground]Tera Captain|WalkingWake|DragonFang|Protosynthesis|DragonPulse,DracoMeteor,HydroSteam,KnockOff|Timid|16,,,252,8,232|||||,,,,,Dragon]Tera Captain|Venusaur|LifeOrb|Chlorophyll|SludgeBomb,EarthPower,GigaDrain,Growth|Timid|32,,4,252,20,200||,0,,,,|||,,,,,Stellar"],
+ ["Palafin-Hero||MysticWater|ZerotoHero|Surf,JetPunch,IcePunch,GrassKnot|Quiet|248,,8,252,,|||||,,,,,Water]Gouging Fire||Leftovers|Protosynthesis|DragonDance,MorningSun,HeatCrash,BurningBulwark|Adamant|120,252,,,4,132|||||,,,,,Fire]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|NastyPlot,Thunderbolt,TeraBlast,GrassKnot|Timid|64,,188,8,,248||,0,,,,|||,,,,,Fairy]Tera Captain|Rhyperior|Leftovers|SolidRock|Earthquake,SmackDown,SwordsDance,Substitute|Adamant|252,152,52,,,52|||||,,,,,Grass]Terapagos||EjectButton|TeraShift|EarthPower,Thunderbolt,Toxic,RapidSpin|Timid|252,,4,,,252|||||,,,,,Stellar]Copperajah||CustapBerry|HeavyMetal|StealthRock,HeavySlam,Earthquake,KnockOff|Adamant|,,228,,236,44|||||,,,,,Steel","Alcremie||Leftovers|AromaVeil|DrainingKiss,StoredPower,AcidArmor,CalmMind|Calm|248,,252,,8,||,0,,,,|||,,,,,Stellar]Pecharunt||ColburBerry|PoisonPuppeteer|MalignantChain,ShadowBall,NastyPlot,Recover|Bold|248,,,252,,8||,0,,,,|||,,,,,Stellar]Palafin-Hero||WacanBerry|ZerotoHero|JetPunch,DrainPunch,BulkUp,Taunt|Jolly|248,,,,68,192|||||,,,,,Stellar]Tera Captain|Annihilape|Leftovers|Defiant|RageFist,DrainPunch,BulkUp,StealthRock|Careful|240,,,,252,16|||||,,,,,Electric]Cyclizar||HeavyDutyBoots|Regenerator|DracoMeteor,KnockOff,RapidSpin,ShedTail|Timid|248,,,,164,96|||||,,,,,Stellar]Raichu||LightClay|LightningRod|Nuzzle,KnockOff,LightScreen,Reflect|Jolly|252,,72,,,184|||||,,,,,Stellar"],
+ ["Tera Captain|Heatran|AssaultVest|FlashFire|TeraBlast,MagmaStorm,EarthPower,FlashCannon|Modest|248,,,252,,8||,0,,,,|||,,,,,Bug]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|IvyCudgel,PowerWhip,Uturn,QuickAttack|Jolly|,252,4,,,252|||||,,,,,Water]Weavile||ExpertBelt|Pickpocket|TripleAxel,KnockOff,LowKick,IceShard|Jolly|16,252,,,,240|||||,,,,,Dark]Tera Captain|Gliscor|ChoiceScarf|PoisonHeal|Earthquake,TeraBlast,StoneEdge,Uturn|Adamant|32,252,4,,,220|||||,,,,,Ice]Mandibuzz||RockyHelmet|BigPecks|Defog,Roost,Uturn,FoulPlay|Impish|248,,236,,24,||,,,,,24|||,,,,,Dark]Slowking-Galar||ShucaBerry|Regenerator|ChillyReception,SludgeBomb,Earthquake,Psychic|Relaxed|248,,208,,52,||,,,,,0|||,,,,,Poison","Chi-Yu||HeavyDutyBoots|BeadsofRuin|DarkPulse,Flamethrower,NastyPlot,FlameCharge|Modest|40,,,252,,216|||||,,,,,Dark]Sneasler||HeavyDutyBoots|PoisonTouch|CloseCombat,DireClaw,LashOut,Uturn|Jolly|80,252,,,,176|||||,,,,,Fighting]Tera Captain|Rillaboom|ChoiceBand|GrassySurge|GrassyGlide,Uturn,KnockOff,LowKick|Adamant|248,252,8,,,|||||,,,,,Steel]Tera Captain|Primarina|Leftovers|Torrent|Surf,Moonblast,Substitute,CalmMind|Modest|48,,,252,,208||,0,,,,|||,,,,,Steel]Iron Treads||HeavyDutyBoots|QuarkDrive|HighHorsepower,BodyPress,RapidSpin,StealthRock|Jolly|128,128,,,,252|||||,,,,,Ground]Weezing||RockyHelmet|Levitate|Flamethrower,SludgeBomb,ClearSmog,PainSplit|Bold|248,,252,8,,||,0,,,,|||,,,,,Poison"],
+ ["Garchomp||LoadedDice|RoughSkin|Earthquake,ScaleShot,SwordsDance,IronHead|Jolly|16,252,,,,240|||||,,,,,Dragon]Corviknight||Leftovers|MirrorArmor|Roost,Uturn,Defog,BodyPress|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Flying]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|SurgingStrikes,CloseCombat,Uturn,Liquidation|Adamant|96,252,,,,160|||||,,,,,Water]Tera Captain|Arcanine|HeavyDutyBoots|Intimidate|FlareBlitz,ExtremeSpeed,MorningSun,WillOWisp|Impish|200,,252,,,56|||||,,,,,Dragon]Florges||Leftovers|FlowerVeil|AlluringVoice,CalmMind,Synthesis,PsychicNoise|Calm|248,,,,252,8||,0,,,,|||,,,,,Fairy]Jolteon||ChoiceSpecs|VoltAbsorb|AlluringVoice,VoltSwitch,HyperVoice,Thunderbolt|Timid|72,,,252,,184||,0,,,,|||,,,,,Electric","Weezing-Galar||RockyHelmet|Levitate|StrangeSteam,GunkShot,WillOWisp,PainSplit|Relaxed|252,,252,,4,|||||,,,,,Poison]Donphan||AssaultVest|Sturdy|RapidSpin,IceSpinner,Earthquake,KnockOff|Adamant|248,252,,,8,|||||,,,,,Ground]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,IvyCudgel,PowerWhip,Trailblaze|Jolly|,252,,,4,252|||||,,,,,Fire]Tera Captain|Manaphy|Leftovers|Hydration|TakeHeart,AcidArmor,StoredPower,Scald|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,NastyPlot,HeatWave,KnockOff|Modest|16,,,252,,240|||||,,,,,Flying]Tera Captain|Bisharp|Eviolite|Defiant|SuckerPunch,StealthRock,IronHead,ThroatChop|Adamant|252,252,,,4,|||||,,,,,Dark"],
+ ["Amoonguss||EjectButton|Regenerator|Spore,GigaDrain,Synthesis,SludgeBomb|Bold|252,,252,,4,||,0,,,,|||,,,,,Grass]Mienshao||ChoiceScarf|Regenerator|PoisonJab,KnockOff,Uturn,TripleAxel|Jolly|,252,,,32,224|||||,,,,,Fighting]Tera Captain|IronCrown|BoosterEnergy|QuarkDrive|CalmMind,FocusBlast,TeraBlast,Psyshock|Timid|168,,40,108,,192||,20,,,,|||,,,,,Fire]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|ScaryFace,IvyCudgel,KnockOff,Encore|Jolly|180,,,,144,184|||||,,,,,Water]Tera Captain|Jolteon|ChoiceSpecs|VoltAbsorb|VoltSwitch,AlluringVoice,Thunderbolt,TeraBlast|Timid|72,,,252,,184||,0,,,,|||,,,,,Ice]Indeedee-F||PsychicSeed|PsychicSurge|PsychUp,Psyshock,ShadowBall,AlluringVoice|Bold|252,,220,,36,||,0,,,,|||,,,,,Psychic","Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,ZenHeadbutt,Liquidation,CloseCombat|Jolly|16,252,,,,240|||||,,,,,Stellar]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,Taunt,Uturn,KnockOff|Timid|104,,,236,,168|||||,,,,,Ghost]Tera Captain|Jirachi|SafetyGoggles|SereneGrace|StoredPower,CalmMind,Wish,IronDefense|Timid|240,,104,12,,152||,0,,,,|||,,,,,Psychic]Brambleghast||ColburBerry|WindRider|RapidSpin,PowerWhip,StrengthSap,Poltergeist|Impish|248,,208,,,52|||||,,,,,Dark]Samurott-Hisui||FocusSash|Sharpness|CeaselessEdge,AquaCutter,SuckerPunch,AerialAce|Adamant|,252,,,4,252|||||,,,,,Electric]Tera Captain|SandyShocks|BoosterEnergy|Protosynthesis|EarthPower,Thunderbolt,TeraBlast,ThunderWave|Timid|48,,,208,,252||,0,,,,|||,,,,,Psychic"],
+ ["Tera Captain|Infernape|LifeOrb|Blaze|NastyPlot,FireBlast,VacuumWave,AuraSphere|Timid|,,64,252,,192||,0,,,,|S||,,,,,Fighting]Hydrapple||YacheBerry|Regenerator|GigaDrain,DracoMeteor,Recover,EarthPower|Bold|252,,92,164,,||,0,,,,|S||,,,,,Grass]Darkrai||BlackGlasses|BadDreams|DarkPulse,SuckerPunch,IceBeam,Psychic|Naive|,120,,252,,136|||S||,,,,,Dark]Slowking-Galar||AssaultVest|Regenerator|FutureSight,SludgeBomb,FireBlast,IceBeam|Calm|252,,,4,252,||,0,,,,|S||,,,,,Poison]Swampert||Leftovers|Torrent|FlipTurn,Earthquake,Roar,StealthRock|Careful|252,,4,,252,|||S||,,,,,Water]Forretress||RockyHelmet|Sturdy|Spikes,RapidSpin,VoltSwitch,BodyPress|Bold|252,,252,4,,|||||,,,,,Bug","Palafin-Hero||AssaultVest|ZerotoHero|WaveCrash,JetPunch,FlipTurn,IcePunch|Adamant|248,104,,,136,20|||||,,,,,Water]Tera Captain|Gholdengo|KebiaBerry|GoodasGold|ShadowBall,DazzlingGleam,ThunderWave,Recover|Modest|192,,,252,,64||,0,,,,|||,,,,,Fairy]Tera Captain|Jolteon|ExpertBelt|VoltAbsorb|VoltSwitch,AlluringVoice,ShadowBall,Thunderbolt|Timid|40,,,252,,216||,0,,,,|||,,,,,Ghost]Hydreigon||ChopleBerry|Levitate|DracoMeteor,DarkPulse,Flamethrower,Uturn|Timid|,,,176,92,240|||||,,,,,Dark]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,Trailblaze,ZenHeadbutt,Spikes|Jolly|,252,,,4,252|||||,,,,,Fire]Weezing-Galar||BabiriBerry|Levitate|WillOWisp,Defog,StrangeSteam,Flamethrower|Bold|248,,252,,8,||,0,,,,|||,,,,,Poison"],
+ ["Grimmsnarl||Leftovers|Prankster|LightScreen,Reflect,Taunt,PartingShot|Bold|248,,252,,8,||,0,,,,|||,,,,,Dark]Palafin-Hero||ChoiceScarf|ZerotoHero|WaveCrash,IcePunch,Haze,FlipTurn|Adamant|208,252,,,,48|||||,,,,,Water]Zapdos||HeavyDutyBoots|Static|Thunderbolt,Hurricane,Roost,Uturn|Timid|248,,56,,100,104|||||,,,,,Grass]Tera Captain|Cetitan|HeavyDutyBoots|SlushRush|BellyDrum,TeraBlast,IceShard,Earthquake|Adamant|240,252,,,,16|||||,,,,,Fairy]Tera Captain|SlowkingGalar|IcyRock|Regenerator|ChillyReception,FutureSight,IceBeam,ThunderWave|Calm|252,,16,,240,||,0,,,,|||,,,,,Water]Great Tusk||BoosterEnergy|Protosynthesis|BulkUp,SupercellSlam,HeadlongRush,IceSpinner|Jolly|248,4,,,4,252|||||,,,,,Ground","Tentacruel||MentalHerb|ClearBody|Haze,Toxic,FlipTurn,SludgeBomb|Bold|252,,116,,,140|||||,,,,,Water]Cinderace||HeavyDutyBoots|Libero|Uturn,PyroBall,CourtChange,Taunt|Jolly|,252,,,4,252|||||,,,,,Fire]Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,KnockOff,CloseCombat,IcePunch|Jolly|,252,,,4,252|||||,,,,,Fairy]Tera Captain|Manaphy|Leftovers|Hydration|HeartSwap,TailGlow,Surf,Substitute|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel]Landorus-Therian||AssaultVest|Intimidate|GrassKnot,RockTomb,Earthquake,Uturn|Careful|252,4,,,252,|||||,,,,,Ground]Tera Captain|Mismagius|FocusSash|Levitate|ThunderWave,WillOWisp,Hex,DestinyBond|Timid|,,252,4,,252||,0,,,,|||,,,,,Steel"],
+ ["Tera Captain|GreninjaBond|DreadPlate|BattleBond|Surf,DarkPulse,LowKick,WaterShuriken|Timid|96,,,252,,160|||||,,,,,Dark]Garchomp||LoadedDice|RoughSkin|SwordsDance,ScaleShot,Earthquake,PoisonJab|Adamant|,252,,,4,252|||||,,,,,Dragon]Enamorus||ChoiceScarf|Contrary|Moonblast,EarthPower,WeatherBall,HealingWish|Modest|32,,,252,4,220||,0,,,,|||,,,,,Fairy]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,HornLeech,KnockOff,RockTomb|Adamant|48,252,,,4,204|||||,,,,,Fire]Jirachi||Leftovers|SereneGrace|IronHead,Thunder,Wish,Protect|Sassy|248,,,8,252,|||||,,,,,Steel]Rotom-Mow||YacheBerry|Levitate|LeafStorm,Discharge,WillOWisp,VoltSwitch|Bold|248,,252,8,,||,0,,,,|||,,,,,Electric","Tera Captain|Excadrill|FocusSash|MoldBreaker|RapidSpin,Earthquake,IronHead,SwordsDance|Adamant|16,252,,,,240|||||,,,,,Water]Iron Bundle||ChoiceScarf|QuarkDrive|FlipTurn,FreezeDry,HydroPump,IceBeam|Timid|112,,,252,,144|||||,,,,,Ice]Latios||ChoiceSpecs|Levitate|IceBeam,FlipTurn,Trick,DracoMeteor|Timid|32,,,252,,224|||||,,,,,Dragon]Tera Captain|Gyarados|SkyPlate|Moxie|DragonDance,IceFang,Earthquake,TeraBlast|Jolly|,252,12,,,244|||||,,,,,Flying]Hatterene||Leftovers|MagicBounce|DrainingKiss,CalmMind,Psyshock,Nuzzle|Modest|252,,,108,148,|||||,,,,,Psychic]Moltres||ChoiceSpecs|Pressure|Uturn,Hurricane,Flamethrower,Overheat|Modest|32,,,252,,224|||||,,,,,Fire"],
+ ["Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|Uturn,SurgingStrikes,CloseCombat,IceSpinner|Jolly|40,252,,,,216|||||,,,,,Fighting]Iron Bundle||ChoiceScarf|QuarkDrive|HydroPump,FreezeDry,FlipTurn,IceBeam|Naive|96,,,252,,160|||||,,,,,Ice]Iron Treads||HeavyDutyBoots|QuarkDrive|RapidSpin,IceSpinner,Earthquake,VoltSwitch|Jolly|16,252,,,,240|||||,,,,,Ground]Tera Captain|Dudunsparce|Leftovers|SereneGrace|StealthRock,DragonTail,Roost,PoisonJab|Careful|240,16,252,,,|||||,,,,,Fairy]Decidueye|||LongReach|ShadowSneak,Roost,SwordsDance,SpiritShackle|Adamant|140,116,252,,,|||||,,,,,Grass]Overqwil||BlackSludge|Intimidate|ToxicSpikes,Crunch,Haze,DestinyBond|Jolly|140,116,,,,252|||||,,,,,Dark","Manaphy||AssaultVest|Hydration|AlluringVoice,EnergyBall,FlipTurn,Scald|Relaxed|,,252,4,252,|||||,,,,,Water]Tera Captain|Magnezone|HeavyDutyBoots|Sturdy|VoltSwitch,TeraBlast,ThunderWave,BodyPress|Modest|120,,136,252,,||,0,,,,|||,,,,,Water]Brambleghast||YacheBerry|WindRider|LeechSeed,ShadowSneak,PowerWhip,RapidSpin|Impish|,68,252,,,188|||||,,,,,Grass]Iron Boulder||BoosterEnergy|QuarkDrive|CloseCombat,MightyCleave,ZenHeadbutt,SwordsDance|Jolly|,252,40,,,216|||||,,,,,Rock]Kommo-o||ThroatSpray|Soundproof|ClangorousSoul,VacuumWave,DrainPunch,ClangingScales|Quirky|,100,150,,90,168|||||,,,,,Fighting]Enamorus-Therian||CustapBerry|Overcoat|SludgeBomb,Moonblast,EarthPower,Endure|Modest|252,,4,252,,||,0,,,,|||,,,,,Fairy"],
+ ["Tera Captain|UrshifuRapidStrike|PunchingGlove|UnseenFist|SwordsDance,DrainPunch,SurgingStrikes,AquaJet|Jolly|,252,,,4,252|||||,,,,,Fairy]Darkrai||BlackGlasses|BadDreams|DarkPulse,FocusBlast,SludgeBomb,Hypnosis|Timid|80,,,252,,176||,0,,,,|||,,,,,Dark]Slowking-Galar||KasibBerry|Regenerator|ChillyReception,SludgeBomb,Flamethrower,SlackOff|Sassy|252,,4,,252,||,0,,,,0|||,,,,,Poison]Tera Captain|Delphox|HeavyDutyBoots|Blaze|FireBlast,DazzlingGleam,Agility,GrassKnot|Timid|56,,,252,,200||,0,,,,|S||,,,,,Fairy]Donphan||SitrusBerry|Sturdy|StealthRock,Earthquake,GunkShot,IceShard|Impish|252,,252,,4,|||||,,,,,Ground]Zapdos||LightClay|Static|LightScreen,Discharge,Hurricane,Roost|Timid|248,,,,28,232||,0,,,,|||,,,,,Electric","Tsareena||ProtectivePads|QueenlyMajesty|RapidSpin,Synthesis,PowerWhip,Uturn|Impish|248,,232,,28,|||S||,,,,,Grass]Tera Captain|Regidrago|ChoiceScarf|DragonsMaw|DragonEnergy,DracoMeteor,DragonPulse,TeraBlast|Modest|16,,,252,,240||,0,,,,|||,,,,,Steel]Tera Captain|Gholdengo|EjectButton|GoodasGold|Recover,ShadowBall,MakeItRain,NastyPlot|Calm|248,,8,,252,||,0,,,,|||,,,,,Dragon]Urshifu||PunchingGlove|UnseenFist|WickedBlow,SuckerPunch,DrainPunch,Taunt|Jolly|,252,,,4,252|||||,,,,,Fighting]Weezing||RockyHelmet|Levitate|PainSplit,SludgeBomb,ToxicSpikes,Flamethrower|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Gastrodon||Leftovers|StormDrain|Recover,Earthquake,Surf,Spikes|Sassy|252,,4,,252,|||||,,,,,Water"],
+ ["Vikavolt||OccaBerry|Levitate|StickyWeb,VoltSwitch,ThunderWave,BugBuzz|Modest|92,,60,216,140,||,0,,,,|||,,,,,Bug]Qwilfish-Hisui||Eviolite|SwiftSwim|BarbBarrage,PainSplit,Liquidation,ToxicSpikes|Adamant|56,,64,,224,164|||||,,,,,Dark]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Thunderclap,VoltSwitch,DracoMeteor,TeraBlast|Modest|40,,12,200,36,220||,20,,,,|||,,,,,Grass]Landorus-Therian||ChoiceScarf|Intimidate|Earthquake,Uturn,RockSlide,StealthRock|Jolly|,244,20,,20,224|||||,,,,,Ground]Archaludon||AssaultVest|Stamina|ElectroShot,FlashCannon,DragonPulse,BodyPress|Timid|,,20,128,144,216||,0,,,,|||,,,,,Steel]Pelipper||DampRock|Drizzle|Roost,Uturn,Hurricane,WeatherBall|Modest|228,,60,96,100,24|||||,,,,,Water","Torkoal||Leftovers|Drought|ScorchingSands,StealthRock,Overheat,RapidSpin|Bold|248,,64,,196,|||||,,,,,Fire]Masquerain||FocusSash|Intimidate|StickyWeb,StruggleBug,SunnyDay,Uturn|Timid|248,,,8,,252|||||,,,,,Bug]Great Tusk||HeavyDutyBoots|Protosynthesis|IceSpinner,HeavySlam,Earthquake,RapidSpin|Adamant|8,244,,,88,168|||||,,,,,Ground]Primarina||Leftovers|LiquidVoice|Moonblast,PsychicNoise,DrainingKiss,CalmMind|Modest|232,,,232,,44||,0,,,,|||,,,,,Water]Tera Captain|Mew|AdrenalineOrb|Synchronize|NastyPlot,EarthPower,IceBeam,VoltSwitch|Timid|72,,,252,,184||,0,,,,|||,,,,,Steel]Gouging Fire||Leftovers|Protosynthesis|FlareBlitz,BurningBulwark,Earthquake,DragonDance|Adamant|240,56,,,76,136|||||,,,,,Fire"],
+ ["Palafin-Hero||Leftovers|ZerotoHero|BulkUp,Substitute,JetPunch,DrainPunch|Adamant|216,140,,,,152|||||,,,,,Water]Garchomp||LoadedDice|RoughSkin|Earthquake,StealthRock,SwordsDance,ScaleShot|Jolly|92,252,,,4,160|||||,,,,,Dragon]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,KnockOff,Uturn,Taunt|Modest|248,,,140,,120|||||,,,,,Flying]Diancie||RockyHelmet|ClearBody|Encore,EarthPower,Moonblast,Spikes|Bold|248,,252,8,,||,0,,,,|||,,,,,Rock]Gholdengo||ColburBerry|GoodasGold|MakeItRain,ShadowBall,NastyPlot,Recover|Bold|184,,252,72,,||,0,,,,|||,,,,,Steel]Tera Captain|Frosmoth|HeavyDutyBoots|IceScales|QuiverDance,GigaDrain,IceBeam,TeraBlast|Modest|,,,252,4,252||,0,,,,|||,,,,,Electric","Tera Captain|Annihilape|ChestoBerry|Defiant|BulkUp,DrainPunch,RageFist,Rest|Adamant|252,16,,,240,|||||,,,,,Water]Weavile||HeavyDutyBoots|Pressure|SwordsDance,TripleAxel,KnockOff,IceShard|Jolly|32,252,,,,224|||||,,,,,Dark]Gholdengo||ChoiceSpecs|GoodasGold|MakeItRain,ShadowBall,Trick,Recover|Modest|252,,,252,,4||,0,,,,|||,,,,,Steel]Tera Captain|Vaporeon|Leftovers|WaterAbsorb|CalmMind,Scald,AlluringVoice,Wish|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy]Raging Bolt||Magnet|Protosynthesis|DracoMeteor,Thunderbolt,Thunderclap,CalmMind|Modest|252,,4,252,,||,20,,,,|||,,,,,Electric]Gliscor||ToxicOrb|PoisonHeal|Earthquake,KnockOff,StealthRock,Uturn|Impish|252,,252,,4,|||||,,,,,Ground"],
+ ["Tera Captain|Annihilape|GrassySeed|Defiant|RageFist,DrainPunch,BulkUp,Acrobatics|Impish|252,,152,,104,|||||,,,,,Ghost]Tornadus-Therian||ChoiceScarf|Regenerator|AirSlash,Hurricane,IcyWind,Uturn|Timid|8,,,252,,248|||||,,,,,Flying]Ninetales-Alola||LightClay|SnowWarning|Blizzard,FreezeDry,AuroraVeil,Extrasensory|Timid|56,,,252,,200||,0,,,,|||,,,,,Ice]Quaquaval||AssaultVest|Torrent|AquaStep,BraveBird,Uturn,RapidSpin|Jolly|,252,4,,,252|||||,,,,,Water]Slowbro-Galar||BlackSludge|Regenerator|ShellSideArm,Psychic,CalmMind,TrickRoom|Bold|252,,252,,4,|||||,,,,,Poison]Kingambit||LumBerry|SupremeOverlord|SwordsDance,KowtowCleave,ZenHeadbutt,SuckerPunch|Adamant|248,252,,,8,||,,,,,0|||,,,,,Dark","Rillaboom||ChoiceBand|GrassySurge|GrassyGlide,WoodHammer,KnockOff,DrainPunch|Adamant|248,252,,,,8|||||,,,,,Grass]Sneasler||ChoiceScarf|PoisonTouch|ShadowClaw,Uturn,CloseCombat,Switcheroo|Jolly|80,252,,,,176|||||,,,,,Fighting]Tera Captain|Mesprit|Leftovers|Levitate|PsychicNoise,StealthRock,ThunderWave,KnockOff|Bold|248,,176,,40,44|||||,,,,,Fairy]Gouging Fire||Leftovers|Protosynthesis|HeatCrash,DragonClaw,DragonDance,BurningBulwark|Adamant|252,16,,,108,132|||||,,,,,Fire]Tera Captain|Manaphy|Leftovers|Hydration|TakeHeart,AcidArmor,Scald,StoredPower|Bold|252,,136,20,,100||,0,,,,|||,,,,,Fairy]Sandy Shocks||AssaultVest|Protosynthesis|VoltSwitch,FlashCannon,Discharge,EarthPower|Timid|252,,,8,,248||,0,,,,|||,,,,,Electric"],
+ ["Tera Captain|Gyarados|Leftovers|Intimidate|Roar,ThunderWave,Waterfall,Earthquake|Careful|252,,,,164,92|||||,,,,,Water]Tera Captain|Latias|Leftovers|Levitate|CalmMind,StoredPower,DragonPulse,Recover|Timid|252,,80,,,176||,0,,,,|||,,,,,Steel]Moltres||HeavyDutyBoots|Pressure|Uturn,Flamethrower,Roost,ScorchingSands|Calm|252,,,,236,20|||||,,,,,Fire]Donphan||Leftovers|Sturdy|StealthRock,RapidSpin,Earthquake,KnockOff|Careful|252,36,,,220,|||||,,,,,Ground]Gholdengo||ChoiceScarf|GoodasGold|Trick,ShadowBall,MakeItRain,Recover|Timid|252,,,156,,100||,0,,,,|||,,,,,Steel]Iron Valiant||BoosterEnergy|QuarkDrive|DestinyBond,CloseCombat,ThunderPunch,SwordsDance|Naive|16,252,,,,240|||||,,,,,Fairy","Tornadus-Therian||LumBerry|Regenerator|DarkPulse,AirSlash,Agility,NastyPlot|Timid|160,,,180,,168||,0,,,,|||,,,,,Flying]Tera Captain|Gholdengo|ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,Thunderbolt,Trick|Timid|24,,,252,,232||,0,,,,|||,,,,,Steel]Dachsbun||HeavyDutyBoots|WellBakedBody|PlayRough,Roar,Wish,Protect|Impish|252,4,252,,,|||||,,,,,Fairy]Ting-Lu||HeavyDutyBoots|VesselofRuin|ThroatChop,StoneEdge,Earthquake,MeanLook|Adamant|4,252,,,252,|||||,,,,,Dark]Dondozo||ChestoBerry|Unaware|WaveCrash,Earthquake,Yawn,Rest|Impish|248,,252,,8,|||||,,,,,Water]Baxcalibur||ChoiceBand|ThermalExchange|IceShard,IcicleCrash,GlaiveRush,Earthquake|Jolly|8,252,20,,20,208|||||,,,,,Dragon"],
+ ["Darkrai||HeavyDutyBoots|BadDreams|DarkPulse,IceBeam,FocusBlast,SludgeBomb|Timid|24,,,252,,232||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,SwordsDance,Encore|Adamant|144,104,,,12,248|||||,,,,,Water]Klefki||RockyHelmet|Prankster|FoulPlay,Spikes,MagnetRise,ThunderWave|Bold|252,,104,,152,||,0,,,,|||,,,,,Steel]Landorus-Therian||LumBerry|Intimidate|StealthRock,Earthquake,Taunt,Uturn|Adamant|168,56,,,40,244|||||,,,,,Ground]Gurdurr||Eviolite|Guts|DrainPunch,IcePunch,MachPunch,BulkUp|Adamant|252,4,,,252,|||||,,,,,Fighting]Tera Captain|Eelektross|AssaultVest|Levitate|ThunderPunch,TeraBlast,KnockOff,DragonTail|Brave|252,4,,,252,|||||,,,,,Steel","Heatran||ChoiceScarf|FlameBody|Overheat,Flamethrower,FlashCannon,WillOWisp|Timid|84,,,252,,172||,0,,,,|||,,,,,Fire]Tera Captain|Latias|SoulDew|Levitate|Recover,ThunderWave,DragonPulse,MistBall|Timid|248,,8,,,252||,0,,,,|||,,,,,Dragon]Gliscor||ToxicOrb|PoisonHeal|Toxic,Uturn,Earthquake,StealthRock|Impish|252,,64,,,192|||||,,,,,Ground]Thwackey||Eviolite|GrassySurge|GrassyGlide,Uturn,LeechSeed,KnockOff|Impish|248,8,252,,,|||||,,,,,Grass]Greninja-Bond||HeavyDutyBoots|BattleBond|Liquidation,IceBeam,LowKick,Uturn|Naive|,252,,96,,160|||||,,,,,Water]Scizor||HeavyDutyBoots|Technician|Uturn,BulletPunch,CloseCombat,KnockOff|Adamant|248,216,44,,,|||||,,,,,Bug"],
+ ["Slowking-Galar||RedCard|Regenerator|FocusBlast,Psyshock,TrickRoom,ToxicSpikes|Calm|252,,72,,184,||,0,,,,|||,,,,,Poison]Rotom-Wash||RockyHelmet|Levitate|EerieImpulse,VoltSwitch,HydroPump,PainSplit|Bold|252,,244,,,12||,0,,,,|||,,,,,Electric]Forretress||RedCard|Sturdy|BodyPress,VoltSwitch,GyroBall,Explosion|Sassy|252,,4,,252,||,,,,,0|||,,,,,Bug]Gliscor||ToxicOrb|PoisonHeal|Earthquake,StealthRock,Protect,Uturn|Jolly|244,88,,,,176|||||,,,,,Ground]Tera Captain|GreninjaBond|LifeOrb|BattleBond|Surf,GrassKnot,WaterShuriken,DarkPulse|Timid|16,,,252,,240|||||,,,,,Dark]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,AuraSphere,Encore,CalmMind|Timid|88,,,252,,168||,0,,,,|S||,,,,,Fairy","Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|TeraBlast,Thunderbolt,Agility,FocusBlast|Jolly|,,,252,4,252||,0,,,,|||,,,,,Ice]Sceptile||SitrusBerry|Overgrow|ShedTail,Acrobatics,SwordsDance,LeafBlade|Jolly|,252,,,4,252|||||,,,,,Grass]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,CalmMind,Rest,EarthPower|Modest|252,,,252,4,||,15,,,,|||,,,,,Stellar]Tera Captain|Espathra|Leftovers|SpeedBoost|CalmMind,StoredPower,TeraBlast,Roost|Bold|252,,252,4,,||,0,,,,|||,,,,,Fighting]Urshifu-Rapid-Strike||PunchingGlove|UnseenFist|SurgingStrikes,CloseCombat,Trailblaze,IceSpinner|Jolly|,252,,,4,252|||||,,,,,Fighting]Politoed||DampRock|Drizzle|RainDance,WeatherBall,IceBeam,Encore|Modest|252,,,252,4,||,0,,,,|||,,,,,Water"],
+ ["Tera Captain|Sceptile|RedCard|Unburden|ShedTail,LeafStorm,Earthquake,Endure|Hasty|,40,,252,,216|||||,,,,,Ground]Tera Captain|Annihilape|AssaultVest|VitalSpirit|RageFist,DrainPunch,IcePunch,RockTomb|Careful|252,,,,96,160|||||,,,,,Fire]Alomomola||HeavyDutyBoots|Regenerator|Wish,Protect,FlipTurn,IceBeam|Relaxed|,,252,4,252,||,,,,,0|||,,,,,Water]Iron Moth||MirrorHerb|QuarkDrive|FieryDance,SludgeWave,Psychic,Overheat|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Roaring Moon||MuscleBand|Protosynthesis|KnockOff,Outrage,Uturn,DragonDance|Jolly|,252,32,,,224|||||,,,,,Dragon]Donphan||AssaultVest|Sturdy|RapidSpin,IceShard,Earthquake,SeedBomb|Adamant|248,252,8,,,|||||,,,,,Ground","Iron Crown||ChoiceScarf|QuarkDrive|TachyonCutter,Psychic,FocusBlast,VoltSwitch|Timid|64,,,252,,192||,20,,,,|||,,,,,Steel]Rotom-Wash||Leftovers|Levitate|ThunderWave,HydroPump,Thunderbolt,VoltSwitch|Bold|248,,252,,8,||,0,,,,|||,,,,,Electric]Darkrai||WideLens|BadDreams|Hypnosis,DarkPulse,Psyshock,FocusBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|Agility,Psychic,DazzlingGleam,FieryDance|Timid|160,,,252,,96||,0,,,,|||,,,,,Fairy]Tera Captain|Cloyster|HeavyDutyBoots|SkillLink|ShellSmash,IcicleSpear,TeraBlast,HydroPump|Rash|,216,,252,,40|||||,,,,,Grass]Hitmonchan||CobaBerry|IronFist|RapidSpin,MachPunch,KnockOff,Encore|Jolly|,252,,,4,252|||||,,,,,Fighting"],
+ ["Tera Captain|WalkingWake|MysticWater|Protosynthesis|TeraBlast,HydroSteam,DracoMeteor,Flamethrower|Timid|,,,252,64,192||,0,,,,|||,,,,,Electric]Ceruledge||FocusSash|WeakArmor|SwordsDance,BitterBlade,Poltergeist,ShadowSneak|Adamant|,252,,,4,252|||||,,,,,Fire]Hoopa-Unbound||SitrusBerry|Magician|Psyshock,PsychUp,DrainPunch,Substitute|Gentle|248,8,,,252,|||||,,,,,Psychic]Torkoal||HeavyDutyBoots|Drought|RapidSpin,StealthRock,Yawn,Flamethrower|Calm|248,,96,,164,|||||,,,,,Fire]Arbok||BlackSludge|Intimidate|Glare,PsychicFangs,PoisonJab,Toxic|Impish|248,8,252,,,|||||,,,,,Poison]Ting-Lu||AssaultVest|VesselofRuin|StoneEdge,Payback,Earthquake,Ruination|Careful|248,120,32,,108,|||||,,,,,Dark","Landorus||ChestoBerry|SheerForce|StealthRock,EarthPower,Uturn,Rest|Modest|32,,,244,,232|||||,,,,,Ground]Tera Captain|Lokix|LifeOrb|TintedLens|FirstImpression,KnockOff,SuckerPunch,Uturn|Adamant|56,252,,,,200|||||,,,,,Dark]Sneasler||MistySeed|Unburden|SwordsDance,CloseCombat,Acrobatics,Dig|Adamant|240,232,,,,36|||||,,,,,Fighting]Sandslash-Alola||AssaultVest|SlushRush|TripleAxel,KnockOff,Earthquake,RapidSpin|Adamant|248,252,,,8,|||||,,,,,Ice]Weezing-Galar||CustapBerry|MistySurge|SludgeWave,StrangeSteam,Memento,MistyExplosion|Bold|248,,12,,248,||,0,,,,|||,,,,,Poison]Tera Captain|Latias|KeeBerry|Levitate|CalmMind,Surf,DracoMeteor,Recover|Modest|176,,,172,,160||,0,,,,|||,,,,,Water"],
+ ["Azumarill||ChoiceBand|HugePower|AquaJet,PlayRough,KnockOff,Liquidation|Adamant|248,208,,,52,|||||,,,,,Water]Great Tusk||BoosterEnergy|Protosynthesis|StealthRock,Earthquake,RapidSpin,CloseCombat|Jolly|,4,,,252,252|||||,,,,,Ground]Tera Captain|Kilowattrel|ChoiceSpecs|Competitive|Uturn,Hurricane,Thunderbolt,TeraBlast|Timid|,,4,252,,252|||||,,,,,Dark]Scizor||LifeOrb|Technician|BulletPunch,Uturn,KnockOff,SwordsDance|Adamant|240,248,,,,20|||||,,,,,Bug]Tera Captain|Heatran|Leftovers|FlashFire|FlashCannon,TeraBlast,MagmaStorm,EarthPower|Calm|152,,4,,252,100||,0,,,,|||,,,,,Fairy]Galvantula||FocusSash|CompoundEyes|StickyWeb,Thunder,BugBuzz,Electroweb|Timid|,,4,252,84,168||,0,,,,|||,,,,,Bug","Darkrai||Leftovers|BadDreams|DarkPulse,SludgeBomb,Psychic,Protect|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Urshifu||EjectPack|UnseenFist|SuckerPunch,CloseCombat,PoisonJab,WickedBlow|Jolly|80,252,,,,176|||||,,,,,Fighting]Corviknight||OccaBerry|MirrorArmor|Defog,Uturn,Roost,BodyPress|Impish|252,,220,,,36|||||,,,,,Flying]Pecharunt||AirBalloon|PoisonPuppeteer|MalignantChain,DestinyBond,ShadowBall,PartingShot|Timid|252,,4,,,252||,0,,,,|||,,,,,Poison]Lanturn||ChoiceScarf|VoltAbsorb|VoltSwitch,IceBeam,Scald,FlipTurn|Timid|192,,,64,,252|||||,,,,,Water]Tera Captain|Regidrago|LoadedDice|DragonsMaw|ScaleShot,FireFang,TeraBlast,DragonDance|Adamant|,252,16,,,240|||||,,,,,Electric"],
+ ["Palafin-Hero||CovertCloak|ZerotoHero|Taunt,JetPunch,IcePunch,CloseCombat|Adamant|60,252,,,,196|||||,,,,,Water]Iron Treads||ChopleBerry|QuarkDrive|RapidSpin,Earthquake,SupercellSlam,IceSpinner|Jolly|,252,,,4,252|||||,,,,,Ground]Iron Valiant||BoosterEnergy|QuarkDrive|CloseCombat,IcePunch,Agility,Substitute|Jolly|48,252,,,,208|||||,,,,,Fairy]Rotom-Heat||HeavyDutyBoots|Levitate|WillOWisp,Overheat,VoltSwitch,ThunderWave|Timid|252,,,4,,252||,0,,,,|||,,,,,Electric]Tera Captain|Latias|Leftovers|Levitate|Thunderbolt,AuraSphere,IceBeam,HealingWish|Timid|32,,,252,,224||,0,,,,|||,,,,,Electric]Mandibuzz||LumBerry|Overcoat|FoulPlay,Uturn,Roost,Toxic|Impish|248,,252,,8,|||||,,,,,Dark","Grafaiai||HeavyDutyBoots|Prankster|Uturn,PartingShot,KnockOff,Encore|Jolly|252,4,,,,252|||||,,,,,Poison]Vaporeon||Leftovers|WaterAbsorb|Scald,AlluringVoice,CalmMind,Wish|Bold|248,,252,8,,||,0,,,,|||,,,,,Water]Tera Captain|Excadrill|AirBalloon|MoldBreaker|Earthquake,IronHead,SwordsDance,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Fire]Toedscruel||YacheBerry|MyceliumMight|LeafStorm,EarthPower,Spore,KnockOff|Hasty|252,,,4,,252|||||,,,,,Ground]Tera Captain|Magnezone|ChoiceBand|Analytic|Explosion,IronHead,SupercellSlam,BodyPress|Adamant|248,252,,,8,|||||,,,,,Flying]Kleavor||ChoiceBand|Sharpness|XScissor,StoneAxe,CloseCombat,DualWingbeat|Adamant|,252,,,4,252|||||,,,,,Bug"],
+ ["Tyranitar||Leftovers|SandStream|StealthRock,KnockOff,IceBeam,ThunderWave|Docile|252,,,52,188,16|||||,,,,,Rock]Tera Captain|Excadrill|ExpertBelt|MoldBreaker|SwordsDance,HighHorsepower,RapidSpin,TeraBlast|Jolly|,252,96,,,160|||||,,,,,Flying]Mandibuzz||HeavyDutyBoots|Overcoat|FoulPlay,Roost,AirSlash,Uturn|Calm|248,,116,60,68,16|||||,,,,,Dark]Tera Captain|Amoonguss|RockyHelmet|Regenerator|SludgeBomb,Spore,GigaDrain,StunSpore|Bold|252,,252,4,,||,0,,,,|||,,,,,Grass]Clefable||Leftovers|MagicGuard|Moonblast,Flamethrower,Wish,Protect|Bold|252,,244,,12,||,0,,,,|S||,,,,,Fairy]Tauros-Paldea-Aqua||Leftovers|Intimidate|BulkUp,AquaJet,BodyPress,RagingBull|Jolly|,112,244,,,152|||||,,,,,Fighting","Thwackey||Eviolite|GrassySurge|Taunt,GrassyGlide,WoodHammer,Uturn|Adamant|240,252,,,,16|||||,,,,,Grass]Tera Captain|Revavroom|ClearAmulet|Overcoat|ShiftGear,GunkShot,HighHorsepower,TeraBlast|Adamant|16,252,,,,240|||||,,,,,Electric]Tera Captain|Eelektross|ExpertBelt|Levitate|CloseCombat,Uturn,Thunderbolt,KnockOff|Relaxed|248,,252,,8,|||||,,,,,Grass]Great Tusk||PasshoBerry|Protosynthesis|HeavySlam,CloseCombat,HeadlongRush,SupercellSlam|Adamant|248,252,8,,,|||||,,,,,Ground]Iron Boulder||FocusSash|QuarkDrive|ZenHeadbutt,CloseCombat,MightyCleave,Taunt|Adamant|72,252,,,,184|||||,,,,,Rock]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|ZenHeadbutt,IvyCudgel,HornLeech,Uturn|Jolly|80,252,,,,176|||||,,,,,Water"],
+ ["Palafin-Hero||PunchingGlove|ZerotoHero|BulkUp,DrainPunch,JetPunch,IcePunch|Adamant|192,128,,,132,56|||||,,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|Uturn,Hurricane,HeatWave,KnockOff|Timid|248,,,48,120,92|||||,,,,,Flying]Tera Captain|RagingBolt|Leftovers|Protosynthesis|CalmMind,DragonPulse,Thunderclap,Discharge|Modest|56,,244,76,24,108||,20,,,,|||,,,,,Poison]Terapagos||KeeBerry|TeraShift|CalmMind,TeraStarstorm,EarthPower,RockPolish|Modest|168,,4,240,,96||,15,,,,|||,,,,,Stellar]Tinkaton||OccaBerry|Pickpocket|Bulldoze,GigatonHammer,ThunderWave,SwordsDance|Adamant|,108,212,,,188|||||,,,,,Fairy]Qwilfish-Hisui||SafetyGoggles|Intimidate|AquaJet,SwordsDance,BarbBarrage,Liquidation|Adamant|224,252,,,4,28|||||,,,,,Dark","Palafin||Leftovers|ZerotoHero|Encore,BulkUp,JetPunch,IcePunch|Impish|252,100,156,,,|||||,,,,,Water]Tera Captain|PorygonZ|ExpertBelt|Download|Discharge,IceBeam,NastyPlot,Agility|Modest|120,,,252,,136||,0,,,,|||,,,,,Grass]Ribombee||FocusSash|ShieldDust|StickyWeb,Moonblast,Uturn,StunSpore|Timid|,,24,252,,232|||||,,,,,Bug]Tera Captain|RagingBolt|ChoiceSpecs|Protosynthesis|VoltSwitch,DracoMeteor,Thunderclap,DragonPulse|Modest|40,,,252,60,156||,20,,,,|||,,,,,Fairy]Donphan||ChoiceBand|Sturdy|RapidSpin,Earthquake,IceSpinner,KnockOff|Adamant|,252,,,8,248|||||,,,,,Ground]Kingambit||ShucaBerry|SupremeOverlord|SwordsDance,SuckerPunch,KowtowCleave,IronHead|Adamant|40,252,92,,,124|||||,,,,,Dark"],
+ ["Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,Psychic,ShadowBall,VacuumWave|Timid|,,4,252,,252||,0,,,,|||,,,,,Fairy]Garchomp||RockyHelmet|RoughSkin|EarthPower,DracoMeteor,DragonTail,Endure|Modest|40,,248,180,,40|||||,,,,,Dragon]Empoleon||ChopleBerry|Torrent|Surf,FlipTurn,AquaJet,Yawn|Relaxed|252,,232,24,,|||||,,,,,Water]Tera Captain|Ceruledge|MentalHerb|FlashFire|BitterBlade,TeraBlast,ShadowSneak,BulkUp|Adamant|40,136,252,,,80|||||,,,,,Grass]Tera Captain|Tyranitar|RedCard|SandStream|KnockOff,Avalanche,StealthRock,Taunt|Jolly|64,236,,,,208|||||,,,,,Ghost]Weezing-Galar||PayapaBerry|Levitate|StrangeSteam,Flamethrower,ClearSmog,PainSplit|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison","Iron Valiant||LifeOrb|QuarkDrive|Moonblast,ShadowBall,CloseCombat,Psychic|Naive|,4,,252,,252|||||,,,,,Fairy]Garchomp||ChoiceBand|RoughSkin|Earthquake,IronHead,ScaleShot,StoneEdge|Jolly|,252,,,4,252|||||,,,,,Dragon]Tera Captain|Scizor|SitrusBerry|Technician|BulletPunch,CloseCombat,Uturn,SwordsDance|Adamant|172,252,,,,84|||||,,,,,Fire]Tera Captain|Braviary|ChoiceScarf|Defiant|Uturn,CloseCombat,BraveBird,TeraBlast|Adamant|,252,,,4,252|||||,,,,,Flying]Rotom-Wash||SitrusBerry|Levitate|PainSplit,WillOWisp,VoltSwitch,HydroPump|Bold|252,,252,4,,||,0,,,,|||,,,,,Electric]Uxie||ColburBerry|Levitate|StealthRock,ThunderWave,KnockOff,Uturn|Bold|248,,92,,168,|||||,,,,,Psychic"],
+ ["Baxcalibur||HeavyDutyBoots|ThermalExchange|GlaiveRush,Earthquake,IceShard,SwordsDance|Jolly|,252,4,,,252|||||,,,,,Dragon]Slowking-Galar||EjectButton|Regenerator|SludgeBomb,FocusBlast,ChillyReception,SlackOff|Modest|248,,,252,8,||,0,,,,|||,,,,,Poison]Tera Captain|Ogerpon|ExpertBelt|Defiant|IvyCudgel,LowKick,RockTomb,SwordsDance|Adamant|,252,,,4,252|||||,,,,,Grass]Slither Wing||RockyHelmet|Protosynthesis|FirstImpression,Uturn,Whirlwind,MorningSun|Impish|248,,252,,8,|||||,,,,,Bug]Forretress||SitrusBerry|Sturdy|GyroBall,ToxicSpikes,StealthRock,RapidSpin|Sassy|248,,8,,252,||,,,,,0|||,,,,,Bug]Hydreigon||LifeOrb|Levitate|DracoMeteor,DarkPulse,FlashCannon,FireBlast|Timid|24,,,252,,232||,0,,,,|||,,,,,Dark","Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,IvyCudgel,KnockOff,Superpower|Jolly|80,252,16,,,160|||||,,,,,Fire]Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|TemperFlare,CloseCombat,RapidSpin,BulkUp|Jolly|248,4,4,,,252|||||,,,,,Fire]Kyurem||HabanBerry|Pressure|DragonDance,IcicleSpear,ScaleShot,BreakingSwipe|Jolly|56,252,28,,28,144|||||,,,,,Dragon]Hatterene||Leftovers|MagicBounce|CalmMind,DrainingKiss,Psyshock,Nuzzle|Bold|252,,252,,4,|||||,,,,,Psychic]Smeargle||MentalHerb|OwnTempo|StickyWeb,StealthRock,BurningBulwark,Encore|Calm|252,,4,,252,||,0,,,,|||,,,,,Normal]Tera Captain|Oricorio|HeavyDutyBoots|Dancer|QuiverDance,RevelationDance,Hurricane,Roost|Timid|248,,188,,,72||,0,,,,|||,,,,,Steel"],
+ ["Iron Valiant||LifeOrb|QuarkDrive|SpiritBreak,CloseCombat,KnockOff,Encore|Jolly|40,252,8,,,208|||||,,,,,Fairy]Tornadus-Therian||LumBerry|Regenerator|Substitute,Taunt,NastyPlot,BleakwindStorm|Timid|184,,,152,4,168||,0,,,,|||,,,,,Flying]Garchomp||HabanBerry|RoughSkin|Liquidation,PoisonJab,ScaleShot,Spikes|Adamant|,220,,,188,100|||||,,,,,Dragon]Tera Captain|Zarude|ClearAmulet|LeafGuard|Synthesis,KnockOff,PowerWhip,Uturn|Adamant|240,132,60,,,76|||||,,,,,Ghost]Metagross||ChoiceScarf|ClearBody|RockTomb,MeteorMash,BrickBreak,StealthRock|Jolly|,200,,,124,184|||||,,,,,Steel]Morgrem||Eviolite|Prankster|Reflect,LightScreen,ThunderWave,DrainingKiss|Calm|252,,,4,252,||,0,,,,|||,,,,,Dark","Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,Trailblaze,PlayRough,HornLeech|Jolly|64,252,,,,192|||||,,,,,Fire]Tera Captain|Latias|EjectPack|Levitate|FutureSight,DracoMeteor,MistBall,HealingWish|Timid|40,,,252,,216||,0,,,,|||,,,,,Fairy]Iron Treads||BoosterEnergy|QuarkDrive|IceSpinner,Earthquake,IronHead,Megahorn|Jolly|8,252,,,,248|||||,,,,,Ground]Pecharunt||HeavyDutyBoots|PoisonPuppeteer|MalignantChain,ShadowBall,NastyPlot,Recover|Bold|252,,,112,132,12||,0,,,,|||,,,,,Poison]Tera Captain|Kilowattrel|AssaultVest|VoltAbsorb|AirSlash,Endeavor,Uturn,Discharge|Timid|32,,,252,,224|||||,,,,,Fairy]Smeargle||ChoiceScarf|OwnTempo|Glare,StickyWeb,CeaselessEdge,DestinyBond|Jolly|252,4,,,,252||,,,0,,|||,,,,,Normal"],
+ ["Meowscarada||PunchingGlove|Protean|LowKick,TripleAxel,Uturn,FlowerTrick|Adamant|64,252,,,4,188|||||,,,,,Grass]Chi-Yu||ChoiceScarf|BeadsofRuin|FireBlast,Flamethrower,Overheat,DarkPulse|Modest|176,,4,252,,76||,0,,,,|||,,,,,Dark]Tera Captain|Gholdengo|AirBalloon|GoodasGold|Recover,ShadowBall,FocusBlast,Psyshock|Bold|248,,252,8,,||,0,,,,|||,,,,,Dark]Garchomp||Leftovers|RoughSkin|Spikes,StoneEdge,StealthRock,Earthquake|Jolly|240,,252,,,16|||||,,,,,Dragon]Milotic||HeavyDutyBoots|Competitive|Scald,Recover,Haze,FlipTurn|Calm|248,,8,,252,|||||,,,,,Water]Maushold||WideLens|Technician|TidyUp,PopulationBomb,Encore,LowKick|Jolly|252,36,,,52,168|||||,,,,,Normal","Samurott-Hisui||AssaultVest|Sharpness|CeaselessEdge,FlipTurn,AquaJet,SacredSword|Jolly|8,40,24,,184,252|||||,,,,,Water]Mamoswine||AssaultVest|ThickFat|Earthquake,IcicleCrash,IceShard,KnockOff|Adamant|8,136,24,,140,200|||||,,,,,Ice]Empoleon||RockyHelmet|Competitive|Surf,FlipTurn,Roost,KnockOff|Sassy|248,,,8,252,|||||,,,,,Water]Tera Captain|IronThorns|BoosterEnergy|QuarkDrive|SupercellSlam,IceBeam,Earthquake,StealthRock|Timid|,,,252,4,252||,23,,,,|||,,,,,Ice]Tera Captain|Latias|Leftovers|Levitate|AlluringVoice,Thunderbolt,Recover,CalmMind|Timid|8,,224,84,,192||,0,,,,|||,,,,,Fairy]Zapdos||RockyHelmet|Static|Discharge,Hurricane,Roost,VoltSwitch|Bold|208,,240,24,,36||,0,,,,|||,,,,,Electric"],
+ ["Tera Captain|Mew|Leftovers|Synchronize|Psychic,AuraSphere,VacuumWave,NastyPlot|Modest|44,,16,252,,196||,0,,,,|||,,,,,Fighting]Tera Captain|MoltresGalar|SitrusBerry|Berserk|AirSlash,TeraBlast,NastyPlot,Agility|Timid|68,,12,252,,176||,0,,,,|||,,,,,Ground]Rotom-Heat||RockyHelmet|Levitate|VoltSwitch,Overheat,WillOWisp,PainSplit|Bold|248,,252,8,,||,0,,,,|||,,,,,Stellar]Iron Treads||AirBalloon|QuarkDrive|KnockOff,IceSpinner,RapidSpin,StealthRock|Adamant|108,252,,,,148|||||,,,,,Stellar]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,Psychic,ShadowBall,VacuumWave|Modest|184,,,252,4,68||,0,,,,|||,,,,,Stellar]Amoonguss||RockyHelmet|Regenerator|SludgeBomb,GigaDrain,Spore,Synthesis|Calm|252,,,4,252,||,0,,,,|||,,,,,Stellar","Meowscarada||ChoiceBand|Protean|KnockOff,TripleAxel,FlowerTrick,Uturn|Jolly|56,252,,,,200|||||,,,,,Grass]Tera Captain|RagingBolt|EjectPack|Protosynthesis|Thunderclap,DracoMeteor,VoltSwitch,Discharge|Modest|252,,,252,4,||,20,,,,|||,,,,,Fairy]Tera Captain|Chandelure|ChoiceScarf|FlameBody|Flamethrower,Overheat,EnergyBall,Memento|Timid|8,,,252,,248||,0,,,,|||,,,,,Fire]Ting-Lu||MentalHerb|VesselofRuin|Memento,StealthRock,StoneEdge,Earthquake|Impish|252,164,92,,,|||||,,,,,Dark]Hawlucha||WhiteHerb|Unburden|SwordsDance,CloseCombat,Acrobatics,BraveBird|Jolly|16,252,,,,240|||||,,,,,Fighting]Araquanid||Leftovers|WaterBubble|Liquidation,StickyWeb,Infestation,Protect|Adamant|252,120,92,,36,8|||||,,,,,Water"],
+ ["Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,IceBeam,HydroPump,Encore|Timid|,,116,252,,140||,0,,,,|||,,,,,Ice]Tera Captain|GreatTusk|ChoiceScarf|Protosynthesis|CloseCombat,TeraBlast,HeadlongRush,IceSpinner|Jolly|24,252,,,,232|||||,,,,,Ghost]Rotom-Heat||HeavyDutyBoots|Levitate|VoltSwitch,WillOWisp,ThunderWave,Overheat|Calm|252,,4,,252,||,0,,,,|||,,,,,Electric]Clodsire||BlackSludge|WaterAbsorb|Earthquake,Recover,Spikes,Toxic|Impish|252,,252,,4,|||||,,,,,Poison]Enamorus||ChoiceScarf|Contrary|HealingWish,Moonblast,AlluringVoice,EarthPower|Timid|32,,,252,,224||,0,,,,|||,,,,,Fairy]Kingambit||BlackGlasses|SupremeOverlord|SuckerPunch,SwordsDance,KowtowCleave,IronHead|Adamant|252,252,4,,,|||||,,,,,Dark","Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,Trailblaze,HornLeech,SwordsDance|Jolly|32,252,,,,224|||||,,,,,Water]Garchomp||RockyHelmet|RoughSkin|StealthRock,Earthquake,StoneEdge,DragonTail|Jolly|252,,120,,,136|||||,,,,,Dragon]Gholdengo||AirBalloon|GoodasGold|MakeItRain,ShadowBall,ThunderWave,Recover|Bold|252,,252,4,,||,0,,,,|||,,,,,Steel]Tera Captain|Lucario|SilkScarf|Justified|SwordsDance,CloseCombat,Earthquake,ExtremeSpeed|Adamant|252,252,4,,,|||||,,,,,Normal]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,HeatWave,KnockOff,Uturn|Timid|252,,120,,,136|||||,,,,,Flying]Tentacruel||YacheBerry|ClearBody|SludgeBomb,GigaDrain,RapidSpin,FlipTurn|Calm|252,,,4,252,|||||,,,,,Water"],
+ ["Rotom-Mow||AbilityShield|Levitate|LeafStorm,VoltSwitch,WillOWisp,PainSplit|Bold|248,,92,24,,144||,0,,,,|||,,,,,Electric]Garchomp||CustapBerry|RoughSkin|SwordsDance,Earthquake,ScaleShot,Endure|Jolly|112,252,,,,144|||||,,,,,Dragon]Tera Captain|Keldeo|ChoiceSpecs|Justified|SecretSword,Surf,VacuumWave,HydroPump|Modest|48,,4,252,,204||,0,,,,|||,,,,,Water]Tera Captain|Mesprit|SitrusBerry|Levitate|KnockOff,PsychicNoise,Uturn,PainSplit|Careful|248,,56,,196,|||||,,,,,Dark]Weavile||HeavyDutyBoots|Pressure|KnockOff,TripleAxel,IceShard,LowKick|Jolly|120,252,,,,136|||||,,,,,Dark]Gholdengo||AirBalloon|GoodasGold|MakeItRain,Hex,ThunderWave,Recover|Calm|248,,,,100,160||,0,,,,|||,,,,,Steel","Fezandipiti||BlackSludge|ToxicChain|Roost,CalmMind,Moonblast,HeatWave|Modest|252,,,72,152,32||,0,,,,|||,,,,,Poison]Tera Captain|Milotic|FlameOrb|MarvelScale|AlluringVoice,Recover,Scald,Haze|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Tera Captain|Excadrill|ChoiceScarf|MoldBreaker|Earthquake,StealthRock,RockSlide,XScissor|Jolly|,252,64,,,192|||||,,,,,Ground]Terapagos||RockyHelmet|TeraShift|BodyPress,IceBeam,EarthPower,StealthRock|Bold|252,,252,,4,||,15,,,,|||,,,,,Stellar]Latios||KasibBerry|Levitate|Recover,CalmMind,DragonPulse,ShadowBall|Timid|96,,,172,,240||,0,,,,|||,,,,,Dragon]Sableye||Leftovers|Prankster|WillOWisp,Recover,KnockOff,DrainPunch|Impish|252,,252,,4,|||||,,,,,Dark"],
+ ["Tera Captain|IronMoth|LifeOrb|QuarkDrive|FieryDance,Overheat,TeraBlast,SludgeWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Zarude||OccaBerry|LeafGuard|KnockOff,PowerWhip,Uturn,Taunt|Jolly|80,252,,,,176|||||,,,,,Dark]Tinkaton||RockyHelmet|Pickpocket|SwordsDance,GigatonHammer,IceHammer,Bulldoze|Jolly|248,232,,,,28|||||,,,,,Fairy]Great Tusk||BoosterEnergy|Protosynthesis|HeadSmash,HeadlongRush,IceSpinner,RapidSpin|Jolly|80,252,,,,176|||||,,,,,Ground]Tera Captain|Mesprit|SitrusBerry|Levitate|StealthRock,ThunderWave,IceBeam,KnockOff|Calm|252,,,92,156,8|||||,,,,,Fairy]Tornadus-Therian||HeavyDutyBoots|Regenerator|NastyPlot,Taunt,Hurricane,FocusBlast|Timid|140,,,164,36,168||,0,,,,|||,,,,,Flying","Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Toxic,PsychicFangs,Protect,HighHorsepower|Careful|248,,8,,252,|||||,,,,,Fairy]Slowking-Galar||AssaultVest|Regenerator|GunkShot,IceBeam,Surf,Psychic|Sassy|248,4,236,4,16,|||||,,,,,Poison]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|IvyCudgel,Uturn,PowerWhip,Encore|Jolly|80,252,,,,176|||||,,,,,Water]Tera Captain|Heatran|AssaultVest|FlashFire|EarthPower,MagmaStorm,HeavySlam,TeraBlast|Quiet|248,8,,252,,|||||,,,,,Fairy]Mandibuzz||SitrusBerry|BigPecks|Uturn,Defog,FoulPlay,Roost|Careful|248,,8,,252,|||||,,,,,Dark]Weavile||ChoiceBand|Pickpocket|TripleAxel,PoisonJab,IceShard,BrickBreak|Adamant|,252,84,,,172|||||,,,,,Dark"],
+ ["Tera Captain|Latias|Leftovers|Levitate|Substitute,CalmMind,Psyshock,DrainingKiss|Timid|252,,,104,,152||,0,,,,|||,,,,,Electric]Rotom-Heat||HeavyDutyBoots|Levitate|VoltSwitch,WillOWisp,Overheat,PainSplit|Bold|252,,252,4,,||,0,,,,|||,,,,,Electric]Iron Treads||SoftSand|QuarkDrive|HighHorsepower,RapidSpin,IceSpinner,IronHead|Jolly|72,252,,,,184|||||,,,,,Ground]Meowscarada||YacheBerry|Protean|KnockOff,FlowerTrick,Uturn,BrickBreak|Adamant|92,252,,,,164|||||,,,,,Grass]Tera Captain|Lucario|SilkScarf|Justified|SwordsDance,ExtremeSpeed,CloseCombat,Earthquake|Adamant|,252,40,,,216|||||,,,,,Normal]Primarina||RockyHelmet|Torrent|FlipTurn,IceBeam,Moonblast,Surf|Bold|252,,248,,,8|||||,,,,,Water","Weavile||HeavyDutyBoots|Pickpocket|KnockOff,TripleAxel,IceShard,PoisonJab|Jolly|16,252,,,,240|||||,,,,,Dark]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|SurgingStrikes,Uturn,CloseCombat,ThunderPunch|Adamant|148,252,,,,108|||||,,,,,Water]Tera Captain|Armarouge|AssaultVest|WeakArmor|ArmorCannon,Psyshock,EnergyBall,ClearSmog|Modest|120,,,252,,136||,0,,,,|S||,,,,,Flying]Forretress||EjectButton|Sturdy|RapidSpin,StealthRock,VoltSwitch,BodyPress|Bold|252,,180,,76,|||||,,,,,Bug]Slowking-Galar||ColburBerry|Regenerator|ThunderWave,BrickBreak,ChillyReception,SludgeBomb|Sassy|252,,16,,240,||,,,,,0|||,,,,,Poison]Grafaiai||AirBalloon|Prankster|Encore,PartingShot,SuperFang,PoisonJab|Adamant|248,,,,56,204|||||,,,,,Poison"],
+ ["Garchomp||LifeOrb|RoughSkin|Earthquake,ScaleShot,Flamethrower,StealthRock|Naive|,252,,4,,252|||||,,,,,Dragon]Tera Captain|IronHands|AssaultVest|QuarkDrive|DrainPunch,Earthquake,HeavySlam,FirePunch|Careful|4,,252,,252,|||||,,,,,Poison]Tera Captain|Polteageist|SpellTag|WeakArmor|ShadowBall,TeraBlast,StrengthSap,ShellSmash|Modest|,,,252,4,252||,0,,,,|||,,,,,Fairy]Volbeat||RockyHelmet|Prankster|Uturn,Encore,ThunderWave,LightScreen|Impish|252,,252,,4,|||||,,,,,Bug]Mandibuzz||CovertCloak|BigPecks|Uturn,KnockOff,Defog,Roost|Careful|248,,8,,252,|||||,,,,,Dark]Primarina||ChoiceScarf|LiquidVoice|FlipTurn,Moonblast,PsychicNoise,ShadowBall|Timid|,,,252,4,252|||||,,,,,Water","Darkrai||FocusSash|BadDreams|DarkPulse,IceBeam,SludgeBomb,Hypnosis|Timid|120,,,252,,136||,0,,,,|S||,,,,,Dark]Tera Captain|Infernape|ChoiceBand|IronFist|ThunderPunch,CloseCombat,MachPunch,Uturn|Jolly|48,252,,,,208|||S||,,,,,Electric]Tera Captain|Mimikyu|SpellTag|Disguise|SwordsDance,ShadowSneak,PlayRough,ShadowClaw|Adamant|,252,116,,,140|||S||,,,,,Ghost]Swampert||Leftovers|Torrent|StealthRock,Earthquake,FlipTurn,Roar|Impish|252,4,252,,,|||S||,,,,,Water]Slowking-Galar||HeavyDutyBoots|Regenerator|SludgeBomb,Psyshock,Toxic,ChillyReception|Calm|252,,,4,252,||,0,,,,|S||,,,,,Poison]Forretress||Leftovers|Sturdy|Spikes,RapidSpin,IceSpinner,VoltSwitch|Relaxed|252,4,252,,,|||||,,,,,Bug"],
+ ["Palafin-Hero||YacheBerry|ZerotoHero|BulkUp,JetPunch,DrainPunch,ThroatChop|Adamant|248,116,,,144,|||||,,,,,Water]Gouging Fire||BoosterEnergy|Protosynthesis|DragonDance,Outrage,RagingFury,MorningSun|Adamant|32,252,4,,,220|||||,,,,,Fire]Tera Captain|Rhyperior|Leftovers|SolidRock|StealthRock,Earthquake,HeatCrash,Protect|Adamant|248,24,236,,,|||||,,,,,Water]Weavile||ClearAmulet|Pressure|SwordsDance,Trailblaze,KnockOff,IcicleCrash|Jolly|48,252,,,,208|||||,,,,,Dark]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,EarthPower,DarkPulse,RapidSpin|Calm|252,,,120,136,|||||,,,,,Stellar]Tera Captain|ThundurusTherian|ChoiceScarf|VoltAbsorb|Thunderbolt,DarkPulse,FocusBlast,Uturn|Timid|64,,,252,,192|||||,,,,,Fighting","Tera Captain|Dudunsparce|Leftovers|Rattled|Roost,Coil,BodySlam,Earthquake|Careful|36,,252,,220,|||||,,,,,Fairy]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|Uturn,SurgingStrikes,CloseCombat,AquaJet|Jolly|48,252,,,,208|||||,,,,,Water]Iron Treads||PasshoBerry|QuarkDrive|RapidSpin,Earthquake,StoneEdge,StealthRock|Jolly|40,252,,,,216|||||,,,,,Ground]Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,HydroPump,FlipTurn,Taunt|Timid|92,,,252,,164|||||,,,,,Ice]Overqwil||ShucaBerry|Intimidate|ToxicSpikes,Taunt,Haze,Crunch|Careful|248,,8,,252,|||||,,,,,Dark]Decidueye||OccaBerry|LongReach|Trailblaze,SwordsDance,Poltergeist,Roost|Jolly|56,252,,,,200|||||,,,,,Grass"],
+ ["Greninja-Bond||RoseliBerry|BattleBond|ToxicSpikes,DarkPulse,IceBeam,Extrasensory|Timid|72,,,252,,184|||||,,,,,Water]Garchomp||HabanBerry|RoughSkin|ScaleShot,BrickBreak,SwordsDance,Earthquake|Jolly|176,252,,,,80|||S||,,,,,Dragon]Tera Captain|Diancie|Leftovers|ClearBody|CalmMind,DrainingKiss,DiamondStorm,StoredPower|Sassy|252,,4,,252,|||S||,,,,,Grass]Uxie||Leftovers|Levitate|FoulPlay,StealthRock,ThunderWave,Uturn|Impish|252,,252,,4,|||||,,,,,Psychic]Terapagos||Leftovers|TeraShift|RapidSpin,CalmMind,TeraStarstorm,EarthPower|Modest|120,,,252,4,132|||||,,,,,Stellar]Dusknoir||ColburBerry|Pressure|WillOWisp,ShadowSneak,BrickBreak,PainSplit|Relaxed|252,4,252,,,|||S||,,,,,Ghost","Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,Substitute,LeechSeed,Glare|Timid|184,,,88,4,232||,0,,,,|||,,,,,Poison]Quaquaval||LumBerry|Moxie|AquaStep,CloseCombat,RapidSpin,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Water]Zapdos||ChartiBerry|Static|Discharge,Hurricane,MetalSound,Roost|Modest|248,,,40,84,136||,0,,,,|||,,,,,Electric]Grimmsnarl||LightClay|Prankster|SpiritBreak,Reflect,ThunderWave,LightScreen|Careful|248,,8,,252,|||||,,,,,Dark]Gouging Fire||ChoiceScarf|Protosynthesis|HeatCrash,Outrage,IronHead,DragonClaw|Adamant|120,252,,,,136|||||,,,,,Fire]Jirachi||ShucaBerry|SereneGrace|IronHead,IcePunch,ThunderWave,Wish|Adamant|248,124,,,,136|||||,,,,,Steel"],
+ ["Tera Captain|Latias|MirrorHerb|Levitate|Recover,CalmMind,StoredPower,Thunderbolt|Timid|252,,,80,,176||,0,,,,|||,,,,,Electric]Palafin-Hero||AssaultVest|ZerotoHero|JetPunch,CloseCombat,IcePunch,FlipTurn|Adamant|32,252,,,204,20|||||,,,,,Normal]Meowscarada||ChoiceScarf|Protean|TripleAxel,KnockOff,ThunderPunch,Uturn|Jolly|104,252,,,,152|||||,,,,,Normal]Tinkaton||Leftovers|MoldBreaker|StealthRock,Encore,KnockOff,GigatonHammer|Careful|252,4,,,252,|||||,,,,,Normal]Iron Hands||ShucaBerry|QuarkDrive|Substitute,FocusPunch,SupercellSlam,IcePunch|Adamant|,252,108,,148,|||||,,,,,Normal]Donphan||HeavyDutyBoots|Sturdy|RapidSpin,Earthquake,IceShard,Roar|Adamant|248,252,,,8,|||||,,,,,Normal","Tera Captain|Latias|SitrusBerry|Levitate|DragonDance,Earthquake,Recover,Outrage|Adamant|,252,236,,,20|||||,,,,,Electric]Glimmora||BlackSludge|ToxicDebris|MortalSpin,SludgeBomb,SpikyShield,EarthPower|Bold|252,,252,4,,|||||,,,,,Rock]Mimikyu||RockyHelmet|Disguise|WillOWisp,Curse,PainSplit,DrainPunch|Impish|252,4,252,,,|||S||,,,,,Ghost]Palafin||ChoiceBand|ZerotoHero|ZenHeadbutt,DrainPunch,JetPunch,ThroatChop|Jolly|,252,,,4,252|||||,,,,,Water]Empoleon||EjectButton|Competitive|Roost,KnockOff,ChillingWater,Yawn|Calm|248,,,,252,8|||||,,,,,Water]Iron Jugulis||ChoiceScarf|QuarkDrive|FireBlast,DarkPulse,Uturn,AirSlash|Timid|,,,252,4,252|||||,,,,,Dark"],
+ ["Tera Captain|Gengar|FocusSash|CursedBody|NastyPlot,SludgeWave,Thunderbolt,DazzlingGleam|Timid|64,,,252,,192||,0,,,,|||,,,,,Electric]Tera Captain|Espathra|Leftovers|SpeedBoost|Protect,CalmMind,TeraBlast,LuminaCrash|Jolly|,,64,252,,192|||||,,,,,Electric]Landorus-Therian||LumBerry|Intimidate|Earthquake,SmackDown,Fly,BulkUp|Jolly|,252,48,,,208|||||,,,,,Ground]Appletun||RockyHelmet|ThickFat|IronDefense,DragonPulse,Recover,BodyPress|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel]Kingambit||AssaultVest|SupremeOverlord|SuckerPunch,KowtowCleave,IronHead,ZenHeadbutt|Adamant|252,252,4,,,|||||,,,,,Dark]Kleavor||FocusSash|Sharpness|SwordsDance,Trailblaze,StoneAxe,XScissor|Jolly|,252,,,4,252|||||,,,,,Bug","Garchomp||ChoiceSpecs|RoughSkin|DracoMeteor,EarthPower,Surf,DragonPulse|Timid|16,,,252,,240||,0,,,,|||,,,,,Dragon]Tera Captain|UrshifuRapidStrike|ChoiceScarf|UnseenFist|SurgingStrikes,CloseCombat,Uturn,AquaJet|Adamant|240,252,,,,16|||||,,,,,Fighting]Corviknight||Leftovers|MirrorArmor|Roost,BraveBird,BodyPress,Defog|Impish|248,,140,,,120|||||,,,,,Flying]Tera Captain|Arcanine|Leftovers|Intimidate|MorningSun,WillOWisp,TeraBlast,Flamethrower|Bold|248,,252,,,8||,0,,,,|||,,,,,Water]Florges||ChoiceScarf|FlowerVeil|AlluringVoice,Trick,Synthesis,CalmMind|Calm|236,,,,224,48||,0,,,,|||,,,,,Fairy]Overqwil||AssaultVest|PoisonPoint|LashOut,BarbBarrage,Liquidation,AquaJet|Careful|248,4,,,252,4|||||,,,,,Dark"],
+ ["Slowking||ColburBerry|Regenerator|PsychicNoise,Scald,ChillyReception,ThunderWave|Bold|252,,252,4,,||,0,,,,|||,,,,,Water]Talonflame||HeavyDutyBoots|GaleWings|DualWingbeat,Defog,Roost,Uturn|Jolly|24,252,,,,232|||||,,,,,Fire]Sneasler||ProtectivePads|PoisonTouch|DireClaw,CloseCombat,ThroatChop,Uturn|Jolly|,252,80,,,176|||||,,,,,Fighting]Iron Treads||SoftSand|QuarkDrive|StealthRock,Earthquake,IceSpinner,VoltSwitch|Jolly|,252,,,48,208|||||,,,,,Ground]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|Discharge,DracoMeteor,Earthquake,VoltSwitch|Sassy|252,,,4,252,|||||,,,,,Dragon]Dachsbun||Leftovers|AromaVeil|Wish,Protect,Yawn,BodyPress|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy","Meowscarada||HeavyDutyBoots|Protean|KnockOff,FlowerTrick,PowerGem,TripleAxel|Jolly|,252,,4,,252|||||,,,,,Grass]Gengar||ChoiceScarf|CursedBody|ShadowBall,SludgeWave,EnergyBall,Thunderbolt|Timid|,,4,252,,252||,0,,,,|||,,,,,Ghost]Landorus-Therian||Leftovers|Intimidate|CalmMind,EarthPower,SludgeWave,Psychic|Bold|248,,24,,28,208||,0,,,,|||,,,,,Ground]Tera Captain|Quaquaval|YacheBerry|Moxie|BulkUp,AquaStep,KnockOff,IceSpinner|Adamant|4,252,,,,252|||||,,,,,Dragon]Heatran||ShucaBerry|FlameBody|StealthRock,Overheat,FlashCannon,EarthPower|Modest|248,,20,116,56,68||,0,,,,|||,,,,,Fire]Bellibolt||RockyHelmet|Static|VoltSwitch,MuddyWater,SlackOff,Toxic|Bold|248,,252,,8,||,0,,,,|||,,,,,Electric"],
+ ["Slowking-Galar||ShucaBerry|Regenerator|Psychic,SludgeBomb,Flamethrower,ChillyReception|Sassy|252,,252,,4,||,0,,,,0|||,,,,,Poison]Tera Captain|Alomomola|AssaultVest|Regenerator|FlipTurn,Scald,PlayRough,MirrorCoat|Sassy|252,,4,,252,|||||,,,,,Grass]Moltres||ChoiceSpecs|FlameBody|Flamethrower,Hurricane,ScorchingSands,Overheat|Timid|24,,,252,,232||,0,,,,|||,,,,,Fire]Meowscarada||ChoiceScarf|Protean|Uturn,TripleAxel,KnockOff,Spikes|Jolly|8,252,,,,248|||||,,,,,Grass]Iron Treads||BoosterEnergy|QuarkDrive|EarthPower,Megahorn,SteelBeam,RapidSpin|Hasty|,96,,160,,252|||||,,,,,Ground]Tera Captain|RagingBolt|AirBalloon|Protosynthesis|DracoMeteor,Thunderclap,TeraBlast,CalmMind|Modest|240,,248,4,,16||,20,,,,|||,,,,,Flying","Tera Captain|GreatTusk|ChoiceBand|Protosynthesis|IceSpinner,HeadlongRush,RockSlide,CloseCombat|Adamant|4,252,,,,252|||||,,,,,Dragon]Greninja||ChoiceSpecs|Protean|IceBeam,Surf,DarkPulse,GrassKnot|Modest|,,,252,4,252||,0,,,,|||,,,,,Water]Scizor||RockyHelmet|LightMetal|CloseCombat,KnockOff,Uturn,LightScreen|Impish|248,,244,,,16|||||,,,,,Bug]Dragalge||ChoiceSpecs|Adaptability|DracoMeteor,SludgeWave,FlipTurn,DragonPulse|Modest|252,,4,252,,|||||,,,,,Poison]Tera Captain|WoChien|Leftovers|TabletsofRuin|LeechSeed,Ruination,KnockOff,Protect|Careful|252,,40,,216,|||||,,,,,Dark]Glimmet||Eviolite|Corrosion|Toxic,PowerGem,StealthRock,Spikes|Calm|212,,,,252,44||,0,,,,|||,,,,,Rock"],
+ ["Tera Captain|GreninjaBond|LifeOrb|BattleBond|Surf,DarkPulse,IceBeam,WaterShuriken|Timid|24,,,252,,232|||||,,,,,Water]Garchomp||Leftovers|RoughSkin|StealthRock,Earthquake,ScaleShot,Surf|Jolly|248,20,,,,240|||||,,,,,Dragon]Enamorus||HeavyDutyBoots|CuteCharm|CalmMind,Agility,Moonblast,EarthPower|Timid|8,,,252,,248||,0,,,,|||,,,,,Fairy]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,HornLeech,PlayRough,Encore|Jolly|40,252,,,,216|||||,,,,,Fire]Jirachi||Leftovers|SereneGrace|IronHead,IcyWind,ThunderWave,Wish|Docile|248,,,,236,24|||||,,,,,Steel]Rotom-Mow||ChoiceScarf|Levitate|LeafStorm,Discharge,VoltSwitch,Trick|Modest|96,,,252,,160||,0,,,,|||,,,,,Electric","Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,CloseCombat,KnockOff,IcePunch|Jolly|,252,,,4,252|||||,,,,,Fairy]Landorus-Therian||AssaultVest|Intimidate|StoneEdge,Uturn,Earthquake,RockTomb|Careful|104,152,,,252,||,,,,,18|||,,,,,Ground]Regidrago||RoseliBerry|DragonsMaw|IceFang,DragonDance,Earthquake,DragonClaw|Adamant|,252,,,4,252|||||,,,,,Dragon]Cinderace||PasshoBerry|Libero|PyroBall,Uturn,CourtChange,WillOWisp|Jolly|,4,,,252,252|||||,,,,,Fire]Tentacruel||AirBalloon|LiquidOoze|Surf,ToxicSpikes,FlipTurn,Toxic|Calm|252,,4,,252,|||||,,,,,Water]Tera Captain|Mismagius|SalacBerry|Levitate|DrainingKiss,Substitute,NastyPlot,ShadowBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy"],
+ ["Tera Captain|RagingBolt|MentalHerb|Protosynthesis|Thunderbolt,DracoMeteor,CalmMind,TeraBlast|Modest|88,,160,252,,8||,20,,,,|||,,,,,Fairy]Ribombee||ChoiceScarf|SweetVeil|StickyWeb,Moonblast,BugBuzz,Uturn|Timid|64,,,252,,192|||||,,,,,Bug]Rotom-Heat||HeavyDutyBoots|Levitate|WillOWisp,PainSplit,Overheat,VoltSwitch|Bold|132,,252,116,,8||,0,,,,|||,,,,,Electric]Slowking||AssaultVest|Regenerator|Psychic,Blizzard,FutureSight,FireBlast|Bold|252,,252,4,,||,0,,,,|||,,,,,Water]Cyclizar||HeavyDutyBoots|Regenerator|Taunt,ShedTail,RapidSpin,Overheat|Timid|248,,,,44,216|||||,,,,,Dragon]Tera Captain|Flygon|RockyHelmet|Levitate|StealthRock,Earthquake,Uturn,FireBlast|Timid|,,240,120,,148|||||,,,,,Steel","Iron Valiant||AssaultVest|QuarkDrive|SpiritBreak,KnockOff,CloseCombat,ShadowSneak|Adamant|,252,,,12,244|||||,,,,,Ground]Rotom-Heat||Leftovers|Levitate|EerieImpulse,PainSplit,VoltSwitch,WillOWisp|Calm|248,,8,,252,||,0,,,,|||,,,,,Electric]Houndstone||Leftovers|Fluffy|Roar,WillOWisp,BodyPress,ShadowSneak|Careful|248,,8,,252,|||||,,,,,Fairy]Garchomp||LumBerry|RoughSkin|Substitute,SwordsDance,Earthquake,ScaleShot|Jolly|16,252,,,,240|||||,,,,,Flying]Tentacruel||BlackSludge|ClearBody|ToxicSpikes,RapidSpin,KnockOff,FlipTurn|Careful|248,,8,,252,|||||,,,,,Ghost]Tera Captain|Ogerpon|ChoiceBand|Defiant|IvyCudgel,Uturn,PlayRough,KnockOff|Jolly|80,252,,,,176|||||,,,,,Grass"],
+ ["Tera Captain|SandyShocks|Leftovers|Protosynthesis|IronDefense,EarthPower,Thunderbolt,TeraBlast|Modest|232,,,248,,28||,0,,,,|||,,,,,Fairy]Tornadus-Therian||HeavyDutyBoots|Regenerator|Taunt,Hurricane,KnockOff,HeatWave|Timid|,,120,136,,252|||||,,,,,Flying]Dudunsparce||Leftovers|SereneGrace|Glare,Substitute,Coil,Headbutt|Impish|,96,252,,,160|||||,,,,,Normal]Tera Captain|Jirachi|Leftovers|SereneGrace|ThunderWave,Encore,IronHead,Wish|Jolly|248,,84,,,176|||||,,,,,Flying]Iron Valiant||BoosterEnergy|QuarkDrive|Encore,SwordsDance,CloseCombat,KnockOff|Jolly|16,252,,,,240|||||,,,,,Fairy]Samurott-Hisui||ChoiceBand|Sharpness|CeaselessEdge,RazorShell,SuckerPunch,SacredSword|Adamant|160,248,,,,100|||||,,,,,Water","Tera Captain|Annihilape|Leftovers|InnerFocus|RageFist,DrainPunch,BulkUp,Taunt|Adamant|248,252,,,8,|||||,,,,,Fairy]Roaring Moon||BoosterEnergy|Protosynthesis|Acrobatics,KnockOff,Earthquake,DragonDance|Jolly|32,220,,,4,252|||||,,,,,Steel]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,Trailblaze,HornLeech,Encore|Adamant|28,252,,,,228|||||,,,,,Fire]Lanturn||ChoiceScarf|VoltAbsorb|VoltSwitch,Scald,IceBeam,Discharge|Timid|,,,252,16,240||,0,,,,|||,,,,,Flying]Corviknight||Leftovers|Pressure|Defog,Uturn,Roost,BraveBird|Impish|248,,184,,68,8|||||,,,,,Ground]Tera Captain|Dudunsparce|ChopleBerry|SereneGrace|StealthRock,Roost,BodySlam,DragonTail|Careful|248,,4,,252,4|||||,,,,,Poison"],
+ ["Ursaluna-Bloodmoon||Leftovers|MindsEye|BloodMoon,Moonlight,EarthPower,Substitute|Bold|252,,252,4,,||,0,,,,|||,,,,,Ground]Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|Superpower,IvyCudgel,PowerWhip,SwordsDance|Jolly|108,252,,,,148|||||,,,,,Rock]Dewgong||Leftovers|ThickFat|Whirlpool,PerishSong,Protect,FlipTurn|Bold|244,,252,,12,|||||,,,,,Water]Tera Captain|Armarouge|CustapBerry|WeakArmor|DestinyBond,ArmorCannon,EnergyBall,Endure|Timid|,,,252,40,216||,0,,,,|||,,,,,Normal]Roaring Moon||HeavyDutyBoots|Protosynthesis|Tailwind,Uturn,KnockOff,Earthquake|Adamant|24,252,,,,232|||||,,,,,Dragon]Enamorus-Therian||BabiriBerry|Overcoat|IronDefense,CalmMind,DrainingKiss,EarthPower|Calm|248,,8,,252,||,0,,,,|||,,,,,Fairy","Tera Captain|Landorus|LifeOrb|SheerForce|EarthPower,SludgeWave,FocusBlast,StealthRock|Timid|24,,,252,,232||,0,,,,|||,,,,,Steel]Hitmontop||ExpertBelt|Technician|TripleAxel,CloseCombat,MachPunch,Earthquake|Adamant|248,252,,,8,|||||,,,,,Fighting]Primarina||AssaultVest|Torrent|Moonblast,Surf,FlipTurn,IceBeam|Modest|252,,,252,4,|||||,,,,,Water]Tera Captain|Bisharp|Eviolite|Defiant|StealthRock,ThroatChop,IronHead,Taunt|Naughty|252,252,,4,,|||||,,,,,Fairy]Magnezone||ChopleBerry|Analytic|FlashCannon,VoltSwitch,Thunderbolt,Protect|Modest|252,,4,252,,||,0,,,,|||,,,,,Electric]Darkrai||LifeOrb|BadDreams|DarkPulse,IceBeam,Taunt,NastyPlot|Timid|48,,,252,,208||,0,,,,|||,,,,,Dark"],
+ ["Skarmory||RockyHelmet|Sturdy|BraveBird,Roost,BodyPress,Spikes|Impish|252,,232,,24,|||||,,,,,Steel]Brambleghast||Leftovers|WindRider|Poltergeist,LeechSeed,Protect,SeedBomb|Jolly|252,4,40,,,212|||||,,,,,Grass]Volcanion||ChoiceScarf|WaterAbsorb|SteamEruption,Overheat,SludgeWave,WillOWisp|Timid|20,,,252,,236||,0,,,,|||,,,,,Fire]Ting-Lu||Leftovers|VesselofRuin|ThroatChop,StealthRock,Whirlwind,Earthquake|Adamant|252,32,24,,200,|||||,,,,,Dark]Ditto||ChoiceScarf|Imposter|Transform|Impish|252,4,252,,,||,30,,,,|||,,,,,Normal]Annihilape||Leftovers|VitalSpirit|Substitute,BulkUp,DrainPunch,RageFist|Impish|252,48,16,,192,|||||,,,,,Water","Chi-Yu||HeavyDutyBoots|BeadsofRuin|DarkPulse,Overheat,LavaPlume,Taunt|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tornadus-Therian||ChoiceScarf|Regenerator|BleakwindStorm,HeatWave,KnockOff,Uturn|Timid|40,,,252,,216|||||,,,,,Flying]Metagross||HeavyDutyBoots|ClearBody|MeteorMash,KnockOff,Earthquake,BulletPunch|Adamant|152,252,,,,104|||||,,,,,Steel]Tera Captain|Quaquaval|Leftovers|Moxie|Roost,AquaStep,SwordsDance,Taunt|Adamant|220,136,,,,152|||||,,,,,Electric]Tera Captain|Gardevoir|Leftovers|Synchronize|CalmMind,Moonblast,DrainingKiss,FocusBlast|Modest|248,,28,96,,136||,0,,,,|||,,,,,Grass]Sandy Shocks||BoosterEnergy|Protosynthesis|MetalSound,Thunderbolt,EarthPower,StealthRock|Timid|56,,,204,,248||,0,,,,|||,,,,,Electric"],
+ ["Tera Captain|Ribombee|ChoiceSpecs|ShieldDust|Moonblast,PsychicNoise,BugBuzz,Uturn|Timid|,,,252,4,252|||||,,,,,Ground]Meowscarada||ChoiceBand|Protean|FlowerTrick,KnockOff,ThunderPunch,Uturn|Jolly|,252,,,4,252|||||,,,,,Grass]Sandy Shocks||BoosterEnergy|Protosynthesis|Thunderbolt,VoltSwitch,EarthPower,Spikes|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Gholdengo||AirBalloon|GoodasGold|MakeItRain,ShadowBall,FocusBlast,Recover|Modest|252,,,252,,4||,0,,,,|||,,,,,Steel]Okidogi||MuscleBand|ToxicChain|DrainPunch,KnockOff,PoisonJab,PsychicFangs|Jolly|80,252,,,,176|||||,,,,,Poison]Tera Captain|Latias|Leftovers|Levitate|Thunderbolt,IceBeam,CalmMind,Recover|Timid|252,,,80,,176||,0,,,,|||,,,,,Electric","Tera Captain|Bisharp|Eviolite|Defiant|SuckerPunch,SwordsDance,IronHead,ThroatChop|Adamant|252,252,,,4,|||||,,,,,Ghost]Tornadus-Therian||LifeOrb|Regenerator|NastyPlot,BleakwindStorm,GrassKnot,HeatWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Flying]Weezing-Galar||RockyHelmet|Levitate|SludgeBomb,WillOWisp,PainSplit,FireBlast|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,Trailblaze,IvyCudgel,KnockOff|Jolly|,252,,,4,252|||||,,,,,Fire]Raging Bolt||BoosterEnergy|Protosynthesis|Thunderbolt,Thunderclap,CalmMind,DragonPulse|Modest|252,,,252,4,||,20,,,,|||,,,,,Electric]Donphan||AssaultVest|Sturdy|RapidSpin,KnockOff,Earthquake,IceSpinner|Adamant|248,252,,,8,|||||,,,,,Ground"],
+ ["Palafin-Hero||AssaultVest|ZerotoHero|FlipTurn,JetPunch,IceBeam,CloseCombat|Sassy|252,4,,,252,|||||,,,,,Stellar]Iron Treads||EjectButton|QuarkDrive|StealthRock,RapidSpin,VoltSwitch,EarthPower|Timid|48,,,252,,208|||||,,,,,Stellar]Tera Captain|Armarouge|ChoiceScarf|FlashFire|Trick,Psychic,AuraSphere,ArmorCannon|Modest|24,,,252,,232||,0,,,,|||,,,,,Fighting]Weezing||Leftovers|NeutralizingGas|ToxicSpikes,PainSplit,SludgeBomb,Flamethrower|Calm|252,,4,,252,||,0,,,,|||,,,,,Stellar]Tera Captain|Rillaboom|LifeOrb|GrassySurge|SwordsDance,GrassyGlide,TeraBlast,WoodHammer|Adamant|252,252,,,4,|||||,,,,,Fire]Tornadus-Therian||AssaultVest|Regenerator|HammerArm,Uturn,KnockOff,BleakwindStorm|Timid|120,,,,244,144|||||,,,,,Stellar","Chi-Yu||ChoiceSpecs|BeadsofRuin|DarkPulse,Overheat,Flamethrower,Ruination|Modest|,,16,252,,240||,0,,,,|||,,,,,Dark]Tera Captain|Sinistcha|CobaBerry|Heatproof|StunSpore,ShadowBall,StrengthSap,MatchaGotcha|Bold|252,,252,4,,||,0,,,,|||,,,,,Steel]Tera Captain|Serperior|Leftovers|Contrary|TeraBlast,Substitute,LeafStorm,Glare|Timid|252,,,56,,200||,0,,,,|||,,,,,Stellar]Rotom-Wash||Leftovers|Levitate|VoltSwitch,Thunderbolt,ThunderWave,PainSplit|Bold|252,,252,,4,||,0,,,,|||,,,,,Electric]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,Thunderbolt,Encore,AuraSphere|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Mudsdale||SitrusBerry|Stamina|StealthRock,BodyPress,Earthquake,Roar|Careful|252,,4,,252,|||||,,,,,Ground"],
+ ["Great Tusk||CustapBerry|Protosynthesis|HeadlongRush,StoneEdge,RapidSpin,Endure|Adamant|,252,4,,,252|||||,,,,,Ground]Tera Captain|Latias|MentalHerb|Levitate|MistBall,Thunderbolt,CalmMind,Recover|Timid|248,,,8,,252||,0,,,,|||,,,,,Electric]Greninja||ChoiceScarf|Protean|Surf,SludgeWave,IceBeam,Uturn|Hasty|,48,,252,,208|||||,,,,,Water]Tinkaton||LightClay|MoldBreaker|PlayRough,Bulldoze,StealthRock,LightScreen|Careful|248,,,,176,84|||||,,,,,Fairy]Muk||BlackSludge|PoisonTouch|PoisonJab,KnockOff,RockTomb,DrainPunch|Impish|248,8,252,,,|||||,,,,,Poison]Rillaboom||Leftovers|GrassySurge|GrassyGlide,HighHorsepower,Uturn,DrumBeating|Adamant|104,252,,,,152|||||,,,,,Grass","Iron Valiant||ChoiceSpecs|QuarkDrive|AuraSphere,Moonblast,VacuumWave,Psyshock|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,SludgeWave,Substitute,Agility|Modest|144,,,252,,112||,0,,,,|||,,,,,Steel]Iron Bundle||AssaultVest|QuarkDrive|IceBeam,FreezeDry,HydroPump,FlipTurn|Timid|104,,,252,8,144|||||,,,,,Ice]Tera Captain|IronThorns|LoadedDice|QuarkDrive|RockBlast,HighHorsepower,TeraBlast,DragonDance|Jolly|56,252,,,,200|||||,,,,,Flying]Iron Jugulis||ChoiceScarf|QuarkDrive|Hurricane,HydroPump,EarthPower,Uturn|Modest|56,,,252,4,196|||||,,,,,Dark]Iron Treads||EjectButton|QuarkDrive|StealthRock,EarthPower,SteelBeam,RapidSpin|Modest|40,,4,252,,212|||||,,,,,Ground"],
+ ["Iron Boulder||EjectPack|QuarkDrive|MightyCleave,CloseCombat,ZenHeadbutt,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Rock]Iron Bundle||ChoiceSpecs|QuarkDrive|HydroPump,FreezeDry,IceBeam,FlipTurn|Timid|,,,252,4,252|||||,,,,,Ice]Clodsire||MentalHerb|WaterAbsorb|Earthquake,PoisonJab,Recover,Toxic|Careful|248,,8,,252,|||||,,,,,Poison]Gliscor||ToxicOrb|PoisonHeal|KnockOff,Taunt,Toxic,Protect|Jolly|252,,4,,,252|||||,,,,,Ground]Tera Captain|Skeledirge|HeavyDutyBoots|Unaware|TorchSong,ScorchingSands,Substitute,SlackOff|Calm|248,,92,,168,||,0,,,,|||,,,,,Water]Skarmory||MentalHerb|Sturdy|BodyPress,Spikes,Whirlwind,Roost|Impish|252,,236,,,20||,0,,,,|||,,,,,Steel","Tornadus-Therian||LumBerry|Regenerator|Taunt,KnockOff,BleakwindStorm,HeatWave|Modest|248,,200,,,60|||||,,,,,Flying]Tera Captain|GreninjaBond|LifeOrb|BattleBond|HydroPump,SludgeWave,IceBeam,WaterShuriken|Modest|216,,,252,,40|||||,,,,,Water]Ting-Lu||ChestoBerry|VesselofRuin|StealthRock,Spikes,Rest,Whirlwind|Careful|248,,8,,252,||,0,,,,|||,,,,,Dark]Tera Captain|Bellibolt|HeavyDutyBoots|Static|SlackOff,AcidSpray,Discharge,TeraBlast|Calm|248,,,8,244,8||,0,,,,|||,,,,,Ice]Tsareena||HeavyDutyBoots|QueenlyMajesty|RapidSpin,KnockOff,Taunt,TripleAxel|Impish|248,,244,,8,8|||||,,,,,Grass]Misdreavus||Eviolite|Levitate|SkillSwap,ShadowBall,Taunt,MeanLook|Modest|248,,196,40,,24||,0,,,,|||,,,,,Ghost"],
+ ["Tera Captain|Latias|Leftovers|Levitate|CalmMind,Recover,Thunderbolt,AuraSphere|Timid|252,,,,116,140||,0,,,,|||,,,,,Poison]Greninja||ChoiceSpecs|Protean|Surf,IceBeam,Extrasensory,Uturn|Modest|4,,,252,,252|||||,,,,,Water]Tera Captain|Oricorio|HeavyDutyBoots|Dancer|Roost,Taunt,RevelationDance,QuiverDance|Timid|252,,,56,,200||,0,,,,|||,,,,,Flying]Heatran||Leftovers|FlameBody|MagmaStorm,EarthPower,Taunt,Protect|Timid|172,,,,148,188||,0,,,,|||,,,,,Fire]Tinkaton||AirBalloon|Pickpocket|StealthRock,ThunderWave,Encore,PlayRough|Bold|252,,112,,,144|||||,,,,,Fairy]Great Tusk||BoosterEnergy|Protosynthesis|RapidSpin,HeadlongRush,TemperFlare,IceSpinner|Adamant|252,180,,,,76|||||,,,,,Ground","Tera Captain|Hydreigon|ExpertBelt|Levitate|FireBlast,DarkPulse,DracoMeteor,EarthPower|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Scizor||ChoiceScarf|Technician|Uturn,CloseCombat,Facade,Defog|Jolly|,252,,,4,252|||||,,,,,Bug]Iron Hands||AssaultVest|QuarkDrive|CloseCombat,VoltSwitch,IcePunch,DrainPunch|Adamant|4,252,,,252,|||||,,,,,Fighting]Mandibuzz||LoadedDice|Overcoat|BoneRush,BraveBird,Roost,Uturn|Jolly|,252,,,4,252|||||,,,,,Dark]Tera Captain|Okidogi|Leftovers|ToxicChain|BulkUp,DrainPunch,PsychicFangs,Substitute|Careful|252,,,,252,|||||,,,,,Fighting]Munkidori||ChoiceScarf|Frisk|Uturn,Psyshock,Trick,SludgeBomb|Modest|,,,252,4,252|||||,,,,,Poison"],
+ ["Iron Crown||Leftovers|QuarkDrive|StoredPower,TachyonCutter,IronDefense,CalmMind|Timid|252,,56,8,,192||,20,,,,|||,,,,,Steel]Tera Captain|Diancie|UtilityUmbrella|ClearBody|DrainingKiss,IronDefense,CalmMind,RockPolish|Bold|,,220,,172,116||,0,,,,|||,,,,,Electric]Sneasel-Hisui||FocusSash|InnerFocus|CloseCombat,GunkShot,ShadowClaw,SwordsDance|Adamant|,252,4,,,252|||||,,,,,Fighting]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,LowKick,SwordsDance|Jolly|72,252,4,,4,176|||||,,,,,Water]Great Tusk||FocusSash|Protosynthesis|HeadlongRush,Endeavor,Taunt,StealthRock|Jolly|,252,,,4,252|||||,,,,,Ground]Weavile||ChoiceBand|Pressure|KnockOff,IcicleCrash,IceShard,FoulPlay|Adamant|72,252,8,,4,172|||||,,,,,Dark","Tera Captain|Annihilape|MarangaBerry|Defiant|RageFist,BulkUp,SleepTalk,Rest|Jolly|,56,60,,160,232|||S||,,,,,Ghost]Electrode-Hisui||LightClay|Soundproof|VoltSwitch,EnergyBall,LeechSeed,Reflect|Modest|,,64,252,,192||,0,,,,|S||,,,,,Electric]Palafin||HeavyDutyBoots|ZerotoHero|DrainPunch,BulkUp,JetPunch,Substitute|Adamant|,128,140,,,240|||S||,,,,,Water]Zapdos||HeavyDutyBoots|Static|Roost,Uturn,Thunderbolt,Hurricane|Timid|60,,252,44,,152|||S||,,,,,Electric]Archaludon||PowerHerb|Stamina|StealthRock,DracoMeteor,MeteorBeam,FlashCannon|Calm|124,,,120,200,64||,0,,,,|S||,,,,,Steel]Tera Captain|Overqwil|RockyHelmet|Intimidate|ToxicSpikes,BarbBarrage,Crunch,PainSplit|Impish|200,120,188,,,|||S||,,,,,Dragon"],
+ ["Tera Captain|Clefable|HeavyDutyBoots|Unaware|Moonblast,Flamethrower,StealthRock,Moonlight|Calm|252,,4,,228,24||,0,,,,|||,,,,,Normal]Wo-Chien||HeavyDutyBoots|TabletsofRuin|KnockOff,GigaDrain,LeechSeed,Protect|Sassy|252,,196,24,36,|||||,,,,,Dark]Blaziken||HeavyDutyBoots|SpeedBoost|CloseCombat,Earthquake,Uturn,Overheat|Lonely|,252,,84,,172|||||,,,,,Fire]Palafin-Hero||RockyHelmet|ZerotoHero|Waterfall,BulkUp,SleepTalk,Rest|Impish|252,,184,,56,16|||||,,,,,Water]Latios||MysticWater|Levitate|Surf,LusterPurge,FlipTurn,Recover|Timid|80,,,252,,176|||||,,,,,Dragon]Tera Captain|Toxtricity|ChoiceScarf|PunkRock|TeraBlast,SludgeWave,Overdrive,VoltSwitch|Modest|40,,,252,,216||,0,,,,|||,,,,,Water","Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,DragonPulse,TeraBlast,Substitute|Timid|24,,,252,,232||,0,,,,|||,,,,,Stellar]Skeledirge||HeavyDutyBoots|Unaware|SlackOff,TorchSong,ShadowBall,WillOWisp|Bold|252,,216,28,,12||,0,,,,|||,,,,,Fire]Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,WaveCrash,IcePunch|Adamant|104,252,,,,152|||||,,,,,Water]Weezing-Galar||RockyHelmet|NeutralizingGas|Toxic,PainSplit,Flamethrower,Defog|Bold|252,,236,,,20||,0,,,,|||,,,,,Poison]Ting-Lu||Leftovers|VesselofRuin|Payback,Earthquake,HeavySlam,Ruination|Careful|4,252,,,252,|||||,,,,,Dark]Tinkaton||Leftovers|MoldBreaker|GigatonHammer,StealthRock,Bulldoze,Encore|Jolly|248,156,,,,104|||||,,,,,Fairy"],
+ ["Iron Treads||RockyHelmet|QuarkDrive|BodyPress,StealthRock,EarthPower,RapidSpin|Bold|244,,216,,,48|||||,,,,,Ground]Tera Captain|KeldeoResolute|AssaultVest|Justified|FlipTurn,SecretSword,Surf,AirSlash|Calm|248,,,,228,32|||||,,,,,Flying]Meowscarada||FocusSash|Protean|ShadowBall,Spikes,SleepTalk,TripleAxel|Hasty|,32,,252,,224|||||,,,,,Grass]Enamorus-Therian||AssaultVest|Overcoat|Moonblast,EarthPower,SludgeBomb,WeatherBall|Modest|248,,8,252,,||,0,,,,|||,,,,,Fairy]Smeargle||ChoiceScarf|Technician|ShedTail,LunarDance,Trick,MortalSpin|Jolly|252,,,,4,252|||||,,,,,Normal]Tera Captain|Entei|AssaultVest|Pressure|SacredFire,BodySlam,ExtremeSpeed,Overheat|Hasty|,252,,100,4,152|||||,,,,,Normal","Torkoal||HeatRock|Drought|SolarBeam,Rest,LavaPlume,EarthPower|Bold|252,,252,,4,||,0,,,,|||,,,,,Fire]Tera Captain|WalkingWake|ChoiceScarf|Protosynthesis|HydroSteam,FlipTurn,DracoMeteor,Flamethrower|Modest|252,,,252,,4|||||,,,,,Water]Tera Captain|Venusaur|ExpertBelt|Chlorophyll|WeatherBall,SludgeBomb,EarthPower,SleepPowder|Modest|252,,,252,,4||,0,,,,|||,,,,,Grass]Roaring Moon||LumBerry|Protosynthesis|IronHead,Earthquake,DragonDance,KnockOff|Jolly|72,252,,,,184|||||,,,,,Dragon]Scream Tail||RedCard|Protosynthesis|Wish,Encore,ThunderWave,StealthRock|Calm|252,,,,88,168||,0,,,,|||,,,,,Fairy]Great Tusk||AssaultVest|Protosynthesis|RapidSpin,HeadlongRush,IceSpinner,KnockOff|Jolly|,252,,,96,160|||||,,,,,Ground"],
+ ["Tera Captain|Annihilape|Leftovers|Defiant|BulkUp,RageFist,DrainPunch,Protect|Careful|200,32,100,,176,||30,,,,,|||,,,,,Steel]Ting-Lu||Leftovers|VesselofRuin|Whirlwind,HeavySlam,StealthRock,Earthquake|Impish|252,,156,,100,|||||,,,,,Ghost]Volcanion||ChoiceSpecs|WaterAbsorb|SteamEruption,SludgeWave,FireBlast,Overheat|Timid|72,,,252,,184||,0,,,,|||,,,,,Flying]Skarmory||RockyHelmet|Sturdy|BodyPress,Roost,BraveBird,Tailwind|Impish|252,,232,,,24|||||,,,,,Dragon]Ditto||ChoiceScarf|Imposter|Transform|Jolly|252,4,,,,252||,30,,,,|||,,,,,Normal]Brambleghast||Leftovers|Infiltrator|Poltergeist,SeedBomb,StrengthSap,RapidSpin|Jolly|140,120,64,,,184|||||,,,,,Water","Latios||WeaknessPolicy|Levitate|CalmMind,Recover,IceBeam,StoredPower|Timid|252,,,48,,208||,0,,,,|||,,,,,Dragon]Hatterene||LightClay|MagicBounce|Reflect,CalmMind,DrainingKiss,Psyshock|Timid|252,,44,124,,88||,0,,,,|||,,,,,Psychic]Moltres||ChoiceSpecs|FlameBody|Hurricane,Uturn,Flamethrower,Overheat|Timid|,,,252,4,252|||||,,,,,Fire]Iron Bundle||ChoiceSpecs|QuarkDrive|FreezeDry,Uturn,HydroPump,IceBeam|Modest|136,,,252,,120|||||,,,,,Ice]Tera Captain|Excadrill|LifeOrb|SandRush|TeraBlast,SwordsDance,Earthquake,RapidSpin|Adamant|4,252,,,,252|||||,,,,,Fairy]Tyranitar||ChoiceBand|SandStream|StoneEdge,IcePunch,KnockOff,ThunderPunch|Adamant|252,252,,,4,|||||,,,,,Rock"],
+ ["Tera Captain|WalkingWake|MysticWater|Protosynthesis|HydroSteam,DracoMeteor,FlipTurn,DragonPulse|Timid|,,,244,12,252|||||,,,,,Water]Torkoal||HeatRock|Drought|StealthRock,RapidSpin,Yawn,FlareBlitz|Impish|248,,148,,112,|||||,,,,,Fire]Gouging Fire||LumBerry|Protosynthesis|Earthquake,Outrage,DragonDance,HeatCrash|Adamant|,252,,,12,244|||||,,,,,Fire]Hatterene||Leftovers|MagicBounce|CalmMind,Psyshock,Imprison,DrainingKiss|Calm|248,,24,,236,||,0,,,,|||,,,,,Psychic]Iron Treads||ChopleBerry|QuarkDrive|VoltSwitch,IronHead,KnockOff,RapidSpin|Jolly|16,252,36,,,204|||||,,,,,Ground]Ribombee||ChoiceSpecs|ShieldDust|Moonblast,Uturn,Trick,SunnyDay|Naive|,8,,252,,248|||||,,,,,Bug","Tera Captain|Latias|SoulDew|Levitate|DracoMeteor,MistBall,AlluringVoice,Recover|Timid|,,8,252,,248||,0,,,,|||,,,,,Fairy]Tera Captain|Staraptor|ChoiceScarf|Reckless|BraveBird,CloseCombat,Facade,Uturn|Jolly|72,252,,,,184|||||,,,,,Flying]Heatran||ShucaBerry|FlashFire|StealthRock,MagmaStorm,EarthPower,HeavySlam|Modest|248,,8,252,,|||||,,,,,Fire]Donphan||HeavyDutyBoots|Sturdy|Earthquake,StoneEdge,KnockOff,RapidSpin|Adamant|248,252,,,8,|||||,,,,,Ground]Rotom-Wash||Leftovers|Levitate|Thunderbolt,HydroPump,ThunderWave,RainDance|Calm|248,,,8,252,||,0,,,,|||,,,,,Electric]Gurdurr||Eviolite|Guts|DrainPunch,PoisonJab,IcePunch,MachPunch|Adamant|248,252,,,8,|||||,,,,,Fighting"],
+ ["Seviper||ExpertBelt|Infiltrator|Flamethrower,GigaDrain,SludgeWave,Glare|Timid|,,,252,4,252||,0,,,,|||,,,,,Poison]Klefki||LightClay|Prankster|PlayRough,Spikes,Reflect,LightScreen|Careful|252,4,,,252,|||||,,,,,Steel]Rotom-Heat||ChoiceScarf|Levitate|PainSplit,Trick,Overheat,VoltSwitch|Timid|156,,,,252,100||,0,,,,|||,,,,,Electric]Manaphy||AssaultVest|Hydration|FlipTurn,Scald,HydroPump,AlluringVoice|Calm|168,,,80,252,8|||||,,,,,Water]Tera Captain|Espeon|SitrusBerry|MagicBounce|ThunderWave,Wish,PsychicNoise,GrassKnot|Calm|252,,,,252,||,0,,,,|||,,,,,Fire]Tera Captain|GreatTusk|ChoiceBand|Protosynthesis|HeadlongRush,HeavySlam,CloseCombat,TeraBlast|Adamant|,252,,,152,104|||S||,,,,,Electric","Corviknight||RockyHelmet|Unnerve|Roost,Defog,Uturn,BodyPress|Impish|252,,252,,4,|||||,,,,,Flying]Alomomola||AssaultVest|Regenerator|FlipTurn,AquaJet,AlluringVoice,Scald|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Water]Fezandipiti||RockyHelmet|ToxicChain|Uturn,Roost,BeatUp,PlayRough|Impish|252,,252,,4,|||||,,,,,Poison]Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|Discharge,DracoMeteor,CalmMind,Thunderclap|Modest|252,,,252,4,||,20,,,,|||,,,,,Fairy]Ursaluna-Bloodmoon||ChopleBerry|MindsEye|CalmMind,Moonlight,BloodMoon,EarthPower|Bold|252,,228,28,,||,0,,,,|||,,,,,Ground]Weavile||ChoiceBand|Pressure|KnockOff,TripleAxel,IceShard,BrickBreak|Jolly|48,252,,,,208|||||,,,,,Dark"],
+ ["Mienshao||SitrusBerry|Regenerator|Trailblaze,KnockOff,DrainPunch,SwordsDance|Impish|36,36,216,,,220|||||,,,,,Fighting]Tera Captain|IronCrown|BoosterEnergy|QuarkDrive|Agility,Psychic,FocusBlast,TachyonCutter|Modest|72,,,252,,184||,20,,,,|||,,,,,Fighting]Tera Captain|Jolteon|HeavyDutyBoots|VoltAbsorb|CalmMind,AlluringVoice,Thunderbolt,HyperVoice|Timid|88,,,252,,168||,0,,,,|||,,,,,Fairy]Indeedee-F||ChoiceScarf|OwnTempo|Reflect,LightScreen,Trick,Psychic|Timid|252,,,4,,252||,0,,,,|||,,,,,Psychic]Great Tusk||BoosterEnergy|Protosynthesis|HeadlongRush,PlayRough,KnockOff,RapidSpin|Jolly|,252,4,,,252|||||,,,,,Ground]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|Trailblaze,IvyCudgel,HornLeech,PlayRough|Adamant|76,252,,,,180|||||,,,,,Water","Great Tusk||LumBerry|Protosynthesis|HeadSmash,HeadlongRush,IceSpinner,RapidSpin|Adamant|112,252,8,,,136|||||,,,,,Ground]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Thunderbolt,DragonPulse,TeraBlast,Roar|Modest|200,,8,64,64,172||,20,,,,|||,,,,,Grass]Tera Captain|Tornadus|SafetyGoggles|Prankster|BleakwindStorm,Tailwind,HeatWave,Uturn|Timid|,,,252,8,248|||||,,,,,Flying]Cinderace||ProtectivePads|Libero|PyroBall,SmackDown,Uturn,SuckerPunch|Jolly|72,252,,,,184|||||,,,,,Fire]Samurott-Hisui||AssaultVest|Sharpness|CeaselessEdge,SuckerPunch,AquaCutter,SacredSword|Adamant|248,180,,,24,56|||||,,,,,Water]Mesprit||Leftovers|Levitate|PsychUp,ThunderWave,StoredPower,Psyshock|Calm|128,,,,188,192||,0,,,,|||,,,,,Psychic"],
+ ["Great Tusk||BoosterEnergy|Protosynthesis|Earthquake,IceSpinner,KnockOff,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Ground]Tinkaton||Leftovers|MoldBreaker|GigatonHammer,StealthRock,PlayRough,KnockOff|Serious|248,4,,,25,|||||,,,,,Fairy]Grafaiai||BlackSludge|Prankster|Encore,PartingShot,LowKick,KnockOff|Impish|252,4,252,,,|||||,,,,,Poison]Tera Captain|Latias|Leftovers|Levitate|CalmMind,AuraSphere,StoredPower,Recover|Timid|248,,160,,,100||,0,,,,|||,,,,,Poison]Tera Captain|Umbreon|Leftovers|Synchronize|FoulPlay,Toxic,Wish,Protect|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Meowscarada||HeavyDutyBoots|Protean|BrickBreak,FlowerTrick,KnockOff,Uturn|Jolly|,252,,,4,252|||||,,,,,Grass","Tera Captain|Revavroom|LumBerry|Filter|ShiftGear,TeraBlast,PoisonJab,HighHorsepower|Adamant|80,252,,,,176|||||,,,,,Fairy]Darkrai||Leftovers|BadDreams|DarkPulse,WillOWisp,SludgeBomb,Taunt|Timid|100,,,192,,216||,0,,,,|||,,,,,Dark]Garchomp||RoseliBerry|RoughSkin|SwordsDance,Earthquake,IronHead,ScaleShot|Jolly|60,252,4,,4,188|||||,,,,,Dragon]Tera Captain|Zapdos|ThroatSpray|Static|Hurricane,HeatWave,MetalSound,Roost|Modest|248,,200,44,16,||,0,,,,|||,,,,,Electric]Uxie||ColburBerry|Levitate|StealthRock,Uturn,PsychicNoise,Encore|Bold|252,,240,,16,|||||,,,,,Psychic]Granbull||SitrusBerry|Intimidate|SuperFang,PlayRough,Earthquake,ThunderWave|Impish|240,,216,,52,|||||,,,,,Fairy"],
+ ["Tera Captain|Cetitan|HeavyDutyBoots|SlushRush|BellyDrum,IceShard,Liquidation,Earthquake|Adamant|216,252,,,,40|||||,,,,,Water]Tera Captain|SlowkingGalar|IcyRock|Regenerator|ChillyReception,SludgeBomb,ThunderWave,FocusBlast|Sassy|248,,40,24,196,||,0,,,,0|||,,,,,Water]Great Tusk||BoosterEnergy|Protosynthesis|BulkUp,IceSpinner,HeadlongRush,Substitute|Jolly|248,4,4,,,252|||||,,,,,Dragon]Palafin-Hero||Leftovers|ZerotoHero|BulkUp,JetPunch,DrainPunch,Taunt|Adamant|248,100,80,,,80|||||,,,,,Water]Grimmsnarl||LightClay|Prankster|LightScreen,Reflect,PlayRough,PartingShot|Adamant|248,36,224,,,|||||,,,,,Dark]Zapdos||HeavyDutyBoots|Static|Uturn,VoltSwitch,Hurricane,Roost|Calm|252,,,92,164,|||||,,,,,Electric","Darkrai||ExpertBelt|BadDreams|DarkPulse,IceBeam,SludgeBomb,NastyPlot|Modest|88,,,248,,172||,0,,,,|||,,,,,Dark]Slowking-Galar||BlackSludge|Regenerator|Toxic,Psychic,FireBlast,ChillyReception|Calm|240,,,,252,16||,0,,,,|||,,,,,Poison]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Earthquake,Protect,Uturn,Spikes|Impish|248,8,252,,,|||||,,,,,Water]Tera Captain|Terrakion|LifeOrb|Justified|StoneEdge,UpperHand,CloseCombat,Earthquake|Jolly|64,252,,,,192|||||,,,,,Water]Blastoise||RockyHelmet|Torrent|Haze,IceBeam,HydroPump,FlipTurn|Bold|240,,252,,,16|||||,,,,,Water]Articuno-Galar||HeavyDutyBoots|Competitive|Hurricane,Psyshock,CalmMind,Uturn|Timid|64,,,252,,192|||||,,,,,Psychic"],
+ ["Hydreigon||ChoiceScarf|Levitate|DracoMeteor,DarkPulse,Uturn,FlashCannon|Timid|24,,,252,,232|||||,,,,,Stellar]Gengar||LifeOrb|CursedBody|ShadowBall,SludgeBomb,Psychic,ToxicSpikes|Timid|80,,,252,,176||,0,,,,|||,,,,,Stellar]Empoleon||WeaknessPolicy|Competitive|Surf,StealthRock,VacuumWave,FlashCannon|Modest|252,,,252,4,||,0,,,,|||,,,,,Stellar]Iron Valiant||ChoiceScarf|QuarkDrive|Moonblast,AuraSphere,Thunderbolt,Trick|Modest|8,,4,252,,244||,0,,30,,|||,,,,,Stellar]Tera Captain|Espathra|LightClay|SpeedBoost|LuminaCrash,Reflect,LightScreen,FeatherDance|Modest|40,,4,252,,212||,0,,,,|||,,,,,Steel]Tera Captain|Gliscor|RedCard|PoisonHeal|SwordsDance,Agility,Acrobatics,Earthquake|Adamant|16,252,4,,,236|||||,,,,,Flying","Meowscarada||AssaultVest|Protean|Uturn,FlowerTrick,TripleAxel,KnockOff|Jolly|32,172,,,72,232|||||,,,,,Grass]Tera Captain|Annihilape|AssaultVest|Defiant|TeraBlast,RageFist,IcePunch,DrainPunch|Adamant|252,140,,,72,44|||||,,,,,Ghost]Palafin||AssaultVest|ZerotoHero|JetPunch,FlipTurn,WaveCrash,DrainPunch|Adamant|248,116,,,144,|||||,,,,,Water]Hatterene||CustapBerry|MagicBounce|PsychicNoise,Nuzzle,DrainingKiss,HealingWish|Calm|252,,80,8,168,|||||,,,,,Psychic]Tera Captain|Kilowattrel|HeavyDutyBoots|Competitive|Hurricane,Thunderbolt,Roost,Uturn|Timid|40,,,252,,216|||||,,,,,Ice]Glimmora||AirBalloon|ToxicDebris|StealthRock,DazzlingGleam,PowerGem,EarthPower|Modest|248,,,184,,76||,0,,,,|||,,,,,Rock"],
+ ["Darkrai||ExpertBelt|BadDreams|Hypnosis,DarkPulse,IceBeam,SludgeBomb|Timid|32,,,252,,224||,0,,,,|||,,,,,Dark]Tornadus-Therian||HeavyDutyBoots|Regenerator|NastyPlot,Uturn,HeatWave,BleakwindStorm|Timid|248,,,84,,176|||||,,,,,Flying]Keldeo||ChoiceScarf|Justified|FlipTurn,SecretSword,Surf,AirSlash|Timid|92,,,252,,164|||||,,,,,Water]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|StealthRock,Uturn,Earthquake,StoneEdge|Adamant|248,128,,,,132|||||,,,,,Ground]Scizor||LifeOrb|Technician|SwordsDance,BulletPunch,QuickAttack,KnockOff|Adamant|248,252,,,8,|||||,,,,,Bug]Vileplume||RockyHelmet|EffectSpore|StrengthSap,LeechSeed,SludgeBomb,SleepPowder|Bold|252,,252,,4,||,0,,,,|||,,,,,Grass","Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,Trailblaze,IvyCudgel,ZenHeadbutt|Jolly|,252,,,12,244|||||,,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,HeatWave,KnockOff,Uturn|Bold|252,,128,,,128|||||,,,,,Flying]Gholdengo||ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,FocusBlast,Thunderbolt|Modest|,,,252,4,252||,0,,,,|||,,,,,Steel]Gouging Fire||ClearAmulet|Protosynthesis|DragonDance,RagingFury,DragonClaw,MorningSun|Jolly|,252,,,4,252|||||,,,,,Fire]Donphan||LumBerry|Sturdy|Earthquake,IceShard,RapidSpin,StealthRock|Adamant|248,252,,,8,|||||,,,,,Ground]Tera Captain|Comfey|LifeOrb|Triage|CalmMind,DrainingKiss,TeraBlast,Synthesis|Modest|,,188,252,,68||,0,,,,|||,,,,,Fire"],
+ ["Darkrai||FocusSash|BadDreams|DarkPulse,SludgeBomb,FocusBlast,Hypnosis|Timid|,,4,252,,252||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,SwordsDance,Encore|Jolly|104,252,,,,152|||||,,,,,Water]Kyurem||LoadedDice|Pressure|ScaleShot,IcicleSpear,Substitute,DragonDance|Adamant|8,252,,,,248|||||,,,,,Dragon]Klefki||Leftovers|Prankster|DazzlingGleam,FoulPlay,Spikes,ThunderWave|Bold|252,,80,,176,||,0,,,,|||,,,,,Steel]Landorus-Therian||RockyHelmet|Intimidate|StealthRock,Earthquake,Taunt,Uturn|Impish|248,8,216,,,36|||||,,,,,Ground]Gurdurr||Eviolite|Guts|DrainPunch,KnockOff,MachPunch,BulkUp|Adamant|252,4,,,252,|||||,,,,,Fighting","Darkrai||FocusSash|BadDreams|FocusBlast,Hypnosis,IceBeam,DarkPulse|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Urshifu||ChoiceScarf|UnseenFist|CloseCombat,Uturn,WickedBlow,SuckerPunch|Jolly|,252,,,4,252|||||,,,,,Fighting]Corviknight||Leftovers|Pressure|IronDefense,BodyPress,Roost,IronHead|Careful|252,4,,,252,|||||,,,,,Flying]Tera Captain|ScreamTail|BoosterEnergy|Protosynthesis|CalmMind,StoredPower,DazzlingGleam,Wish|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Pecharunt||BlackSludge|PoisonPuppeteer|MalignantChain,PartingShot,Hex,Recover|Bold|252,,180,60,,16||,0,,,,|||,,,,,Poison]Tera Captain|Regidrago|ChoiceScarf|DragonsMaw|DragonEnergy,Outrage,Earthquake,ScaleShot|Naughty|,252,,4,,252|||||,,,,,Dragon"],
+ ["Palafin-Hero||PunchingGlove|ZerotoHero|JetPunch,IcePunch,DrainPunch,Encore|Adamant|144,252,,,4,108|||||,,,,,Water]Tera Captain|Gholdengo|Leftovers|GoodasGold|MakeItRain,FocusBlast,ShadowBall,Recover|Calm|248,,8,,252,||,0,,,,|||,,,,,Steel]Tera Captain|Jolteon|FlameOrb|QuickFeet|TeraBlast,VoltSwitch,ShadowBall,Thunderbolt|Timid|88,,,252,,168||,0,,,,|||,,,,,Fighting]Donphan||AssaultVest|Sturdy|Earthquake,RapidSpin,KnockOff,SmackDown|Adamant|248,144,,,28,88|||||,,,,,Ground]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,SwordsDance,PlayRough,Trailblaze|Adamant|,236,,,244,28|||||,,,,,Fire]Weezing-Galar||BlackSludge|Levitate|Psybeam,Flamethrower,Toxic,Defog|Bold|248,,176,,,84||,0,,,,|||,,,,,Poison","Tera Captain|Latias|SoulDew|Levitate|DracoMeteor,MistBall,TeraBlast,ThunderWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Iron Treads||AssaultVest|QuarkDrive|Earthquake,IronHead,KnockOff,RapidSpin|Jolly|252,24,,,184,48|||||,,,,,Ground]Sinistcha||WeaknessPolicy|Heatproof|MatchaGotcha,ShadowBall,CalmMind,StrengthSap|Bold|252,,252,,4,||,0,,,,|||,,,,,Grass]Iron Bundle||NeverMeltIce|QuarkDrive|IceBeam,HydroPump,FreezeDry,FlipTurn|Timid|,,,252,4,252|||||,,,,,Ice]Cinderace||HeavyDutyBoots|Libero|PyroBall,IronHead,WillOWisp,Uturn|Jolly|72,252,,,,184|||||,,,,,Fire]Mandibuzz||HeavyDutyBoots|Overcoat|FoulPlay,Taunt,Uturn,Roost|Impish|244,,248,,,16|||||,,,,,Dark"],
+ ["Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,CloseCombat,IcePunch|Jolly|72,252,,,,184|||||,,,,,Water]Zapdos||HeavyDutyBoots|Static|VoltSwitch,Roost,HeatWave,ThunderWave|Calm|248,,8,,252,||,0,,,,|||,,,,,Electric]Ting-Lu||Leftovers|VesselofRuin|Spikes,Ruination,HeavySlam,Earthquake|Careful|248,160,,,100,|||||,,,,,Dark]Kyurem||HeavyDutyBoots|Pressure|FreezeDry,FlashCannon,IceBeam,EarthPower|Timid|28,,,252,4,224||,0,,,,|||,,,,,Dragon]Tera Captain|Suicune|Leftovers|Pressure|Snarl,TeraBlast,Protect,Scald|Calm|248,,8,,252,||,0,,,,|||,,,,,Fire]Tera Captain|Heatran|Leftovers|FlashFire|StealthRock,MagmaStorm,EarthPower,Protect|Calm|248,,,,208,52||,0,,,,|||,,,,,Grass","Tera Captain|Serperior|Leftovers|Overgrow|EnergyBall,DragonPulse,CalmMind,Synthesis|Timid|184,,,160,,152||,0,,,,|||,,,,,Dragon]Tinkaton||SitrusBerry|Pickpocket|PlayRough,KnockOff,Encore,StealthRock|Jolly|248,,,,76,184|||||,,,,,Fairy]Quaquaval||CovertCloak|Moxie|LowKick,AquaStep,SwordsDance,Roost|Adamant|248,148,12,,44,56|||S||,,,,,Water]Mamoswine||AssaultVest|ThickFat|Earthquake,IcicleCrash,RockBlast,KnockOff|Adamant|40,216,,,252,|||||,,,,,Ice]Greninja||FocusSash|Protean|IceBeam,LowKick,GrassKnot,ToxicSpikes|Naive|,252,,176,,80|||||,,,,,Water]Zapdos||RockyHelmet|Static|Discharge,Hurricane,Uturn,Roost|Bold|248,,200,,60,|||S||,,,,,Electric"],
+ ["Garchomp||LifeOrb|RoughSkin|DracoMeteor,EarthPower,IronHead,StealthRock|Rash|,76,,252,,180|||S||,,,,,Dragon]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,PlayRough,SwordsDance,Uturn|Jolly|32,252,,,,224|||||,,,,,Water]Scizor||ChoiceBand|Technician|Uturn,BulletPunch,KnockOff,CloseCombat|Adamant|8,252,4,,244,|||||,,,,,Bug]Zapdos||HeavyDutyBoots|Static|Uturn,HeatWave,Thunderbolt,Roost|Modest|224,,68,148,68,|||||,,,,,Electric]Overqwil||CustapBerry|Intimidate|Spikes,Liquidation,PoisonJab,SelfDestruct|Adamant|,204,168,,120,16|||S||,,,,,Dark]Tera Captain|Hariyama|SitrusBerry|Guts|BulkUp,DrainPunch,HeavySlam,Earthquake|Adamant|4,80,228,,196,|||S||,,,,,Fairy","Palafin||ChoiceScarf|ZerotoHero|DrainPunch,JetPunch,FlipTurn,WaveCrash|Adamant|168,252,,,,88|||||,,,,,Water]Tera Captain|EnamorusTherian|Leftovers|Overcoat|EarthPower,CalmMind,Moonblast,MysticalFire|Modest|252,,4,252,,||,0,,,,|||,,,,,Poison]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|DracoMeteor,Thunderbolt,Thunderclap,VoltSwitch|Calm|152,,,252,104,||,20,,,,|||,,,,,Flying]Weezing||RockyHelmet|Levitate|Haze,Flamethrower,PainSplit,WillOWisp|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Iron Treads||HeavyDutyBoots|QuarkDrive|StealthRock,SupercellSlam,RapidSpin,IceSpinner|Jolly|32,252,,,,224|||||,,,,,Ground]Roaring Moon||ChoiceBand|Protosynthesis|Outrage,Acrobatics,KnockOff,FireFang|Jolly|72,252,,,,184|||||,,,,,Dragon"],
+ ["Meowscarada||LifeOrb|Protean|PowerGem,FlowerTrick,Protect,SuckerPunch|Mild|,64,,200,,244|||||,,,,,Grass]Tera Captain|Latias|ChoiceScarf|Levitate|MistBall,DracoMeteor,TeraBlast,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Poison]Crawdaunt||LifeOrb|Adaptability|CloseCombat,Crabhammer,KnockOff,AquaJet|Adamant|252,252,,,4,|||||,,,,,Water]Tera Captain|BraviaryHisui|HeavyDutyBoots|SheerForce|RainDance,Hurricane,Psychic,Roost|Calm|252,,,4,252,||,0,,,,|||,,,,,Psychic]Tinkaton||Leftovers|MoldBreaker|GigatonHammer,StealthRock,PlayRough,Encore|Jolly|248,,172,,,88|||||,,,,,Fairy]Cinderace||LifeOrb|Libero|SwordsDance,HighJumpKick,SuckerPunch,QuickAttack|Adamant|168,252,,,,88|||||,,,,,Fire","Torkoal||HeatRock|Drought|RapidSpin,LavaPlume,ScorchingSands,Yawn|Bold|248,,252,8,,|||||,,,,,Fire]Tera Captain|WalkingWake|WiseGlasses|Protosynthesis|HydroSteam,Flamethrower,Agility,DragonPulse|Modest|128,,,252,,128||,0,,,,|||,,,,,Water]Tera Captain|Venusaur|LifeOrb|Chlorophyll|TeraBlast,GigaDrain,SludgeBomb,Growth|Timid|80,,,252,,176||,0,,,,|S||,,,,,Fire]Hoopa-Unbound||AssaultVest|Magician|KnockOff,DrainPunch,HyperspaceFury,ZenHeadbutt|Adamant|,252,,,248,8|||||,,,,,Psychic]Arbok||BlackSludge|Intimidate|Glare,Switcheroo,Protect,Earthquake|Impish|248,,252,,8,|||||,,,,,Poison]Enamorus||ChoiceSpecs|CuteCharm|Moonblast,EarthPower,SunnyDay,HealingWish|Modest|,,104,252,,152||,0,,,,|S||,,,,,Fairy"],
+ ["Tera Captain|GreninjaBond|SalacBerry|BattleBond|TeraBlast,IceBeam,GunkShot,Endure|Rash|,60,,252,,196|||||,,,,,Rock]Slowking-Galar||ShucaBerry|Regenerator|ChillyReception,SludgeBomb,Psychic,TrickRoom|Quiet|248,,52,136,72,||,0,,,,0|||,,,,,Poison]Iron Valiant||BoosterEnergy|QuarkDrive|Encore,Moonblast,Psyshock,DestinyBond|Timid|68,,,252,,188||,0,,,,|||,,,,,Fairy]Gliscor||ToxicOrb|PoisonHeal|Protect,Earthquake,Toxic,StealthRock|Impish|244,,240,,,24|||S||,,,,,Ground]Rotom-Wash||RockyHelmet|Levitate|VoltSwitch,ThunderWave,HydroPump,PainSplit|Bold|252,,252,,4,||,0,,,,|||,,,,,Electric]Forretress||EjectButton|Sturdy|RapidSpin,GigaDrain,Spikes,GyroBall|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Bug","Torkoal||HeatRock|Drought|SolarBeam,StealthRock,Overheat,RapidSpin|Calm|248,,8,,252,|||||,,,,,Fire]Tera Captain|Venusaur|LumBerry|Chlorophyll|SolarBeam,PoisonJab,Earthquake,Growth|Jolly|4,252,,,,252|||||,,,,,Steel]Gouging Fire||ChoiceBand|Protosynthesis|HeatCrash,Earthquake,Outrage,IronHead|Adamant|208,248,,,16,36|||||,,,,,Fire]Primarina||AssaultVest|Torrent|Moonblast,FlipTurn,WeatherBall,IceBeam|Modest|252,,,240,,16|||||,,,,,Water]Tera Captain|Mew|Leftovers|Synchronize|VoltSwitch,IceBeam,Spikes,Psyshock|Timid|240,,,88,36,144||,0,,,,|||,,,,,Fairy]Great Tusk||SoftSand|Protosynthesis|SmackDown,HeadlongRush,RapidSpin,IceSpinner|Jolly|196,4,,,56,252|||||,,,,,Ground"],
+ ["Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,Encore,FlipTurn|Timid|228,,,28,,252|||||,,,,,Stellar]Iron Boulder||BoosterEnergy|QuarkDrive|MightyCleave,CloseCombat,SwordsDance,Taunt|Jolly|112,252,,,,144|||||,,,,,Stellar]Tera Captain|Hydreigon|ChoiceScarf|Levitate|EarthPower,FlashCannon,DarkPulse,Uturn|Modest|4,,,252,,252|||||,,,,,Steel]Gliscor||ToxicOrb|PoisonHeal|Protect,Earthquake,StealthRock,Uturn|Impish|212,,252,,,44|||||,,,,,Stellar]Tera Captain|Cetitan|SitrusBerry|SlushRush|BellyDrum,IcicleSpear,IceShard,Earthquake|Jolly|,252,,,24,232|||||,,,,,Water]Slowking-Galar||ColburBerry|Regenerator|ChillyReception,SludgeBomb,FocusBlast,SlackOff|Calm|252,,16,,240,||,0,,,,|||,,,,,Stellar","Chi-Yu||ShucaBerry|BeadsofRuin|DarkPulse,FireSpin,Ruination,Taunt|Calm|252,,,80,176,||,0,,,,|||,,,,,Bug]Iron Bundle||AssaultVest|QuarkDrive|FreezeDry,HydroPump,IcyWind,Uturn|Timid|100,,,,248,160|||S||,,,,,Bug]Iron Treads||WeaknessPolicy|QuarkDrive|Earthquake,IceSpinner,RapidSpin,IronDefense|Jolly|,252,64,,,192|||S||,,,,,Bug]Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|IvyCudgel,Trailblaze,LowKick,Substitute|Jolly|,252,96,,,160|||||,,,,,Rock]Tera Captain|EnamorusTherian|MentalHerb|Overcoat|DrainingKiss,EarthPower,CalmMind,IronDefense|Calm|248,,160,36,64,||,0,,,,|||,,,,,Steel]Morgrem||LightClay|Prankster|ThunderWave,PartingShot,Reflect,LightScreen|Calm|112,,248,,148,||,0,,,,|S||,,,,,Bug"],
+ ["Iron Valiant||ChoiceSpecs|QuarkDrive|Trick,Moonblast,Psyshock,VacuumWave|Modest|12,,,252,,244||,0,,,,|||,,,,,Fairy]Gholdengo||RockyHelmet|GoodasGold|Recover,NastyPlot,ShadowBall,MakeItRain|Bold|252,,184,,,72||,0,,,,|||,,,,,Steel]Donphan||Leftovers|Sturdy|StealthRock,RapidSpin,Earthquake,KnockOff|Impish|252,,208,,,48|||||,,,,,Ground]Tera Captain|Gyarados||Intimidate|Waterfall,Earthquake,ThunderWave,Roar|Impish|252,,160,,,96|||||,,,,,Ground]Qwilfish-Hisui||Eviolite|PoisonPoint|Haze,PainSplit,BarbBarrage,Spikes|Careful|252,,,,192,64|||||,,,,,Dark]Tera Captain|Latias|ColburBerry|Levitate|MistBall,Recover,AuraSphere,CalmMind|Timid|252,,80,,,176||,0,,,,|||,,,,,Poison","Mandibuzz||HeavyDutyBoots|Overcoat|Roost,Whirlwind,FoulPlay,Uturn|Impish|248,,220,,40,|||||,,,,,Dark]Clefable||Leftovers|Unaware|Moonlight,Moonblast,CalmMind,Flamethrower|Calm|232,,252,,16,8||,0,,,,|S||,,,,,Fairy]Tera Captain|Excadrill|LifeOrb|SandRush|Earthquake,RapidSpin,SwordsDance,TeraBlast|Jolly|,252,,,32,224|||||,,,,,Ice]Tera Captain|Amoonguss|EjectButton|Regenerator|GigaDrain,SludgeBomb,Spore,Synthesis|Calm|252,,68,,188,||,0,,,,|||,,,,,Fire]Tyranitar||ShucaBerry|SandStream|StealthRock,Thunderbolt,IceBeam,KnockOff|Modest|88,,,252,,168|||||,,,,,Rock]Eelektross||AssaultVest|Levitate|Flamethrower,KnockOff,GigaDrain,VoltSwitch|Modest|252,,,16,140,100|||||,,,,,Electric"],
+ ["Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,WaveCrash,ThroatChop|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|Raikou|Leftovers|InnerFocus|CalmMind,Scald,Thunderbolt,AuraSphere|Modest|,,,252,4,252||,0,,,,|||,,,,,Fighting]Tera Captain|Cresselia|Leftovers|Levitate|Moonlight,LunarDance,Thunderbolt,IceBeam|Modest|252,,,252,4,||,0,,,,|S||,,,,,Poison]Appletun||AssaultVest|ThickFat|GigaDrain,Earthquake,DracoMeteor,DragonTail|Sassy|248,,,8,252,|||S||,,,,,Grass]Iron Treads||Leftovers|QuarkDrive|RapidSpin,Earthquake,IceSpinner,VoltSwitch|Jolly|48,252,,,,208|||||,,,,,Ground]Dudunsparce||Leftovers|SereneGrace|Glare,Roost,Boomburst,StealthRock|Calm|208,,,,252,48||,0,,,,|||,,,,,Normal","Chi-Yu||ChoiceScarf|BeadsofRuin|HeatWave,DarkPulse,Psychic,Hex|Modest|,,,252,,252||,0,,,,|||,,,,,Dark]Tornadus-Therian||RockyHelmet|Regenerator|BleakwindStorm,Psychic,Taunt,Uturn|Timid|80,,,176,,252|||||,,,,,Flying]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|Uturn,Earthquake,StoneEdge,BodySlam|Adamant|,252,,,4,252|||S||,,,,,Grass]Slowbro||WacanBerry|Regenerator|FutureSight,Scald,IceBeam,Yawn|Modest|252,,176,76,4,||,0,,,,|||,,,,,Water]Dunsparce||Eviolite|SereneGrace|Coil,CalmMind,StoredPower,Roost|Modest|,,228,,156,124||,0,,,,|||,,,,,Normal]Terapagos||ChestoBerry|TeraShift|TeraStarstorm,RapidSpin,Toxic,Rest|Modest|252,,,252,,|||||,,,,,Stellar"],
+ ["Vikavolt||Leftovers|Levitate|StickyWeb,VoltSwitch,BugBuzz,EnergyBall|Modest|252,,,16,240,||,0,,,,|||,,,,,Bug]Enamorus||ChoiceScarf|CuteCharm|Moonblast,EarthPower,MysticalFire,HealingWish|Modest|,,8,252,,248||,0,,,,|||,,,,,Fairy]Iron Treads||OccaBerry|QuarkDrive|RapidSpin,KnockOff,Earthquake,IceSpinner|Jolly|252,36,12,,,208|||||,,,,,Ground]Tera Captain|Latias|ChoiceSpecs|Levitate|DracoMeteor,AuraSphere,TeraBlast,MistBall|Timid|,,80,252,,176||,0,,,,|||,,,,,Poison]Tera Captain|Gyarados|HeavyDutyBoots|Intimidate|Earthquake,TeraBlast,TemperFlare,DragonDance|Adamant|,252,,,,204|||||,,,,,Poison]Gastrodon||RindoBerry|StickyHold|Substitute,EarthPower,Spikes,ClearSmog|Bold|252,,216,,40,||,0,,,,|||,,,,,Water","Rillaboom||AssaultVest|GrassySurge|GrassyGlide,WoodHammer,KnockOff,Uturn|Adamant|244,252,,,,12|||||,,,,,Grass]Sneasler||ChoiceScarf|PoisonTouch|DireClaw,Uturn,CloseCombat,Switcheroo|Jolly|80,252,,,,176|||||,,,,,Fighting]Tera Captain|Mesprit|GrassySeed|Levitate|CalmMind,StoredPower,DrainingKiss,Imprison|Modest|252,,28,56,136,36||,0,,,,|||,,,,,Fairy]Gouging Fire||HeavyDutyBoots|Protosynthesis|FlareBlitz,BreakingSwipe,DragonDance,MorningSun|Adamant|252,16,,,108,132|||||,,,,,Fire]Tera Captain|Manaphy|RockyHelmet|Hydration|Scald,EnergyBall,Haze,Uturn|Bold|252,,176,4,72,4|||||,,,,,Fairy]Sandy Shocks||ShucaBerry|Protosynthesis|Discharge,EarthPower,StealthRock,PowerGem|Timid|156,,,252,4,96||,0,,,,|||,,,,,Ice"],
+ ["Skarmory||RockyHelmet|Sturdy|Taunt,BodyPress,Spikes,Roost|Timid|252,,40,,,216||,0,,,,|||,,,,,Steel]Tera Captain|Sceptile|HeavyDutyBoots|Overgrow|LeafStorm,Roar,Earthquake,VacuumWave|Mild|,20,,252,,236|||||,,,,,Steel]Iron Moth||HeavyDutyBoots|QuarkDrive|SludgeWave,FieryDance,Psychic,MorningSun|Timid|40,,,252,,216||,0,,,,|||,,,,,Fire]Alomomola||MentalHerb|Regenerator|Wish,Protect,FlipTurn,HealingWish|Bold|,,252,,252,|||||,,,,,Water]Roaring Moon||RoseliBerry|Protosynthesis|Roost,Taunt,DragonClaw,KnockOff|Adamant|12,52,,,204,240|||||,,,,,Dragon]Tera Captain|Annihilape|ChoiceScarf|Defiant|RageFist,Encore,IcePunch,CloseCombat|Adamant|,252,,,104,152|||||,,,,,Ghost","Palafin||ChoiceSpecs|ZerotoHero|JetPunch,Surf,Boomburst,HydroPump|Naughty|64,,,252,,192|||||,,,,,Water]Garchomp||RockyHelmet|RoughSkin|Spikes,Earthquake,DragonTail,FireBlast|Naive|248,,100,,,160|||||,,,,,Dragon]Meowscarada||ChoiceBand|Protean|FlowerTrick,KnockOff,Uturn,PlayRough|Jolly|24,252,,,,232|||||,,,,,Grass]Tera Captain|Pecharunt|Leftovers|PoisonPuppeteer|Recover,TeraBlast,MalignantChain,PartingShot|Bold|248,,140,120,,||,0,,,,|||,,,,,Fairy]Tera Captain|Heatran|Leftovers|FlashFire|MagmaStorm,EarthPower,StealthRock,Protect|Modest|248,,,252,8,||,0,,,,|||,,,,,Fairy]Braviary-Hisui||HeavyDutyBoots|TintedLens|Roost,Defog,EsperWing,DazzlingGleam|Modest|176,,,252,,80||,0,,,,|||,,,,,Psychic"],
+ ["Tera Captain|GreatTusk|ChoiceScarf|Protosynthesis|HeadSmash,CloseCombat,ZenHeadbutt,TemperFlare|Adamant|,252,100,,,156|||||,,,,,Fighting]Tornadus-Therian||LifeOrb|Regenerator|NastyPlot,HeatWave,BleakwindStorm,Taunt|Timid|,,36,224,,248||,0,,,,|||,,,,,Flying]Latios||HeatRock|Levitate|SunnyDay,WeatherBall,PsychicNoise,DracoMeteor|Timid|80,,,252,,176||,0,,,,|||,,,,,Dragon]Tinkaton||AirBalloon|Pickpocket|StealthRock,GigatonHammer,KnockOff,Encore|Impish|248,,148,,,112|||||,,,,,Fairy]Tera Captain|Bellibolt|RockyHelmet|Static|MuddyWater,Toxic,VoltSwitch,SlackOff|Bold|248,,208,,52,||,0,,,,|||,,,,,Ghost]Brambleghast||ColburBerry|WindRider|Poltergeist,Spikes,StrengthSap,PowerWhip|Impish|248,32,172,,,56|||||,,,,,Grass","Scizor||HeavyDutyBoots|Technician|SwordsDance,BulletPunch,Uturn,DualWingbeat|Adamant|248,8,,,252,|||||,,,,,Bug]Ursaluna-Bloodmoon||ChopleBerry|MindsEye|BloodMoon,EarthPower,VacuumWave,CalmMind|Modest|248,,24,36,200,||,0,,,,|||,,,,,Ground]Sneasler||ChoiceScarf|PoisonTouch|Uturn,CloseCombat,DireClaw,GunkShot|Jolly|,252,80,,,176|||||,,,,,Fighting]Zapdos||HeavyDutyBoots|Static|VoltSwitch,Hurricane,Roost,ThunderWave|Timid|248,,108,,,152||,0,,,,|||,,,,,Electric]Gurdurr||Eviolite|IronFist|BulkUp,IcePunch,DrainPunch,MachPunch|Adamant|248,140,,,120,|||||,,,,,Fighting]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|SwordsDance,Synthesis,IvyCudgel,ThroatChop|Adamant|248,,48,,116,96|||||,,,,,Water"],
+ ["Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,AuraSphere,Psyshock,VacuumWave|Timid|,,8,252,,248||,0,,,,|||,,,,,Fairy]Garchomp||ChoiceScarf|RoughSkin|Outrage,Earthquake,DragonClaw,Spikes|Jolly|,252,4,,,252|||||,,,,,Dragon]Arbok||BlackSludge|Intimidate|GunkShot,FireFang,DragonTail,ToxicSpikes|Careful|252,,4,,252,|||||,,,,,Poison]Tera Captain|DudunsparceThreeSegment|Leftovers|Rattled|Boomburst,StealthRock,CalmMind,Roost|Bold|248,,252,8,,||,0,,,,|||,,,,,Water]Tera Captain|Serperior|YacheBerry|Contrary|LeafStorm,TeraBlast,Synthesis,Glare|Timid|88,,,252,,168||,0,,,,|||,,,,,Fire]Corviknight||Leftovers|Pressure|BraveBird,Substitute,BulkUp,Roost|Impish|248,,100,,160,|||||,,,,,Flying","Tera Captain|Comfey|LifeOrb|Triage|DrainingKiss,TeraBlast,StoredPower,CalmMind|Modest|240,,,252,,16||,0,,,,|S||,,,,,Fire]Scizor||ProtectivePads|Technician|BulletPunch,KnockOff,Uturn,SwordsDance|Adamant|248,252,,,8,|||||,,,,,Bug]Cinderace||ChoiceScarf|Libero|PyroBall,GunkShot,HighJumpKick,Uturn|Jolly|24,252,,,,232|||||,,,,,Fire]Tera Captain|Raikou|ChoiceSpecs|Pressure|Thunderbolt,VoltSwitch,Scald,TeraBlast|Timid|16,,,252,,240||,0,,,,|||,,,,,Ice]Slowking||ColburBerry|Regenerator|Psychic,FutureSight,Flamethrower,ChillyReception|Calm|248,,252,,4,||,0,,,,|||,,,,,Water]Toedscruel||Leftovers|MyceliumMight|GigaDrain,RapidSpin,Spikes,Spore|Calm|252,,,112,144,|||||,,,,,Ground"],
+ ["Necrozma||PowerHerb|PrismArmor|DragonDance,PhotonGeyser,SolarBeam,HeatWave|Modest|28,,,252,,228|||||,,,,,Psychic]Tera Captain|Torterra|Leftovers|ShellArmor|StealthRock,GigaDrain,Roar,Synthesis|Bold|252,,252,4,,||,0,,,,|||,,,,,Water]Infernape||WiseGlasses|Blaze|NastyPlot,VacuumWave,Flamethrower,GrassKnot|Timid|64,,,252,,192||,0,,,,|||,,,,,Fire]Tera Captain|Toxtricity|ChoiceScarf|PunkRock|Boomburst,VoltSwitch,SludgeBomb,Overdrive|Timid|88,,,252,,168||,0,,,,|||,,,,,Normal]Noivern||RockyHelmet|Infiltrator|Defog,Roost,Hurricane,Flamethrower|Timid|252,,104,,,152||,0,,,,|||,,,,,Flying]Palafin-Hero||ChoiceBand|ZerotoHero|WaveCrash,JetPunch,BodySlam,FlipTurn|Jolly|,252,,,4,252|||||,,,,,Water","Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,WaveCrash,FlipTurn,CloseCombat|Adamant|232,252,,,,24|||S||,,,,,Stellar]Tera Captain|Annihilape|ChoiceScarf|Defiant|RageFist,CloseCombat,Earthquake,Uturn|Jolly|88,252,4,,,164|||S||,,,,,Dark]Cyclizar||AssaultVest|Regenerator|DracoMeteor,RapidSpin,KnockOff,Uturn|Careful|248,,,,240,20|||||,,,,,Stellar]Pecharunt||BlackSludge|PoisonPuppeteer|MalignantChain,PartingShot,Toxic,Recover|Bold|252,,16,,240,||,0,,,,|||,,,,,Stellar]Skarmory||RockyHelmet|Sturdy|BodyPress,Spikes,Whirlwind,Roost|Bold|252,,160,,,96||,0,,,,|S||,,,,,Stellar]Tera Captain|Mudsdale|Leftovers|Stamina|Earthquake,BodyPress,Roar,StealthRock|Impish|252,,252,,4,|||S||,,,,,Dragon"],
+ ["Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,DracoMeteor,TeraBlast,FlipTurn|Timid|8,,,244,4,252|||||,,,,,Stellar]Weezing-Galar||BlackSludge|Levitate|GunkShot,StrangeSteam,Defog,PainSplit|Impish|232,,252,,,24|||||,,,,,Bug]Iron Boulder||BoosterEnergy|QuarkDrive|ZenHeadbutt,MightyCleave,CloseCombat,SwordsDance|Jolly|104,252,,,4,148|||||,,,,,Bug]Ninetales||HeatRock|Drought|FireBlast,PainSplit,Hypnosis,HealingWish|Timid|248,,,28,,232||,0,,,,|||,,,,,Bug]Heatran||Leftovers|FlashFire|MagmaStorm,EarthPower,Protect,StealthRock|Calm|252,,,,212,44||,0,,,,|||,,,,,Bug]Great Tusk||Leftovers|Protosynthesis|CloseCombat,HeadlongRush,IceSpinner,BulkUp|Jolly|248,4,4,,,252|||||,,,,,Bug","Garchomp||Leftovers|RoughSkin|StealthRock,Earthquake,ScaleShot,FireBlast|Impish|,136,120,,,252|||||,,,,,Dragon]Urshifu||PunchingGlove|UnseenFist|CloseCombat,WickedBlow,IronHead,SuckerPunch|Jolly|,252,,,4,252|||||,,,,,Fighting]Sylveon||Leftovers|Pixilate|CalmMind,HyperVoice,Psyshock,Wish|Bold|252,,108,,148,||,0,,,,|||,,,,,Fairy]Tera Captain|Revavroom|Leftovers|Filter|ShiftGear,IronHead,GunkShot,TeraBlast|Jolly|,252,,4,,252|||||,,,,,Ground]Rotom-Wash||Leftovers|Levitate|WillOWisp,Thunderbolt,HydroPump,PainSplit|Calm|252,,,48,208,||,0,,,,|||,,,,,Electric]Tera Captain|BraviaryHisui|HeavyDutyBoots|TintedLens|EsperWing,Hurricane,TeraBlast,Roost|Modest|248,,,252,8,||,0,,,,|||,,,,,Fighting"],
+ ["Manaphy||Leftovers|Hydration|Psychic,Uturn,Scald,EnergyBall|Sassy|,,252,4,252,|||||,,,,,Water]Krookodile||ChoiceScarf|Intimidate|StealthRock,HighHorsepower,KnockOff,GunkShot|Adamant|4,252,,,,252|||||,,,,,Ground]Delphox||ChoiceScarf|Blaze|Psychic,FocusBlast,FireBlast,Overheat|Timid|4,,,252,,252||,0,,,,|||,,,,,Fire]Iron Boulder||BoosterEnergy|QuarkDrive|MightyCleave,ZenHeadbutt,CloseCombat,SwordsDance|Jolly|4,252,,,,252|||||,,,,,Rock]Kommo-o||GrassySeed|Bulletproof|IronDefense,Substitute,BodyPress,PoisonJab|Careful|,4,252,,252,|||||,,,,,Poison]Enamorus-Therian||RedCard|Overcoat|EarthPower,Psychic,Moonblast,SludgeBomb|Modest|252,,4,252,,||,0,,,,|||,,,,,Fairy","Sneasler||GrassySeed|Unburden|CloseCombat,DireClaw,Acrobatics,SwordsDance|Adamant|112,252,,,,144|||||,,,,,Fighting]Tera Captain|Rillaboom|ChoiceBand|GrassySurge|GrassyGlide,Uturn,KnockOff,WoodHammer|Adamant|128,252,,,4,124|||||,,,,,Grass]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,Flamethrower,DarkPulse,Psychic|Modest|4,,,252,,252||,0,,,,|||,,,,,Dark]Iron Treads||HeavyDutyBoots|QuarkDrive|EarthPower,VoltSwitch,RapidSpin,StealthRock|Timid|16,,,252,,240|||||,,,,,Ground]Flygon||ChoiceScarf|Levitate|Earthquake,Outrage,Superpower,Uturn|Adamant|16,252,,,,240|||||,,,,,Ground]Tera Captain|Primarina|AssaultVest|Torrent|Surf,Moonblast,TeraBlast,FlipTurn|Modest|248,,,252,8,|||||,,,,,Grass"],
+ ["Palafin-Hero||ChoiceScarf|ZerotoHero|WaveCrash,IcePunch,FlipTurn,JetPunch|Jolly|72,252,,,,184|||||,,,,,Water]Rotom-Heat||Leftovers|Levitate|ThunderWave,FoulPlay,Overheat,VoltSwitch|Bold|252,,200,56,,||,0,,,,|||,,,,,Electric]Iron Valiant||LifeOrb|QuarkDrive|Moonblast,Thunderbolt,ShadowSneak,CloseCombat|Naive|,252,,24,,232|||||,,,,,Fairy]Iron Treads||ChopleBerry|QuarkDrive|StealthRock,Earthquake,IronHead,VoltSwitch|Jolly|252,120,,,,136|||||,,,,,Ground]Mandibuzz||ChartiBerry|WeakArmor|FoulPlay,Roost,Defog,Toxic|Impish|248,8,252,,,||,0,,,,|||,,,,,Dark]Tera Captain|Latias|Leftovers|Levitate|ThunderWave,Thunderbolt,DracoMeteor,Recover|Modest|68,,,224,,216||,0,,,,|||,,,,,Electric","Tera Captain|Serperior|PasshoBerry|Contrary|LeafStorm,TeraBlast,GigaDrain,Substitute|Timid|,,24,252,,232||,0,,,,|||,,,,,Rock]Iron Boulder||PasshoBerry|QuarkDrive|SwordsDance,MightyCleave,CloseCombat,ZenHeadbutt|Jolly|,252,64,,,192|||||,,,,,Rock]Gouging Fire||BoosterEnergy|Protosynthesis|DragonDance,HeatCrash,DragonClaw,BurningBulwark|Jolly|,168,,,88,252|||||,,,,,Fire]Corviknight||Leftovers|Pressure|Roost,BraveBird,Uturn,BodyPress|Impish|248,8,252,,,|||||,,,,,Flying]Hatterene||Leftovers|MagicBounce|DrainingKiss,Psyshock,MysticalFire,CalmMind|Bold|,,252,4,252,||,0,,,,|||,,,,,Psychic]Samurott-Hisui||WacanBerry|Sharpness|SwordsDance,CeaselessEdge,AquaCutter,SuckerPunch|Adamant|,252,212,,,44|||||,,,,,Water"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,CloseCombat,Encore,SpiritBreak|Jolly|,252,,,4,252|||||,,,,,Fairy]Garchomp||RoseliBerry|RoughSkin|StealthRock,DragonClaw,Earthquake,StoneEdge|Careful|248,32,116,,112,|||||,,,,,Dragon]Tera Captain|Scizor|SitrusBerry|Technician|Defog,KnockOff,Uturn,BulletPunch|Adamant|248,112,108,,40,|||||,,,,,Dragon]Tera Captain|Braviary|ChoiceScarf|SheerForce|BodySlam,Facade,BraveBird,Uturn|Adamant|,252,,,4,252|||||,,,,,Normal]Uxie||SitrusBerry|Levitate|PsychicNoise,Encore,Uturn,PainSplit|Careful|248,,,,240,20|||||,,,,,Psychic]Sableye||RowapBerry|Prankster|Taunt,Encore,Recover,KnockOff|Careful|248,8,,,252,|||||,,,,,Dark","Tera Captain|RagingBolt|MentalHerb|Protosynthesis|Thunderbolt,DragonPulse,Taunt,Substitute|Modest|,,28,252,,228||,20,,,,|||,,,,,Ghost]Cyclizar||ChoiceScarf|Regenerator|DracoMeteor,ShedTail,RapidSpin,Overheat|Timid|248,,,,44,216|||||,,,,,Dragon]Slowking||ColburBerry|Regenerator|Psychic,Scald,ChillyReception,IceBeam|Calm|248,,96,8,156,||,0,,,,|||,,,,,Water]Rotom-Heat||HeavyDutyBoots|Levitate|VoltSwitch,WillOWisp,PainSplit,Overheat|Timid|36,,252,12,,208||,0,,,,|||,,,,,Electric]Ribombee||ExpertBelt|SweetVeil|StickyWeb,Moonblast,Uturn,BugBuzz|Timid|,,64,252,,192|||||,,,,,Bug]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,RapidSpin,StealthRock,DazzlingGleam|Modest|,,104,252,,152|||||,,,,,Stellar"],
+ ["Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,SwordsDance,Substitute|Jolly|248,36,,,32,192|||||,,,,,Water]Weavile||ChoiceBand|Pickpocket|KnockOff,LashOut,IcicleSpear,IceShard|Adamant|24,252,36,,4,192|||||,,,,,Dark]Alomomola||RockyHelmet|Regenerator|Scald,AlluringVoice,Wish,FlipTurn|Relaxed|248,,252,8,,||,,,,,0|||,,,,,Water]Iron Crown||Leftovers|QuarkDrive|PsychicNoise,TachyonCutter,VoltSwitch,CalmMind|Timid|252,,4,4,,248||,20,,,,|||,,,,,Steel]Moltres||HeavyDutyBoots|FlameBody|Flamethrower,Uturn,WillOWisp,Roost|Sassy|248,4,24,16,216,||,,,,,10|||,,,,,Fire]Great Tusk||CovertCloak|Protosynthesis|Earthquake,TemperFlare,StealthRock,RapidSpin|Adamant|252,216,16,,4,20|||||,,,,,Ground","Garchomp||Leftovers|RoughSkin|DragonTail,Spikes,Earthquake,StoneEdge|Careful|248,4,,,252,4|||||,,,,,Dragon]Corviknight||Leftovers|Pressure|Roost,Defog,Uturn,BraveBird|Relaxed|248,,252,8,,||,,,,,26|||,,,,,Flying]Tera Captain|UrshifuRapidStrike|ProtectivePads|UnseenFist|SurgingStrikes,CloseCombat,SwordsDance,Trailblaze|Adamant|56,252,,,,200|||||,,,,,Grass]Tera Captain|Arcanine|HeavyDutyBoots|Intimidate|MorningSun,TeraBlast,Flamethrower,WillOWisp|Bold|248,,248,12,,||,0,,,,|||,,,,,Grass]Overqwil||BlackSludge|Intimidate|Crunch,Toxic,Haze,GunkShot|Adamant|240,16,,,252,|||||,,,,,Dark]Jolteon||ExpertBelt|VoltAbsorb|AlluringVoice,ShadowBall,Discharge,VoltSwitch|Timid|,,40,252,,216||,0,,,,|||,,,,,Electric"],
+ ["Tera Captain|Okidogi|ChoiceBand|ToxicChain|KnockOff,CloseCombat,HighHorsepower,GunkShot|Adamant|208,252,,,,48|||||,,,,,Ground]Tera Captain|Hydreigon|ChoiceSpecs|Levitate|DarkPulse,DracoMeteor,StealthRock,FlashCannon|Timid|60,,,252,4,192||,0,,,,|||,,,,,Dark]Iron Hands||BigNugget|QuarkDrive|SwordsDance,DrainPunch,Fling,ThunderPunch|Adamant|112,252,,,8,136|||||,,,,,Fighting]Scizor||RockyHelmet|Technician|Uturn,Defog,BulletPunch,CloseCombat|Impish|248,,252,,8,|||||,,,,,Bug]Fezandipiti||ChoiceBand|Technician|Uturn,BeatUp,PlayRough,DoubleKick|Adamant|92,252,,,4,160|||||,,,,,Poison]Rotom-Mow||OccaBerry|Levitate|Thunderbolt,LeafStorm,NastyPlot,VoltSwitch|Modest|200,,,252,4,52||,0,,,,|||,,,,,Electric","Slowking-Galar||ShucaBerry|Regenerator|Flamethrower,Psychic,Toxic,ChillyReception|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison]Tera Captain|Alomomola|AssaultVest|Regenerator|Psychic,FlipTurn,PlayRough,Scald|Sassy|252,,4,,252,|||||,,,,,Fairy]Iron Treads||BoosterEnergy|QuarkDrive|StealthRock,RapidSpin,Earthquake,IceSpinner|Jolly|,252,,,4,252|||||,,,,,Ground]Tera Captain|RagingBolt|ChoiceScarf|Protosynthesis|VoltSwitch,Thunderbolt,DracoMeteor,DragonPulse|Modest|80,,,252,,176||,20,,,,|||,,,,,Electric]Meowscarada||ChoiceBand|Protean|KnockOff,Uturn,PlayRough,TripleAxel|Adamant|8,252,,,4,244|||||,,,,,Grass]Moltres||ChoiceSpecs|FlameBody|Flamethrower,Overheat,Hurricane,AirSlash|Timid|32,,,252,,224||,0,,,,|||,,,,,Fire"],
+ ["Palafin-Hero||RindoBerry|ZerotoHero|BulkUp,JetPunch,DrainPunch,Acrobatics|Adamant|248,8,,,252,|||S||,,,,,Water]Gouging Fire||ShucaBerry|Protosynthesis|DragonDance,FlareBlitz,Outrage,MorningSun|Adamant|248,24,96,,84,56|||||,,,,,Fire]Tera Captain|ThundurusTherian|SitrusBerry|VoltAbsorb|Thunderbolt,TeraBlast,Agility,NastyPlot|Modest|248,,72,,,188||,0,,,,|||,,,,,Fire]Terapagos||LumBerry|TeraShift|EarthPower,RapidSpin,Thunderbolt,TeraStarstorm|Timid|80,,,252,,176|||||,,,,,Stellar]Tera Captain|Rhyperior|CustapBerry|SolidRock|Earthquake,HeavySlam,StealthRock,Roar|Adamant|248,,8,,252,|||||,,,,,Ghost]Weavile||ChopleBerry|Pressure|SwordsDance,KnockOff,AerialAce,IcicleCrash|Adamant|8,252,4,,,244|||||,,,,,Dark","Gholdengo||SitrusBerry|GoodasGold|ShadowBall,FocusBlast,PowerGem,LowSweep|Modest|244,,,136,60,68|||||,,,,,Steel]Iron Treads||RockyHelmet|QuarkDrive|Earthquake,IceSpinner,VoltSwitch,RapidSpin|Jolly|40,,252,,,216|||||,,,,,Ground]Tera Captain|Keldeo|EjectPack|Justified|Surf,SecretSword,TeraBlast,AuraSphere|Timid|,,56,252,,200||,0,,,,|||,,,,,Stellar]Meowscarada||FocusSash|Overgrow|ToxicSpikes,FoulPlay,FlowerTrick,TrickRoom|Jolly|,252,96,,,160|||||,,,,,Grass]Enamorus-Therian||LifeOrb|Overcoat|Moonblast,AlluringVoice,DrainingKiss,FocusBlast|Quiet|,,236,252,20,||,0,,,,0|||,,,,,Fairy]Smeargle||FocusSash|OwnTempo|TrickRoom,StoneAxe,LunarDance,FinalGambit|Impish|248,,232,,28,|||||,,,,,Normal"],
+ ["Palafin-Hero||WacanBerry|ZerotoHero|BulkUp,DrainPunch,JetPunch,Taunt|Adamant|248,128,40,,92,|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|Hurricane,NastyPlot,HeatWave,IcyWind|Timid|240,,92,24,,152||,0,,,,|||,,,,,Flying]Tera Captain|RagingBolt|Leftovers|Protosynthesis|Protect,DragonPulse,Thunderbolt,CalmMind|Modest|56,,72,248,56,76||,20,,,,|||,,,,,Bug]Terapagos||HeavyDutyBoots|TeraShift|CalmMind,TeraStarstorm,DarkPulse,RockPolish|Modest|40,,,252,,216||,15,,,,|||,,,,,Stellar]Tinkaton||ShucaBerry|Pickpocket|StealthRock,GigatonHammer,IceHammer,Bulldoze|Careful|248,24,204,,4,28|||||,,,,,Fairy]Qwilfish-Hisui||Eviolite|Intimidate|Spikes,BarbBarrage,Crunch,Taunt|Impish|248,,128,,104,28|||||,,,,,Dark","Tera Captain|Keldeo|CobaBerry|Justified|SecretSword,Surf,IcyWind,CalmMind|Modest|56,,,252,,200||,0,,,,|||,,,,,Grass]Tera Captain|Mesprit|MirrorHerb|Levitate|IceBeam,Thunderbolt,Psyshock,Encore|Calm|248,,,,196,64||,0,,,,|||,,,,,Grass]Garchomp||YacheBerry|RoughSkin|Earthquake,StoneEdge,SwordsDance,StealthRock|Jolly|104,252,,,4,148|||||,,,,,Dragon]Gholdengo||LightClay|GoodasGold|MakeItRain,NastyPlot,Recover,LightScreen|Calm|248,,,8,252,||,0,,,,|||,,,,,Steel]Weavile||HeavyDutyBoots|Pressure|KnockOff,TripleAxel,IceShard,Taunt|Jolly|120,252,,,,136|||||,,,,,Dark]Weezing-Galar||RockyHelmet|Levitate|StrangeSteam,PainSplit,WillOWisp,ClearSmog|Bold|248,,252,8,,||,0,,,,|||,,,,,Poison"],
+ ["Tera Captain|Flygon|SoftSand|Levitate|Earthquake,FirePunch,DragonDance,TeraBlast|Adamant|,252,172,,,84|||||,,,,,Fairy]Ribombee||ChoiceScarf|ShieldDust|StickyWeb,Moonblast,Uturn,Psychic|Naive|,100,,160,,248|||||,,,,,Bug]Slowking||ChoiceBand|Regenerator|Trick,SlackOff,Amnesia,Whirlpool|Calm|248,,252,,8,||,0,,,,|||,,,,,Water]Cyclizar||HeavyDutyBoots|Regenerator|Taunt,ShedTail,RapidSpin,DoubleEdge|Jolly|248,,92,,,168|||||,,,,,Dragon]Terapagos||ChoiceSpecs|TeraShift|TeraStarstorm,Flamethrower,StealthRock,EarthPower|Modest|4,,252,252,,||,15,,,,|||,,,,,Stellar]Tera Captain|RagingBolt|YacheBerry|Protosynthesis|Thunderclap,DracoMeteor,VoltSwitch,Thunderbolt|Modest|,,248,252,,8||,20,,,,|||,,,,,Water","Tera Captain|Latias|Leftovers|Levitate|ShadowBall,Psyshock,CalmMind,Recover|Modest|252,,196,60,,||,0,,,,|||,,,,,Ghost]Palafin-Hero||Leftovers|ZerotoHero|Substitute,JetPunch,DrainPunch,ThroatChop|Adamant|84,252,52,,64,56|||||,,,,,Normal]Meowscarada||BlackGlasses|Protean|KnockOff,TripleAxel,BrickBreak,Taunt|Jolly|104,252,,,,152|||||,,,,,Normal]Tinkaton||ShucaBerry|MoldBreaker|Encore,GigatonHammer,PlayRough,LightScreen|Careful|252,48,52,,156,|||||,,,,,Normal]Iron Hands||SitrusBerry|QuarkDrive|DrainPunch,ThunderPunch,Facade,Whirlwind|Adamant|,252,4,,252,|||||,,,,,Normal]Donphan||CustapBerry|Sturdy|StealthRock,Earthquake,Roar,Endeavor|Careful|252,,4,,252,|||||,,,,,Normal"],
+ ["Meowscarada||ChoiceScarf|Protean|Uturn,FlowerTrick,KnockOff,Trick|Jolly|8,252,,,,248|||||,,,,,Grass]Hatterene||KebiaBerry|MagicBounce|Psyshock,GigaDrain,HealingWish,FutureSight|Bold|252,,192,12,44,8||,0,,,,|||,,,,,Psychic]Tera Captain|Kilowattrel|HeavyDutyBoots|VoltAbsorb|Roost,Thunderbolt,Hurricane,Charge|Timid|64,,64,240,,140||,0,,,,|||,,,,,Flying]Palafin||ProtectivePads|ZerotoHero|WaveCrash,JetPunch,CloseCombat,BulkUp|Adamant|80,252,,,,176|||||,,,,,Water]Glimmora||RockyHelmet|ToxicDebris|PowerGem,EnergyBall,StealthRock,Toxic|Modest|252,,136,20,56,44||,0,,,,|||,,,,,Rock]Tera Captain|Annihilape|AssaultVest|InnerFocus|RageFist,DrainPunch,Uturn,RockTomb|Adamant|240,36,,,232,|||||,,,,,Dragon","Greninja-Bond||ChoiceSpecs|BattleBond|HydroPump,DarkPulse,GrassKnot,Uturn|Modest|128,,,252,4,124|||||,Ghost,,,,Water]Tera Captain|Annihilape|Leftovers|Defiant|BulkUp,RageFist,DrainPunch,Protect|Careful|248,,,,188,72|||||,,,,,Dragon]Rotom-Wash||SitrusBerry|Levitate|WillOWisp,NastyPlot,HydroPump,VoltSwitch|Bold|252,,176,,80,||,0,,,,|||,,,,,Electric]Iron Moth||PowerHerb|QuarkDrive|Agility,MeteorBeam,FireBlast,SludgeWave|Modest|128,,,252,,128||,0,,,,|||,,,,,Fire]Donphan||MentalHerb|Sturdy|StealthRock,Earthquake,Encore,RapidSpin|Impish|248,8,252,,,|||||,,,,,Ground]Tera Captain|Glastrier|CustapBerry|ChillingNeigh|SwordsDance,IcicleCrash,CloseCombat,Endure|Impish|120,136,252,,,|||||,,,,,Fairy"],
+ ["Iron Valiant||PixiePlate|QuarkDrive|Moonblast,AuraSphere,SpiritBreak,ShadowSneak|Naive|,88,,252,,168|||||,,,,,Fairy]Garchomp||LoadedDice|RoughSkin|Earthquake,ScaleShot,Substitute,SwordsDance|Jolly|,252,,,8,248|||||,,,,,Dragon]Empoleon||ChopleBerry|Torrent|FlipTurn,KnockOff,Roar,Roost|Careful|252,,8,,248,|||||,,,,,Water]Tera Captain|Tyranitar|SitrusBerry|SandStream|TeraBlast,LowKick,Substitute,DragonDance|Adamant|,252,,,4,252|||||,,,,,Ghost]Tsareena||ChoiceScarf|QueenlyMajesty|PowerWhip,LowKick,TripleAxel,Uturn|Jolly|64,252,,,,192|||||,,,,,Grass]Weezing-Galar||RockyHelmet|NeutralizingGas|StrangeSteam,WillOWisp,ToxicSpikes,PainSplit|Bold|248,,152,,108,||,0,,,,|||,,,,,Poison","Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|TeraBlast,Thunderbolt,Agility,FocusBlast|Jolly|,,,252,4,252||,0,,,,|||,,,,,Ice]Sceptile||SitrusBerry|Overgrow|ShedTail,Acrobatics,SwordsDance,LeafBlade|Jolly|,252,,,4,252|||||,,,,,Grass]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,CalmMind,Rest,EarthPower|Modest|252,,,252,4,||,15,,,,|||,Dark,,,,Stellar]Tera Captain|Espathra|Leftovers|SpeedBoost|CalmMind,StoredPower,TeraBlast,Roost|Bold|252,,252,4,,||,0,,,,|||,,,,,Fighting]Urshifu-Rapid-Strike||PunchingGlove|UnseenFist|SurgingStrikes,CloseCombat,Trailblaze,IceSpinner|Jolly|,252,,,4,252|||||,,,,,Fighting]Politoed||DampRock|Drizzle|RainDance,WeatherBall,IceBeam,Encore|Modest|252,,,252,4,||,0,,,,|||,,,,,Water"],
+ ["Infernape||ChoiceScarf|IronFist|CloseCombat,FlareBlitz,Uturn,ZenHeadbutt|Lonely|4,252,,,252,|||||,,,,,Fire]Tera Captain|Landorus|LifeOrb|SheerForce|SludgeWave,Psychic,EarthPower,RockSlide|Naive|,4,,252,,252|||||,,,,,Poison]Meowscarada||ProtectivePads|Protean|Uturn,TripleAxel,SuckerPunch,FlowerTrick|Jolly|,252,,,16,240|||||,,,,,Grass]Muk-Alola||AssaultVest|PoisonTouch|PoisonJab,FirePunch,BodySlam,DrainPunch|Adamant|216,156,,,100,36|||||,,,,,Poison]Vaporeon||RockyHelmet|WaterAbsorb|FlipTurn,Wish,Scald,Protect|Calm|252,,,,252,|||||,,,,,Water]Tera Captain|Lokix|SilverPowder|TintedLens|FirstImpression,Uturn,KnockOff,SuckerPunch|Jolly|,252,,,4,252|||||,,,,,Bug","Scizor||LifeOrb|Technician|CloseCombat,BulletPunch,QuickAttack,SwordsDance|Adamant|72,252,,,,184|||||,,,,,Bug]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,SpikyShield,Synthesis,PowerWhip|Jolly|240,28,,,,240|||||,Poison,,,,Water]Zapdos||HeavyDutyBoots|Static|Roost,VoltSwitch,Hurricane,Discharge|Bold|248,,252,8,,||,0,,,,|||,,,,,Electric]Sneasler||ChoiceBand|PoisonTouch|ShadowClaw,Uturn,CloseCombat,FakeOut|Jolly|96,252,,,,160|||||,,,,,Fighting]Gurdurr||Eviolite|SheerForce|Defog,IcePunch,KnockOff,CloseCombat|Impish|240,4,12,,252,|||||,,,,,Fighting]Ursaluna-Bloodmoon||ThroatSpray|MindsEye|BloodMoon,HyperVoice,VacuumWave,EarthPower|Modest|248,,,8,252,||,0,,,,|||,,,,,Ground"],
+ ["Gurdurr||Eviolite|IronFist|MachPunch,DrainPunch,Defog,KnockOff|Adamant|252,252,4,,,|||||,,,,,Fighting]Iron Valiant||BoosterEnergy|QuarkDrive|SwordsDance,CloseCombat,PoisonJab,SpiritBreak|Jolly|,252,16,,,240|||||,,,,,Fairy]Rotom-Wash||Leftovers|Levitate|VoltSwitch,HydroPump,WillOWisp,RainDance|Calm|252,,,4,252,||,0,,,,|||,,,,,Electric]Glimmora||ChoiceScarf|ToxicDebris|DazzlingGleam,PowerGem,SludgeBomb,EarthPower|Modest|92,,4,252,,160||,0,,,,|||,,,,,Rock]Tera Captain|IronCrown|AssaultVest|QuarkDrive|TachyonCutter,TeraBlast,Psychic,FocusBlast|Modest|,,,252,192,64||,20,,,,|||,,,,,Water]Landorus-Therian||LifeOrb|Intimidate|GrassKnot,StealthRock,FocusBlast,EarthPower|Timid|32,,,252,,224||,0,,,,|||,,,,,Ground","Great Tusk||HeavyDutyBoots|Protosynthesis|Earthquake,IceSpinner,KnockOff,RapidSpin|Adamant|248,152,68,,,40|||||,Fighting,,,,Ground]Roaring Moon||ChoiceBand|Protosynthesis|KnockOff,IronHead,Outrage,Uturn|Jolly|80,196,,,,232|||||,,,,,Dragon]Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,Surf,DracoMeteor,Flamethrower|Modest|32,,,252,,224||,0,,,,|||,,,,,Water]Scream Tail||Leftovers|Protosynthesis|Psychic,Flamethrower,IceBeam,ThunderWave|Calm|248,,136,,124,||,0,,,,|||,,,,,Fairy]Torkoal||HeatRock|Drought|Yawn,RapidSpin,LavaPlume,ScorchingSands|Calm|248,,64,,196,|||||,,,,,Fire]Orthworm||SitrusBerry|EarthEater|ShedTail,StealthRock,BodyPress,HeavySlam|Impish|248,,252,,8,|||||,,,,,Water"],
+ ["Iron Boulder||BoosterEnergy|QuarkDrive|MightyCleave,PsychoCut,SwordsDance,CloseCombat|Jolly|112,252,,,,144|||||,,,,,Rock]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,Flamethrower,DarkPulse,Psychic|Timid|24,,,252,,232||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,Uturn,PlayRough,SpikyShield|Jolly|4,252,,,,252|||||,,,,,Water]Alomomola||Leftovers|Regenerator|FlipTurn,Wish,Protect,Scald|Impish|252,4,252,,,|||||,,,,,Water]Corviknight||HeavyDutyBoots|MirrorArmor|Roost,Defog,Uturn,HeavySlam|Impish|252,4,252,,,|||||,,,,,Flying]Hippowdon||Leftovers|SandStream|Earthquake,StealthRock,SlackOff,Whirlwind|Careful|252,,,,252,|||||,,,,,Ground","Urshifu||ChoiceScarf|UnseenFist|Uturn,CloseCombat,WickedBlow,ThunderPunch|Jolly|,252,,,4,252|||||,,,,,Fighting]Corviknight||Leftovers|MirrorArmor|Uturn,BulkUp,BodyPress,Defog|Adamant|252,252,,,4,|||||,,,,,Flying]Ting-Lu||Leftovers|VesselofRuin|StealthRock,Spikes,Earthquake,Whirlwind|Impish|212,,152,,144,|||||,,,,,Dark]Tera Captain|Raikou|Leftovers|Pressure|CalmMind,Agility,Thunderbolt,TeraBlast|Modest|128,,,188,,192||,0,,,,|||,,,,,Water]Tera Captain|Araquanid|AssaultVest|WaterBubble|Liquidation,LeechLife,PoisonJab,BodySlam|Adamant|188,200,,,120,|||||,,,,,Water]Weezing-Galar||Leftovers|Levitate|Toxic,SludgeWave,Haze,ClearSmog|Bold|252,,148,,108,||,0,,,,|||,,,,,Poison"],
+ ["Darkrai||ChoiceScarf|BadDreams|FocusBlast,DarkPulse,SludgeBomb,IceBeam|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Urshifu||ChopleBerry|UnseenFist|SuckerPunch,WickedBlow,CloseCombat,Trailblaze|Jolly|4,252,,,,252|||||,,,,,Fighting]Corviknight||Leftovers|MirrorArmor|Roost,Defog,BraveBird,Uturn|Impish|252,4,252,,,|||||,,,,,Flying]Tera Captain|ScreamTail|ChoiceSpecs|Protosynthesis|DazzlingGleam,FocusBlast,Trick,BatonPass|Timid|80,,,252,,176||,0,,,,|||,,,,,Fairy]Lanturn||Leftovers|VoltAbsorb|VoltSwitch,Scald,IceBeam,Thunderbolt|Calm|252,,,4,252,||,0,,,,|||,,,,,Water]Ariados||FocusSash|Swarm|ToxicSpikes,StickyWeb,SuckerPunch,Megahorn|Adamant|248,252,,,8,|||||,,,,,Bug","Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,MightyCleave,CloseCombat,ZenHeadbutt|Jolly|,252,,,4,252|||||,Fighting,,,,Ground]Urshifu||ChoiceBand|UnseenFist|WickedBlow,CloseCombat,SuckerPunch,Uturn|Adamant|,252,4,,,252|||||,,,,,Dark]Samurott-Hisui||FocusSash|Sharpness|CeaselessEdge,KnockOff,RazorShell,AquaJet|Jolly|,252,,,4,252|||||,,,,,Ghost]Grimmsnarl||LightClay|Prankster|PlayRough,LightScreen,Reflect,Taunt|Adamant|252,252,,,4,|||S||,,,,,Ghost]Tera Captain|Incineroar|SitrusBerry|Intimidate|FakeOut,FlareBlitz,PartingShot,KnockOff|Careful|252,4,140,,76,36|||||,,,,,Water]Tera Captain|ThundurusTherian|ChoiceSpecs|VoltAbsorb|TeraBlast,VoltSwitch,GrassKnot,FlashCannon|Modest|,,4,252,,252||,0,,,,|S||,,,,,Flying"],
+ ["Iron Bundle||HeavyDutyBoots|QuarkDrive|IceBeam,Substitute,Encore,HydroPump|Modest|,,252,252,4,||,0,,,,|||,,,,,Ice]Iron Boulder||BoosterEnergy|QuarkDrive|Earthquake,ZenHeadbutt,MightyCleave,Substitute|Adamant|204,252,,,,52|||||,Fighting,,,,Rock]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Protect,Earthquake,SwordsDance,Facade|Impish|156,100,252,,,|||||,,,,,Fire]Zapdos-Galar||ChoiceBand|Defiant|CloseCombat,ThunderousKick,Uturn,BraveBird|Adamant|12,252,,,4,240|||||,,,,,Fighting]Tera Captain|Mismagius|Leftovers|Levitate|Substitute,NastyPlot,DrainingKiss,ShadowBall|Modest|56,,,252,,200||,0,,,,|||,,,,,Fairy]Vikavolt||FocusSash|Levitate|StickyWeb,Discharge,BugBuzz,ThunderWave|Modest|252,,,252,,4||,0,,,,|||,,,,,Bug","Clefable||MentalHerb|MagicGuard|Moonlight,Thunderbolt,ThunderWave,IceBeam|Calm|252,,108,24,124,||,0,,,,|S||,,,,,Fairy]Tera Captain|Excadrill|LifeOrb|SandRush|Earthquake,TeraBlast,RapidSpin,IronHead|Jolly|,252,16,,80,160|||||,,,,,Ice]Tyranitar||Leftovers|SandStream|StealthRock,KnockOff,RockSlide,IceBeam||252,144,,,,112|||||,,,,,Rock]Tauros-Paldea-Aqua||ChoiceScarf|Intimidate|CloseCombat,WaveCrash,AquaJet,Earthquake|Jolly|4,252,,,,252|||||,,,,,Fighting]Ceruledge||ShucaBerry|WeakArmor|SwordsDance,BitterBlade,ShadowSneak,Poltergeist|Adamant|160,252,4,,,92|||||,,,,,Fire]Mandibuzz||HeavyDutyBoots|Overcoat|Roost,BraveBird,KnockOff,Uturn|Impish|252,,252,,4,|||||,,,,,Dark"],
+ ["Palafin||LightBall|ZerotoHero|Fling,Acrobatics,Taunt,JetPunch|Adamant|240,252,,,,16|||||,,,,,Water]Tera Captain|Latias|Leftovers|Levitate|CalmMind,Recover,AuraSphere,Psyshock|Timid|252,,72,,,184||,0,,,,|||,,,,,Poison]Meowscarada||HeavyDutyBoots|Protean|KnockOff,LowKick,FlowerTrick,Uturn|Jolly|56,252,,,,200|||||,,,,,Grass]Scizor||MetalCoat|Technician|SwordsDance,BulletPunch,CloseCombat,KnockOff|Adamant|212,252,,,,44|||||,,,,,Bug]Tera Captain|Comfey|LifeOrb|Triage|CalmMind,DrainingKiss,TeraBlast,Encore|Timid|184,,,252,,72||,0,,,,|||,,,,,Fighting]Clodsire||BlackSludge|Unaware|Toxic,Recover,PoisonJab,Earthquake|Careful|252,4,,,252,|||||,,,,,Poison","Iron Valiant||EjectPack|QuarkDrive|SpiritBreak,CloseCombat,ZenHeadbutt,Taunt|Jolly|,252,48,,,208|||||,,,,,Fairy]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|SwordsDance,IvyCudgel,PowerWhip,Trailblaze|Jolly|,252,,,4,252|||||,Poison,,,,Water]Ting-Lu||WeaknessPolicy|VesselofRuin|Earthquake,Payback,Whirlwind,Spikes|Adamant|252,252,,,4,|||||,,,,,Dark]Tera Captain|ThundurusTherian|HeavyDutyBoots|VoltAbsorb|Thunderbolt,TeraBlast,Uturn,Taunt|Modest|172,,,252,,84|||||,,,,,Ice]Heatran||ChopleBerry|FlameBody|StealthRock,LavaPlume,EarthPower,Taunt|Modest|252,,,240,,16||,0,,,,|||,,,,,Fire]Weezing||RockyHelmet|Levitate|SludgeBomb,Flamethrower,WillOWisp,Taunt|Bold|252,,252,,4,||,0,,,,|||,,,,,Poison"],
+ ["Tera Captain|Excadrill|ChoiceScarf|MoldBreaker|Earthquake,IronHead,RapidSpin,StealthRock|Adamant|,252,128,,,128|||||,,,,,Ground]Amoonguss||RedCard|Regenerator|Spore,ClearSmog,GigaDrain,SludgeBomb|Calm|240,,168,,100,||,0,,,,|||,,,,,Grass]Tyranitar||HeavyDutyBoots|SandStream|KnockOff,StoneEdge,ThunderWave,StealthRock|Adamant|252,180,,,76,|||||,,,,,Rock]Zapdos||HeavyDutyBoots|Pressure|Hurricane,Roost,ThunderWave,Uturn|Bold|252,,252,4,,|||||,,,,,Electric]Keldeo||ChoiceSpecs|Justified|HydroPump,Surf,IcyWind,FlipTurn|Timid|,,56,252,,200|||||,,,,,Water]Latios||ChoiceSpecs|Levitate|DracoMeteor,LusterPurge,Thunderbolt,Memento|Timid|,,,252,4,252||,0,,,,|||,,,,,Dragon","Tera Captain|Latias|Leftovers|Levitate|StoredPower,AuraSphere,CalmMind,Recover|Bold|252,,228,,,28||,0,,,,|||,,,,,Steel]Iron Valiant||BoosterEnergy|QuarkDrive|CloseCombat,PsychoCut,SwordsDance,Encore|Jolly|,252,,,4,252|||||,,,,,Bug]Tera Captain|Lokix|ChoiceBand|TintedLens|FirstImpression,LeechLife,KnockOff,Uturn|Adamant|,252,,,4,252|||||,,,,,Bug]Mandibuzz||HeavyDutyBoots|Overcoat|FoulPlay,Uturn,KnockOff,Roost|Careful|252,,4,,252,|||||,,,,,Bug]Sandy Shocks||ShucaBerry|Protosynthesis|Thunderbolt,EarthPower,VoltSwitch,Spikes|Timid|,,4,252,,252||,0,,,,|||,,,,,Bug]Bronzong||AbilityShield|Levitate|GyroBall,Earthquake,Rest,StealthRock|Relaxed|252,,168,,88,||,,,,,0|||,,,,,Bug"],
+ ["Gouging Fire||HeavyDutyBoots|Protosynthesis|MorningSun,DragonDance,FlareBlitz,DragonClaw|Jolly|88,252,,,,168|||||,,,,,Fire]Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,DracoMeteor,FlipTurn,DragonPulse|Timid|12,,,244,,252|||||,,,,,Water]Corviknight||Leftovers|Pressure|Roost,Taunt,BraveBird,Uturn|Careful|252,,4,,252,|||||,,,,,Flying]Meowscarada||ChoiceScarf|Protean|PlayRough,KnockOff,Uturn,TripleAxel|Jolly|56,252,,,,200|||||,,,,,Grass]Tera Captain|Torkoal|HeatRock|Drought|Yawn,StealthRock,RapidSpin,LavaPlume|Relaxed|248,,252,,4,|||||,,,,,Steel]Latias||RoseliBerry|Levitate|DragonPulse,CalmMind,MistBall,Recover|Bold|252,,96,,,160||,0,,,,|||,,,,,Dragon","Iron Valiant||BoosterEnergy|QuarkDrive|DestinyBond,FocusBlast,Thunderbolt,Moonblast|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Tera Captain|SamurottHisui|ChoiceScarf|Sharpness|CeaselessEdge,KnockOff,AquaCutter,FlipTurn|Adamant|,252,,,4,252|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,HeatWave,FocusBlast,Uturn|Timid|,,,252,4,252|||||,,,,,Flying]Tera Captain|Cresselia|Leftovers|Levitate|LunarDance,Thunderbolt,Moonblast,Moonlight|Calm|252,,4,,252,||,0,,,,|||,,,,,Poison]Grafaiai||BlackSludge|Prankster|KnockOff,RainDance,Encore,Toxic|Careful|252,,192,,64,|||||,,,,,Poison]Duraludon||Eviolite|LightMetal|ThunderWave,BodyPress,FlashCannon,DracoMeteor|Bold|252,,252,4,,||,0,,,,|||,,,,,Steel"],
+ ["Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,CloseCombat,IcePunch,Encore|Adamant|72,252,,,4,180|||||,,,,,Water]Zapdos||ScopeLens|Static|Uturn,Roost,ThunderWave,AirCutter|Timid|248,,,,164,96|||||,,,,,Electric]Ting-Lu||Leftovers|VesselofRuin|Spikes,Whirlwind,Payback,Earthquake|Careful|248,,,,200,60|||||,,,,,Dark]Tera Captain|Suicune|Leftovers|Pressure|IceBeam,Scald,Substitute,Roar|Bold|248,,248,,,12||,0,,,,|||,,,,,Steel]Kyurem||AssaultVest|Pressure|FreezeDry,DragonTail,IceBeam,EarthPower|Timid|120,,,252,,136|||||,,,,,Dragon]Altaria||RockyHelmet|NaturalCure|BraveBird,WillOWisp,Roost,Defog|Impish|252,,200,,,56|||||,,,,,Flying","Latios||ChoiceSpecs|Levitate|DracoMeteor,Psychic,Surf,Trick|Modest|4,,,252,4,248||,0,,,,|||,,,,,Dragon]Ursaluna-Bloodmoon||PasshoBerry|MindsEye|CalmMind,BloodMoon,EarthPower,Moonlight|Modest|240,,4,104,160,||,0,,,,|||,,,,,Ground]Blaziken||ProtectivePads|SpeedBoost|SwordsDance,FlareBlitz,CloseCombat,Protect|Adamant|,252,,,88,168|||||,,,,,Fire]Rillaboom||AssaultVest|GrassySurge|WoodHammer,GrassyGlide,LowKick,Uturn|Adamant|176,248,,,,84|||||,,,,,Grass]Tera Captain|Blastoise|LifeOrb|Torrent|HydroPump,Surf,FlashCannon,ShellSmash|Modest|80,,,244,,184||,0,,,,|||,,,,,Water]Klefki||LightClay|Prankster|PlayRough,Spikes,Reflect,LightScreen|Careful|252,,8,,248,|||||,,,,,Steel"],
+ ["Tera Captain|Mudsdale|Leftovers|Stamina|Curse,Earthquake,RockSlide,BodyPress|Careful|252,,4,,252,|||||,,,,,Water]Zapdos||HeavyDutyBoots|Pressure|Uturn,Roost,Discharge,Hurricane|Timid|,,4,252,,252|||||,,,,,Flying]Meowscarada||HeavyDutyBoots|Protean|Uturn,TripleAxel,KnockOff,FlowerTrick|Adamant|24,252,,,,232|||||,,,,,Dark]Arcanine-Hisui||ChoiceBand|RockHead|FlareBlitz,HeadSmash,ExtremeSpeed,WildCharge|Jolly|40,252,,,,216|||||,,,,,Fire]Tera Captain|Latias|WeaknessPolicy|Levitate|DragonDance,DragonClaw,Earthquake,StoredPower|Naive|40,252,,,,216|||||,,,,,Poison]Gholdengo||AssaultVest|GoodasGold|MakeItRain,ShadowBall,ThunderWave,Recover|Calm|252,,,4,252,||,0,,,,|||,,,,,Ghost","Tera Captain|Quaquaval|HeavyDutyBoots|Moxie|AquaStep,SwordsDance,IceSpinner,Roost|Jolly|164,244,,,,100|||||,,,,,Electric]Garchomp||RockyHelmet|RoughSkin|SwordsDance,StealthRock,Outrage,Earthquake|Jolly|172,140,,,,196|||||,,,,,Ice]Overqwil||SitrusBerry|Intimidate|Crunch,BarbBarrage,AquaJet,Spikes|Careful|252,,,,232,24|||||,,,,,Water]Uxie||LightClay|Levitate|LightScreen,Reflect,Uturn,ThunderWave|Serious|252,,84,,152,20|||||,,,,,Dragon]Talonflame||HeavyDutyBoots|FlameBody|Roost,BraveBird,Uturn,FlareBlitz|Jolly|248,28,,,,232|||||,,,,,Poison]Gholdengo||ChoiceScarf|GoodasGold|ShadowBall,MakeItRain,Trick,FocusBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Grass"],
+ ["Swampert||RindoBerry|Torrent|FlipTurn,MirrorCoat,StealthRock,Earthquake|Careful|252,96,,,140,20|||||,,,,,Water]Vikavolt||TerrainExtender|Levitate|StickyWeb,ElectricTerrain,BugBuzz,VoltSwitch|Calm|252,,,,220,36||,0,,,,|||,,,,,Bug]Iron Valiant||LifeOrb|QuarkDrive|DrainPunch,XScissor,SwordsDance,ZenHeadbutt|Jolly|148,184,,,,176|||||,,,,,Fairy]Excadrill||ChoiceScarf|MoldBreaker|RapidSpin,Earthquake,IronHead,PoisonJab|Adamant|,120,,,136,252|||||,,,,,Ground]Tera Captain|Primarina|KeeBerry|LiquidVoice|Substitute,DrainingKiss,PsychicNoise,CalmMind|Bold|252,,236,,,20||,0,,,,|||,,,,,Poison]Dragonite||LifeOrb|Multiscale|Outrage,DragonDance,ExtremeSpeed,Encore|Adamant|24,252,,,,232|||||,,,,,Dragon","Greninja-Bond||LifeOrb|BattleBond|HydroPump,GrassKnot,IceBeam,GunkShot|Naive|,32,20,248,,208|||||,,,,,Water]Iron Treads||Leftovers|QuarkDrive|Earthquake,StoneEdge,RapidSpin,KnockOff|Jolly|252,124,,,20,112|||||,,,,,Ground]Muk||BlackSludge|PoisonTouch|GunkShot,KnockOff,Haze,Toxic|Careful|248,,104,,156,|||||,,,,,Poison]Tera Captain|IronHands|Leftovers|QuarkDrive|SwordsDance,DrainPunch,IcePunch,ThunderPunch|Adamant|,156,8,,252,92|||||,,,,,Grass]Chi-Yu||HeavyDutyBoots|BeadsofRuin|Flamethrower,DarkPulse,WillOWisp,FlameCharge|Timid|96,,,252,,160|||||,,,,,Dark]Uxie||Leftovers|Levitate|StealthRock,Encore,FoulPlay,Uturn|Impish|248,,252,,8,|||||,,,,,Psychic"],
+ ["Greninja-Bond||LifeOrb|BattleBond|Surf,IceBeam,GrassKnot,WaterShuriken|Timid|88,,,252,4,164|||||,Ghost,,,,Water]Tera Captain|Annihilape|Leftovers|Defiant|BulkUp,RageFist,DrainPunch,Protect|Careful|248,,,,188,72|||||,,,,,Dragon]Rotom-Wash||SitrusBerry|Levitate|WillOWisp,NastyPlot,HydroPump,VoltSwitch|Bold|252,,176,,80,||,0,,,,|||,,,,,Electric]Donphan||SitrusBerry|Sturdy|StealthRock,Earthquake,StoneEdge,RapidSpin|Adamant|248,188,,,,72|||||,,,,,Ground]Iron Moth||HeavyDutyBoots|QuarkDrive|FieryDance,SludgeWave,MorningSun,Agility|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Tera Captain|Glastrier|CustapBerry|ChillingNeigh|SwordsDance,IcicleCrash,CloseCombat,Endure|Impish|120,136,252,,,|||||,,,,,Fairy","Tera Captain|Gengar|WiseGlasses|CursedBody|NastyPlot,TeraBlast,Psychic,Thunderbolt|Timid|,,4,252,,252||,0,,,,|||,,,,,Water]Mamoswine||Leftovers|ThickFat|Trailblaze,Earthquake,IcicleCrash,StoneEdge|Adamant|32,252,,,,224|||||,,,,,Ice]Tornadus-Therian||ChoiceSpecs|Regenerator|Hurricane,Uturn,FocusBlast,HeatWave|Timid|88,,,252,,168|||||,,,,,Flying]Palafin-Hero||ChoiceScarf|ZerotoHero|FlipTurn,WaveCrash,CloseCombat,IcePunch|Adamant|192,252,,,,64|||||,,,,,Water]Kingambit||AirBalloon|SupremeOverlord|SuckerPunch,KowtowCleave,Substitute,IronHead|Adamant|248,252,,,8,|||||,,,,,Dark]Tsareena||Leftovers|QueenlyMajesty|KnockOff,Uturn,RapidSpin,PlayRough|Impish|252,,128,,128,|||||,,,,,Grass"],
+ ["Latios||SoulDew|Levitate|Agility,Psyshock,LusterPurge,DragonPulse|Modest|8,,,252,,248||,0,,,,|||,,,,,Dragon]Tyranitar||FocusSash|SandStream|StealthRock,RockTomb,Earthquake,Taunt|Jolly|,84,172,,,252|||||,,,,,Rock]Tera Captain|Excadrill|ChoiceScarf|MoldBreaker|Earthquake,IronHead,RockSlide,RapidSpin|Adamant|,252,,,4,252|||||,,,,,Ghost]Breloom||ExpertBelt|Technician|SwordsDance,BulletSeed,MachPunch,ZenHeadbutt|Adamant|,252,,,4,252|||||,,,,,Grass]Alomomola||HeavyDutyBoots|Regenerator|FlipTurn,Scald,MirrorCoat,HealingWish|Relaxed|252,,108,,148,||,,,,,0|||,,,,,Water]Fezandipiti||HeavyDutyBoots|ToxicChain|Moonblast,AcidSpray,Uturn,Roost|Timid|252,,,76,,180|||||,,,,,Poison","Tera Captain|SandyShocks|LightClay|Protosynthesis|StealthRock,EarthPower,Reflect,LightScreen|Timid|252,,,48,,208||,0,,,,|||,,,,,Ghost]Tera Captain|Lucario|LifeOrb|Steadfast|WorkUp,FocusBlast,ExtremeSpeed,VacuumWave|Lonely|,252,,68,,188|||||,,,,,Normal]Meowscarada||HeavyDutyBoots|Protean|KnockOff,FlowerTrick,Uturn,PowerGem|Jolly|,252,92,12,,152|||||,,,,,Grass]Cinccino||LoadedDice|Technician|TidyUp,TailSlap,BulletSeed,RockBlast|Jolly|,252,,,4,252|||||,,,,,Normal]Uxie||Leftovers|Levitate|Uturn,PainSplit,RainDance,ThunderWave|Careful|252,,92,,164,|||||,,,,,Psychic]Iron Bundle||BoosterEnergy|QuarkDrive|HydroPump,IceBeam,FreezeDry,Taunt|Timid|16,,,252,,240||,0,,,,|||,,,,,Ice"],
+ ["Blaziken||HeavyDutyBoots|SpeedBoost|UpperHand,FlareBlitz,CloseCombat,SwordsDance|Adamant|,252,,,4,252|||||,,,,,Fire]Tera Captain|LandorusTherian|ChoiceScarf|Intimidate|TeraBlast,Earthquake,Uturn,StealthRock|Jolly|,252,36,,,220|||||,,,,,Flying]Iron Valiant||BoosterEnergy|QuarkDrive|Thunderbolt,Moonblast,AuraSphere,CalmMind|Timid|,,,252,88,168||,0,,,,|||,,,,,Fairy]Ariados||FocusSash|Sniper|StickyWeb,ShadowSneak,SuckerPunch,ToxicSpikes|Adamant|252,252,,,4,|||||,,,,,Bug]Corviknight||RockyHelmet|MirrorArmor|Uturn,Roost,BodyPress,IronDefense|Impish|252,,96,,160,|||||,,,,,Flying]Samurott-Hisui||FocusSash|Sharpness|CeaselessEdge,AquaJet,AerialAce,KnockOff|Jolly|,252,,,4,252|||||,,,,,Water","Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|IvyCudgel,Trailblaze,SwordsDance,Spikes|Jolly|,252,,,4,252|||||,,,,,Rock]Tera Captain|MoltresGalar|ChartiBerry|Berserk|FieryWrath,AirSlash,NastyPlot,Agility|Modest|,,24,252,,232||,0,,,,|||,,,,,Flying]Palafin||PunchingGlove|ZerotoHero|JetPunch,IcePunch,DrainPunch,BulkUp|Adamant|,216,,,52,240|||||,,,,,Water]Gouging Fire||MentalHerb|Protosynthesis|FlareBlitz,Earthquake,DragonDance,MorningSun|Jolly|72,152,76,,,208|||||,,,,,Fire]Kilowattrel||ChoiceScarf|VoltAbsorb|Thunderbolt,Hurricane,VoltSwitch,FeatherDance|Timid|72,,,252,,184||,0,,,,|||,,,,,Electric]Palossand||ChoiceSpecs|WaterCompaction|EarthPower,ShadowBall,StealthRock,Trick|Modest|208,,,252,,48||,0,,,,|||,,,,,Ghost"],
+ ["Tera Captain|WalkingWake|AssaultVest|Protosynthesis|HydroSteam,TeraBlast,FlipTurn,DracoMeteor|Timid|8,,,244,4,252|||||,,,,,Flying]Venusaur||FocusSash|Chlorophyll|Growth,WeatherBall,GigaDrain,SludgeBomb|Modest|252,,,252,4,||,0,,,,|||,,,,,Grass]Torkoal||HeavyDutyBoots|Drought|LavaPlume,RapidSpin,StealthRock,SunnyDay|Relaxed|248,,252,8,,||,,,,,0|||,,,,,Fire]Roaring Moon||ChoiceBand|Protosynthesis|KnockOff,IronHead,Outrage,Uturn|Jolly|32,220,,,4,252|||||,,,,,Dragon]Tera Captain|Comfey|Leftovers|Triage|CalmMind,GigaDrain,DrainingKiss,TeraBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Ground]Bronzong||ColburBerry|Levitate|PsychicNoise,FlashCannon,IronDefense,BodyPress|Bold|252,,252,,4,||,0,,,,|||,,,,,Steel","Iron Valiant||BoosterEnergy|QuarkDrive|CalmMind,Moonblast,Psyshock,AuraSphere|Timid|56,,,252,,200||,0,,,,|||,,,,,Fairy]Tera Captain|Greninja|ChoiceScarf|Protean|IceBeam,Uturn,UpperHand,DarkPulse|Hasty|,24,,252,,232|||||,,,,,Ice]Gliscor||ToxicOrb|PoisonHeal|StealthRock,Earthquake,Uturn,Protect|Jolly|244,,80,,56,128|||||,,,,,Ground]Rotom-Wash||ChoiceScarf|Levitate|Trick,ThunderWave,HydroPump,VoltSwitch|Calm|252,,,,96,160||,0,,,,|||,,,,,Electric]Tera Captain|Appletun|RockyHelmet|ThickFat|DragonPulse,Amnesia,IronDefense,Recover|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy]Slowking-Galar||MentalHerb|Regenerator|Toxic,SludgeBomb,Flamethrower,ChillyReception|Sassy|248,,24,,236,||,0,,,,7|S||,,,,,Poison"],
+ ["Darkrai||LifeOrb|BadDreams|DarkPulse,FocusBlast,Thunder,NastyPlot|Timid|,,,252,4,252||29,0,,,,|||,,,,,Dark]Cinderace||ChoiceBand|Libero|PyroBall,HighJumpKick,IronHead,Uturn|Jolly|72,252,,,,184|||||,,,,,Fire]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|HornLeech,IvyCudgel,Spikes,Taunt|Jolly|,252,,,4,252|||||,,,,,Water]Gliscor||ChoiceBand|HyperCutter|Earthquake,KnockOff,Uturn,FireFang|Adamant|136,252,,,,120|||||,,,,,Ground]Gholdengo||RockyHelmet|GoodasGold|Hex,FocusBlast,ThunderWave,Recover|Bold|252,,248,,,8||,0,,,,|||,,,,,Steel]Smeargle||FocusSash|Technician|RapidSpin,Nuzzle,TidyUp,StickyWeb|Impish|236,,248,,,24|||||,,,,,Normal","Darkrai||ExpertBelt|BadDreams|DarkPulse,IceBeam,SludgeBomb,FocusBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|UrshifuRapidStrike|LumBerry|UnseenFist|SurgingStrikes,CloseCombat,SwordsDance,Trailblaze|Jolly|,184,,,84,240|||||,,,,,Poison]Scizor||SitrusBerry|Technician|BulletPunch,SwordsDance,QuickAttack,KnockOff|Adamant|248,252,,,8,|||||,,,,,Bug]Tera Captain|Diancie|Leftovers|ClearBody|Moonblast,ScorchingSands,Spikes,Encore|Bold|248,,252,,8,||,0,,,,|||,,,,,Water]Slowking-Galar||WeaknessPolicy|Regenerator|SludgeBomb,Flamethrower,Psyshock,IceBeam|Modest|240,,76,76,116,||,0,,,,|||,,,,,Poison]Tauros||AssaultVest|SheerForce|BodySlam,CloseCombat,Blizzard,Earthquake|Hasty|128,144,,100,,136|||||,,,,,Normal"],
+ ["Meowscarada||ChoiceScarf|Protean|FlowerTrick,LowKick,TripleAxel,Uturn|Jolly|,252,24,,,232|||||,,,,,Grass]Gyarados||ClearAmulet|Moxie|DragonDance,Waterfall,Earthquake,BodySlam|Adamant|,252,112,,,144|||||,,,,,Water]Tera Captain|Latias|ChoiceScarf|Levitate|DracoMeteor,MistBall,EnergyBall,Surf|Modest|4,,,252,252,||,0,,,,|||,,,,,Water]Heatran||Leftovers|FlameBody|MagmaStorm,FlashCannon,EarthPower,StealthRock|Modest|4,,252,252,,||,0,,,,|||,,,,,Fire]Enamorus||WeaknessPolicy|CuteCharm|Moonblast,EarthPower,GrassKnot,Taunt|Timid|,,212,124,,172||,0,,,,|||,,,,,Fairy]Smeargle||FocusSash|OwnTempo|Spore,StickyWeb,MortalSpin,BurningBulwark|Jolly|,252,,,4,252|||||,,,,,Normal","Darkrai||LifeOrb|BadDreams|NastyPlot,SludgeBomb,DarkPulse,IceBeam|Timid|4,,,252,,252||,0,,,,|||,,,,,Dark]Landorus-Therian||RockyHelmet|Intimidate|StealthRock,Taunt,Uturn,Earthquake|Impish|248,,252,,,8|||||,,,,,Ground]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|HornLeech,IvyCudgel,Uturn,Encore|Jolly|,252,,,4,252|||||,Poison,,,,Water]Blastoise||WhiteHerb|Torrent|HydroPump,IceBeam,RapidSpin,ShellSmash|Timid|,,,252,4,252|||||,,,,,Ground]Archaludon||AssaultVest|Stamina|DracoMeteor,FlashCannon,BodyPress,ElectroShot|Modest|200,,,252,,56||,0,,,,|||,,,,,Steel]Clodsire||Leftovers|Unaware|Toxic,StealthRock,Recover,Earthquake|Careful|248,,8,,252,|||||,,,,,Flying"],
+ ["Garchomp||LoadedDice|RoughSkin|SwordsDance,ScaleShot,Substitute,IronHead|Jolly|100,252,,,,156|||||,,,,,Dragon]Darkrai||ChoiceScarf|BadDreams|DarkPulse,IceBeam,SludgeBomb,Trick|Modest|84,,,252,,172||,0,,,,|||,,,,,Dark]Tera Captain|Zapdos|YacheBerry|Static|Discharge,Hurricane,Uturn,Roost|Bold|252,,216,,40,|||||,,,,,Electric]Blastoise||HeavyDutyBoots|Torrent|RapidSpin,FlipTurn,Surf,AuraSphere|Sassy|252,,20,,236,|||||,,,,,Water]Uxie||LightClay|Levitate|StealthRock,Uturn,LightScreen,Reflect|Careful|252,,40,,216,|||||,,,,,Psychic]Tera Captain|Revavroom|MetalCoat|Filter|ShiftGear,GunkShot,IronHead,MagnetRise|Jolly|80,252,,,,176|||||,,,,,Steel","Zapdos-Galar||LifeOrb|Defiant|CloseCombat,Uturn,BraveBird,ThunderousKick|Jolly|,252,,,4,252|||||,,,,,Fighting]Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,CloseCombat,MightyCleave,ZenHeadbutt|Adamant|4,252,,,72,180|||||,Fighting,,,,Rock]Iron Bundle||HeavyDutyBoots|QuarkDrive|FreezeDry,IceBeam,HydroPump,Substitute|Timid|88,,,252,,168||,0,,,,|||,,,,,Ice]Vikavolt||ChestoBerry|Levitate|ElectricTerrain,BugBuzz,StickyWeb,Thunderbolt|Modest|252,,,252,,||,0,,,,|||,,,,,Bug]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Earthquake,Toxic,StealthRock,KnockOff|Impish|228,,184,,96,|||||,,,,,Steel]Tera Captain|Mismagius|Leftovers|Levitate|ShadowBall,DazzlingGleam,NastyPlot,Substitute|Timid|,,,252,40,216||,0,,,,|||,,,,,Fairy"],
+ ["Grimmsnarl||LightClay|Prankster|Reflect,LightScreen,Taunt,PartingShot|Bold|252,,252,,,||,0,,,,|||,,,,,Dark]Mamoswine||ChopleBerry|ThickFat|IceShard,IcicleCrash,HighHorsepower,SmackDown|Adamant|,252,,,4,252|||||,,,,,Ice]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|Agility,Psychic,Flamethrower,BugBuzz|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel]Cyclizar||SitrusBerry|Regenerator|RapidSpin,ShedTail,Uturn,Overheat|Timid|248,,,8,,252|||||,,,,,Dragon]Tera Captain|BraviaryHisui|AguavBerry|TintedLens|CalmMind,EsperWing,Hurricane,TeraBlast|Timid|,,,252,,252||,0,,,,|S||,,,,,Fairy]Kingambit||BlackGlasses|SupremeOverlord|SwordsDance,SuckerPunch,KowtowCleave,ZenHeadbutt|Adamant|,252,,,4,252|||||,,,,,Dark","Rillaboom||ChoiceBand|GrassySurge|Uturn,GrassyGlide,BrickBreak,KnockOff|Adamant|240,252,,,,16|||S||,,,,,Grass]Tera Captain|Hawlucha|GrassySeed|Unburden|SwordsDance,HighJumpKick,Acrobatics,TeraBlast|Adamant|252,252,4,,,|||S||,,,,,Electric]Iron Boulder||BoosterEnergy|QuarkDrive|ZenHeadbutt,Megahorn,MightyCleave,SwordsDance|Jolly|,252,,,4,252|||||,Fighting,,,,Rock]Urshifu-Rapid-Strike||LifeOrb|UnseenFist|SurgingStrikes,AquaJet,PoisonJab,DrainPunch|Adamant|,252,4,,,252|||||,,,,,Water]Tera Captain|HoopaUnbound|Leftovers|Magician|DarkPulse,Psychic,TeraBlast,NastyPlot|Timid|,,,252,4,252||,0,,,,|||,,,,,Ground]Skarmory||RockyHelmet|Sturdy|BodyPress,IronDefense,Roost,StealthRock|Impish|252,,252,,,||,0,,,,|S||,,,,,Stellar"],
+ ["Mamoswine||RockyHelmet|Oblivious|IcicleSpear,Earthquake,IceShard,StealthRock|Adamant|168,252,12,,60,16|||||,,,,,Ice]Tera Captain|Latias|Leftovers|Levitate|DragonPulse,MistBall,Recover,CalmMind|Timid|48,,252,4,28,176||,0,,,,|||,,,,,Poison]Empoleon||AdrenalineOrb|Competitive|Surf,FlipTurn,Roost,VacuumWave|Bold|216,,72,16,,204|||||,,,,,Water]Samurott-Hisui||ChopleBerry|Sharpness|CeaselessEdge,RazorShell,FlipTurn,SwordsDance|Adamant|248,252,,,,8|||||,,,,,Water]Muk||RockyHelmet|StickyHold|KnockOff,IcePunch,PainSplit,DrainPunch|Impish|252,,248,,8,|||||,,,,,Poison]Zapdos||HeavyDutyBoots|Static|Thunderbolt,Hurricane,Roost,Uturn|Timid|,,4,252,,252|||||,,,,,Electric","Tera Captain|LandorusTherian|ChoiceBand|Intimidate|TeraBlast,Earthquake,Uturn,StoneEdge|Jolly|4,252,,,,252|||||,,,,,Dark]Gurdurr||Eviolite|IronFist|Defog,DrainPunch,IcePunch,FirePunch|Careful|252,,4,,252,|||||,,,,,Fighting]Rotom-Mow||ChoiceScarf|Levitate|LeafStorm,VoltSwitch,Trick,Thunderbolt|Modest|120,,112,196,80,||,0,,,,|||,,,,,Electric]Weavile||FocusSash|Pressure|KnockOff,SwordsDance,TripleAxel,LowKick|Adamant|96,156,128,,,128|||||,,,,,Dark]Skeledirge||Leftovers|Unaware|Substitute,TorchSong,ShadowBall,SlackOff|Calm|208,,112,24,164,||,0,,,,|||,,,,,Fire]Toxapex||BlackSludge|Regenerator|Surf,ToxicSpikes,Recover,Haze|Bold|232,,96,,180,||,0,,,,|||,,,,,Poison"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|CloseCombat,SpiritBreak,KnockOff,IcePunch|Jolly|16,252,,,,240|||||,,,,,Fairy]Tera Captain|GreninjaBond|LifeOrb|BattleBond|DarkPulse,WaterShuriken,IceBeam,Surf|Modest|,,,252,24,232|||||,Ghost,,,,Water]Iron Treads||ClearAmulet|QuarkDrive|StealthRock,Earthquake,IceSpinner,RapidSpin|Jolly|16,252,,,,240|||||,,,,,Ground]Hydreigon||ChoiceScarf|Levitate|DracoMeteor,DarkPulse,Flamethrower,Uturn|Timid|104,,,252,,152|||||,,,,,Dark]Zapdos||HeavyDutyBoots|Pressure|Thunderbolt,HeatWave,Hurricane,Roost|Modest|236,,,252,,20||,0,,,,|||,,,,,Electric]Weezing||BlackSludge|Levitate|ToxicSpikes,ClearSmog,Flamethrower,Memento|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison","Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,MightyCleave,ZenHeadbutt,CloseCombat|Jolly|,252,,,16,240|||||,,,,,Rock]Manaphy||Leftovers|Hydration|SkillSwap,Uturn,Scald,Psychic|Sassy|140,,,116,252,|||||,,,,,Water]Kommo-o||ThroatSpray|Bulletproof|ClangorousSoul,ClangingScales,FlashCannon,DrainPunch|Timid|,,96,96,64,252|||||,,,,,Poison]Brambleghast||HeavyDutyBoots|WindRider|StrengthSap,RapidSpin,Poltergeist,LeechSeed|Adamant|252,252,4,,,|||||,,,,,Grass]Tera Captain|Magnezone|ChoiceSpecs|Analytic|VoltSwitch,Thunderbolt,FlashCannon,TeraBlast|Modest|252,,4,252,,||,0,,,,|||,,,,,Fairy]Delphox||ChoiceScarf|Magician|Trick,FireBlast,FocusBlast,Psychic|Modest|4,,,252,,252||,0,,,,|||,,,,,Fire"],
+ ["Tera Captain|Latias|Leftovers|Levitate|CalmMind,Recover,ShadowBall,DrainingKiss|Timid|252,,104,,,152||,0,,,,|S||,,,,,Ghost]Amoonguss||RockyHelmet|Regenerator|SludgeBomb,GigaDrain,Spore,Toxic|Bold|252,,252,,4,||,0,,,,|S||,,,,,Grass]Great Tusk||BoosterEnergy|Protosynthesis|KnockOff,HeadlongRush,BulkUp,CloseCombat|Jolly|248,4,4,,,252|||S||,,,,,Ground]Greninja||ChoiceSpecs|Protean|Surf,DarkPulse,Uturn,ToxicSpikes|Timid|24,,,252,,232|||S||,,,,,Water]Tinkaton||RedCard|MoldBreaker|StealthRock,KnockOff,ThunderWave,GigatonHammer|Careful|252,,116,,140,|||S||,,,,,Fairy]Heatran||ChopleBerry|FlashFire|LavaPlume,Taunt,EarthPower,Protect|Calm|252,,88,,140,28||,0,,,,|||,,,,,Fire","Cinderace||HeavyDutyBoots|Libero|Uturn,ZenHeadbutt,PyroBall,CourtChange|Jolly|72,252,,,,184|||||,,,,,Fire]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,Thunderbolt,Substitute,CalmMind|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Ditto||ChoiceScarf|Imposter|Transform|Timid|252,,,,,252||,30,,,,|||,,,,,Normal]Tera Captain|UrshifuRapidStrike|MysticWater|UnseenFist|CloseCombat,SurgingStrikes,AquaJet,IceSpinner|Adamant|60,252,,,,196|||||,,,,,Water]Tera Captain|Bastiodon|HeavyDutyBoots|Sturdy|Roar,StealthRock,FoulPlay,BodyPress|Bold|252,,252,,4,||,0,,,,|||,,,,,Fighting]Necrozma||ColburBerry|PrismArmor|PhotonGeyser,XScissor,Earthquake,DragonDance|Adamant|140,252,,,,116|||||,,,,,Psychic"],
+ ["Tyranitar||ChoiceScarf|SandStream|IceBeam,IcePunch,KnockOff,Earthquake|Lonely|8,252,,,,248|||||,,,,,Rock]Gardevoir||ChoiceScarf|Synchronize|Moonblast,Trick,Psyshock,HealingWish|Modest|24,,,252,,232||,0,,,,|||,,,,,Psychic]Zoroark-Hisui||HeavyDutyBoots|Illusion|HyperVoice,NastyPlot,ShadowBall,Uturn|Modest|72,,,252,4,180|||||,,,,,Normal]Tera Captain|Latias|Leftovers|Levitate|CalmMind,StoredPower,Substitute,Agility|Timid|40,,,252,,216||,0,,,,|||,,,,,Fairy]Mandibuzz||RockyHelmet|Overcoat|Uturn,Defog,Roost,Toxic|Impish|248,,252,,8,|||||,,,,,Dark]Excadrill||Leftovers|SandRush|SwordsDance,IronHead,Earthquake,RockSlide|Adamant|252,252,,,4,|||||,,,,,Ground","Meowscarada||ChoiceScarf|Overgrow|FlowerTrick,KnockOff,Uturn,Trick|Jolly|,252,,,44,212|||||,,,,,Grass]Zapdos||HeavyDutyBoots|Static|Discharge,HeatWave,VoltSwitch,Roost|Timid|248,,76,,24,160||,0,,,,|||,,,,,Electric]Carbink||MentalHerb|Sturdy|StealthRock,Moonblast,BodyPress,Spikes|Modest|252,,40,148,68,||,0,,,,|||,,,,,Rock]Tera Captain|Mismagius|ChoiceScarf|Levitate|WillOWisp,DazzlingGleam,Trick,Memento|Bold|252,,252,4,,||,0,,,,|||,,,,,Fairy]Tera Captain|GreatTusk|AssaultVest|Protosynthesis|KnockOff,RapidSpin,SupercellSlam,HeadlongRush|Jolly|,216,,,92,200|||||,,,,,Electric]Empoleon||PetayaBerry|Torrent|Substitute,Agility,Surf,Yawn|Modest|60,,12,252,,184||,0,,,,|||,,,,,Water"],
+ ["Dragonite||HeavyDutyBoots|Multiscale|Agility,FireBlast,IceBeam,DracoMeteor|Modest|,,,252,4,252||,0,,,,|||,,,,,Dragon]Tera Captain|LilligantHisui|WideLens|Hustle|VictoryDance,LeafBlade,IceSpinner,CloseCombat|Adamant|,252,,,4,252|||||,,,,,Grass]Greninja-Bond||LifeOrb|BattleBond|Uturn,Surf,Extrasensory,WaterShuriken|Timid|,,,252,4,252|||||,Ghost,,,,Water]Tera Captain|Krookodile|LifeOrb|Moxie|TeraBlast,Earthquake,KnockOff,ScaleShot|Naive|,252,,4,,252|||||,,,,,Stellar]Iron Moth||PowerHerb|QuarkDrive|MeteorBeam,FlameCharge,EnergyBall,FieryDance|Hasty|,4,,252,,252|||||,,,,,Fire]Gholdengo||Leftovers|GoodasGold|ThunderWave,DazzlingGleam,ShadowBall,Recover|Modest|252,,,252,,||,0,,,,|||,,,,,Steel","Meowscarada||ChoiceScarf|Protean|FlowerTrick,Uturn,KnockOff,TripleAxel|Jolly|68,188,,,,252|||||,,,,,Grass]Slowking||AssaultVest|Regenerator|Surf,FocusBlast,Psychic,IceBeam|Bold|252,,192,,64,||,0,,,,|||,,,,,Water]Sandy Shocks||AssaultVest|Protosynthesis|VoltSwitch,EarthPower,TriAttack,PowerGem|Timid|184,,,,140,184||,0,,,,|||,,,,,Electric]Tera Captain|LandorusTherian|Leftovers|Intimidate|Earthquake,TeraBlast,Uturn,StealthRock|Jolly|252,56,,,,200|||||,,,,,Fairy]Weezing-Galar||BlackSludge|Levitate|StrangeSteam,Psybeam,FireBlast,Defog|Bold|248,,252,,,8||,0,,,,|||,,,,,Poison]Gouging Fire||BoosterEnergy|Protosynthesis|ScaleShot,FlareBlitz,Earthquake,DragonDance|Jolly|56,252,,,,200|||||,,,,,Fire"],
+ ["Ursaluna-Bloodmoon||ChopleBerry|MindsEye|CalmMind,HyperVoice,EarthPower,Moonlight|Bold|240,,28,132,,104||,0,,,,|||,,,,,Ground]Latios||LifeOrb|Levitate|LusterPurge,Earthquake,Recover,DracoMeteor|Naive|,116,,152,,240|||S||,,,,,Dragon]Klefki||RockyHelmet|Prankster|PlayRough,Spikes,ThunderWave,Rest|Impish|252,,252,,4,|||||,,,,,Steel]Tera Captain|Blastoise|WhiteHerb|Torrent|Liquidation,TeraBlast,IceSpinner,ShellSmash|Jolly|,212,116,,,180|||||,,,,,Electric]Rillaboom||OccaBerry|GrassySurge|GrassyGlide,Uturn,KnockOff,HighHorsepower|Adamant|252,252,,,4,|||||,,,,,Grass]Blaziken||LifeOrb|SpeedBoost|FlareBlitz,CloseCombat,KnockOff,Protect|Adamant|,252,24,,,232|||||,,,,,Fire","Tera Captain|Landorus|ChoiceScarf|SheerForce|GrassKnot,EarthPower,SludgeWave,Uturn|Modest|60,,,252,,196|||||,,,,,Ground]Infernape||MuscleBand|IronFist|Encore,CloseCombat,FlareBlitz,MachPunch|Adamant|64,252,,,4,188|||||,,,,,Fire]Meowscarada||MuscleBand|Protean|KnockOff,BrickBreak,FlowerTrick,Uturn|Jolly|,252,,,100,156|||||,,,,,Grass]Vaporeon||Leftovers|WaterAbsorb|Scald,Wish,Protect,IceBeam|Calm|252,,4,,252,||,0,,,,|||,,,,,Water]Heatran||ChopleBerry|FlashFire|EarthPower,MagmaStorm,WillOWisp,Protect|Bold|252,,252,,4,||,0,,,,|||,,,,,Fire]Muk-Alola||BlackSludge|PoisonTouch|FirePunch,Curse,KnockOff,DrainPunch|Careful|252,4,,,252,|||||,,,,,Poison"],
+ ["Iron Valiant||HeavyDutyBoots|QuarkDrive|KnockOff,IcePunch,Taunt,Thunderbolt|Lonely|,252,,12,,244|||||,,,,,Fairy]Garchomp||ChoiceScarf|RoughSkin|DracoMeteor,Earthquake,FireBlast,StealthRock|Rash|,124,,252,,132|||||,,,,,Dragon]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,HeatWave,KnockOff,Taunt|Modest|48,,4,252,,204|||||,,,,,Flying]Tera Captain|Empoleon|HeavyDutyBoots|Torrent|KnockOff,FlipTurn,Roost,Surf|Sassy|252,,,4,252,|||||,,,,,Water]Brambleghast||HeavyDutyBoots|Infiltrator|ShadowSneak,Spikes,LeechSeed,StrengthSap|Impish|252,,248,,,8|||||,,,,,Grass]Tera Captain|Mew|HeavyDutyBoots|Synchronize|FutureSight,Taunt,Surf,ThunderWave|Modest|240,,,252,,16||,0,,,,|||,,,,,Water","Iron Boulder||ChoiceBand|QuarkDrive|MightyCleave,CloseCombat,ZenHeadbutt,QuickAttack|Jolly|,252,,,4,252|||||,,,,,Rock]Skarmory||RockyHelmet|Sturdy|BodyPress,BraveBird,Whirlwind,Roost|Impish|252,,160,,,96|||||,,,,,Steel]Gliscor||ToxicOrb|PoisonHeal|KnockOff,Earthquake,Toxic,Protect|Careful|252,,4,,252,|||||,,,,,Ground]Iron Bundle||ChoiceScarf|QuarkDrive|IceBeam,FreezeDry,HydroPump,FlipTurn|Timid|,,,252,4,252|||||,,,,,Ice]Tera Captain|Skeledirge|HeavyDutyBoots|Unaware|TorchSong,Hex,WillOWisp,SlackOff|Bold|252,,172,,84,||,0,,,,|||,,,,,Dark]Clodsire||HeavyDutyBoots|Unaware|Earthquake,PoisonJab,StealthRock,Recover|Careful|248,,168,,92,|||||,,,,,Poison"],
+ ["Tera Captain|WeezingGalar|RockyHelmet|Levitate|Thunderbolt,WillOWisp,Haze,PainSplit|Bold|252,,4,,252,||,0,,,,|||,,,,,Electric]Iron Bundle||BoosterEnergy|QuarkDrive|FreezeDry,IceBeam,HydroPump,Encore|Timid|,,120,252,,136||,0,,,,|||,,,,,Ice]Krookodile||ChopleBerry|Intimidate|StealthRock,Earthquake,SmackDown,GrassKnot|Adamant|252,212,,,,44|||||,,,,,Ground]Corviknight||WeaknessPolicy|MirrorArmor|IronDefense,BodyPress,PowerTrip,Roost|Impish|252,,40,,216,|||||,,,,,Flying]Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|Thunderclap,Thunderbolt,DragonPulse,TeraBlast|Modest|,,76,252,,180||,20,,,,|||,,,,,Water]Iron Boulder||BoosterEnergy|QuarkDrive|MightyCleave,Earthquake,SwordsDance,Psychic|Jolly|,252,,24,,232|||||,,,,,Rock","Tera Captain|Ceruledge|HeavyDutyBoots|FlashFire|BitterBlade,Poltergeist,ShadowSneak,SwordsDance|Adamant|248,172,4,,76,8|||||,,,,,Bug]Tinkaton||SitrusBerry|OwnTempo|GigatonHammer,PlayRough,Encore,StealthRock|Timid|248,,,,16,244|||||,,,,,Fairy]Palafin||ChoiceBand|ZerotoHero|JetPunch,WaveCrash,FlipTurn,CloseCombat|Adamant|200,252,,,,56|||||,,,,,Water]Tera Captain|Farigiraf|AssaultVest|ArmorTail|HyperVoice,Thunderbolt,EnergyBall,Trailblaze|Modest|,,,124,172,212|||||,,,,,Normal]Overqwil||RockyHelmet|Intimidate|Crunch,BarbBarrage,Spikes,Taunt|Impish|180,,252,,,76|||||,,,,,Dark]Great Tusk||AirBalloon|Protosynthesis|Earthquake,TemperFlare,HeavySlam,RapidSpin|Adamant|,252,,,4,252|||||,Fighting,,,,Ground"],
+ ["Ninetales||HeatRock|Drought|Flamethrower,Encore,WillOWisp,HealingWish|Bold|252,,252,,4,||,0,,,,|||,,,,,Fire]Walking Wake||ChoiceSpecs|Protosynthesis|HydroSteam,DracoMeteor,DragonPulse,Flamethrower|Timid|8,,4,244,,252||,0,,,,|||,,,,,Water]Tera Captain|RagingBolt|ChoiceScarf|Protosynthesis|Thunderbolt,SolarBeam,WeatherBall,VoltSwitch|Modest|56,,,252,,200||,20,,,,|||,,,,,Fire]Gouging Fire||ChoiceBand|Protosynthesis|FlareBlitz,HeatCrash,Outrage,DragonClaw|Jolly|88,168,,,,252|||||,,,,,Fire]Great Tusk||CovertCloak|Protosynthesis|HeadlongRush,CloseCombat,HeadSmash,RapidSpin|Adamant|152,252,,,,104|||||,,,,,Ground]Sawsbuck||LightClay|Chlorophyll|DoubleEdge,Charm,ThunderWave,LightScreen|Careful|252,,,,228,28|||||,,,,,Normal","Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|Synthesis,StompingTantrum,KnockOff,IvyCudgel|Adamant|248,68,,,12,180|||||,Poison,,,,Water]Sneasler||ChoiceBand|PoisonTouch|CloseCombat,Uturn,DireClaw,QuickAttack|Jolly|,152,,,188,168|||||,,,,,Fighting]Ursaluna-Bloodmoon||CustapBerry|MindsEye|Endure,BloodMoon,EarthPower,VacuumWave|Modest|216,,252,,,40||,0,,,,|||,,,,,Ground]Tera Captain|Torterra|SitrusBerry|ShellArmor|StealthRock,HeadlongRush,GrassKnot,DoubleEdge|Brave|248,8,,,252,|||||,,,,,Ground]Zapdos||HeavyDutyBoots|Static|Hurricane,ThunderWave,Roost,Uturn|Bold|248,,204,,,56|||||,,,,,Electric]Scizor||LifeOrb|Technician|SwordsDance,BulletPunch,QuickAttack,CloseCombat|Adamant|248,252,,,8,|||||,,,,,Bug"],
+ ["Great Tusk||BoosterEnergy|Protosynthesis|CloseCombat,IceSpinner,HeavySlam,RapidSpin|Jolly|,252,56,,,200|||||,Fighting,,,,Ground]Tera Captain|Latias|Leftovers|Levitate|DracoMeteor,Surf,CalmMind,HealingWish|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Greninja-Bond||LifeOrb|BattleBond|Liquidation,NightSlash,GunkShot,SwordsDance|Jolly|,252,96,,,160|||||,Ghost,,,,Water]Tinkaton||RockyHelmet|Pickpocket|GigatonHammer,KnockOff,StealthRock,Reflect|Impish|248,,252,,,8|||||,,,,,Fairy]Rillaboom||Leftovers|GrassySurge|GrassyGlide,HighHorsepower,KnockOff,Uturn|Jolly|,252,40,,,216|||||,,,,,Grass]Tera Captain|Frosmoth|HeavyDutyBoots|IceScales|IceBeam,BugBuzz,TeraBlast,QuiverDance|Timid|,,68,252,,188||,0,,,,|||,,,,,Water","Tera Captain|Heatran|AssaultVest|FlashFire|HeatCrash,MagmaStorm,TeraBlast,StoneEdge|Brave|248,252,,8,,|||||,,,,,Bug]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|SwordsDance,Trailblaze,IvyCudgel,Uturn|Adamant|248,16,64,,,180|||||,,,,,Water]Tera Captain|Gliscor|ChoiceScarf|PoisonHeal|StoneEdge,TeraBlast,Uturn,HighHorsepower|Jolly|64,252,,,,192|||||,,,,,Fairy]Drifblim||SitrusBerry|Unburden|CalmMind,ShadowBall,Acrobatics,StrengthSap|Modest|,,100,252,156,|||||,,,,,Ghost]Slowking-Galar||ShucaBerry|Regenerator|Psyshock,Toxic,ChillyReception,SludgeBomb|Modest|248,,176,56,28,||,0,,,,|||,,,,,Poison]Weavile||PowerHerb|Pickpocket|SwordsDance,Dig,KnockOff,TripleAxel|Jolly|24,252,,,,232|||||,,,,,Dark"],
+ ["Palafin||Leftovers|ZerotoHero|JetPunch,Taunt,DrainPunch,BulkUp|Careful|248,,8,,252,|||||,,,,,Water]Zapdos||HeavyDutyBoots|Static|VoltSwitch,Roost,HeatWave,Hurricane|Calm|248,,16,,216,28||,0,,,,|||,,,,,Electric]Ting-Lu||Leftovers|VesselofRuin|Spikes,Ruination,BodyPress,Earthquake|Careful|248,,,,200,60|||||,,,,,Dark]Tera Captain|Suicune|Leftovers|Pressure|IceBeam,Scald,Substitute,CalmMind|Bold|248,,248,,,12||,0,,,,|||,,,,,Fairy]Kyurem||HeavyDutyBoots|Pressure|FreezeDry,BodyPress,IceBeam,EarthPower|Timid|88,,,252,,168||,0,,,,|||,,,,,Dragon]Tera Captain|Heatran|AirBalloon|FlameBody|StealthRock,MagmaStorm,TeraBlast,WillOWisp|Bold|248,,132,,,124||,0,,,,|||,,,,,Grass","Tera Captain|Keldeo|Leftovers|Justified|SecretSword,Surf,CalmMind,Taunt|Modest|64,,,252,,192||,0,,,,|||,,,,,Dragon]Tera Captain|Mesprit|SitrusBerry|Levitate|DazzlingGleam,PainSplit,Uturn,StealthRock|Calm|248,,,,252,8|||||,,,,,Steel]Garchomp||HeavyDutyBoots|RoughSkin|Earthquake,StoneEdge,SwordsDance,Spikes|Jolly|184,192,,,,132|||||,,,,,Dragon]Weavile||HeavyDutyBoots|Pressure|SwordsDance,KnockOff,UpperHand,IcicleCrash|Adamant|80,252,4,,,172|||||,,,,,Dark]Weezing-Galar||BlackSludge|Levitate|StrangeSteam,WillOWisp,PainSplit,ToxicSpikes|Bold|248,,212,,48,||,0,,,,|||,,,,,Poison]Rotom-Mow||ChoiceScarf|Levitate|LeafStorm,VoltSwitch,PainSplit,Trick|Modest|248,,112,100,,48||,0,,,,|||,,,,,Electric"],
+ ["Great Tusk||Leftovers|Protosynthesis|Earthquake,StoneEdge,RapidSpin,KnockOff|Jolly|248,8,,,,252|||||,Fighting,,,,Ground]Tera Captain|Umbreon|Leftovers|InnerFocus|Toxic,FoulPlay,Wish,Protect|Calm|252,,4,,252,||,0,,,,|||,,,,,Ground]Tera Captain|Latias|Leftovers|Levitate|CalmMind,StoredPower,AuraSphere,Recover|Timid|248,,8,,,252||,0,,,,|||,,,,,Poison]Haunter||BlackSludge|Levitate|ShadowBall,WillOWisp,SludgeBomb,DestinyBond|Timid|,,,252,4,252||,0,,,,|||,,,,,Ghost]Tinkaton||Leftovers|MoldBreaker|StealthRock,KnockOff,StoneEdge,GigatonHammer|Careful|248,8,,,252,|||||,,,,,Fairy]Clefable||StickyBarb|MagicGuard|Trick,Moonblast,Moonlight,CalmMind|Bold|252,,252,,4,||,0,,,,|||,,,,,Fairy","Tera Captain|RagingBolt|Leftovers|Protosynthesis|CalmMind,Thunderbolt,DragonPulse,Thunderclap|Modest|248,,,252,,8||,20,,,,|||,,,,,Steel]Haunter||ChoiceScarf|Levitate|ShadowBall,SludgeBomb,Psychic,DestinyBond|Timid|,,,252,,252||,0,,,,|||,,,,,Ghost]Tera Captain|Alomomola|RockyHelmet|Regenerator|FlipTurn,Scald,Wish,Acrobatics|Relaxed|252,,252,,4,|||||,,,,,Flying]Moltres||HeavyDutyBoots|FlameBody|Uturn,Hurricane,Flamethrower,Roost|Timid|248,,28,,,232|||||,,,,,Fire]Meowscarada||ChoiceBand|Protean|FlowerTrick,KnockOff,Uturn,Trick|Jolly|,252,,,4,252|||||,,,,,Grass]Iron Treads||BoosterEnergy|QuarkDrive|StealthRock,RapidSpin,HeavySlam,EarthPower|Hasty|40,40,,252,72,104|||||,,,,,Ground"],
+ ["Tera Captain|Sceptile|ChoiceSpecs|Overgrow|LeafStorm,TeraBlast,GigaDrain,UpperHand|Modest|,,132,164,,212|||||,,,,,Electric]Iron Moth||HeavyDutyBoots|QuarkDrive|SludgeWave,ToxicSpikes,Toxic,Discharge|Timid|,,80,252,,176||,0,,,,|||,,,,,Fire]Tera Captain|Annihilape|CovertCloak|VitalSpirit|FinalGambit,RageFist,StealthRock,Taunt|Adamant|172,144,,,,192|||||,,,,,Dragon]Alomomola||HeavyDutyBoots|Regenerator|Wish,Protect,FlipTurn,MirrorCoat|Relaxed|164,,252,,92,||,,,,,0|||,,,,,Water]Donphan||HeavyDutyBoots|Sturdy|PoisonJab,IceSpinner,KnockOff,Counter|Adamant|32,252,,,,224|||||,,,,,Ground]Roaring Moon||HeavyDutyBoots|Protosynthesis|IronHead,KnockOff,Roost,Taunt|Adamant|192,,96,,,220|||||,,,,,Dragon","Tera Captain|Skarmory|RockyHelmet|Sturdy|BodyPress,IronDefense,Roost,Roar|Impish|252,,252,,4,||,0,,,,|||,,,,,Steel]Tera Captain|Garganacl|HeavyDutyBoots|PurifyingSalt|SaltCure,Earthquake,Curse,Recover|Careful|252,4,,,252,|||||,,,,,Fairy]Sinistcha||Leftovers|Heatproof|MatchaGotcha,ShadowBall,StrengthSap,CalmMind|Bold|252,,160,,,96||,0,,,,|||,,,,,Grass]Ting-Lu||Leftovers|VesselofRuin|Earthquake,StealthRock,Spikes,Ruination|Careful|252,,4,,252,|||||,,,,,Dark]Palafin||ChoiceBand|ZerotoHero|JetPunch,WaveCrash,IcePunch,ZenHeadbutt|Jolly|,252,,,4,252|||||,,,,,Water]Clefable||Leftovers|Unaware|Moonblast,Protect,CalmMind,Wish|Bold|244,,252,12,,||,0,,,,|||,,,,,Fairy"],
+ ["Tentacruel||BlackSludge|RainDish|RainDance,Surf,SludgeWave,RapidSpin|Calm|204,,52,,252,|||||,,,,,Water]Tera Captain|LandorusTherian|PasshoBerry|Intimidate|Earthquake,TeraBlast,SwordsDance,Substitute|Adamant|248,252,,,8,|||||,,,,,Fire]Baxcalibur||AssaultVest|ThermalExchange|IronHead,IceShard,ScaleShot,Crunch|Jolly|48,,,,252,208|||||,,,,,Dragon]Ribombee||ChoiceScarf|HoneyGather|StickyWeb,Trick,Moonblast,Psychic|Timid|,,8,252,,248||,0,,,,|||,,,,,Bug]Slowking||HeavyDutyBoots|Regenerator|ChillyReception,PsychicNoise,Surf,SlackOff|Calm|252,,,4,252,||,0,,,,|||,,,,,Water]Tera Captain|Cloyster|HeavyDutyBoots|SkillLink|ShellSmash,IcicleSpear,RockBlast,WeatherBall|Hasty|,252,,4,,252|||||,,,,,Poison","Torkoal||HeatRock|Drought|LavaPlume,RapidSpin,StealthRock,Yawn|Bold|248,,252,8,,|||||,,,,,Fire]Slither Wing||ChoiceBand|Protosynthesis|Uturn,CloseCombat,FirstImpression,Earthquake|Adamant|,252,92,,,164|||||,,,,,Bug]Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,DracoMeteor,Flamethrower,DragonPulse|Modest|,,4,252,,252||,0,,,,|||,,,,,Steel]Chi-Yu||LifeOrb|BeadsofRuin|DarkPulse,Flamethrower,Overheat,Psychic|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Bronzong||ColburBerry|Levitate|LightScreen,Reflect,BodyPress,Psychic|Bold|252,,172,,84,||,0,,,,|||,,,,,Steel]Clefable||Leftovers|Unaware|ThunderWave,Moonblast,Moonlight,KnockOff|Bold|252,,252,,4,|||||,,,,,Fairy"],
+ ["Tera Captain|Annihilape|ChoiceScarf|Defiant|Earthquake,Uturn,CloseCombat,StoneEdge|Jolly|4,252,,,,252|||||,,,,,Fighting]Thundurus-Therian||ExpertBelt|VoltAbsorb|Substitute,Agility,Thunderbolt,DarkPulse|Timid|4,,,252,,252||,0,,,,|||,,,,,Electric]Tera Captain|IronLeaves|BoosterEnergy|QuarkDrive|SwordsDance,Psyblade,ThroatChop,SacredSword|Jolly|96,160,,,,252|||||,,,,,Fairy]Ting-Lu||Leftovers|VesselofRuin|StealthRock,Rest,Ruination,Earthquake|Careful|252,,4,,,252|||||,,,,,Dark]Skarmory||RockyHelmet|Sturdy|IronDefense,Spikes,Roost,BodyPress|Impish|252,,252,,4,||,0,,,,|||,,,,,Steel]Brambleghast||HeavyDutyBoots|WindRider|Poltergeist,StrengthSap,RapidSpin,SeedBomb|Impish|252,,252,,,4|||||,,,,,Grass","Brambleghast||HeavyDutyBoots|Infiltrator|PowerWhip,Poltergeist,ShadowSneak,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Grass]Latios||ChoiceSpecs|Levitate|DracoMeteor,Thunderbolt,Trick,FlipTurn|Timid|72,,,252,,184|||||,,,,,Dragon]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,GrassKnot,HeatWave,NastyPlot|Timid|136,,,252,,120||,0,,,,|||,,,,,Flying]Tera Captain|UrshifuRapidStrike|MysticWater|UnseenFist|SurgingStrikes,CloseCombat,AquaJet,SwordsDance|Jolly|,252,56,,,200|||||,,,,,Water]Sandy Shocks||Leftovers|Protosynthesis|PowerGem,Thunderbolt,Spikes,ThunderWave|Timid|252,,,4,,252||,0,,,,|||,,,,,Electric]Tera Captain|Moltres|HeavyDutyBoots|FlameBody|Flamethrower,ScorchingSands,WillOWisp,Roost|Timid|252,,4,196,,56||,0,,,,|||,,,,,Psychic"],
+ ["Tera Captain|Galvantula|HeavyDutyBoots|CompoundEyes|Thunder,VoltSwitch,StickyWeb,BugBuzz|Modest|172,,,252,,84||,0,,,,|||,,,,,Ice]Ninetales-Alola||LightClay|SnowWarning|AuroraVeil,FreezeDry,Moonblast,NastyPlot|Modest|180,,,252,,76||,0,,,,|||,,,,,Ice]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Glare,Substitute|Calm|252,,4,,208,44||,0,,,,|||,,,,,Stellar]Metagross||AssaultVest|ClearBody|HeavySlam,Earthquake,Trailblaze,ZenHeadbutt|Careful|252,,4,,252,|||||,,,,,Steel]Volcarona||HeavyDutyBoots|FlameBody|QuiverDance,MorningSun,FieryDance,GigaDrain|Bold|252,,252,,4,||,0,,,,|||,,,,,Bug]Samurott-Hisui||ChoiceScarf|Sharpness|CeaselessEdge,RazorShell,FlipTurn,SacredSword|Adamant|,252,,,4,252|||||,,,,,Water","Rotom-Wash||Leftovers|Levitate|VoltSwitch,Protect,HydroPump,WillOWisp|Bold|252,,252,,4,||,0,,,,|||,,,,,Electric]Politoed||DampRock|Drizzle|PerishSong,Protect,Encore,Surf|Calm|248,,,8,252,||,0,,,,|||,,,,,Water]Tera Captain|Archaludon|AssaultVest|Stamina|ElectroShot,FlashCannon,BodyPress,DragonTail|Relaxed|252,,76,,180,|||||,,,,,Steel]Iron Bundle||ChoiceSpecs|QuarkDrive|FreezeDry,HydroPump,FlipTurn,IceBeam|Modest|,,,252,4,204|||||,,,,,Ice]Clodsire||BlackSludge|Unaware|Earthquake,Toxic,Recover,StealthRock|Careful|252,4,,,252,|||||,,,,,Poison]Meowscarada||FocusSash|Protean|TripleAxel,FlowerTrick,KnockOff,AerialAce|Jolly|,252,,,4,252|||||,,,,,Grass"],
+ ["Darkrai||ChoiceSpecs|BadDreams|Trick,Taunt,DarkPulse,SludgeBomb|Timid|48,,,252,,208||,0,,,,|||,,,,,Dark]Tera Captain|LandorusTherian|Leftovers|Intimidate|SwordsDance,Uturn,StoneEdge,Earthquake|Jolly|160,180,,,,168|||||,,,,,Fairy]Tornadus-Therian||RockyHelmet|Regenerator|Taunt,Uturn,SludgeBomb,BleakwindStorm|Timid|248,,,92,,168|||||,,,,,Flying]Keldeo-Resolute||ChoiceScarf|Justified|SecretSword,HydroPump,Surf,FlipTurn|Modest|120,,,252,4,132|||||,,,,,Water]Scizor||HeavyDutyBoots|Technician|Defog,SwordsDance,BulletPunch,Uturn|Adamant|240,16,252,,,|||||,,,,,Bug]Vileplume||RockyHelmet|EffectSpore|SleepPowder,LeechSeed,SludgeBomb,StrengthSap|Bold|252,,252,,4,||,0,,,,|||,,,,,Grass","Ogerpon-Wellspring||WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,PlayRough,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Water]Tera Captain|Thundurus|HeavyDutyBoots|Prankster|ThunderWave,VoltSwitch,TeraBlast,DarkPulse|Modest|,,4,252,,252||,0,,,,|||,,,,,Ice]Sinistcha-Masterpiece||Leftovers|Heatproof|MatchaGotcha,StrengthSap,StunSpore,Hex|Bold|252,,180,,76,||,0,,,,|||,,,,,Ghost]Clefable||HeavyDutyBoots|Unaware|CosmicPower,StoredPower,Wish,ChargeBeam|Calm|252,,96,,160,||,0,,,,|||,,,,,Fairy]Tera Captain|HoopaUnbound|ChoiceScarf|Magician|Psychic,DarkPulse,EnergyBall,DestinyBond|Modest|,,,252,4,252||,0,,,,|||,,,,,Psychic]Maushold-Four||WideLens|Technician|TidyUp,PopulationBomb,Encore,Crunch|Jolly|64,188,,,4,252|||||,,,,,Normal"],
+ ["Tera Captain|Latias|Leftovers|Levitate|CalmMind,StoredPower,Thunderbolt,Recover|Timid|248,,172,4,12,72||,0,,,,|||,,,,,Electric]Gouging Fire||HeavyDutyBoots|Protosynthesis|MorningSun,Earthquake,FlareBlitz,DragonDance|Impish|248,16,100,,,144|||||,,,,,Fire]Greninja||LifeOrb|Protean|SludgeWave,DarkPulse,HydroPump,WaterShuriken|Timid|96,,16,252,,144||,0,,,,|||,,,,,Water]Leavanny||HeavyDutyBoots|Swarm|KnockOff,LeafStorm,StickyWeb,Synthesis|Jolly|248,,40,,4,216|||||,,,,,Bug]Iron Treads||FocusSash|QuarkDrive|RapidSpin,VoltSwitch,Endeavor,StealthRock|Timid|248,,,,,252|||||,,,,,Ground]Electivire||LifeOrb|MotorDrive|VoltSwitch,Psychic,Flamethrower,KnockOff|Timid|32,,,252,32,192|||||,,,,,Electric","Tera Captain|Kilowattrel|HeavyDutyBoots|VoltAbsorb|Roost,Hurricane,EerieImpulse,Uturn|Hasty|,,,168,108,232|||||,,,,,Water]Dusknoir||CovertCloak|Frisk|Gravity,TrickRoom,Poltergeist,Memento|Adamant|248,252,,,8,|||||,,,,,Ghost]Rotom-Wash||MentalHerb|Levitate|WillOWisp,ThunderWave,FoulPlay,HydroPump|Bold|252,,188,,68,||,0,,,,|||,,,,,Electric]Great Tusk||BoosterEnergy|Protosynthesis|Earthquake,CloseCombat,TemperFlare,BulkUp|Jolly|,4,,,252,252|||||,Fighting,,,,Ground]Tera Captain|Heatran|AirBalloon|FlashFire|StealthRock,EarthPower,DragonPulse,LavaPlume|Modest|8,,248,252,,||,0,,,,|||,,,,,Grass]Azumarill||KebiaBerry|HugePower|AquaJet,PlayRough,Superpower,IceSpinner|Brave|248,252,4,,4,||,,,,,0|||,,,,,Water"],
+ ["Quaquaval||CobaBerry|Moxie|WaveCrash,RapidSpin,Taunt,SwordsDance|Jolly|,252,4,,,252|||||,,,,,Water]Gouging Fire||ChestoBerry|Protosynthesis|HeatCrash,ScaleShot,Rest,DragonDance|Jolly|184,116,,,,208|||||,,,,,Fire]Tera Captain|Serperior|ShucaBerry|Contrary|LeafStorm,TeraBlast,Reflect,Synthesis|Timid|228,,,48,,232||,0,,,,|||,,,,,Electric]Zapdos||HeavyDutyBoots|Static|Discharge,Hurricane,LightScreen,Roost|Timid|248,,124,,,136||,0,,,,|||,,,,,Electric]Grimmsnarl||LaggingTail|Prankster|Crunch,IcePunch,MistyTerrain,Trick|Impish|248,,252,,8,|||||,,,,,Dark]Jirachi||ShucaBerry|SereneGrace|SteelBeam,ShadowBall,Thunderbolt,CalmMind|Modest|208,,,56,,244||,0,,,,|||,,,,,Steel","Tera Captain|Quaquaval|HeavyDutyBoots|Moxie|SwordsDance,AquaStep,BrickBreak,Roost|Jolly|4,252,,,,252|||||,,,,,Electric]Uxie||RockyHelmet|Levitate|StealthRock,Psychic,KnockOff,Uturn|Bold|252,,252,,4,|||||,,,,,Bug]Garchomp||SitrusBerry|RoughSkin|Earthquake,Outrage,SwordsDance,ScaleShot|Jolly|12,252,,,4,240|||||,,,,,Ice]Talonflame||HeavyDutyBoots|FlameBody|Overheat,Hurricane,Uturn,Roost|Timid|212,,,68,76,152|||||,,,,,Poison]Overqwil||SitrusBerry|Intimidate|GunkShot,SwordsDance,Crunch,Spikes|Jolly|4,252,,,,252|||||,,,,,Ground]Gholdengo||ChoiceScarf|GoodasGold|ShadowBall,MakeItRain,Trick,Thunderbolt|Timid|,,,252,4,252||,0,,,,|||,,,,,Dragon"],
+ ["Tera Captain|Hydreigon|ChoiceSpecs|Levitate|DracoMeteor,DragonPulse,DarkPulse,FireBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Iron Hands||AssaultVest|QuarkDrive|IcePunch,DrainPunch,Earthquake,RockSlide|Adamant|248,252,,,8,|||||,,,,,Fighting]Scizor||ChoiceBand|Technician|BulletPunch,Uturn,DualWingbeat,KnockOff|Adamant|248,252,,,8,|||||,,,,,Bug]Munkidori||ChoiceSpecs|Frisk|Psychic,Psyshock,Trick,Uturn|Timid|,,,252,4,252|||||,,,,,Poison]Rotom-Mow||ChoiceScarf|Levitate|Thunderbolt,VoltSwitch,LeafStorm,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric]Mandibuzz||HeavyDutyBoots|Overcoat|Defog,Uturn,Roost,RockTomb|Careful|248,8,,,252,|||||,,,,,Dark","Tera Captain|Gliscor|ToxicOrb|PoisonHeal|SwordsDance,Earthquake,IceFang,Protect|Careful|252,,4,,252,|||||,,,,,Water]Baxcalibur||HeavyDutyBoots|ThermalExchange|DragonDance,GlaiveRush,Earthquake,IceShard|Jolly|56,252,,,,200|||||,,,,,Dragon]Tera Captain|Klefki|Leftovers|Prankster|Spikes,ThunderWave,FlashCannon,Reflect|Calm|252,,4,,252,||,0,,,,|||,,,,,Fire]Volcarona||HeavyDutyBoots|FlameBody|WillOWisp,QuiverDance,Flamethrower,MorningSun|Bold|144,,252,,,112||,0,,,,|||,,,,,Bug]Urshifu-Rapid-Strike||PunchingGlove|UnseenFist|SwordsDance,CloseCombat,AquaJet,SurgingStrikes|Jolly|,252,136,,,120|||||,,,,,Fighting]Slowking-Galar||BlackSludge|Regenerator|SludgeBomb,SlackOff,Flamethrower,ChillingWater|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison"],
+ ["Cinderace||SilkScarf|Libero|SwordsDance,LowKick,PyroBall,QuickAttack|Jolly|76,252,,,,180|||||,,,,,Fire]Vileplume||BlackSludge|EffectSpore|StunSpore,StrengthSap,SludgeBomb,LeafStorm|Calm|252,,36,,220,||,0,,,,|||,,,,,Grass]Palafin||AssaultVest|ZerotoHero|DrainPunch,JetPunch,Liquidation,FlipTurn|Careful|248,8,,,252,|||||,,,,,Water]Kingambit||LumBerry|SupremeOverlord|SwordsDance,SuckerPunch,IronHead,KowtowCleave|Adamant|248,252,,,8,|||||,,,,,Dark]Donphan||CustapBerry|Sturdy|Endure,Endeavor,Earthquake,RapidSpin|Adamant|,252,12,,,244|||||,,,,,Ground]Tera Captain|RagingBolt|Leftovers|Protosynthesis|TeraBlast,Thunderclap,DragonPulse,CalmMind|Modest|84,,,252,,172||,20,,,,|||,,,,,Ground","Tera Captain|Latias|SitrusBerry|Levitate|CalmMind,AuraSphere,DracoMeteor,Psyshock|Timid|80,,,252,,176||,0,,,,|S||,,,,,Dragon]Heatran||ChopleBerry|FlashFire|MagmaStorm,EarthPower,StealthRock,Protect|Calm|240,,,16,252,||,0,,,,|S||,,,,,Fire]Scizor||FocusSash|Technician|SwordsDance,CloseCombat,BulletPunch,DualWingbeat|Adamant|152,252,4,,,100|||||,,,,,Bug]Gliscor||ToxicOrb|PoisonHeal|Substitute,Toxic,Protect,Earthquake|Impish|240,,244,,,24|||S||,,,,,Ground]Greninja-Bond||HeavyDutyBoots|BattleBond|Substitute,IceBeam,GrassKnot,LowKick|Naive|,24,,252,,232|||||,Ghost,,,,Water]Tera Captain|Bellibolt|AssaultVest|Electromorphosis|VoltSwitch,ParabolicCharge,MuddyWater,Thunderbolt|Calm|240,,16,,252,||,0,,,,|||,,,,,Electric"],
+ ["Corviknight||RockyHelmet|Pressure|BraveBird,Defog,Uturn,Roost|Impish|248,8,252,,,|||||,,,,,Flying]Sandslash||AssaultVest|SandRush|Earthquake,KnockOff,SuperFang,RapidSpin|Careful|248,8,,,252,|||S||,,,,,Ground]Slowking-Galar||ColburBerry|Regenerator|SludgeBomb,FireBlast,FutureSight,ChillyReception|Calm|244,,,,252,12||,0,,,,|||,,,,,Poison]Clefable||BabiriBerry|Unaware|Moonblast,KnockOff,StealthRock,Moonlight|Bold|252,,252,,4,|||||,,,,,Water]Palafin||LifeOrb|ZerotoHero|Liquidation,IcePunch,DrainPunch,Agility|Adamant|140,252,,,,116|||||,,,,,Fairy]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Substitute,Synthesis|Timid|24,,,252,,232||,0,,,,|||,,,,,Fire","Tera Captain|Lokix|BlackGlasses|TintedLens|KnockOff,SuckerPunch,LeechLife,SwordsDance|Adamant|,252,56,,,200|||||,,,,,Dark]Tentacruel||BlackSludge|LiquidOoze|FlipTurn,KnockOff,RapidSpin,GunkShot|Adamant|248,252,8,,,|||||,,,,,Water]Garchomp||YacheBerry|RoughSkin|StealthRock,Spikes,Earthquake,FireBlast|Naive|248,,20,,,240|||||,,,,,Dragon]Iron Valiant||ChoiceBand|QuarkDrive|KnockOff,SpiritBreak,CloseCombat,Trick|Jolly|24,252,,,,232|||||,,,,,Fairy]Houndstone||Leftovers|Fluffy|BodyPress,WillOWisp,ShadowSneak,Roar|Impish|248,,252,,8,|||||,,,,,Ghost]Rotom-Heat||Leftovers|Levitate|WillOWisp,VoltSwitch,Overheat,Protect|Calm|248,,8,,252,||,0,,,,|||,,,,,Electric"],
+ ["Sableye||Leftovers|Prankster|Poltergeist,WillOWisp,Recover,XScissor|Adamant|252,252,,,,4|||||,,,,,Dark]Tyranitar||SmoothRock|SandStream|StealthRock,IceBeam,KnockOff,EarthPower|Quiet|252,4,,252,,|||||,,,,,Rock]Tera Captain|Excadrill|BabiriBerry|SandRush|Substitute,SwordsDance,Earthquake,TeraBlast|Adamant|8,252,,,,248|||||,,,,,Fairy]Latios||RoseliBerry|Levitate|LusterPurge,ThunderWave,Recover,IceBeam|Timid|40,,,252,,216||,0,,,,|||,,,,,Dragon]Fezandipiti||AirBalloon|ToxicChain|Moonblast,SludgeBomb,Roost,Uturn|Bold|252,,140,,,116|||||,,,,,Poison]Chesnaught||RockyHelmet|Bulletproof|LeechSeed,SpikyShield,BodyPress,Synthesis|Bold|252,,252,,4,||,0,,,,|||,,,,,Grass","Iron Valiant||LifeOrb|QuarkDrive|Moonblast,AuraSphere,VacuumWave,Psyshock|Timid|,,48,252,,208||,0,,,,|||,,,,,Fairy]Tera Captain|Lanturn|ExpertBelt|WaterAbsorb|DazzlingGleam,VoltSwitch,Agility,Surf|Modest|,,132,252,,124||,0,,,,|||,,,,,Fairy]Garchomp||YacheBerry|RoughSkin|Spikes,Earthquake,SwordsDance,AerialAce|Jolly|176,40,132,,,160|||||,,,,,Dragon]Morgrem||Eviolite|Prankster|Reflect,LightScreen,PartingShot,FoulPlay|Calm|252,,116,,140,||,0,,,,|||,,,,,Dark]Metagross||AirBalloon|ClearBody|StealthRock,IronDefense,MeteorMash,BodyPress|Adamant|252,120,104,,32,|||||,,,,,Steel]Tera Captain|Zarude|HeavyDutyBoots|LeafGuard|Uturn,Taunt,PowerWhip,KnockOff|Jolly|184,140,,,4,180|||||,,,,,Flying"],
+ ["Tera Captain|Gyarados|ChoiceScarf|Intimidate|ThunderWave,Earthquake,Waterfall,TeraBlast|Jolly|88,252,,,,168|||||,,,,,Flying]Qwilfish-Hisui||Eviolite|Intimidate|BarbBarrage,Crunch,ToxicSpikes,PainSplit|Careful|252,,52,,184,20|||||,,,,,Dark]Moltres||HeavyDutyBoots|FlameBody|Roost,Flamethrower,BraveBird,Uturn|Calm|252,,,4,252,|||||,,,,,Fire]Gholdengo||RockyHelmet|GoodasGold|ThunderWave,Thunderbolt,Recover,MakeItRain|Bold|252,,196,,,60||,0,,,,|||,,,,,Steel]Tera Captain|Latias|ExpertBelt|Levitate|Thunderbolt,MistBall,AlluringVoice,ShadowBall|Hasty|,4,,252,,252||,0,,,,|||,,,,,Dragon]Ribombee||HeavyDutyBoots|HoneyGather|StickyWeb,QuiverDance,BugBuzz,Psychic|Timid|112,,,252,,144||,0,,,,|||,,,,,Bug","Palafin||MirrorHerb|ZerotoHero|BodySlam,JetPunch,WaveCrash,BulkUp|Adamant|,236,64,,,208|||||,,,,,Water]Tera Captain|Gholdengo|ChoiceScarf|GoodasGold|MakeItRain,ShadowBall,SteelBeam,Trick|Modest|24,,,252,,232||,0,,,,|||,,,,,Steel]Tera Captain|Jolteon|AssaultVest|VoltAbsorb|Discharge,ShadowBall,VoltSwitch,TeraBlast|Timid|248,,,52,,208||,0,,,,|||,,,,,Flying]Donphan||AssaultVest|Sturdy|Earthquake,HeavySlam,KnockOff,RockTomb|Adamant|248,28,,,232,|||||,,,,,Ground]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,PowerWhip,KnockOff,RockTomb|Jolly|,252,,,4,252|||||,Poison,,,,Fire]Weezing-Galar||PayapaBerry|NeutralizingGas|SludgeWave,Defog,StrangeSteam,FireBlast|Calm|248,,20,,240,||,0,,,,|||,,,,,Poison"],
+ ["Archaludon||AssaultVest|Stamina|ElectroShot,DragonTail,FlashCannon,BodyPress|Modest|108,,120,252,,28|||S||,,,,,Steel]Tera Captain|Annihilape|LumBerry|Defiant|BulkUp,DrainPunch,RageFist,Taunt|Jolly|,,152,,104,252|||S||,,,,,Dragon]Politoed||ChoiceSpecs|Drizzle|WeatherBall,SleepTalk,IceBeam,Rest|Modest|92,,,252,,164||,0,,,,|S||,,,,,Water]Palafin||ThroatSpray|ZerotoHero|Agility,Boomburst,GrassKnot,HydroPump|Modest|252,,,252,,4||,0,,,,|S||,,,,,Water]Zapdos||HeavyDutyBoots|Static|Uturn,Discharge,Roost,Hurricane|Timid|80,,252,,,176|||S||,,,,,Electric]Tera Captain|Overqwil|BlackSludge|PoisonPoint|BarbBarrage,Spikes,Taunt,Crunch|Impish|228,,252,,,28|||S||,,,,,Electric","Pecharunt||BlackSludge|PoisonPuppeteer|ShadowBall,Toxic,Protect,Recover|Bold|252,,252,,4,||,0,,,,|||,,,,,Stellar]Skarmory||MentalHerb|WeakArmor|SunnyDay,Whirlwind,StealthRock,Spikes|Jolly|252,,,,120,136||,0,,,,|S||,,,,,Stellar]Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,WaveCrash,FlipTurn,CloseCombat|Adamant|160,96,,,,252|||S||,,,,,Stellar]Tera Captain|Annihilape|Leftovers|Defiant|DrainPunch,RageFist,BulkUp,Taunt|Jolly|248,,8,,,252|||S||,,,,,Electric]Tera Captain|Mudsdale|Leftovers|Stamina|Earthquake,StoneEdge,Curse,SunnyDay|Careful|252,,4,,252,|||S||,,,,,Steel]Raichu||LightClay|LightningRod|Nuzzle,Endeavor,LightScreen,Reflect|Jolly|248,,84,,,176|||S||,,,,,Stellar"],
+ ["Enamorus||ChoiceScarf|Contrary|EarthPower,Moonblast,Superpower,HealingWish|Naive|,,4,252,,252|||||,,,,,Fairy]Samurott-Hisui||AssaultVest|Sharpness|KnockOff,CeaselessEdge,RazorShell,AquaJet|Adamant|220,252,,,,36|||||,,,,,Water]Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,Encore,FlipTurn|Timid|80,,4,252,4,168|||||,,,,,Ice]Tera Captain|Annihilape|AssaultVest|VitalSpirit|RageFist,DrainPunch,Uturn,IcePunch|Jolly|80,252,,,,176|||||,,,,,Water]Tera Captain|Ribombee|ChoiceScarf|ShieldDust|Moonblast,BugBuzz,Psychic,StickyWeb|Timid|,,4,252,,252||,0,,,,|||,,,,,Psychic]Bronzong||Leftovers|Heatproof|CalmMind,StoredPower,IronDefense,BodyPress|Careful|252,,4,,252,||,0,,,,|||,,,,,Steel","Iron Crown||ChoiceScarf|QuarkDrive|TachyonCutter,FocusBlast,Psychic,VoltSwitch|Modest|,,44,252,,212||,20,,,,|||,Fighting,,,,Steel]Tera Captain|IronMoth|HeavyDutyBoots|QuarkDrive|Hurricane,EnergyBall,FieryDance,SludgeWave|Timid|32,,,252,,224||,0,,,,|||,,,,,Bug]Rotom-Wash||ChoiceScarf|Levitate|Trick,HydroPump,VoltSwitch,ThunderWave|Timid|252,,44,,,212||,0,,,,|||,,,,,Electric]Darkrai||HeavyDutyBoots|BadDreams|DarkPulse,SludgeBomb,FocusBlast,KnockOff|Timid|,,,252,,252|||||,,,,,Dark]Cinccino||HeavyDutyBoots|SkillLink|TidyUp,PlayRough,TailSlap,BulletSeed|Jolly|72,252,,,,184|||||,,,,,Normal]Gliscor||ToxicOrb|PoisonHeal|Earthquake,ToxicSpikes,KnockOff,Protect|Careful|252,,124,,120,12|||||,,,,,Ground"],
+ ["Tera Captain|Latias|Leftovers|Levitate|StoredPower,AuraSphere,CalmMind,Recover|Timid|248,,180,,,80||,0,,,,|||,,,,,Water]Samurott-Hisui||BlackGlasses|Sharpness|CeaselessEdge,RazorShell,SuckerPunch,SwordsDance|Adamant|24,252,4,,4,224|||||,,,,,Water]Iron Treads||FocusSash|QuarkDrive|Earthquake,HeavySlam,StoneEdge,KnockOff|Adamant|16,252,,,4,236|||||,,,,,Ground]Ditto||ChoiceScarf|Imposter|Transform|Impish|248,8,252,,,||,30,,,,|||,,,,,Normal]Sylveon||CovertCloak|Pixilate|HyperVoice,BatonPass,Wish,Protect|Calm|248,,100,,160,||,0,,,,|||,,,,,Fairy]Gengar||ChoiceScarf|CursedBody|ShadowBall,SludgeBomb,FocusBlast,DestinyBond|Timid|,,,252,4,252||,0,,,,|||,,,,,Ghost","Iron Bundle||HeavyDutyBoots|QuarkDrive|Encore,HydroPump,FlipTurn,FreezeDry|Timid|,,88,252,,168|||||,,,,,Ice]Tera Captain|Excadrill|AirBalloon|MoldBreaker|SwordsDance,Earthquake,IronHead,RapidSpin|Adamant|,252,,,4,252|||||,,,,,Flying]Latios||ChoiceScarf|Levitate|FlipTurn,LusterPurge,DracoMeteor,Surf|Modest|96,,,252,,160|||||,,,,,Dragon]Moltres||HeavyDutyBoots|FlameBody|Uturn,Flamethrower,Roar,Roost|Calm|252,,4,,252,|||||,,,,,Fire]Tera Captain|Gyarados|HeavyDutyBoots|Moxie|Earthquake,Waterfall,IronHead,DragonDance|Adamant|24,252,,,,232|||S||,,,,,Ground]Hatterene||Leftovers|MagicBounce|CalmMind,Nuzzle,DrainingKiss,Psychic|Bold|252,,252,,4,|||||,,,,,Psychic"],
+ ["Tera Captain|Chesnaught|RockyHelmet|Bulletproof|LeechSeed,IronDefense,BodyPress,SpikyShield|Impish|252,,,,252,||,0,,,,|S||,,,,,Water]Espeon||LightClay|MagicBounce|LightScreen,Reflect,Psychic,DrainingKiss|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel]Raikou||AssaultVest|Pressure|Discharge,VoltSwitch,Extrasensory,Scald|Modest|218,,,72,26,192||,0,,,,|S||,,,,,Flying]Tyranitar||Leftovers|SandStream|RockSlide,IceBeam,StealthRock,KnockOff|Sassy|252,,,4,252,|||S||,,,,,Ghost]Palafin||ChoiceBand|ZerotoHero|FlipTurn,WaveCrash,JetPunch,CloseCombat|Jolly|56,252,,,,200|||S||,,,,,Water]Volcarona||HeavyDutyBoots|FlameBody|QuiverDance,Psychic,FieryDance,GigaDrain|Timid|56,,,252,,200||,0,,,,|S||,,,,,Electric","Tera Captain|Annihilape|Leftovers|Defiant|BulkUp,RageFist,DrainPunch,Protect|Careful|248,,52,,168,40|||||,,,,,Dragon]Greninja-Bond||LifeOrb|BattleBond|Surf,DarkPulse,GrassKnot,IceBeam|Timid|56,,,252,,200|||||,Ghost,,,,Water]Rotom-Wash||SitrusBerry|Levitate|WillOWisp,NastyPlot,HydroPump,VoltSwitch|Bold|252,,176,,80,||,0,,,,|||,,,,,Electric]Donphan||RockyHelmet|Sturdy|StealthRock,Earthquake,RapidSpin,Roar|Impish|248,8,252,,,|||||,,,,,Ground]Iron Moth||PowerHerb|QuarkDrive|MeteorBeam,FieryDance,EnergyBall,Uturn|Timid|,,,252,4,252|||||,,,,,Fire]Tera Captain|Glastrier|CustapBerry|ChillingNeigh|SwordsDance,IcicleCrash,Thrash,Endure|Impish|120,116,252,,,20|||||,,,,,Dragon"],
+ ["Palafin||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,CloseCombat,WaveCrash|Jolly|,252,,,4,252|||||,,,,,Water]Corviknight||RockyHelmet|Pressure|Roost,Uturn,BodyPress,IronDefense|Relaxed|248,,252,,8,||,,,,,0|||,,,,,Flying]Ting-Lu||Leftovers|VesselofRuin|StealthRock,Earthquake,Ruination,BodyPress|Careful|252,4,,,252,|||||,,,,,Dark]Tera Captain|Skeledirge|Leftovers|Unaware|TeraBlast,TorchSong,SlackOff,ShadowBall|Modest|252,,,252,4,||,0,,,,|||,,,,,Fairy]Gardevoir||ChoiceScarf|Synchronize|Moonblast,MysticalFire,Thunderbolt,HealingWish|Timid|,,,252,4,252||,0,,,,|||,,,,,Psychic]Tera Captain|Garganacl|Leftovers|PurifyingSalt|SaltCure,BodyPress,IronDefense,Recover|Impish|252,4,252,,,|||||,,,,,Ghost","Meowscarada||ExpertBelt|Protean|FlowerTrick,KnockOff,ThunderPunch,Uturn|Adamant|64,252,,,4,188|||||,,,,,Grass]Corviknight||RockyHelmet|Pressure|Uturn,BodyPress,Roost,Defog|Impish|248,,252,,8,|||||,,,,,Flying]Scream Tail||Leftovers|Protosynthesis|Wish,Protect,ThunderWave,DazzlingGleam|Calm|252,,,4,252,||,0,,,,|||,,,,,Fairy]Overqwil||ChestoBerry|PoisonPoint|Crunch,GunkShot,Rest,SleepTalk|Careful|248,8,,,252,|||||,,,,,Dark]Typhlosion-Hisui||ChoiceSpecs|Frisk|Eruption,Flamethrower,ShadowBall,InfernalParade|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Tera Captain|AvaluggHisui|CovertCloak|Sturdy|Recover,StoneEdge,IceSpinner,TeraBlast|Lax|252,4,252,,,|||||,,,,,Grass"],
+ ["Ribombee||GrassySeed|ShieldDust|QuiverDance,Moonblast,StickyWeb,EnergyBall|Timid|112,,,252,,144||,0,,,,|||,,,,,Bug]Annihilape||ChoiceScarf|Defiant|FinalGambit,Uturn,CloseCombat,RageFist|Jolly|252,4,,,,252|||||,,,,,Fighting]Tera Captain|Sylveon|ChoiceScarf|Pixilate|HyperVoice,HyperBeam,DrainingKiss,MistyExplosion|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Golem-Alola||ChopleBerry|MagnetPull|FirePunch,HighHorsepower,StoneEdge,BrickBreak|Adamant|252,252,,,4,|||||,,,,,Rock]Cinderace||HeavyDutyBoots|Libero|PyroBall,CourtChange,HighJumpKick,Uturn|Jolly|72,252,,,,184|||||,,,,,Fire]Tera Captain|Landorus|FocusSash|SheerForce|EarthPower,GrassKnot,TeraBlast,SludgeWave|Modest|24,,,252,,232||,0,,,,|||,,,,,Fairy","Ursaluna-Bloodmoon||ChopleBerry|MindsEye|CalmMind,BloodMoon,EarthPower,Moonlight|Bold|240,,28,132,,104||,0,,,,|||,,,,,Ground]Latios||ColburBerry|Levitate|Psyshock,AuraSphere,Recover,CalmMind|Timid|156,,,100,,252||,0,,,,|||,,,,,Dragon]Klefki||LightClay|Prankster|FlashCannon,PlayRough,Reflect,LightScreen|Bold|252,,252,,4,|||||,,,,,Steel]Tera Captain|Blastoise|WhiteHerb|Torrent|Liquidation,Earthquake,RapidSpin,ShellSmash|Adamant|,212,116,,,180|||||,,,,,Fairy]Rillaboom||AssaultVest|GrassySurge|GrassyGlide,WoodHammer,HighHorsepower,Acrobatics|Adamant|252,252,,,4,|||||,,,,,Grass]Blaziken||LifeOrb|SpeedBoost|FlareBlitz,CloseCombat,SwordsDance,Protect|Adamant|,252,24,,,232|||||,,,,,Fire"],
+ ["Gouging Fire||HeavyDutyBoots|Protosynthesis|FlareBlitz,MorningSun,DragonDance,ScaleShot|Adamant|,252,,,152,104|||||,Fighting,,,,Fire]Tera Captain|WalkingWake|LifeOrb|Protosynthesis|HydroSteam,TeraBlast,Agility,DragonPulse|Modest|,,4,252,,252||,0,,,,|||,,,,,Poison]Tera Captain|Torkoal|HeatRock|Drought|RapidSpin,StealthRock,ClearSmog,LavaPlume|Relaxed|252,,252,,4,|||||,,,,,Poison]Corviknight||Leftovers|Pressure|IronDefense,BraveBird,Roost,BodyPress|Impish|252,,200,,56,|||||,,,,,Flying]Meowscarada||ProtectivePads|Protean|TripleAxel,FlowerTrick,KnockOff,Uturn|Jolly|56,252,,,,200|||||,,,,,Grass]Latias||ChoiceScarf|Levitate|Thunderbolt,DracoMeteor,Psyshock,HealingWish|Timid|60,,,252,,196||,0,,,,|S||,,,,,Dragon","Iron Valiant||BoosterEnergy|QuarkDrive|FocusBlast,Moonblast,Thunderbolt,CalmMind|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Primarina||Leftovers|Torrent|AlluringVoice,WeatherBall,FlipTurn,Encore|Relaxed|252,,252,,4,||,,,,,0|||,,,,,Water]Garchomp||LifeOrb|RoughSkin|FireBlast,Earthquake,ScaleShot,StealthRock|Hasty|,252,,56,,200|||||,,,,,Dragon]Corviknight||Leftovers|Pressure|BraveBird,Uturn,Roost,BulkUp|Sassy|252,4,,,252,||,,,,,0|||,,,,,Flying]Tera Captain|Serperior|ChoiceScarf|Contrary|LeafStorm,DragonPulse,TeraBlast,Glare|Timid|24,,,252,,232||,0,,,,|||,,,,,Stellar]Arbok||BlackSludge|Intimidate|GunkShot,FireFang,Coil,ToxicSpikes|Impish|248,,240,,,20|||||,,,,,Poison"],
+ ["Pecharunt||BlackSludge|PoisonPuppeteer|NastyPlot,PartingShot,MalignantChain,ShadowBall|Modest|248,,8,252,,||,0,,,,|||,,,,,Poison]Grimmsnarl||LightClay|Prankster|Reflect,LightScreen,ThunderWave,DazzlingGleam|Calm|248,,,8,252,||,0,,,,|||,,,,,Dark]Tera Captain|Latias|WeaknessPolicy|Levitate|DragonDance,Earthquake,StoredPower,Recover|Serious|80,252,,4,,172|||||,,,,,Poison]Urshifu||ClearAmulet|UnseenFist|WickedBlow,CloseCombat,SwordsDance,PoisonJab|Adamant|36,252,,,,220|||||,,,,,Fighting]Gliscor||ToxicOrb|PoisonHeal|Toxic,Protect,Earthquake,Uturn|Impish|248,,96,,164,|||||,,,,,Ground]Alomomola||HeavyDutyBoots|Regenerator|Wish,FlipTurn,Protect,Scald|Bold|248,,252,8,,|||||,,,,,Water","Tera Captain|Hydrapple|Leftovers|Regenerator|NastyPlot,EarthPower,FickleBeam,Recover|Bold|252,,200,,,56||,0,,,,|||,,,,,Ghost]Tera Captain|Mamoswine|NeverMeltIce|Oblivious|TeraBlast,Earthquake,IcicleCrash,IceShard|Adamant|132,252,,,,124|||||,,,,,Electric]Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,FocusBlast,Psychic,Trick|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Rotom-Wash||Leftovers|Levitate|Substitute,NastyPlot,Discharge,HydroPump|Bold|248,,184,,,76||,0,,,,|||,,,,,Electric]Qwilfish-Hisui||Eviolite|Intimidate|Spikes,IceBeam,BarbBarrage,Crunch|Impish|248,,176,,,84|||||,,,,,Dark]Jirachi||Leftovers|SereneGrace|CalmMind,FutureSight,Wish,ShadowBall|Timid|248,,,,100,160||,0,,,,|||,,,,,Steel"],
+ ["Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,Flamethrower,DracoMeteor,TeraBlast|Timid|12,,,244,,252||,0,,,,|||,,,,,Stellar]Weezing-Galar||BlackSludge|Levitate|ToxicSpikes,FireBlast,ClearSmog,PainSplit|Bold|252,,252,,4,||,0,,,,|||,,,,,Bug]Ninetales||HeatRock|Drought|Overheat,ScorchingSands,Hypnosis,HealingWish|Timid|,,4,252,,252||,0,,,,|||,,,,,Bug]Great Tusk||Leftovers|Protosynthesis|BulkUp,Earthquake,IceSpinner,RapidSpin|Jolly|252,4,,,,252|||||,Fighting,,,,Bug]Heatran||ChoiceScarf|FlashFire|MagmaStorm,StealthRock,WillOWisp,Overheat|Modest|,,,252,4,252||,0,,,,|||,,,,,Bug]Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,MightyCleave,CloseCombat,Earthquake|Jolly|,252,,,40,216|||||,Fighting,,,,Bug","Darkrai||ChoiceScarf|BadDreams|DarkPulse,IceBeam,Psychic,Trick|Timid|8,,,252,,248||,0,,,,|||,,,,,Dark]Cinderace||HeavyDutyBoots|Libero|PyroBall,HighJumpKick,WillOWisp,CourtChange|Jolly|80,252,,,,176|||||,,,,,Fire]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|HornLeech,IvyCudgel,SwordsDance,Synthesis|Jolly|8,252,,,,248|||||,,,,,Water]Tera Captain|Comfey|Leftovers|Triage|DrainingKiss,TeraBlast,CalmMind,Synthesis|Modest|252,,,252,,4||,0,,,,|||,,,,,Ground]Gliscor||ChoiceBand|PoisonHeal|Earthquake,DualWingbeat,Uturn,ToxicSpikes|Jolly|4,252,,,,252|||||,,,,,Ground]Gholdengo||AirBalloon|GoodasGold|MakeItRain,ShadowBall,NastyPlot,Recover|Timid|56,,,252,,200||,0,,,,|||,,,,,Fairy"],
+ ["Tera Captain|Latias|ChoiceScarf|Levitate|DracoMeteor,Psychic,AlluringVoice,Trick|Timid|4,,,252,4,248||,0,,,,|||,,,,,Steel]Urshifu||ChoiceBand|UnseenFist|CloseCombat,WickedBlow,Uturn,FirePunch|Jolly|,252,,,4,252|||||,,,,,Fighting]Excadrill||FocusSash|MoldBreaker|RapidSpin,SwordsDance,Earthquake,IronHead|Jolly|4,252,,,4,248|||||,,,,,Ground]Weezing-Galar||CustapBerry|MistySurge|StrangeSteam,PainSplit,Defog,DestinyBond|Bold|252,,252,4,,||,0,,,,|||,,,,,Poison]Volcanion||AssaultVest|WaterAbsorb|SteamEruption,Flamethrower,FireSpin,EarthPower|Modest|248,,,252,8,||,0,,,,|||,,,,,Fire]Tsareena||AssaultVest|LeafGuard|TripleAxel,RapidSpin,KnockOff,Uturn|Adamant|252,252,,,4,|||||,,,,,Grass","Torkoal||HeatRock|Drought|WillOWisp,LavaPlume,Yawn,ClearSmog|Bold|252,,252,,,||,0,,,,|||,,,,,Fire]Tera Captain|Venusaur|SitrusBerry|Chlorophyll|Growth,GigaDrain,WeatherBall,SludgeBomb|Modest|72,,,252,,184||,0,,,,|||,,,,,Water]Scream Tail||EjectButton|Protosynthesis|ThunderWave,Encore,DazzlingGleam,Wish|Calm|252,,164,,92,||,0,,,,|||,,,,,Fairy]Tera Captain|WalkingWake|Leftovers|Protosynthesis|HydroSteam,DragonPulse,KnockOff,Agility|Timid|96,,,252,,160|||||,,,,,Water]Great Tusk||RockyHelmet|Protosynthesis|RapidSpin,Earthquake,KnockOff,StealthRock|Impish|252,,252,,,4|||||,,,,,Ground]Roaring Moon||ChoiceScarf|Protosynthesis|Uturn,KnockOff,IronHead,Outrage|Adamant|60,252,,,,196|||||,,,,,Dragon"],
+ ["Garchomp||CovertCloak|RoughSkin|StealthRock,ScaleShot,Earthquake,StoneEdge|Impish|196,28,220,,,64|||||,,,,,Dragon]Urshifu||ChoiceBand|UnseenFist|WickedBlow,SuckerPunch,CloseCombat,Uturn|Jolly|,252,,,4,252|||||,,,,,Fighting]Rotom-Wash||Leftovers|Levitate|VoltSwitch,Thunderbolt,HydroPump,PainSplit|Timid|,,,180,76,252||,0,,,,|||,,,,,Electric]Sylveon||Leftovers|Pixilate|HyperVoice,Wish,Protect,Yawn|Calm|252,,,4,252,||,0,,,,|||,,,,,Fairy]Tsareena||HeavyDutyBoots|LeafGuard|HighJumpKick,PowerWhip,TripleAxel,RapidSpin|Jolly|56,128,72,,204,48|||||,,,,,Grass]Tera Captain|BraviaryHisui|CobaBerry|TintedLens|EsperWing,TeraBlast,Roost,Hurricane|Modest|152,,,252,,104||,0,,,,|||,,,,,Fighting","Darkrai||LifeOrb|BadDreams|IceBeam,Psychic,DarkPulse,NastyPlot|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Kyurem||LoadedDice|Pressure|ScaleShot,IcicleSpear,IronHead,IceBeam|Lonely|252,252,,4,,|||||,,,,,Dragon]Zapdos||RockyHelmet|Static|Uturn,Thunderbolt,Roost,HeatWave|Modest|248,,,252,8,|||||,,,,,Electric]Tera Captain|Heatran|Leftovers|FlameBody|FlashCannon,MagmaStorm,WillOWisp,PowerGem|Modest|252,,,252,4,||,0,,,,|||,,,,,Flying]Tera Captain|TaurosPaldeaCombat|AssaultVest|Intimidate|Earthquake,StoneEdge,CloseCombat,IronHead|Jolly|,252,,,4,252|||||,,,,,Fighting]Sneasler||ExpertBelt|PoisonTouch|DireClaw,CloseCombat,Uturn,BrickBreak|Jolly|,252,,,4,252|||||,,,,,Fighting"],
+ ["Iron Valiant||LifeOrb|QuarkDrive|Moonblast,Psyshock,AuraSphere,VacuumWave|Timid|48,,,252,,208||,0,,,,|||,,,,,Fairy]Garchomp||Leftovers|RoughSkin|Spikes,Earthquake,DragonTail,ScaleShot|Adamant|248,16,,,,244|||||,,,,,Dragon]Rotom-Wash||RockyHelmet|Levitate|HydroPump,VoltSwitch,ThunderWave,PainSplit|Bold|248,,228,,,32||,0,,,,|||,,,,,Electric]Tera Captain|Skeledirge|HeavyDutyBoots|Unaware|TorchSong,TeraBlast,SlackOff,WillOWisp|Calm|248,,,8,252,||,0,,,,|||,,,,,Water]Scizor||HeavyDutyBoots|Technician|CloseCombat,Uturn,BulletPunch,Defog|Adamant|248,252,,,8,|||||,,,,,Bug]Golurk||ColburBerry|NoGuard|DynamicPunch,Poltergeist,Earthquake,StealthRock|Adamant|252,252,,,4,|||||,,,,,Ground","Great Tusk||LifeOrb|Protosynthesis|Substitute,HeadlongRush,CloseCombat,IceSpinner|Adamant|176,252,,,,80|||||,Fighting,,,,Ground]Tera Captain|IronMoth|PowerHerb|QuarkDrive|FieryDance,SludgeWave,MeteorBeam,TeraBlast|Timid|64,,,252,,192||,0,,,,|||,,,,,Fairy]Weavile||ChoiceBand|Pressure|KnockOff,IceSpinner,IceShard,ThroatChop|Jolly|72,252,,,,184|||||,,,,,Dark]Archaludon||CustapBerry|Stamina|DracoMeteor,FlashCannon,FoulPlay,Endure|Modest|164,,,248,,96||,0,,,,|||,,,,,Steel]Weezing-Galar||PayapaBerry|Levitate|StrangeSteam,Flamethrower,Toxic,Defog|Calm|252,,72,,184,||,0,,,,|||,,,,,Poison]Tera Captain|Gyarados|HeavyDutyBoots|Intimidate|Waterfall,TemperFlare,DoubleEdge,DragonDance|Impish|252,76,132,,,48|||||,,,,,Fire"],
+ ["Tera Captain|Hatterene|Leftovers|MagicBounce|CalmMind,DrainingKiss,Psyshock,Nuzzle|Bold|252,,180,76,,|||||,,,,,Water]Gholdengo||AirBalloon|GoodasGold|NastyPlot,MakeItRain,ShadowBall,Substitute|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel]Gastrodon||Leftovers|StormDrain|Earthquake,Waterfall,Recover,StealthRock|Careful|252,4,,,252,|||||,,,,,Water]Annihilape||ChestoBerry|Defiant|BulkUp,DrainPunch,RageFist,Rest|Careful|252,40,,,216,|||||,,,,,Fighting]Tera Captain|Grimmsnarl|LightClay|Prankster|PlayRough,Reflect,LightScreen,PartingShot|Careful|252,4,,,252,|||||,,,,,Dark]Chi-Yu||ChoiceScarf|BeadsofRuin|Overheat,Flamethrower,DarkPulse,Memento|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark","Tera Captain|GreatTusk|ChoiceScarf|Protosynthesis|HeadlongRush,CloseCombat,PlayRough,IceSpinner|Jolly|28,252,,,,228|||||,Fighting,,,,Ground]Fezandipiti||BlackSludge|ToxicChain|GunkShot,Uturn,Roost,PlayRough|Adamant|252,4,252,,,|||||,,,,,Poison]Vaporeon||Leftovers|WaterAbsorb|FlipTurn,IceBeam,Wish,Surf|Sassy|252,,,4,252,|||||,,,,,Water]Tera Captain|Yanmega|ThroatSpray|SpeedBoost|BugBuzz,GigaDrain,AirSlash,TeraBlast|Modest|4,,,252,252,||,0,,,,|||,,,,,Ground]Latios||LifeOrb|Levitate|Recover,FlipTurn,Surf,LusterPurge|Timid|4,,,252,,252|||||,,,,,Dragon]Corviknight||Leftovers|Pressure|Uturn,Defog,Roost,IronHead|Impish|252,,4,,252,|||||,,,,,Flying"],
+ ["Darkrai||LifeOrb|BadDreams|DarkPulse,FocusBlast,WillOWisp,NastyPlot|Timid|144,,,104,8,252||,0,,,,|||,,,,,Dark]Slowking-Galar||ShucaBerry|Regenerator|FireBlast,FutureSight,ToxicSpikes,ChillyReception|Calm|248,,,8,252,||,0,,,,|||,,,,,Poison]Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Earthquake,Uturn,Toxic,StealthRock|Impish|248,8,252,,,|||||,,,,,Water]Blastoise||BindingBand|Torrent|BodyPress,IronDefense,RapidSpin,Whirlpool|Impish|200,,196,,,112|||||,,,,,Water]Tera Captain|Terrakion|Leftovers|Justified|SacredSword,Earthquake,XScissor,Substitute|Jolly|16,252,,,,240|||||,,,,,Water]Florges||Leftovers|FlowerVeil|Wish,Protect,Moonblast,DrainingKiss|Calm|248,,,8,252,||,0,,,,|||,,,,,Fairy","Mesprit||Leftovers|Levitate|StealthRock,ThunderWave,PsychicNoise,HealingWish|Bold|248,,252,8,,||,0,,,,|||,,,,,Psychic]Iron Treads||ChopleBerry|QuarkDrive|RapidSpin,Earthquake,KnockOff,VoltSwitch|Jolly|,252,4,,,252|||||,,,,,Ground]Palafin||MysticWater|ZerotoHero|BulkUp,DrainPunch,JetPunch,Liquidation|Adamant|136,236,,,136,|||||,,,,,Water]Darkrai||WiseGlasses|BadDreams|NastyPlot,DarkPulse,FocusBlast,SludgeBomb|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|Ceruledge|HeavyDutyBoots|WeakArmor|SwordsDance,BitterBlade,Poltergeist,CloseCombat|Adamant|68,252,,,4,184|||||,,,,,Fighting]Tera Captain|Diancie|Leftovers|ClearBody|SleepTalk,Spikes,Moonblast,ScorchingSands|Sassy|160,,4,92,252,||,0,,,,|S||,,,,,Poison"],
+ ["Grimmsnarl||LightClay|Prankster|LightScreen,Reflect,Taunt,SpiritBreak|Impish|252,,252,,4,|||||,,,,,Dark]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|SwordsDance,PowerWhip,PlayRough,Superpower|Jolly|,252,,,4,252|||||,,,,,Water]Cyclizar||SitrusBerry|Regenerator|RapidSpin,Uturn,ShedTail,DracoMeteor|Timid|248,,,8,,252|||||,,,,,Dragon]Kingambit||ShucaBerry|SupremeOverlord|SwordsDance,IronHead,SuckerPunch,KowtowCleave|Adamant|252,252,,,4,|||||,,,,,Dark]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|EnergyBall,DazzlingGleam,FieryDance,SludgeWave|Timid|124,,,132,,252||,0,,,,|||,,,,,Steel]Mamoswine||OccaBerry|ThickFat|StealthRock,IcicleCrash,Earthquake,KnockOff|Jolly|,252,,,4,252|||||,,,,,Ice","Greninja-Bond||FocusSash|BattleBond|Liquidation,SwordsDance,LowKick,GunkShot|Jolly|,252,,,4,252|||||,Ghost,,,,Water]Iron Treads||BoosterEnergy|QuarkDrive|Earthquake,Megahorn,IronHead,StealthRock|Jolly|,252,68,,,188|||||,,,,,Ground]Tera Captain|IronMoth|ChoiceSpecs|QuarkDrive|FieryDance,Overheat,SludgeWave,EnergyBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Fire]Garchomp||YacheBerry|RoughSkin|Earthquake,SwordsDance,ScaleShot,Spikes|Impish|252,4,252,,,|||S||,,,,,Dragon]Tera Captain|Comfey|WiseGlasses|Triage|DrainingKiss,CalmMind,GigaDrain,TeraBlast|Modest|252,,4,252,,||,0,,,,|S||,,,,,Ground]Uxie||SitrusBerry|Levitate|Encore,ThunderWave,FoulPlay,Uturn|Careful|252,,40,,216,|||||,,,,,Psychic"],
+ ["Torkoal||HeatRock|Drought|Yawn,LavaPlume,Rest,Earthquake|Sassy|248,,8,,252,|||||,,,,,Fire]Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|DracoMeteor,HydroSteam,DragonPulse,Flamethrower|Timid|64,,,252,4,188||,0,,,,|||,,,,,Water]Scream Tail||Leftovers|Protosynthesis|DazzlingGleam,Flamethrower,ThunderWave,StealthRock|Bold|104,,140,,116,148||,0,,,,|||,,,,,Fairy]Great Tusk||WhiteHerb|Protosynthesis|RapidSpin,SupercellSlam,KnockOff,CloseCombat|Adamant|248,100,,,,160|||||,Fighting,,,,Ground]Orthworm||ShedShell|EarthEater|BodyPress,StealthRock,Spikes,IronHead|Impish|248,8,252,,,|||||,,,,,Steel]Lanturn||AssaultVest|VoltAbsorb|VoltSwitch,Scald,DazzlingGleam,Discharge|Calm|144,,112,,252,||,0,,,,|||,,,,,Water","Enamorus-Therian||CustapBerry|Overcoat|Endure,Moonblast,MysticalFire,SludgeBomb|Modest|252,,,252,4,||,0,,,,|||,,,,,Fairy]Iron Boulder||BoosterEnergy|QuarkDrive|MightyCleave,CloseCombat,IronHead,ZenHeadbutt|Jolly|4,252,36,,,216|||||,,,,,Rock]Kommo-o||Metronome|Soundproof|Substitute,BellyDrum,DrainPunch,IronHead|Impish|,4,252,,252,|||||,,,,,Fairy]Manaphy||Leftovers|Hydration|AlluringVoice,EnergyBall,Scald,Uturn|Sassy|252,,4,,252,|||||,,,,,Water]Tera Captain|Magnezone|HeavyDutyBoots|Sturdy|MirrorCoat,ThunderWave,FlashCannon,VoltSwitch|Modest|252,,4,252,,||,0,,,,|||,,,,,Water]Krookodile||CustapBerry|Intimidate|Endure,CloseCombat,Outrage,GunkShot|Adamant|252,252,4,,,|||||,,,,,Ground"],
+ ["Iron Boulder||BoosterEnergy|QuarkDrive|Earthquake,SwordsDance,MightyCleave,CloseCombat|Jolly|,252,,,4,252|||||,Fighting,,,,Rock]Tera Captain|SandyShocks|HeavyDutyBoots|Protosynthesis|EarthPower,StealthRock,VoltSwitch,TeraBlast|Timid|,,,252,4,252||,0,,,,|||,,,,,Water]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|HornLeech,KnockOff,IvyCudgel,SwordsDance|Jolly|,252,,,4,252|||||,Poison,,,,Fire]Tera Captain|ZoroarkHisui|ChoiceSpecs|Illusion|HyperVoice,Psychic,TeraBlast,ShadowBall|Timid|,,,252,4,252||,0,,,,|S||,,,,,Fairy]Weezing-Galar||BlackSludge|NeutralizingGas|WillOWisp,Defog,Flamethrower,Taunt|Calm|252,,,4,252,||,0,,,,|S||,,,,,Poison]Eiscue||SitrusBerry|IceFace|IceSpinner,BellyDrum,Liquidation,ZenHeadbutt|Jolly|,252,,,4,252|||||,,,,,Ice","Quaquaval||WeaknessPolicy|Moxie|AquaStep,CloseCombat,SwordsDance,Substitute|Adamant|,252,,,4,252|||||,,,,,Water]Corviknight||RockyHelmet|Pressure|BraveBird,Roost,Uturn,Defog|Impish|248,,252,,8,|||||,,,,,Flying]Tera Captain|Serperior|CustapBerry|Contrary|LeafStorm,DragonPulse,Endure,TeraBlast|Timid|24,,,252,,232||,0,,,,|S||,,,,,Rock]Chi-Yu||ChoiceScarf|BeadsofRuin|Flamethrower,DarkPulse,WillOWisp,Overheat|Modest|176,,4,252,,76||,0,,,,|||,,,,,Dark]Spidops||SitrusBerry|Stakeout|FirstImpression,StickyWeb,Uturn,SuckerPunch|Adamant|252,252,,,4,|||||,,,,,Bug]Clodsire||BlackSludge|Unaware|Curse,GunkShot,Earthquake,Recover|Careful|248,,252,,8,|||||,,,,,Poison"],
+ ["Iron Valiant||BoosterEnergy|QuarkDrive|SpiritBreak,CloseCombat,Encore,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Fairy]Garchomp||LoadedDice|RoughSkin|Spikes,Earthquake,ScaleShot,Liquidation|Jolly|,252,,,4,252|||||,,,,,Dragon]Rotom-Wash||RindoBerry|Levitate|VoltSwitch,HydroPump,ThunderWave,PainSplit|Bold|248,,200,60,,||,0,,,,|||,,,,,Electric]Tera Captain|Ceruledge|ChoiceScarf|FlashFire|Poltergeist,BitterBlade,ShadowSneak,WillOWisp|Adamant|56,252,,,,200|||||,,,,,Ghost]Tera Captain|Revavroom|LumBerry|Filter|ShiftGear,GunkShot,TeraBlast,RainDance|Adamant|120,252,,,,136|||||,,,,,Ice]Uxie||SitrusBerry|Levitate|StealthRock,KnockOff,Encore,Uturn|Impish|248,,252,,8,|||||,,,,,Psychic","Darkrai||LifeOrb|BadDreams|IceBeam,SludgeBomb,WillOWisp,DarkPulse|Timid|,,,252,4,252||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,PowerWhip,Encore,Uturn|Jolly|,252,,,4,252|||||,Poison,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|Hurricane,Uturn,IcyWind,HeatWave|Timid|,,,252,36,220|||||,,,,,Flying]Garchomp||LoadedDice|RoughSkin|Substitute,SwordsDance,ScaleShot,Earthquake|Jolly|,252,,,4,252|||||,,,,,Dragon]Ditto||ChoiceScarf|Imposter|Transform|Impish|248,8,252,,,||,30,,,,|||,,,,,Normal]Tera Captain|Brambleghast|LifeOrb|WindRider|ShadowSneak,Curse,TeraBlast,PowerWhip|Hasty|,252,,4,,252|||||,,,,,Fire"],
+ ["Tera Captain|Serperior|Leftovers|Contrary|Substitute,Glare,LeafStorm,TeraBlast|Modest|92,,,252,16,148||,0,,,,|||,,,,,Fairy]Gouging Fire||Leftovers|Protosynthesis|DragonDance,DragonClaw,HeatCrash,MorningSun|Jolly|40,252,,,,216|||||,Fighting,,,,Fire]Cyclizar||ChoiceSpecs|Regenerator|ShedTail,KnockOff,Uturn,DracoMeteor|Hasty|248,,,44,,216||,,,,,0|||,,,,,Dragon]Masquerain||FocusSash|Intimidate|StickyWeb,StunSpore,IcyWind,Tailwind|Modest|,,,252,4,252||,0,,,,|||,,,,,Bug]Greninja||ChoiceSpecs|Protean|DarkPulse,IceBeam,HydroPump,Uturn|Hasty|48,,,252,,208|||||,,,,,Water]Tera Captain|ArticunoGalar|AssaultVest|Competitive|TeraBlast,Uturn,Psyshock,AirSlash|Timid|72,,,252,,184|||||,,,,,Grass","Gliscor||ToxicOrb|PoisonHeal|Earthquake,KnockOff,StealthRock,Protect|Impish|252,,252,,,|||||,,,,,Ground]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,FocusBlast,CalmMind,Encore|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Scizor||ChoiceBand|Technician|BulletPunch,Uturn,CloseCombat,KnockOff|Adamant|248,252,,,8,|||||,,,,,Bug]Tera Captain|Porygon2|Eviolite|Download|Recover,TriAttack,IceBeam,Discharge|Calm|252,,,4,252,||,0,,,,|||,,,,,Fire]Rotom-Wash||ChoiceScarf|Levitate|VoltSwitch,Thunderbolt,Trick,HydroPump|Modest|112,,,252,,144||,0,,,,|||,,,,,Electric]Kommo-o||ThroatSpray|Bulletproof|ClangorousSoul,Boomburst,ClangingScales,Flamethrower|Timid|,,,252,4,252||,0,,,,|||,,,,,Steel"],
+ ["Great Tusk||FocusSash|Protosynthesis|HeadlongRush,IceSpinner,CloseCombat,StealthRock|Jolly|,252,,,4,252|||||,,,,,Ground]Chi-Yu||ChoiceSpecs|BeadsofRuin|Overheat,DarkPulse,FireBlast,Flamethrower|Timid|40,,,252,,216||,0,,,,|||,,,,,Dark]Tera Captain|Revavroom|LumBerry|Overcoat|ShiftGear,HighHorsepower,GunkShot,TeraBlast|Adamant|64,252,,,,192|||||,,,,,Grass]Tera Captain|Eelektross|CustapBerry|Levitate|Uturn,StompingTantrum,KnockOff,Protect|Impish|252,4,252,,,|||||,,,,,Ice]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|HornLeech,Substitute,IvyCudgel,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Water]Iron Boulder||BoosterEnergy|QuarkDrive|SwordsDance,MightyCleave,CloseCombat,Earthquake|Jolly|,252,,,4,252|||||,,,,,Rock","Pincurchin||TerrainExtender|ElectricSurge|Memento,Thunderbolt,ThunderWave,Spikes|Bold|252,,252,4,,||,0,,,,|||,,,,,Electric]Sceptile||HeavyDutyBoots|Overgrow|ShedTail,LeechSeed,LeafStorm,DragonPulse|Timid|252,,,4,,252||,0,,,,|||,,,,,Grass]Tera Captain|IronMoth|PowerHerb|QuarkDrive|FieryDance,SludgeWave,EnergyBall,MeteorBeam|Timid|,,124,132,,252||,0,,,,|||,,,,,Grass]Gliscor||ToxicOrb|PoisonHeal|Earthquake,Toxic,KnockOff,Protect|Impish|252,4,252,,,|||||,,,,,Ground]Slowking-Galar||AssaultVest|Regenerator|IceBeam,Psychic,SludgeWave,Flamethrower|Calm|252,,,4,252,||,0,,,,|||,,,,,Poison]Tera Captain|RaichuAlola|SalacBerry|SurgeSurfer|ElectroBall,Psyshock,TeraBlast,NastyPlot|Timid|,,,252,4,252||,0,,,,|S||,,,,,Water"],
+ ["Tera Captain|Annihilape|ChoiceBand|Defiant|CloseCombat,Earthquake,RageFist,StoneEdge|Jolly|24,252,,,4,228|||||,,,,,Dragon]Roaring Moon||MirrorHerb|Protosynthesis|DragonDance,KnockOff,Earthquake,Tailwind|Adamant|32,252,,,4,220|||||,,,,,Steel]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|IvyCudgel,PlayRough,HornLeech,Encore|Jolly|80,252,,,,176|||||,Poison,,,,Fire]Slowking-Galar||HeavyDutyBoots|Regenerator|ToxicSpikes,ChillyReception,Flamethrower,SludgeBomb|Calm|248,,124,,136,||,0,,,,|||,,,,,Grass]Tera Captain|Dudunsparce|Leftovers|SereneGrace|DragonTail,Roost,StealthRock,BodySlam|Careful|252,4,,,252,|||||,,,,,Electric]Corviknight||RockyHelmet|Pressure|Roost,Defog,BodyPress,Uturn|Impish|248,,252,,,8|||||,,,,,Dragon","Palafin||PunchingGlove|ZerotoHero|BulkUp,DrainPunch,JetPunch,Encore|Adamant|136,104,252,,,16|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|NastyPlot,Hurricane,HeatWave,DarkPulse|Timid|184,,16,68,,240||,0,,,,|||,,,,,Flying]Tera Captain|RagingBolt|HabanBerry|Protosynthesis|Roar,DragonPulse,Thunderbolt,Taunt|Modest|176,,252,56,24,||,20,,,,|||,Fighting,,,,Fairy]Terapagos||ChopleBerry|TeraShift|CalmMind,TeraStarstorm,DazzlingGleam,Flamethrower|Modest|160,,,212,,136||,15,,,,|||,Dark,,,,Stellar]Tera Captain|Torterra|HeavyDutyBoots|ShellArmor|Synthesis,StealthRock,Earthquake,TeraBlast|Adamant|120,172,124,,,92|||||,,,,,Fire]Qwilfish-Hisui||Eviolite|Intimidate|Spikes,BarbBarrage,Crunch,Taunt|Impish|248,,124,,,136|||||,,,,,Dark"],
+ ["Palafin||ChoiceSpecs|ZerotoHero|HydroPump,FlipTurn,JetPunch,Boomburst|Mild|,120,,252,,136|||||,,,,,Water]Meowscarada||ChoiceScarf|Protean|FlowerTrick,KnockOff,Uturn,TripleAxel|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|Thunderbolt,Thunderclap,VoltSwitch,DracoMeteor|Modest|156,,,252,,100||,20,,,,|||,Fighting,,,,Flying]Scream Tail||BoosterEnergy|Protosynthesis|StealthRock,DazzlingGleam,PsychicNoise,ThunderWave|Timid|252,,,4,,252||,0,,,,|||,,,,,Fairy]Tera Captain|Revavroom|AirBalloon|Filter|ShiftGear,IronHead,HighHorsepower,MagnetRise|Adamant|,252,,,4,252|||||,,,,,Poison]Donphan||AssaultVest|Sturdy|Earthquake,IceSpinner,KnockOff,IceShard|Adamant|248,252,,,8,|||||,,,,,Ground","Tornadus-Therian||RockyHelmet|Regenerator|KnockOff,BleakwindStorm,Taunt,Uturn|Timid|188,,244,68,,8|||||,,,,,Flying]Great Tusk||AssaultVest|Protosynthesis|HeadlongRush,CloseCombat,HeavySlam,RapidSpin|Adamant|128,252,,,64,64|||||,Fighting,,,,Ground]Tera Captain|IronMoth|HeavyDutyBoots|QuarkDrive|FieryDance,SludgeWave,EnergyBall,MorningSun|Timid|180,,,152,,176||,0,,,,|||,,,,,Electric]Zarude||ChopleBerry|LeafGuard|KnockOff,PowerWhip,Uturn,Taunt|Jolly|,208,84,,,216|||||,,,,,Dark]Tinkaton||RockyHelmet|Pickpocket|StealthRock,PlayRough,GigatonHammer,Encore|Careful|252,,68,,180,8|||||,,,,,Fairy]Tera Captain|Mesprit|SitrusBerry|Levitate|ThunderWave,Psychic,DazzlingGleam,Encore|Modest|252,,80,176,,||,0,,,,|||,,,,,Fairy"],
+ ["Dewgong||HeavyDutyBoots|ThickFat|FlipTurn,AlluringVoice,IceBeam,Surf|Calm|252,,4,,252,|||||,,,,,Water]Enamorus-Therian||HeavyDutyBoots|Overcoat|IronDefense,CalmMind,DrainingKiss,EarthPower|Bold|248,,252,8,,||,0,,,,|||,,,,,Fairy]Roaring Moon||ChoiceBand|Protosynthesis|Outrage,Uturn,Earthquake,KnockOff|Jolly|72,252,,,,184|||||,,,,,Dragon]Ursaluna-Bloodmoon||Leftovers|MindsEye|BloodMoon,EarthPower,Moonlight,CalmMind|Bold|252,,252,4,,||,0,,,,|||,,,,,Ground]Tera Captain|OgerponCornerstone|CornerstoneMask|Sturdy|IvyCudgel,Uturn,KnockOff,Taunt|Jolly|,252,,,4,252|||||,,,,,Rock]Tera Captain|Armarouge|HeavyDutyBoots|WeakArmor|Endure,DestinyBond,ArmorCannon,AuraSphere|Modest|248,,,248,,12||,0,,,,|||,,,,,Fighting","Tera Captain|Latias|Leftovers|Levitate|MistBall,DrainingKiss,CalmMind,Recover|Timid|252,,,4,,252||,0,,,,|||,,,,,Fairy]Tera Captain|Toxicroak|Leftovers|PoisonTouch|SwordsDance,KnockOff,DrainPunch,GunkShot|Jolly|248,4,80,,,176|||||,,,,,Dark]Greninja-Bond||ExpertBelt|BattleBond|DarkPulse,IceBeam,Surf,WaterShuriken|Timid|24,,,252,,232|||||,Ghost,,,,Water]Snorlax||Leftovers|Immunity|Curse,Protect,BodySlam,Earthquake|Careful|88,4,164,,252,|||||,,,,,Normal]Iron Treads||BoosterEnergy|QuarkDrive|RapidSpin,StealthRock,HeavySlam,Earthquake|Adamant|248,56,96,,,108|||||,,,,,Ground]Gouging Fire||HeavyDutyBoots|Protosynthesis|DragonClaw,FlareBlitz,MorningSun,DragonDance|Careful|248,12,,,120,128|||||,Fighting,,,,Fire"],
+ ["Naclstack||Eviolite|PurifyingSalt|SaltCure,BodyPress,Recover,StealthRock|Careful|252,,4,,252,|||||,,,,,Rock]Garchomp||Leftovers|RoughSkin|Substitute,SwordsDance,ScaleShot,Earthquake|Adamant|76,252,,,,180|||||,,,,,Dragon]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,Trailblaze,HornLeech,SwordsDance|Adamant|140,252,,,,116|||||,Poison,,,,Water]Tentacruel||HeavyDutyBoots|LiquidOoze|Toxic,RapidSpin,FlipTurn,SludgeBomb|Calm|252,,,4,252,|||||,,,,,Water]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,GrassKnot,KnockOff,Uturn|Calm|252,,,,228,28|||||,,,,,Flying]Gholdengo||ChoiceSpecs|GoodasGold|MakeItRain,ShadowBall,Recover,Trick|Timid|32,,,252,,224||,0,,,,|||,,,,,Steel","Dragonite||LoadedDice|Multiscale|StoneEdge,ExtremeSpeed,ScaleShot,Earthquake|Adamant|168,252,,,,88|||||,,,,,Dragon]Ting-Lu||Leftovers|VesselofRuin|StealthRock,Earthquake,StoneEdge,Spikes|Adamant|248,,252,,8,|||||,,,,,Dark]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,HeatWave,NastyPlot,IcyWind|Modest|252,,56,172,,28||,0,,,,|||,,,,,Flying]Tera Captain|GreninjaBond|SpellTag|BattleBond|TeraBlast,IcePunch,SwordsDance,Liquidation|Adamant|160,252,,,4,92|||||,Ghost,,,,Ghost]Tera Captain|Bellibolt|LightClay|Static|Reflect,LightScreen,Toxic,VoltSwitch|Calm|248,,84,,176,||,0,,,,|||,,,,,Flying]Misdreavus||Eviolite|Levitate|TrickRoom,WillOWisp,ShadowBall,Rest|Bold|248,,252,,8,||,0,,,,|||,,,,,Ghost"],
+ ["Iron Valiant||LifeOrb|QuarkDrive|Moonblast,CloseCombat,ZenHeadbutt,Encore|Naive|,168,,132,,208|||||,,,,,Fairy]Garchomp||EjectPack|RoughSkin|Earthquake,DracoMeteor,DragonTail,Spikes|Adamant|8,16,252,,,232|||||,,,,,Dragon]Empoleon||ChopleBerry|Torrent|IceBeam,FlipTurn,StealthRock,Yawn|Sassy|248,,212,,48,|||||,,,,,Water]Tera Captain|Ceruledge|FocusSash|WeakArmor|Poltergeist,TeraBlast,ShadowSneak,DestinyBond|Jolly|,252,4,,,252|||||,,,,,Ghost]Tera Captain|Tyranitar|SitrusBerry|SandStream|StoneEdge,KnockOff,Earthquake,DragonDance|Jolly|32,252,,,4,220|||||,,,,,Dragon]Tsareena||EjectButton|QueenlyMajesty|PowerWhip,LowKick,ZenHeadbutt,RapidSpin|Adamant|248,16,244,,,|||||,,,,,Grass","Fezandipiti||ShucaBerry|ToxicChain|Uturn,Roost,HeatWave,Moonblast|Bold|248,,144,,112,|||||,,,,,Poison]Tera Captain|Toedscruel|HeavyDutyBoots|MyceliumMight|RapidSpin,EarthPower,TeraBlast,GigaDrain|Modest|180,,20,28,132,148|||||,,,,,Fire]Archaludon||AssaultVest|Stamina|DracoMeteor,BodyPress,Thunderbolt,FlashCannon|Modest|200,,,104,204,||,0,,,,|||,,,,,Steel]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,KnockOff,Synthesis,Uturn|Jolly|120,128,4,,4,252|||||,Poison,,,,Water]Iron Hands||AssaultVest|QuarkDrive|DrainPunch,IcePunch,SupercellSlam,Earthquake|Adamant|,140,116,,252,|||||,,,,,Fighting]Kleavor||ChoiceScarf|Sharpness|CloseCombat,StoneEdge,XScissor,Uturn|Jolly|72,252,4,,8,172|||||,,,,,Bug"],
+ ["Ninetales||HeatRock|Drought|PainSplit,WillOWisp,Encore,HealingWish|Timid|248,,44,,,216||,0,,,,|||,,,,,Fire]Tera Captain|Rhyperior|ChoiceBand|SolidRock|Earthquake,StoneEdge,RockBlast,StealthRock|Adamant|248,252,,,,8|||||,,,,,Dragon]Great Tusk||LifeOrb|Protosynthesis|HeadlongRush,CloseCombat,IceSpinner,RapidSpin|Jolly|56,252,,,,200|||||,Fighting,,,,Ground]Gouging Fire||HeavyDutyBoots|Protosynthesis|HeatCrash,ScaleShot,IronHead,Earthquake|Adamant|,252,4,,,252|||||,Fighting,,,,Fire]Tera Captain|RagingBolt|EjectPack|Protosynthesis|Thunderbolt,DracoMeteor,TeraBlast,VoltSwitch|Modest|248,,8,252,,||,20,,,,|||,Fighting,,,,Poison]Walking Wake||AssaultVest|Protosynthesis|HydroSteam,DracoMeteor,KnockOff,FlipTurn|Timid|248,,,,232,28|||||,,,,,Water","Tera Captain|Gliscor|ChoiceScarf|HyperCutter|Earthquake,Uturn,GunkShot,DualWingbeat|Jolly|32,252,,,,224|||||,,,,,Ground]Dachsbun||Leftovers|WellBakedBody|PlayRough,Roar,Wish,Protect|Impish|248,,224,,36,|||||,,,,,Fairy]Weavile||ChoiceBand|Pickpocket|KnockOff,BeatUp,IceShard,TripleAxel|Adamant|,252,4,,,252|||||,,,,,Dark]Tera Captain|Heatran|AssaultVest|FlashFire|TeraBlast,FlashCannon,EarthPower,Flamethrower|Modest|248,,76,176,,8||,0,,,,|||,,,,,Fairy]Ogerpon-Wellspring||WellspringMask|WaterAbsorb|PowerWhip,IvyCudgel,PlayRough,Synthesis|Jolly|8,252,,,,248|||||,Poison,,,,Water]Slowking-Galar||ShucaBerry|Regenerator|ChillyReception,ToxicSpikes,SlackOff,Psychic|Calm|248,,156,,104,||,0,,,,26|||,,,,,Poison"],
+ ["Tera Captain|Mew|Leftovers|Synchronize|DrainingKiss,BodyPress,IronDefense,CalmMind|Bold|252,,208,,44,4||,0,,,,|||,,,,,Fairy]Tera Captain|MoltresGalar|YacheBerry|Berserk|FieryWrath,AirSlash,NastyPlot,Agility|Modest|120,,4,252,,132||,0,,,,|||,,,,,Water]Feraligatr||RockyHelmet|Torrent|FlipTurn,LowKick,AquaJet,Roar|Impish|252,4,252,,,|||||,,,,,Normal]Iron Treads||BoosterEnergy|QuarkDrive|Earthquake,IceSpinner,RapidSpin,StealthRock|Jolly|40,252,,,,216|||||,,,,,Normal]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,AuraSphere,EnergyBall,VacuumWave|Timid|16,,,252,,240||,0,,,,|||,,,,,Normal]Amoonguss||RedCard|Regenerator|SludgeBomb,GigaDrain,Spore,StunSpore|Bold|248,,216,,40,4||,0,,,,|||,,,,,Normal","Palafin||SitrusBerry|ZerotoHero|BulkUp,Substitute,Acrobatics,JetPunch|Adamant|252,,4,,252,|||||,,,,,Water]Gouging Fire||BoosterEnergy|Protosynthesis|DragonDance,FlareBlitz,Substitute,DragonClaw|Jolly|,164,,,96,248|||||,Fighting,,,,Fire]Terapagos||HeavyDutyBoots|TeraShift|EarthPower,Toxic,RapidSpin,Roar|Bold|252,,244,,12,|||||,Dark,,,,Stellar]Tera Captain|ThundurusTherian|AssaultVest|VoltAbsorb|Thunderbolt,Psychic,TeraBlast,Uturn|Modest|120,,,,144,244|||||,,,,,Water]Weavile||ChoiceBand|Pressure|KnockOff,IceSpinner,IceShard,LowKick|Jolly|72,252,,,,184|||||,,,,,Dark]Copperajah||CustapBerry|HeavyMetal|StealthRock,HeavySlam,Earthquake,Endure|Impish|152,,252,,104,|||||,,,,,Steel"],
+ ["Baxcalibur||ChoiceBand|ThermalExchange|GlaiveRush,IcicleCrash,Earthquake,IceShard|Adamant|44,252,,,,212|||||,,,,,Dragon]Slowking-Galar||HeavyDutyBoots|Regenerator|SludgeBomb,GrassKnot,Toxic,ChillyReception|Calm|252,,4,,252,||,0,,,,|||,,,,,Poison]Tera Captain|Ogerpon|UtilityUmbrella|Defiant|HornLeech,KnockOff,Encore,Synthesis|Impish|248,,232,,,28|||||,,,,,Grass]Slither Wing||CovertCloak|Protosynthesis|CloseCombat,FirstImpression,MorningSun,BulkUp|Adamant|232,252,,,,24|||||,,,,,Bug]Hydreigon||ChopleBerry|Levitate|DracoMeteor,DarkPulse,StealthRock,Uturn|Modest|132,,,252,,124|||||,,,,,Dark]Tera Captain|Jolteon|HeavyDutyBoots|VoltAbsorb|Thunderbolt,TeraBlast,VoltSwitch,CalmMind|Modest|124,,,252,,132||,0,,,,|||,,,,,Grass","Tera Captain|Skarmory|RockyHelmet|Sturdy|BodyPress,Spikes,IronDefense,Roost|Impish|252,,232,,,24||,0,,,,|||,,,,,Dragon]Ting-Lu||RedCard|VesselofRuin|Earthquake,Whirlwind,BodyPress,StealthRock|Careful|248,,76,,184,|||||,,,,,Dark]Clefable||Leftovers|MagicGuard|Moonblast,CalmMind,Wish,Protect|Bold|252,,232,,24,||,0,,,,|||,,,,,Fairy]Politoed||DampRock|Drizzle|Encore,Haze,Rest,Surf|Calm|248,,,8,252,||,0,,,,|||,,,,,Water]Ludicolo||LifeOrb|SwiftSwim|WeatherBall,GigaDrain,IceBeam,KnockOff|Modest|,,,252,4,252|||||,,,,,Water]Sinistcha||HeavyDutyBoots|Heatproof|MatchaGotcha,CalmMind,ShadowBall,StrengthSap|Bold|252,,160,,,96||,0,,,,|||,,,,,Grass"],
+ ["Gholdengo||AbilityShield|GoodasGold|NastyPlot,MakeItRain,ShadowBall,DazzlingGleam|Modest|4,,224,72,,208||,0,,,,|||,,,,,Steel]Tera Captain|KeldeoResolute|AssaultVest|Justified|Surf,SecretSword,TeraBlast,VacuumWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Ghost]Meowscarada||ChopleBerry|Protean|FlowerTrick,KnockOff,Spikes,TripleAxel|Jolly|,216,,,144,148|||||,,,,,Grass]Enamorus-Therian||BabiriBerry|Overcoat|Agility,Moonblast,MysticalFire,Psychic|Modest|76,,,176,4,252||,0,,,,|||,,,,,Fairy]Smeargle||FocusSash|OwnTempo|BurningBulwark,StickyWeb,CeaselessEdge,Encore|Impish|252,,252,,4,|||||,,,,,Normal]Tera Captain|Entei|HeavyDutyBoots|InnerFocus|SacredFire,TeraBlast,Agility,SunnyDay|Adamant|128,252,,,,128|||||,,,,,Fairy","Tera Captain|Keldeo|LumBerry|Justified|VacuumWave,CalmMind,Surf,TeraBlast|Timid|,,4,252,,252||,0,,,,|||,,,,,Poison]Garchomp||CovertCloak|RoughSkin|Earthquake,PoisonJab,DragonTail,StealthRock|Jolly|248,,140,,,120|||||,,,,,Dragon]Weavile||HeavyDutyBoots|Pressure|SwordsDance,TripleAxel,KnockOff,IceShard|Jolly|104,252,4,,,148|||||,,,,,Dark]Weezing-Galar||EjectPack|Levitate|StrangeSteam,Overheat,PainSplit,Defog|Bold|248,,192,60,,8||,0,,,,|||,,,,,Poison]Rotom-Mow||SitrusBerry|Levitate|NastyPlot,LeafStorm,VoltSwitch,PainSplit|Bold|248,,92,116,52,||,0,,,,|||,,,,,Electric]Tera Captain|Mesprit|ColburBerry|Levitate|CalmMind,Uturn,PsychicNoise,ShadowBall|Calm|248,,,8,252,|||||,,,,,Water"],
+ ["Great Tusk||ChoiceScarf|Protosynthesis|CloseCombat,HeadlongRush,HeavySlam,Facade|Jolly|16,248,,,8,236|||||,Fighting,,,,Ground]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,HornLeech,Trailblaze,Encore|Jolly|,252,4,,,252|||||,Poison,,,,Water]Alomomola||AssaultVest|Regenerator|FlipTurn,ChillingWater,PlayRough,MirrorCoat|Relaxed|248,4,8,,248,||,,,,,0|||,,,,,Water]Iron Crown||AssaultVest|QuarkDrive|PsychicNoise,TachyonCutter,FutureSight,VoltSwitch|Modest|192,,4,252,24,36||,20,,,,|||,Fighting,,,,Steel]Tera Captain|Diancie|Leftovers|ClearBody|DiamondStorm,BodyPress,StealthRock,Protect|Relaxed|252,4,252,,,|||||,,,,,Dragon]Sneasel-Hisui||FlameOrb|Pickpocket|PoisonJab,Fling,Thief,ToxicSpikes|Jolly|252,4,,,36,216|||||,,,,,Fighting","Palafin||PunchingGlove|ZerotoHero|JetPunch,DrainPunch,BulkUp,Substitute|Adamant|248,252,8,,,|||||,,,,,Water]Tera Captain|Gholdengo|Leftovers|GoodasGold|ShadowBall,Recover,ThunderWave,TeraBlast|Bold|248,,200,,,60||,0,,,,|||,,,,,Grass]Tera Captain|Jolteon|AssaultVest|VoltAbsorb|AlluringVoice,Thunderbolt,ShadowBall,VoltSwitch|Timid|40,,,252,,216||,0,,,,|||,,,,,Fairy]Hydreigon||ChopleBerry|Levitate|DracoMeteor,DarkPulse,Surf,Uturn|Timid|80,,,176,,252|||||,,,,,Dark]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|PowerWhip,IvyCudgel,RockTomb,Uturn|Jolly|,252,,,4,252|||||,Poison,,,,Fire]Weezing-Galar||RockyHelmet|Levitate|StrangeSteam,Toxic,PainSplit,Defog|Bold|248,,208,,,52||,0,,,,|||,,,,,Poison"],
+ ["Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|Spikes,RockTomb,KnockOff,WoodHammer|Jolly|252,28,,,,228|||||,Poison,,,,Fire]Tera Captain|Latias|ExpertBelt|Levitate|TeraBlast,IceBeam,Thunderbolt,Agility|Modest|136,,,252,,120||,0,,,,|||,,,,,Ground]Tera Captain|Kilowattrel|HeavyDutyBoots|VoltAbsorb|Uturn,TeraBlast,Thunderbolt,AirSlash|Timid|16,,,252,,240|||||,,,,,Ground]Scrafty||AssaultVest|ShedSkin|KnockOff,DrainPunch,RockSlide,DragonTail|Adamant|252,252,,,4,|||||,,,,,Dark]Iron Treads||WeaknessPolicy|QuarkDrive|RapidSpin,Earthquake,SupercellSlam,IronHead|Adamant|,252,,,4,252|||||,,,,,Ground]Smeargle||FocusSash|OwnTempo|BurningBulwark,Endeavor,ExtremeSpeed,StealthRock|Hasty|,252,,4,,252||0,,0,,0,|||,,,,,Normal","Iron Treads||BoosterEnergy|QuarkDrive|Earthquake,RapidSpin,StealthRock,StoneEdge|Jolly|4,252,,,,252|||||,,,,,Ground]Tera Captain|RagingBolt|ChoiceSpecs|Protosynthesis|TeraBlast,DracoMeteor,VoltSwitch,Thunderclap|Modest|248,,,252,,8||,20,,,,|||,Fighting,,,,Ghost]Meowscarada||ChoiceSpecs|Protean|LeafStorm,Trick,ShadowBall,PowerGem|Timid|104,,,252,,152||,0,,,,|S||,,,,,Grass]Slowking-Galar||ClearAmulet|Regenerator|Imprison,StoredPower,CalmMind,ChillyReception|Calm|252,,4,,252,||,0,,,,|S||,,,,,Poison]Dudunsparce-Three-Segment||Leftovers|SereneGrace|BodySlam,Roost,EarthPower,BatonPass|Relaxed|252,4,252,,,|||S||,,,,,Normal]Haunter||ChoiceScarf|Levitate|Trick,ShadowBall,SludgeWave,FocusBlast|Modest|56,,,252,,200||,0,,,,|S||,,,,,Ghost"],
+ ["Tera Captain|Fezandipiti|SilkScarf|Technician|SwordsDance,QuickAttack,DualWingbeat,LashOut|Adamant|48,252,,,4,204|||||,,,,,Normal]Illumise||HeavyDutyBoots|Prankster|Roost,RainDance,Uturn,Encore|Impish|248,,252,,8,|||||,,,,,Bug]Meowscarada||ChoiceScarf|Protean|PlayRough,Spikes,KnockOff,TripleAxel|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Gholdengo|Leftovers|GoodasGold|ThunderWave,Recover,Hex,LightScreen|Calm|252,,4,,252,||,0,,,,|||,,,,,Dragon]Great Tusk||Leftovers|Protosynthesis|RapidSpin,StealthRock,TemperFlare,HeadlongRush|Jolly|252,4,,,,252|||||,Fighting,,,,Ground]Alomomola||AssaultVest|Regenerator|FlipTurn,AquaJet,IcyWind,PlayRough|Careful|252,,4,,252,|||||,,,,,Water","Torkoal||HeatRock|Drought|Yawn,StealthRock,RapidSpin,LavaPlume|Bold|248,,252,8,,|||||,,,,,Fire]Tera Captain|Venusaur|LifeOrb|Chlorophyll|EarthPower,Growth,WeatherBall,GigaDrain|Modest|,,,252,4,252||,0,,,,|||,,,,,Fire]Bronzong||ColburBerry|Levitate|BodyPress,IronDefense,Psychic,LightScreen|Sassy|252,4,,,252,||,0,,,,|||,,,,,Steel]Chi-Yu||AssaultVest|BeadsofRuin|Overheat,Flamethrower,DarkPulse,Psychic|Hasty|,4,,252,,252||,0,,,,|||,,,,,Dark]Tera Captain|WalkingWake|LifeOrb|Protosynthesis|HydroSteam,Flamethrower,DracoMeteor,DragonPulse|Timid|12,,,244,,252||,0,,,,|||,,,,,Steel]Clefable||Leftovers|MagicGuard|ThunderWave,KnockOff,Moonlight,Moonblast|Relaxed|252,,252,,4,|||||,,,,,Fairy"],
+ ["Iron Valiant||HeavyDutyBoots|QuarkDrive|Moonblast,VacuumWave,Hex,Hypnosis|Modest|124,,,252,,132||,0,,,,|||,,,,,Fairy]Tera Captain|Scizor|MentalHerb|Technician|SwordsDance,BulletPunch,TeraBlast,KnockOff|Adamant|180,252,,,,76|||||,,,,,Fire]Rotom-Wash||YacheBerry|Levitate|HydroPump,VoltSwitch,WillOWisp,PainSplit|Bold|248,,92,,168,||,0,,,,|||,,,,,Electric]Garchomp||RockyHelmet|RoughSkin|Spikes,FireBlast,Earthquake,DragonTail|Impish|248,32,228,,,|||||,,,,,Dragon]Uxie||SitrusBerry|Levitate|StealthRock,Encore,Uturn,PainSplit|Careful|248,,,,140,120|||||,,,,,Psychic]Sableye||AirBalloon|Prankster|WillOWisp,Recover,KnockOff,Encore|Impish|252,,104,,152,|||||,,,,,Dark","Slowking-Galar||ColburBerry|Regenerator|IceBeam,ChillyReception,SludgeBomb,Flamethrower|Sassy|252,,16,,240,||,0,,,,0|||,,,,,Water]Tera Captain|Scizor|HeavyDutyBoots|Technician|SwordsDance,KnockOff,Uturn,BulletPunch|Adamant|248,252,,,8,|||||,,,,,Fire]Great Tusk||Leftovers|Protosynthesis|Earthquake,StealthRock,KnockOff,RapidSpin|Impish|252,,220,,,36|||||,Fighting,,,,Water]Tera Captain|Sylveon|Leftovers|Pixilate|CalmMind,HyperVoice,Wish,Protect|Bold|252,,252,,4,||,0,,,,|||,,,,,Water]Iron Bundle||HeavyDutyBoots|QuarkDrive|HydroPump,FreezeDry,FlipTurn,Encore|Timid|,,,252,4,252|||||,,,,,Ice]Rotom-Mow||ChoiceScarf|Levitate|WillOWisp,VoltSwitch,LeafStorm,Trick|Timid|,,,252,4,252||,0,,,,|||,,,,,Electric"],
+ ["Tera Captain|Annihilape|ChoiceScarf|Defiant|TeraBlast,RageFist,Uturn,CloseCombat|Adamant|144,252,,,,112|||||,,,,,Ghost]Greninja-Bond||LifeOrb|BattleBond|WaterShuriken,IceBeam,Protect,DarkPulse|Timid|48,,,252,,208|||||,,,,,Water]Tornadus-Therian||HeavyDutyBoots|Regenerator|BleakwindStorm,KnockOff,HeatWave,IcyWind|Timid|200,,,68,24,216|||||,,,,,Flying]Ting-Lu||HeavyDutyBoots|VesselofRuin|StealthRock,Spikes,Ruination,Whirlwind|Bold|252,,252,,4,||,0,,,,|||,,,,,Dark]Scizor||ProtectivePads|Technician|BulletPunch,SwordsDance,QuickAttack,CloseCombat|Adamant|248,252,,,8,|||||,,,,,Bug]Arbok||HeavyDutyBoots|Intimidate|Glare,Toxic,GunkShot,KnockOff|Impish|252,,252,,4,|||||,,,,,Poison","Tentacruel||BlackSludge|LiquidOoze|Haze,RapidSpin,FlipTurn,Toxic|Careful|248,,8,,252,|||||,,,,,Water]Tera Captain|Lokix|ChoiceScarf|TintedLens|KnockOff,Uturn,FirstImpression,LeechLife|Jolly|16,252,,,,240|||||,,,,,Bug]Iron Valiant||HeavyDutyBoots|QuarkDrive|Moonblast,VacuumWave,ShadowBall,Thunderbolt|Modest|96,,,252,4,156||,0,,,,|||,,,,,Fairy]Tera Captain|Ogerpon|HeavyDutyBoots|Defiant|LeechSeed,KnockOff,Taunt,SpikyShield|Impish|248,,252,,8,|||||,Poison,,,,Grass]Rotom-Heat||ChoiceSpecs|Levitate|WillOWisp,VoltSwitch,PainSplit,Trick|Bold|248,,252,,8,||,0,,,,|||,,,,,Electric]Garchomp||Leftovers|RoughSkin|StealthRock,Spikes,DragonTail,Earthquake|Careful|248,,8,,252,|||||,,,,,Dragon"],
+ ["Latios||ColburBerry|Levitate|DracoMeteor,LusterPurge,AuraSphere,CalmMind|Timid|,,80,252,,176||,0,,,,|||,,,,,Dragon]Tera Captain|UrshifuRapidStrike|PunchingGlove|UnseenFist|SurgingStrikes,CloseCombat,IcePunch,SwordsDance|Adamant|,252,,,80,176|||||,,,,,Fighting]Sandy Shocks||HeavyDutyBoots|Protosynthesis|EarthPower,ThunderWave,Spikes,VoltSwitch|Modest|252,,80,32,,144||,0,,,,|||,,,,,Electric]Tornadus-Therian||SafetyGoggles|Regenerator|BleakwindStorm,FocusBlast,Uturn,Taunt|Timid|252,,,84,84,88|||||,,,,,Flying]Brambleghast||HeavyDutyBoots|Infiltrator|Poltergeist,ShadowSneak,SeedBomb,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Grass]Tera Captain|Moltres|HeavyDutyBoots|Pressure|Flamethrower,ScorchingSands,Hurricane,Roost|Timid|252,,20,100,,136||,0,,,,|||,,,,,Grass","Tera Captain|RagingBolt|ChoiceScarf|Protosynthesis|DracoMeteor,Thunderbolt,VoltSwitch,DragonPulse|Modest|64,,,252,,192||,20,,,,|||,,,,,Dragon]Tera Captain|PorygonZ|ExpertBelt|Download|Thunderbolt,IceBeam,NastyPlot,Agility|Modest|160,,,252,,96||,0,,,,|||,,,,,Water]Cinderace||HeavyDutyBoots|Libero|WillOWisp,Uturn,PyroBall,Facade|Jolly|,252,72,,,184|||||,,,,,Fire]Palafin||Leftovers|ZerotoHero|Substitute,BulkUp,JetPunch,IcePunch|Adamant|48,252,32,,,176|||||,,,,,Water]Kingambit||LumBerry|SupremeOverlord|SuckerPunch,KowtowCleave,LowKick,SwordsDance|Jolly|252,72,,,,184|||||,,,,,Dark]Donphan||Leftovers|Sturdy|RapidSpin,StealthRock,Encore,KnockOff|Careful|252,,,,252,4|||||,,,,,Ground"],
+ ["Gliscor||ToxicOrb|PoisonHeal|Protect,Earthquake,Uturn,StealthRock|Careful|244,,12,,252,|||||,,,,,Ground]Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Substitute,Glare|Timid|120,,,236,,152||,0,,,,|||,,,,,Stellar]Tera Captain|Galvantula|ChoiceSpecs|CompoundEyes|VoltSwitch,Thunder,TeraBlast,StickyWeb|Timid|64,,,252,,192||,0,,,,|||,,,,,Ground]Ninetales-Alola||LightClay|SnowWarning|FreezeDry,Disable,AuroraVeil,Encore|Modest|252,,4,252,,||,0,,,,|||,,,,,Ice]Samurott-Hisui||ChoiceScarf|Sharpness|CeaselessEdge,RazorShell,FlipTurn,SacredSword|Adamant|200,252,,,,56|||||,,,,,Water]Metagross||ExpertBelt|ClearBody|Trailblaze,PsychicFangs,Earthquake,StoneEdge|Adamant|252,252,4,,,|||||,,,,,Steel","Zapdos||ChoiceScarf|Static|VoltSwitch,Hurricane,Thunder,WeatherBall|Modest|12,,,252,108,136||,0,,,,|S||,,,,,Electric]Archaludon||AssaultVest|Stamina|DarkPulse,DragonPulse,FlashCannon,ElectroShot|Modest|28,,,252,144,84||,0,,,,|S||,,,,,Steel]Politoed||HeavyDutyBoots|Drizzle|HydroPump,Encore,FocusBlast,Rest|Bold|252,,100,,156,||,0,,,,|S||,,,,,Water]Tera Captain|Annihilape|LumBerry|Defiant|Rest,BulkUp,DrainPunch,RageFist|Careful|,100,60,,252,96|||S||,,,,,Poison]Palafin||HeavyDutyBoots|ZerotoHero|BulkUp,JetPunch,FlipTurn,DrainPunch|Adamant|240,252,,,,16|||S||,,,,,Water]Electrode-Hisui||MirrorHerb|Static|GigaDrain,WorrySeed,Thunder,Charge|Timid|,,,252,128,128||,0,,,,|||,,,,,Electric"],
+ ["Tera Captain|Gliscor|ToxicOrb|PoisonHeal|Facade,Earthquake,SwordsDance,Agility|Adamant|176,136,,,,196|||||,,,,,Normal]Slowking||HeavyDutyBoots|Regenerator|FutureSight,FireBlast,SlackOff,ChillyReception|Sassy|252,,72,36,148,||,0,,,,0|||,,,,,Normal]Iron Treads||HeavyDutyBoots|QuarkDrive|Earthquake,VoltSwitch,RapidSpin,StealthRock|Adamant|,88,,,184,236|||||,,,,,Normal]Ditto||ChoiceScarf|Imposter|Transform|Calm|252,,,,252,4||,30,,,,|S||,,,,,Normal]Goodra-Hisui||AssaultVest|Gooey|DragonPulse,FlashCannon,FireBlast,DragonTail|Sassy|248,,104,,156,|||||,,,,,Normal]Iron Valiant||LightClay|QuarkDrive|KnockOff,LightScreen,Reflect,DestinyBond|Jolly|248,40,,,12,208|||||,,,,,Normal","Ting-Lu||AssaultVest|VesselofRuin|Earthquake,BodyPress,StoneEdge,HeavySlam|Adamant|,252,252,,4,|||||,,,,,Dark]Torkoal||AirBalloon|Drought|ShellSmash,Earthquake,FlareBlitz,StoneEdge|Adamant|252,252,,,4,|||||,,,,,Fire]Tera Captain|Venusaur|Leftovers|Chlorophyll|EnergyBall,KnockOff,TeraBlast,SludgeBomb|Modest|248,,,252,,8|||||,,,,,Ground]Flamigo||ChoiceBand|Scrappy|CloseCombat,Uturn,BraveBird,Liquidation|Jolly|32,252,,,,224|||||,,,,,Flying]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|FieryDance,EnergyBall,Psychic,SludgeWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Psychic]Gholdengo||ChoiceScarf|GoodasGold|Trick,Psyshock,ShadowBall,FocusBlast|Modest|252,,,252,4,||,0,,,,|||,,,,,Steel"],
+ ["Tera Captain|Jirachi|SitrusBerry|SereneGrace|Encore,Wish,Protect,Uturn|Careful|248,,,,248,12|||||,,,,,Fairy]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,AuraSphere,Hypnosis,DestinyBond|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,HeatWave,Uturn,BrickBreak|Timid|,,,108,184,216|||||,,,,,Flying]Tera Captain|SandyShocks|BoosterEnergy|Protosynthesis|Thunderbolt,EarthPower,TeraBlast,StealthRock|Timid|,,,208,48,252||,0,,,,|||,,,,,Grass]Samurott-Hisui||ChoiceScarf|Sharpness|FlipTurn,CeaselessEdge,SacredSword,AquaCutter|Adamant|72,252,,,,184|||||,,,,,Water]Brambleghast||ColburBerry|Infiltrator|Poltergeist,RapidSpin,Disable,StrengthSap|Jolly|248,,204,,,56|||||,,,,,Grass","Tera Captain|Talonflame|HeavyDutyBoots|GaleWings|FlareBlitz,BraveBird,Defog,Roost|Jolly|40,252,,,,216|||||,,,,,Fire]Tera Captain|Zarude|HeavyDutyBoots|LeafGuard|TeraBlast,Crunch,BulkUp,Synthesis|Jolly|248,,,,36,224|||||,,,,,Electric]Rotom-Wash||ChoiceScarf|Levitate|HydroPump,ShadowBall,VoltSwitch,Trick|Timid|8,,,252,,248||,0,,,,|||,,,,,Electric]Jirachi||Leftovers|SereneGrace|BodySlam,DoomDesire,Uturn,StealthRock|Relaxed|248,,252,,8,|||||,,,,,Steel]Ursaluna||SoftSand|Guts|HeadlongRush,BodySlam,CloseCombat,Crunch|Adamant|,252,76,,180,|||||,,,,,Ground]Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,ShadowBall,Psyshock,DestinyBond|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy"],
+ ["Great Tusk||BoosterEnergy|Protosynthesis|HeadlongRush,IceSpinner,Megahorn,RapidSpin|Adamant|80,252,4,,,172|||||,Fighting,,,,Ground]Tera Captain|Latias|Leftovers|Levitate|Thunderbolt,IceBeam,CalmMind,Recover|Timid|248,,,8,,252||,0,,,,|||,,,,,Electric]Greninja-Bond||ExpertBelt|BattleBond|Surf,DarkPulse,SludgeWave,IceBeam|Timid|,,,252,72,184|||||,Ghost,,,,Water]Tinkaton||LightClay|MoldBreaker|GigatonHammer,Endeavor,LightScreen,Reflect|Careful|232,,,,252,24|||||,,,,,Fairy]Muk||BlackSludge|PoisonTouch|PoisonJab,KnockOff,FireBlast,ToxicSpikes|Careful|232,,,,252,24|||||,,,,,Poison]Rillaboom||Leftovers|GrassySurge|GrassyGlide,KnockOff,Uturn,LeechSeed|Adamant|160,252,,,,96|||||,,,,,Grass","Tera Captain|Serperior|Leftovers|Contrary|LeafStorm,TeraBlast,Substitute,Glare|Timid|248,,,8,,252||,0,,,,|||,,,,,Fire]Azumarill||AssaultVest|HugePower|PlayRough,AquaJet,Liquidation,KnockOff|Adamant|248,252,,,8,|||||,,,,,Water]Uxie||ColburBerry|Levitate|Psychic,Encore,KnockOff,ThunderWave|Gentle|248,,,,252,8|||||,,,,,Psychic]Tera Captain|Rhyperior|LumBerry|LightningRod|StoneEdge,Earthquake,Avalanche,StealthRock|Adamant|248,252,,,8,|||||,,,,,Water]Noivern||HeavyDutyBoots|Infiltrator|DracoMeteor,AirSlash,SuperFang,Uturn|Timid|,,,252,4,252|||||,,,,,Flying]Forretress||RockyHelmet|Sturdy|ThunderWave,BodyPress,IronDefense,RapidSpin|Impish|248,,252,,8,|||||,,,,,Bug"],
+ ["Palafin||ChoiceBand|ZerotoHero|JetPunch,FlipTurn,CloseCombat,IcePunch|Jolly|72,252,,,,184|||||,,,,,Water]Zapdos||HeavyDutyBoots|Static|VoltSwitch,Roost,HeatWave,ThunderWave|Calm|248,,8,,252,||,0,,,,|||,,,,,Electric]Ting-Lu||Leftovers|VesselofRuin|Spikes,Ruination,HeavySlam,Earthquake|Careful|248,160,,,100,|||||,,,,,Dark]Kyurem||HeavyDutyBoots|Pressure|FreezeDry,FlashCannon,IceBeam,EarthPower|Timid|28,,,252,4,224||,0,,,,|||,,,,,Dragon]Tera Captain|Suicune|Leftovers|Pressure|Snarl,TeraBlast,Protect,Scald|Calm|248,,8,,252,||,0,,,,|||,,,,,Fire]Tera Captain|Heatran|Leftovers|FlashFire|StealthRock,MagmaStorm,EarthPower,Protect|Calm|248,,,,208,52||,0,,,,|||,,,,,Grass","Tera Captain|WalkingWake|ChoiceSpecs|Protosynthesis|HydroSteam,DragonPulse,DracoMeteor,FlipTurn|Timid|64,,8,252,,184|||||,,,,,Dragon]Torkoal||HeatRock|Drought|BodyPress,WillOWisp,StealthRock,Yawn|Bold|248,,180,,80,||,0,,,,|||,,,,,Fire]Gouging Fire||LumBerry|Protosynthesis|Outrage,DragonDance,Earthquake,MorningSun|Adamant|128,248,,,52,80|||||,,,,,Fire]Tera Captain|Venusaur|EjectPack|Chlorophyll|EarthPower,SludgeBomb,SleepPowder,LeafStorm|Modest|88,,,252,,168||,0,,,,|||,,,,,Water]Iron Treads||AssaultVest|QuarkDrive|VoltSwitch,Earthquake,IronHead,KnockOff|Jolly|248,24,,,68,168|||||,,,,,Ground]Hatterene||EjectButton|MagicBounce|DazzlingGleam,Psyshock,Nuzzle,HealingWish|Bold|252,,244,,12,|||||,,,,,Psychic"],
+ ["Tera Captain|UrshifuRapidStrike|ProtectivePads|UnseenFist|SurgingStrikes,SwordsDance,Trailblaze,CloseCombat|Jolly|48,252,,,,208|||||,,,,,Grass]Tera Captain|Armarouge|ChoiceSpecs|FlashFire|DragonPulse,ArmorCannon,EnergyBall,Trick|Modest|244,,4,252,,8||,0,,,,|||,,,,,Fairy]Weavile||ChoiceScarf|Pickpocket|IcicleCrash,KnockOff,TripleAxel,LowKick|Jolly|16,252,,,,240|||||,,,,,Dark]Donphan||CustapBerry|Sturdy|Roar,HighHorsepower,IceShard,HeavySlam|Adamant|252,120,52,,,84|||||,,,,,Ground]Slowking-Galar||ColburBerry|Regenerator|ThunderWave,ChillyReception,FutureSight,SludgeBomb|Sassy|252,,124,,132,||,0,,,,0|||,,,,,Poison]Forretress||RockyHelmet|Sturdy|StealthRock,VoltSwitch,Explosion,RapidSpin|Sassy|252,,,,252,|||||,,,,,Bug","Tera Captain|LandorusTherian|RockyHelmet|Intimidate|SludgeBomb,EarthPower,StealthRock,Uturn|Timid|248,,132,,,128|||||,,,,,Water]Weezing-Galar||RockyHelmet|Levitate|Defog,StrangeSteam,ShadowBall,PainSplit|Bold|252,,252,,,4||,0,,,,|||,,,,,Poison]Slowking||HeavyDutyBoots|Regenerator|Scald,Psychic,SlackOff,ChillyReception|Sassy|252,,4,,252,||,0,,,,0|||,,,,,Water]Meowscarada||HeavyDutyBoots|Protean|Uturn,FlowerTrick,KnockOff,Spikes|Jolly|104,252,,,,152|||||,,,,,Grass]Gouging Fire||BoosterEnergy|Protosynthesis|DragonClaw,FlareBlitz,DragonDance,Substitute|Adamant|32,252,,,,224|||||,,,,,Fire]Tera Captain|SneaselHisui|Eviolite|Pickpocket|NightSlash,CloseCombat,PoisonJab,SwordsDance|Jolly|40,252,,,,216|||||,,,,,Fighting"],
+ ["Palafin||AssaultVest|ZerotoHero|FlipTurn,JetPunch,IcePunch,DrainPunch|Careful|252,4,,,252,|||||,,,,,Water]Iron Treads||BoosterEnergy|QuarkDrive|StealthRock,RapidSpin,IceSpinner,HighHorsepower|Jolly|48,252,,,,208|||||,,,,,Ground]Tera Captain|Rillaboom|ChoiceBand|GrassySurge|GrassyGlide,Uturn,KnockOff,DrainPunch|Adamant|40,252,,,,216|||||,,,,,Fairy]Tera Captain|Armarouge|HeavyDutyBoots|WeakArmor|CalmMind,Psychic,ShadowBall,ArmorCannon|Modest|220,,,252,,36||,0,,,,|||,,,,,Ghost]Weezing||RockyHelmet|Levitate|WillOWisp,PainSplit,FireBlast,SludgeBomb|Bold|252,,204,,,52||,0,,,,|||,,,,,Poison]Tornadus-Therian||AssaultVest|Regenerator|Uturn,KnockOff,IcyWind,BleakwindStorm|Timid|252,,,,88,168|||||,,,,,Flying","Orthworm||MentalHerb|EarthEater|ShedTail,StealthRock,Spikes,BodyPress|Bold|248,,252,,8,||,0,,,,|S||,,,,,Steel]Tera Captain|IronMoth|BoosterEnergy|QuarkDrive|Discharge,FieryDance,SludgeWave,EnergyBall|Timid|120,,,132,4,252||,0,,,,|||,,,,,Grass]Palafin||RindoBerry|ZerotoHero|BulkUp,DrainPunch,WaveCrash,JetPunch|Adamant|252,252,,,,4|||||,,,,,Water]Meowscarada||ChoiceBand|Protean|FlowerTrick,KnockOff,SuckerPunch,Uturn|Jolly|16,252,,,,240|||S||,,,,,Grass]Terapagos||HeavyDutyBoots|TeraShift|CalmMind,TeraStarstorm,EarthPower,Roar|Modest|248,,,252,8,||,15,,,,|||,Dark,,,,Stellar]Tera Captain|Golurk|ColburBerry|NoGuard|StealthRock,Earthquake,Poltergeist,BrickBreak|Adamant|208,252,,,,48|||S||,,,,,Fighting"],
+ ["Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,ShadowBall,Psyshock,VacuumWave|Timid|,,4,252,,252||,0,,,,|||,,,,,Fairy]Skuntank||SitrusBerry|Aftermath|KnockOff,GunkShot,Toxic,Haze|Jolly|,4,,,252,252|||||,,,,,Poison]Tornadus-Therian||AssaultVest|Regenerator|BleakwindStorm,HeatWave,KnockOff,Uturn|Timid|248,,,,44,216|||||,,,,,Flying]Tera Captain|Empoleon|ChopleBerry|Torrent|StealthRock,FlipTurn,KnockOff,Roar|Impish|252,,252,,4,|||||,,,,,Poison]Garchomp||RoseliBerry|RoughSkin|SwordsDance,Earthquake,ScaleShot,Spikes|Adamant|40,252,,,,216|||||,,,,,Dragon]Tera Captain|Mew|SitrusBerry|Synchronize|CalmMind,Psychic,FocusBlast,ShadowBall|Modest|232,,,252,,24||,0,,,,|||,,,,,Poison","Iron Valiant||ChoiceScarf|QuarkDrive|Moonblast,Thunderbolt,Encore,Trick|Timid|,,,248,8,252||,0,,,,|||,,,,,Fairy]Tera Captain|Gholdengo|CustapBerry|GoodasGold|MakeItRain,ShadowBall,NastyPlot,Endure|Modest|248,,24,116,120,||,0,,,,|||,,,,,Poison]Ting-Lu||Leftovers|VesselofRuin|Earthquake,ThroatChop,Spikes,Whirlwind|Impish|184,48,212,,64,|||||,,,,,Dark]Tera Captain|ElectrodeHisui|LifeOrb|Static|TeraBlast,LeafStorm,VoltSwitch,Taunt|Modest|72,,,252,24,160||,0,,,,|||,,,,,Ice]Blastoise||MysticWater|Torrent|WaveCrash,IceSpinner,AquaJet,ShellSmash|Jolly|24,252,,,,232|||||,,,,,Water]Braviary||ChoiceScarf|Defiant|BraveBird,Uturn,CloseCombat,Defog|Adamant|16,252,,,,240|||||,,,,,Normal"],
+ ["Glimmora||FocusSash|ToxicDebris|StealthRock,MortalSpin,SludgeBomb,EarthPower|Modest|4,,,252,,252|||||,,,,,Rock]Iron Valiant||BoosterEnergy|QuarkDrive|CloseCombat,SpiritBreak,KnockOff,SwordsDance|Jolly|,252,,,4,252|||||,,,,,Fairy]Gholdengo||ColburBerry|GoodasGold|ThunderWave,Hex,Recover,MakeItRain|Bold|240,,188,,80,||,0,,,,|||,,,,,Steel]Tera Captain|Salamence|LumBerry|Intimidate|DragonDance,TeraBlast,Substitute,DragonClaw|Jolly|64,196,16,,16,216|||||,,,,,Fairy]Gastrodon||RindoBerry|StormDrain|Yawn,Recover,Earthquake,Counter|Impish|184,,224,,100,|||||,,,,,Water]Brute Bonnet||EjectButton|Protosynthesis|SuckerPunch,Synthesis,SeedBomb,CloseCombat|Impish|192,,252,,64,|||||,,,,,Grass","Iron Valiant||BoosterEnergy|QuarkDrive|Moonblast,ShadowBall,Psychic,DestinyBond|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,PlayRough,SwordsDance,Synthesis|Jolly|80,252,,,,176|||||,,,,,Water]Darkrai||BlackGlasses|BadDreams|DarkPulse,SludgeBomb,CalmMind,Hypnosis|Timid|72,,,252,,184||,0,,,,|||,,,,,Dark]Uxie||SitrusBerry|Levitate|FutureSight,FoulPlay,Uturn,PainSplit|Bold|248,,236,,,24|||||,,,,,Psychic]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,DarkPulse,RapidSpin,CalmMind|Modest|104,,,252,,152|||||,,,,,Stellar]Muk||BlackSludge|PoisonTouch|PoisonJab,KnockOff,Toxic,PainSplit|Impish|248,,196,,64,|||||,,,,,Poison"],
+ ["Zapdos||Magnet|Static|Agility,ElectroBall,Charge,SupercellSlam|Naive|,,,252,4,252|||||,,,,,Electric]Tera Captain|OricorioPomPom|Magnet|Dancer|QuiverDance,RevelationDance,Roost,Taunt|Modest|252,,4,252,,||,0,,,,|||,,,,,Electric]Overqwil||LumBerry|Intimidate|Agility,SwordsDance,GunkShot,Crunch|Adamant|252,252,,,4,|||||,,,,,Dark]Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|HeavySlam,Megahorn,StoneEdge,BulkUp|Jolly|248,4,,,4,252|||||,,,,,Ground]Arboliva||LightClay|SeedSower|Reflect,LightScreen,Memento,LeechSeed|Bold|248,,252,,8,||,0,,,,|||,,,,,Grass]Iron Bundle||RockyHelmet|QuarkDrive|IceSpinner,HydroPump,FreezeDry,Taunt|Naughty|,252,72,,,184|||||,,,,,Ice","Blissey||HeavyDutyBoots|NaturalCure|SeismicToss,SoftBoiled,IceBeam,ThunderWave|Bold|,,252,80,176,||,0,,,,|||,,,,,Normal]Sinistcha-Masterpiece||Leftovers|Heatproof|MatchaGotcha,StunSpore,Hex,StrengthSap|Bold|252,,152,,104,||,0,,,,|||,,,,,Ghost]Tera Captain|HoopaUnbound|ChoiceScarf|Magician|Psychic,DarkPulse,TeraBlast,GunkShot|Mild|,,,252,4,252|||||,,,,,Ground]Tera Captain|Thundurus|WideLens|Prankster|VoltSwitch,TeraBlast,FocusBlast,ThunderWave|Timid|,,,252,4,252||,0,,,,|||,,,,,Ice]Maushold||WideLens|Technician|TidyUp,PopulationBomb,Crunch,LowKick|Jolly|4,252,,,,252|||||,,,,,Normal]Cinderace||HeavyDutyBoots|Libero|PyroBall,Uturn,IronHead,CourtChange|Jolly|,252,4,,,252|||||,,,,,Fire"],
+ ["Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,PlayRough,SwordsDance,PowerWhip|Jolly|4,252,,,,252|||||,,,,,Water]Iron Boulder||BoosterEnergy|QuarkDrive|ThroatChop,PsychoCut,MightyCleave,SwordsDance|Jolly|112,252,,,,144|||||,,,,,Rock]Chi-Yu||ChoiceSpecs|BeadsofRuin|DarkPulse,Psychic,Flamethrower,Overheat|Timid|100,,,252,,156||,0,,,,|||,,,,,Dark]Corviknight||HeavyDutyBoots|Pressure|Uturn,Defog,Roost,BraveBird||252,,,,,|||||,,,,,Flying]Alomomola||Leftovers|Regenerator|BodySlam,Wish,Protect,FlipTurn|Careful|252,,,,252,|||||,,,,,Water]Hippowdon||RockyHelmet|SandStream|Earthquake,StealthRock,SlackOff,Yawn|Impish|252,,252,,4,|||||,,,,,Ground","Gholdengo||ColburBerry|GoodasGold|MakeItRain,Thunderbolt,ThunderWave,Recover|Bold|248,,88,4,168,||,0,,,,|||,,,,,Steel]Toxapex||RockyHelmet|Regenerator|Surf,Haze,Toxic,Recover|Calm|252,,156,,100,||,0,,,,|||,,,,,Poison]Latios||WeaknessPolicy|Levitate|Thunderbolt,StoredPower,Recover,Agility|Calm|252,,216,16,24,||,0,,,,|||,,,,,Dragon]Chi-Yu||ChoiceScarf|BeadsofRuin|DarkPulse,Psychic,Flamethrower,Overheat|Timid|20,,,236,,252||,0,,,,|||,,,,,Dark]Tera Captain|GreatTusk|BoosterEnergy|Protosynthesis|CloseCombat,Earthquake,TeraBlast,RapidSpin|Jolly|244,12,,,,252|||||,Fighting,,,,Grass]Tera Captain|Hoopa|Leftovers|Magician|DrainPunch,KnockOff,TeraBlast,DestinyBond|Adamant|4,252,252,,,|||||,,,,,Dark"],
+ ["Tera Captain|Farigiraf|ChestoBerry|ArmorTail|HyperVoice,NastyPlot,Agility,Rest|Modest|248,,80,140,4,36||,0,,,,|||,,,,,Normal]Palafin||PunchingGlove|ZerotoHero|JetPunch,DrainPunch,IcePunch,BulkUp|Jolly|,252,,,4,252|||||,,,,,Water]Overqwil||RockyHelmet|Intimidate|Crunch,GunkShot,Haze,Spikes|Impish|248,,252,,8,|||||,,,,,Dark]Great Tusk||ChoiceScarf|Protosynthesis|HeadlongRush,CloseCombat,HeadSmash,RapidSpin|Adamant|216,252,,,,40|||||,Fighting,,,,Ground]Tinkaton||LightClay|MoldBreaker|GigatonHammer,Reflect,LightScreen,StealthRock|Jolly|248,4,56,,,200|||||,,,,,Fairy]Tera Captain|Ceruledge|ChoiceBand|FlashFire|Poltergeist,BitterBlade,ShadowClaw,ShadowSneak|Adamant|112,252,4,,,140|||||,,,,,Ghost","Zapdos||HeavyDutyBoots|Static|Hurricane,Roost,ThunderWave,VoltSwitch|Timid|104,,252,,,152||,0,,,,|||,,,,,Electric]Tera Captain|Cetitan|HeavyDutyBoots|SlushRush|BellyDrum,Earthquake,IceShard,Liquidation|Serious|232,252,,,,24|||||,,,,,Water]Grimmsnarl||LightClay|Prankster|LightScreen,Reflect,FoulPlay,PartingShot|Bold|248,,204,,56,||,0,,,,|||,,,,,Dark]Tera Captain|SlowkingGalar|ColburBerry|Regenerator|ChillyReception,ThunderWave,FutureSight,FireBlast|Bold|176,,232,96,4,||,0,,,,|||,,,,,Water]Great Tusk||BoosterEnergy|Protosynthesis|BulkUp,Earthquake,SupercellSlam,RapidSpin|Jolly|248,8,,,,252|||||,,,,,Ground]Palafin-Hero||Leftovers|ZerotoHero|BulkUp,JetPunch,DrainPunch,Taunt|Adamant|248,120,88,,,52|||||,,,,,Water"],
+ ["Talonflame||LumBerry|FlameBody|DualWingbeat,TemperFlare,Roost,Defog|Jolly|128,,252,,,128|||||,,,,,Fire]Iron Treads||EjectButton|QuarkDrive|StealthRock,RapidSpin,KnockOff,HighHorsepower|Jolly|168,252,,,,88|||||,,,,,Ground]Sneasler||ChoiceScarf|PoisonTouch|DireClaw,CloseCombat,BrickBreak,Uturn|Jolly|,252,80,,,176|||||,,,,,Fighting]Rillaboom||LifeOrb|GrassySurge|GrassyGlide,WoodHammer,HighHorsepower,Uturn|Jolly|,252,,,4,252|||||,,,,,Grass]Slowking||Leftovers|Regenerator|IceBeam,FireBlast,PsychicNoise,ChillyReception|Calm|252,,,4,252,||,0,,,,|||,,,,,Water]Tera Captain|RagingBolt|AssaultVest|Protosynthesis|Thunderbolt,DracoMeteor,TeraBlast,Thunderclap|Modest|252,,,252,4,||,20,,,,|||,,,,,Fairy","Latios||ChoiceSpecs|Levitate|DracoMeteor,LusterPurge,AuraSphere,Trick|Timid|,,,252,4,252||,0,,,,|S||,,,,,Dragon]Blaziken||Leftovers|SpeedBoost|CloseCombat,ThunderPunch,BulkUp,Protect|Adamant|,232,,,120,156|||||,,,,,Fire]Ursaluna-Bloodmoon||ChopleBerry|MindsEye|CalmMind,BloodMoon,EarthPower,Moonlight|Bold|232,,152,124,,||,0,,,,|||,,,,,Ground]Rillaboom||ChoiceBand|GrassySurge|KnockOff,GrassyGlide,HighHorsepower,Facade|Adamant|,204,,,128,176|||||,,,,,Grass]Tera Captain|Blastoise|WhiteHerb|Torrent|Liquidation,TeraBlast,IceSpinner,ShellSmash|Adamant|,140,152,,,208|||||,,,,,Poison]Klefki||LightClay|Prankster|PlayRough,ThunderWave,Reflect,LightScreen|Careful|252,,4,,252,|||||,,,,,Steel"],
+ ["Blaziken||CustapBerry|SpeedBoost|FlareBlitz,CloseCombat,Protect,SwordsDance|Adamant|,252,,,4,252|||||,,,,,Fire]Excadrill||ChoiceScarf|MoldBreaker|Earthquake,IronHead,PoisonJab,RapidSpin|Jolly|,252,,,4,252|||||,,,,,Ground]Hydrapple||RoseliBerry|Regenerator|Recover,FickleBeam,GigaDrain,HydroPump|Bold|248,,252,8,,||,0,,,,|||,,,,,Grass]Mimikyu||ChoiceBand|Disguise|PlayRough,ShadowSneak,ShadowClaw,DrainPunch|Jolly|,252,,,4,252|||||,,,,,Ghost]Tera Captain|UrshifuRapidStrike|PunchingGlove|UnseenFist|IcePunch,CloseCombat,SurgingStrikes,Uturn|Jolly|,252,,,4,252|||||,,,,,Grass]Minior||WhiteHerb|ShieldsDown|Acrobatics,ShellSmash,Earthquake,RockSlide|Adamant|,252,,,4,252|||S||,,,,,Poison","Tera Captain|Skeledirge|RockyHelmet|Blaze|TeraBlast,TorchSong,SlackOff,WillOWisp|Bold|248,,252,8,,||,0,,,,|||,,,,,Water]Iron Valiant||ChoiceSpecs|QuarkDrive|Moonblast,AuraSphere,VacuumWave,ShadowBall|Timid|,,,252,4,252||,0,,,,|||,,,,,Fairy]Garchomp||LoadedDice|RoughSkin|ScaleShot,Earthquake,SwordsDance,PoisonJab|Jolly|40,252,,,,216|||||,,,,,Dragon]Golurk||RockyHelmet|IronFist|Poltergeist,StealthRock,IcePunch,KnockOff|Adamant|252,252,,,4,|||||,,,,,Ground]Rotom-Wash||AirBalloon|Levitate|HydroPump,VoltSwitch,WillOWisp,PainSplit|Bold|248,,208,,,52||,0,,,,|||,,,,,Electric]Scizor||HeavyDutyBoots|Technician|Uturn,BulletPunch,Defog,SwordsDance|Careful|248,84,,,176,|||||,,,,,Bug"],
+ ["Tera Captain|Kilowattrel|ExpertBelt|VoltAbsorb|AirSlash,Thunderbolt,TeraBlast,Uturn|Timid|4,,,252,,252|||||,,,,,Water]Tera Captain|Latias|Leftovers|Levitate|CalmMind,StoredPower,IceBeam,Recover|Bold|52,,252,,,204||,0,,,,|||,,,,,Electric]Palafin||ChoiceBand|ZerotoHero|WaveCrash,JetPunch,IcePunch,FlipTurn|Adamant|,252,,,,252|||||,,,,,Water]Wigglytuff||LightClay|Frisk|LightScreen,Reflect,RainDance,MistyExplosion|Calm|252,,,4,252,||,0,,,,|||,,,,,Normal]Weezing-Galar||AssaultVest|Levitate|StrangeSteam,SludgeBomb,Thunderbolt,Flamethrower|Calm|252,,140,,116,||,0,,,,|||,,,,,Poison]Meowscarada||ChoiceScarf|Protean|Uturn,KnockOff,FlowerTrick,ShadowClaw|Jolly|32,252,,,,224|||||,,,,,Grass","Tera Captain|Annihilape|Leftovers|Defiant|DrainPunch,RageFist,BulkUp,Substitute|Adamant|88,168,,,172,80|||||,,,,,Water]Latios||LifeOrb|Levitate|LusterPurge,DracoMeteor,AuraSphere,Recover|Timid|,,4,252,,252||,0,,,,|||,,,,,Dragon]Ting-Lu||Leftovers|VesselofRuin|Ruination,Earthquake,StealthRock,Whirlwind|Careful|252,72,64,,120,|||||,,,,,Dark]Corviknight||RockyHelmet|Pressure|BodyPress,IronDefense,Uturn,Roost|Impish|252,4,252,,,|||||,,,,,Flying]Primarina||AssaultVest|Torrent|AlluringVoice,Surf,EnergyBall,FlipTurn|Calm|252,,,4,252,|||||,,,,,Water]Cinderace||ChoiceScarf|Libero|PyroBall,HighJumpKick,Uturn,CourtChange|Jolly|,252,,,4,252|||||,,,,,Fire"],
+ ["Tera Captain|GreninjaBond|HeavyDutyBoots|BattleBond|Surf,IceBeam,TeraBlast,WaterShuriken|Modest|136,,,252,,120|||||,Ghost,,,,Dragon]Garchomp||RockyHelmet|RoughSkin|SwordsDance,ScaleShot,StompingTantrum,PoisonJab|Adamant|248,,236,,,24|||||,,,,,Dragon]Enamorus||ExpertBelt|CuteCharm|Agility,Moonblast,EarthPower,MysticalFire|Modest|8,,,252,,248||,0,,,,|||,,,,,Fairy]Ogerpon-Hearthflame||HearthflameMask|MoldBreaker|SwordsDance,IvyCudgel,StompingTantrum,GrassyGlide|Adamant|40,252,,,,216|||||,Poison,,,,Fire]Jirachi||Leftovers|SereneGrace|IronHead,ZenHeadbutt,ThunderWave,Wish|Jolly|248,76,,,,184|||||,,,,,Steel]Tera Captain|Gligar|Eviolite|Immunity|StealthRock,HighHorsepower,Bulldoze,Uturn|Impish|248,148,112,,,|||S||,,,,,Ground","Torkoal||HeatRock|Drought|LavaPlume,Yawn,StealthRock,RapidSpin|Bold|248,,252,8,,|||||,,,,,Fire]Gouging Fire||BoosterEnergy|Protosynthesis|DragonDance,BurningBulwark,HeatCrash,DragonClaw|Jolly|84,168,,,4,252|||||,,,,,Fire]Venusaur||LifeOrb|Chlorophyll|Growth,EnergyBall,WeatherBall,SludgeBomb|Modest|32,,,252,4,220||,0,,,,|||,,,,,Grass]Sneasler||BigNugget|Unburden|Acrobatics,Fling,CloseCombat,DireClaw|Adamant|156,252,,,4,96|||||,,,,,Fighting]Ursaluna-Bloodmoon||LifeOrb|MindsEye|BloodMoon,EarthPower,Moonlight,Moonblast|Modest|252,,,252,4,||,0,,,,|||,,,,,Ground]Tera Captain|Ribombee|FocusSash|HoneyGather|StickyWeb,BugBuzz,Moonblast,StunSpore|Timid|,,,252,4,252||,0,,,,|||,,,,,Water"],
+ ["Meowscarada||FocusSash|Protean|Spikes,KnockOff,FlowerTrick,Uturn|Jolly|,252,,,4,252|||S||,,,,,Grass]Iron Treads||WeaknessPolicy|QuarkDrive|HeavySlam,Earthquake,RapidSpin,IronDefense|Jolly|164,120,92,,,132|||||,,,,,Ground]Slowking-Galar||ColburBerry|Regenerator|ChillyReception,Snarl,Yawn,EerieSpell|Calm|252,,252,,4,||,0,,,,|||,,,,,Poison]Moltres||HeavyDutyBoots|FlameBody|Roar,Roost,WillOWisp,Flamethrower|Bold|248,,108,,152,||,0,,,,|||,,,,,Fire]Tera Captain|RagingBolt|BoosterEnergy|Protosynthesis|CalmMind,Thunderbolt,TeraBlast,Taunt|Jolly|132,,108,16,,252||,20,,20,,|||,,,,,Fairy]Dudunsparce||Leftovers|SereneGrace|BodySlam,Coil,Earthquake,Roost|Adamant|164,16,120,,112,96|||S||,,,,,Normal","Tera Captain|Latias|Leftovers|Levitate|Substitute,Psyshock,AuraSphere,CalmMind|Modest|224,,,252,,32||,0,,,,|||,,,,,Steel]Palafin-Hero||ChoiceBand|ZerotoHero|JetPunch,CloseCombat,DrainPunch,FlipTurn|Adamant|104,252,,,,152|||||,,,,,Stellar]Meowscarada||ProtectivePads|Protean|KnockOff,LowKick,PowerGem,GigaDrain|Hasty|,252,,4,,252|||||,,,,,Stellar]Tinkaton||RockyHelmet|Pickpocket|StealthRock,KnockOff,Encore,GigatonHammer|Impish|248,,236,,,24|||||,,,,,Stellar]Iron Hands||AssaultVest|QuarkDrive|ThunderPunch,DrainPunch,Facade,VoltSwitch|Brave|40,216,,,252,||,,,,,29|||,,,,,Stellar]Donphan||CustapBerry|Sturdy|Earthquake,KnockOff,Endeavor,IceShard|Brave|252,4,,,252,||,,,,,8|||,,,,,Stellar"],
+ ["Tera Captain|Latias|ColburBerry|Levitate|Recover,ThunderWave,Psyshock,Roar|Modest|252,,248,8,,||,0,,,,|||,,,,,Ghost]Palafin-Hero||ChoiceSpecs|ZerotoHero|Boomburst,Surf,IceBeam,FlipTurn|Modest|176,,,252,,80|||||,,,,,Normal]Meowscarada||ChoiceBand|Protean|FlowerTrick,KnockOff,Uturn,Spikes|Jolly|56,252,,,,200|||||,,,,,Normal]Tinkaton||SitrusBerry|MoldBreaker|GigatonHammer,PlayRough,ThunderWave,Encore|Adamant|128,252,,,,128|||||,,,,,Normal]Iron Hands||AssaultVest|QuarkDrive|Facade,DrainPunch,ThunderPunch,VoltSwitch|Adamant|8,224,24,,252,|||||,,,,,Normal]Ariados||PayapaBerry|Insomnia|Megahorn,PoisonJab,ShadowSneak,StickyWeb|Adamant|252,108,,,56,92|||||,,,,,Normal","Iron Valiant||LifeOrb|QuarkDrive|Moonblast,CloseCombat,VacuumWave,Encore|Naive|,108,,192,,208|||||,,,,,Fairy]Darkrai||WeaknessPolicy|BadDreams|DarkPulse,FocusBlast,Taunt,WillOWisp|Timid|248,,20,,,240||,0,,,,|||,,,,,Dark]Tera Captain|OgerponWellspring|WellspringMask|WaterAbsorb|IvyCudgel,Trailblaze,SwordsDance,Synthesis|Jolly|,252,,,4,252|||||,,,,,Water]Uxie||RockyHelmet|Levitate|Uturn,PsychicNoise,Encore,StealthRock|Relaxed|248,,252,,8,|||||,,,,,Psychic]Terapagos||HeavyDutyBoots|TeraShift|TeraStarstorm,Flamethrower,RapidSpin,CalmMind|Modest|144,,4,252,,108|||||,,,,,Stellar]Muk||RockyHelmet|StickyHold|PoisonJab,KnockOff,PainSplit,ToxicSpikes|Impish|248,,252,,8,|||||,,,,,Poison"]
+ ]
+}
diff --git a/data/random-battles/gen9/factory-sets.json b/data/random-battles/gen9/factory-sets.json
new file mode 100644
index 000000000000..9a019ec1d5df
--- /dev/null
+++ b/data/random-battles/gen9/factory-sets.json
@@ -0,0 +1,9118 @@
+{
+ "Uber": {
+ "koraidon": {
+ "weight": 10,
+ "sets": [{
+ "species": "Koraidon",
+ "weight": 50,
+ "item": ["Choice Scarf"],
+ "ability": ["Orichalcum Pulse"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fire", "Ghost"],
+ "moves": [["Low Kick", "Close Combat"], ["Flare Blitz"], ["Outrage", "Dragon Claw"], ["U-turn"]]
+ }, {
+ "species": "Koraidon",
+ "weight": 50,
+ "item": ["Loaded Dice"],
+ "ability": ["Orichalcum Pulse"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fire", "Ghost"],
+ "moves": [["Low Kick", "Substitute"], ["Flare Blitz"], ["Scale Shot"], ["Swords Dance"]]
+ }]
+ },
+ "necrozmaduskmane": {
+ "weight": 10,
+ "sets": [{
+ "species": "Necrozma-Dusk-Mane",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Prism Armor"],
+ "evs": {"hp": 252, "def": 204, "spe": 52},
+ "nature": ["Impish"],
+ "teraType": ["Fire"],
+ "moves": [["Dragon Dance"], ["Morning Sun"], ["Sunsteel Strike"], ["Knock Off"]]
+ }, {
+ "species": "Necrozma-Dusk-Mane",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Prism Armor"],
+ "evs": {"hp": 252, "def": 204, "spe": 52},
+ "nature": ["Impish"],
+ "teraType": ["Fire"],
+ "moves": [["Dragon Dance"], ["Morning Sun"], ["Photon Geyser"], ["Earthquake"]]
+ }, {
+ "species": "Necrozma-Dusk-Mane",
+ "weight": 15,
+ "item": ["Lum Berry", "Occa Berry", "Life Orb"],
+ "ability": ["Prism Armor"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Fire"],
+ "moves": [["Dragon Dance"], ["Sunsteel Strike"], ["Earthquake"], ["Stone Edge"]]
+ }, {
+ "species": "Necrozma-Dusk-Mane",
+ "weight": 15,
+ "item": ["Lum Berry", "Occa Berry", "Life Orb"],
+ "ability": ["Prism Armor"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Fire", "Psychic"],
+ "moves": [["Dragon Dance"], ["Photon Geyser"], ["Earthquake"], ["Sunsteel Strike"]]
+ }, {
+ "species": "Necrozma-Dusk-Mane",
+ "weight": 10,
+ "item": ["Life Orb", "Lum Berry", "Mental Herb", "Weakness Policy"],
+ "ability": ["Prism Armor"],
+ "evs": {"hp": 252, "atk": 252, "def": 4},
+ "ivs": {"spe": 0},
+ "nature": ["Brave"],
+ "teraType": ["Fire"],
+ "moves": [["Swords Dance"], ["Photon Geyser"], ["Earthquake"], ["Trick Room"]]
+ }, {
+ "species": "Necrozma-Dusk-Mane",
+ "weight": 10,
+ "item": ["Covert Cloak", "Heavy-Duty Boots"],
+ "ability": ["Prism Armor"],
+ "evs": {"hp": 252, "atk": 4, "def": 252},
+ "nature": ["Impish"],
+ "teraType": ["Fire", "Ground"],
+ "moves": [["Sunsteel Strike"], ["Earthquake"], ["Morning Sun"], ["Swords Dance", "Stealth Rock", "Knock Off"]]
+ }]
+ },
+ "hooh": {
+ "weight": 9,
+ "sets": [{
+ "species": "Ho-Oh",
+ "weight": 10,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Ground"],
+ "moves": [["Sacred Fire"], ["Recover"], ["Earthquake"], ["Brave Bird"]]
+ }, {
+ "species": "Ho-Oh",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Fairy", "Grass"],
+ "moves": [["Sacred Fire"], ["Recover"], ["Whirlwind"], ["Brave Bird"]]
+ }, {
+ "species": "Ho-Oh",
+ "weight": 10,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 104, "atk": 252, "spe": 152},
+ "nature": ["Adamant"],
+ "teraType": ["Ground"],
+ "moves": [["Sacred Fire"], ["Recover"], ["Earthquake"], ["Brave Bird"]]
+ }, {
+ "species": "Ho-Oh",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 104, "atk": 252, "spe": 152},
+ "nature": ["Adamant"],
+ "teraType": ["Flying"],
+ "moves": [["Sacred Fire"], ["Recover"], ["Substitute"], ["Brave Bird"]]
+ }, {
+ "species": "Ho-Oh",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Flying"],
+ "moves": [["Sacred Fire"], ["Recover"], ["Substitute"], ["Brave Bird"]]
+ }]
+ },
+ "arceusground": {
+ "weight": 9,
+ "sets": [{
+ "species": "Arceus-Ground",
+ "weight": 50,
+ "item": ["Earth Plate"],
+ "ability": ["Multitype"],
+ "evs": {"hp": 132, "atk": 252, "spe": 124},
+ "nature": ["Adamant"],
+ "teraType": ["Ground"],
+ "moves": [["Dragon Dance"], ["Recover", "Taunt", "Ice Beam"], ["Earthquake"], ["Stone Edge"]]
+ }, {
+ "species": "Arceus-Ground",
+ "weight": 15,
+ "item": ["Earth Plate"],
+ "ability": ["Multitype"],
+ "evs": {"hp": 132, "atk": 252, "spe": 124},
+ "nature": ["Adamant"],
+ "teraType": ["Ghost"],
+ "moves": [["Dragon Dance"], ["Recover", "Taunt", "Ice Beam"], ["Earthquake"], ["Stone Edge"]]
+ }, {
+ "species": "Arceus-Ground",
+ "weight": 15,
+ "item": ["Earth Plate"],
+ "ability": ["Multitype"],
+ "evs": {"hp": 240, "spd": 252, "spe": 16},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Steel", "Ghost"],
+ "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Ice Beam", "Power Gem"]]
+ }, {
+ "species": "Arceus-Ground",
+ "weight": 20,
+ "item": ["Earth Plate"],
+ "ability": ["Multitype"],
+ "evs": {"hp": 132, "spa": 252, "spe": 124},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Steel", "Ghost"],
+ "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Ice Beam", "Power Gem"]]
+ }]
+ },
+ "arceusfairy": {
+ "weight": 9,
+ "sets": [{
+ "species": "Arceus-Fairy",
+ "weight": 100,
+ "item": ["Pixie Plate"],
+ "ability": ["Multitype"],
+ "evs": {"hp": 240, "def": 252, "spd": 16},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Judgment"], ["Recover"], ["Thunder Wave", "Will-O-Wisp"], ["Stealth Rock", "Taunt", "Dragon Tail"]]
+ }]
+ },
+ "zacian": {
+ "weight": 9,
+ "sets": [{
+ "species": "Zacian",
+ "weight": 100,
+ "item": ["Rusted Sword"],
+ "ability": ["Intrepid Sword"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fighting", "Fire", "Flying"],
+ "moves": [["Behemoth Blade", "Play Rough"], ["Swords Dance"], ["Wild Charge"], ["Close Combat"]]
+ }]
+ },
+ "kyogre": {
+ "weight": 9,
+ "sets": [{
+ "species": "Kyogre",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Drizzle"],
+ "evs": {"hp": 240, "def": 76, "spa": 176, "spe": 16},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy", "Poison"],
+ "moves": [["Calm Mind"], ["Origin Pulse", "Surf"], ["Ice Beam"], ["Thunder", "Thunder Wave"]]
+ }, {
+ "species": "Kyogre",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Drizzle"],
+ "evs": {"hp": 248, "def": 164, "spa": 80, "spe": 16},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Poison"],
+ "moves": [["Calm Mind"], ["Origin Pulse", "Surf"], ["Ice Beam"], ["Thunder", "Thunder Wave"]]
+ }, {
+ "species": "Kyogre",
+ "weight": 25,
+ "item": ["Choice Scarf"],
+ "ability": ["Drizzle"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water"],
+ "moves": [["Water Spout"], ["Thunder"], ["Ice Beam"], ["Origin Pulse"]]
+ }, {
+ "species": "Kyogre",
+ "weight": 5,
+ "item": ["Choice Specs"],
+ "ability": ["Drizzle"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water"],
+ "moves": [["Water Spout"], ["Thunder"], ["Ice Beam"], ["Origin Pulse"]]
+ }, {
+ "species": "Kyogre",
+ "weight": 20,
+ "item": ["Choice Specs"],
+ "ability": ["Drizzle"],
+ "evs": {"hp": 240, "def": 76, "spa": 176, "spe": 16},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy"],
+ "moves": [["Water Spout"], ["Thunder"], ["Ice Beam"], ["Origin Pulse"]]
+ }]
+ },
+ "arceus": {
+ "weight": 8,
+ "sets": [{
+ "species": "Arceus",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Multitype"],
+ "evs": {"hp": 200, "atk": 252, "spe": 56},
+ "nature": ["Adamant"],
+ "teraType": ["Ghost", "Fire"],
+ "moves": [["Swords Dance"], ["Extreme Speed"], ["Shadow Claw"], ["Taunt", "Recover", "Earthquake"]]
+ }, {
+ "species": "Arceus",
+ "weight": 20,
+ "item": ["Silk Scarf", "Life Orb"],
+ "ability": ["Multitype"],
+ "evs": {"hp": 200, "atk": 252, "spe": 56},
+ "nature": ["Adamant"],
+ "teraType": ["Fire", "Normal"],
+ "moves": [["Swords Dance"], ["Extreme Speed"], ["Shadow Claw"], ["Taunt", "Recover", "Earthquake", "Double-Edge"]]
+ }, {
+ "species": "Arceus",
+ "weight": 30,
+ "item": ["Leftovers", "Heavy-Duty Boots"],
+ "ability": ["Multitype"],
+ "evs": {"hp": 248, "atk": 204, "spe": 56},
+ "nature": ["Adamant"],
+ "teraType": ["Fire"],
+ "moves": [["Bulk Up"], ["Extreme Speed"], ["Shadow Claw"], ["Recover"]]
+ }]
+ },
+ "arceuswater": {
+ "weight": 8,
+ "sets": [{
+ "species": "Arceus-Water",
+ "weight": 80,
+ "item": ["Splash Plate"],
+ "ability": ["Multitype"],
+ "evs": {"hp": 240, "def": 252, "spe": 16},
+ "nature": ["Bold"],
+ "teraType": ["Fairy"],
+ "moves": [["Thunder Wave", "Will-O-Wisp"], ["Judgment"], ["Recover"], ["Ice Beam", "Dragon Tail"]]
+ }, {
+ "species": "Arceus-Water",
+ "weight": 20,
+ "item": ["Splash Plate"],
+ "ability": ["Multitype"],
+ "evs": {"hp": 240, "def": 252, "spe": 16},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Poison"],
+ "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Ice Beam"]]
+ }]
+ },
+ "eternatus": {
+ "weight": 8,
+ "sets": [{
+ "species": "Eternatus",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Pressure"],
+ "evs": {"hp": 200, "spd": 252, "spe": 56},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Grass"],
+ "moves": [["Dynamax Cannon"], ["Toxic"], ["Recover"], ["Toxic Spikes", "Flamethrower"]]
+ }, {
+ "species": "Eternatus",
+ "weight": 30,
+ "item": ["Power Herb"],
+ "ability": ["Pressure"],
+ "evs": {"hp": 168, "spa": 252, "spe": 88},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fire", "Dragon"],
+ "moves": [["Meteor Beam"], ["Dynamax Cannon"], ["Fire Blast"], ["Agility", "Sludge Bomb"]]
+ }, {
+ "species": "Eternatus",
+ "weight": 30,
+ "item": ["Choice Scarf"],
+ "ability": ["Pressure"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest", "Timid"],
+ "teraType": ["Fire", "Flying", "Fairy"],
+ "moves": [["Sludge Bomb"], ["Dynamax Cannon"], ["Fire Blast", "Flamethrower"], ["Toxic Spikes"]]
+ }]
+ },
+ "gliscor": {
+ "weight": 7,
+ "sets": [{
+ "species": "Gliscor",
+ "weight": 40,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "def": 252, "spd": 12},
+ "nature": ["Impish"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Earthquake"], ["Toxic"], ["Protect"], ["Spikes", "Toxic Spikes"]]
+ }, {
+ "species": "Gliscor",
+ "weight": 40,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "def": 252, "spd": 12},
+ "nature": ["Impish"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Earthquake", "Toxic"], ["Knock Off"], ["Protect"], ["Spikes", "Toxic Spikes"]]
+ }, {
+ "species": "Gliscor",
+ "weight": 10,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "def": 12, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Earthquake"], ["Toxic"], ["Protect"], ["Spikes", "Toxic Spikes"]]
+ }, {
+ "species": "Gliscor",
+ "weight": 10,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "def": 12, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Earthquake", "Toxic"], ["Knock Off"], ["Protect"], ["Spikes", "Toxic Spikes"]]
+ }]
+ },
+ "calyrexice": {
+ "weight": 7,
+ "sets": [{
+ "species": "Calyrex-Ice",
+ "wantsTera": true,
+ "weight": 80,
+ "item": ["Heavy-Duty Boots", "Occa Berry", "Weakness Policy"],
+ "ability": ["As One (Glastrier)"],
+ "evs": {"hp": 248, "atk": 252, "spd": 8},
+ "ivs": {"spe": 0},
+ "nature": ["Brave"],
+ "teraType": ["Fire", "Ground"],
+ "moves": [["Trick Room"], ["Swords Dance"], ["Glacial Lance"], ["High Horsepower"]]
+ }, {
+ "species": "Calyrex-Ice",
+ "wantsTera": true,
+ "weight": 20,
+ "item": ["Heavy-Duty Boots", "Occa Berry", "Weakness Policy"],
+ "ability": ["As One (Glastrier)"],
+ "evs": {"hp": 248, "atk": 252, "spd": 8},
+ "ivs": {"spe": 22},
+ "nature": ["Adamant"],
+ "teraType": ["Fire", "Ground"],
+ "moves": [["Trick Room"], ["Swords Dance"], ["Glacial Lance"], ["High Horsepower"]]
+ }]
+ },
+ "landorustherian": {
+ "weight": 7,
+ "sets": [{
+ "species": "Landorus-Therian",
+ "weight": 80,
+ "item": ["Rocky Helmet", "Leftovers"],
+ "ability": ["Intimidate"],
+ "evs": {"hp": 248, "atk": 8, "def": 252},
+ "nature": ["Impish"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Stealth Rock"], ["Earthquake"], ["U-turn"], ["Stone Edge", "Rock Tomb"]]
+ }, {
+ "species": "Landorus-Therian",
+ "weight": 20,
+ "item": ["Choice Scarf"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ground"],
+ "moves": [["Earthquake"], ["Stone Edge"], ["U-turn"], ["Stealth Rock"]]
+ }]
+ },
+ "tinglu": {
+ "weight": 6,
+ "sets": [{
+ "species": "Ting-Lu",
+ "weight": 80,
+ "item": ["Leftovers"],
+ "ability": ["Vessel of Ruin"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Fairy", "Poison", "Water"],
+ "moves": [["Earthquake"], ["Ruination"], ["Spikes", "Stealth Rock"], ["Whirlwind", "Protect"]]
+ }, {
+ "species": "Ting-Lu",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Vessel of Ruin"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Fairy", "Poison", "Water"],
+ "moves": [["Earthquake"], ["Ruination"], ["Spikes"], ["Stealth Rock"]]
+ }]
+ },
+ "chienpao": {
+ "weight": 6,
+ "sets": [{
+ "species": "Chien-Pao",
+ "weight": 30,
+ "item": ["Life Orb", "Heavy-Duty Boots", "Black Glasses"],
+ "ability": ["Sword of Ruin"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Swords Dance"], ["Icicle Crash"], ["Crunch"], ["Sucker Punch", "Ice Shard"]]
+ }, {
+ "species": "Chien-Pao",
+ "weight": 30,
+ "item": ["Life Orb", "Heavy-Duty Boots", "Black Glasses"],
+ "ability": ["Sword of Ruin"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Dark"],
+ "moves": [["Swords Dance"], ["Icicle Crash"], ["Sucker Punch"], ["Ice Shard"]]
+ }, {
+ "species": "Chien-Pao",
+ "weight": 40,
+ "item": ["Choice Band"],
+ "ability": ["Sword of Ruin"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark", "Ice"],
+ "moves": [["Icicle Crash", "Ice Spinner"], ["Crunch"], ["Sucker Punch"], ["Ice Shard"]]
+ }]
+ },
+ "deoxysattack": {
+ "weight": 6,
+ "sets": [{
+ "species": "Deoxys-Attack",
+ "weight": 50,
+ "item": ["Life Orb"],
+ "ability": ["Pressure"],
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "nature": ["Naive"],
+ "teraType": ["Ghost"],
+ "moves": [["Psycho Boost"], ["Shadow Ball"], ["Low Kick"], ["Rock Slide"]]
+ }, {
+ "species": "Deoxys-Attack",
+ "weight": 50,
+ "item": ["Focus Sash"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Steel"],
+ "moves": [["Psycho Boost"], ["Shadow Ball"], ["Icy Wind"], ["Stealth Rock", "Spikes"]]
+ }]
+ },
+ "giratinaorigin": {
+ "weight": 8,
+ "sets": [{
+ "species": "Giratina-Origin",
+ "weight": 50,
+ "item": ["Griseous Core"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 248, "atk": 104, "def": 112, "spe": 44},
+ "nature": ["Adamant"],
+ "teraType": ["Ghost", "Steel", "Poison"],
+ "moves": [["Poltergeist"], ["Dragon Tail"], ["Will-O-Wisp", "Thunder Wave"], ["Defog", "Shadow Sneak"]]
+ }, {
+ "species": "Giratina-Origin",
+ "weight": 50,
+ "item": ["Griseous Core"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 248, "def": 112, "spa": 104, "spe": 44},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Steel", "Poison"],
+ "moves": [["Hex"], ["Draco Meteor"], ["Will-O-Wisp", "Thunder Wave"], ["Defog"]]
+ }]
+ },
+ "glimmora": {
+ "weight": 7,
+ "sets": [{
+ "species": "Glimmora",
+ "weight": 100,
+ "item": ["Focus Sash"],
+ "ability": ["Toxic Debris"],
+ "evs": {"def": 172, "spa": 84, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Stealth Rock", "Spikes"], ["Mortal Spin"], ["Mud Shot"], ["Dazzling Gleam"]]
+ }]
+ },
+ "ironbundle": {
+ "weight": 6,
+ "sets": [{
+ "species": "Iron Bundle",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Quark Drive"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Ice"],
+ "moves": [["Freeze-Dry"], ["Hydro Pump"], ["Ice Beam"], ["Encore", "Taunt"]]
+ }]
+ },
+ "groudon": {
+ "weight": 6,
+ "sets": [{
+ "species": "Groudon",
+ "weight": 60,
+ "item": ["Leftovers"],
+ "ability": ["Drought"],
+ "evs": {"hp": 240, "def": 252, "spe": 16},
+ "nature": ["Impish"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Precipice Blades", "Earthquake"], ["Stealth Rock", "Protect"], ["Will-O-Wisp", "Roar"], ["Spikes"]]
+ }, {
+ "species": "Groudon",
+ "weight": 40,
+ "item": ["Leftovers"],
+ "ability": ["Drought"],
+ "evs": {"hp": 240, "def": 252, "spe": 16},
+ "nature": ["Impish"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Precipice Blades", "Earthquake"], ["Stealth Rock", "Spikes"], ["Roar"], ["Thunder Wave"]]
+ }]
+ },
+ "kingambit": {
+ "weight": 5,
+ "sets": [{
+ "species": "Kingambit",
+ "weight": 70,
+ "item": ["Black Glasses", "Lum Berry"],
+ "ability": ["Supreme Overlord"],
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "nature": ["Adamant"],
+ "teraType": ["Dark", "Flying"],
+ "moves": [["Kowtow Cleave"], ["Swords Dance"], ["Iron Head"], ["Sucker Punch"]]
+ }, {
+ "species": "Kingambit",
+ "weight": 30,
+ "item": ["Air Balloon"],
+ "ability": ["Supreme Overlord"],
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "nature": ["Adamant"],
+ "teraType": ["Fire"],
+ "moves": [["Kowtow Cleave"], ["Swords Dance"], ["Iron Head"], ["Sucker Punch"]]
+ }]
+ },
+ "kyuremblack": {
+ "weight": 5,
+ "sets": [{
+ "species": "Kyurem-Black",
+ "weight": 100,
+ "item": ["Loaded Dice"],
+ "ability": ["Teravolt"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Electric"],
+ "moves": [["Fusion Bolt"], ["Icicle Spear"], ["Dragon Dance"], ["Substitute", "Scale Shot"]]
+ }]
+ },
+ "fluttermane": {
+ "weight": 5,
+ "sets": [{
+ "species": "Flutter Mane",
+ "weight": 50,
+ "item": ["Choice Specs"],
+ "ability": ["Protosynthesis"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Stellar"],
+ "moves": [["Moonblast"], ["Shadow Ball"], ["Psyshock", "Mystical Fire"], ["Power Gem"]]
+ }, {
+ "species": "Flutter Mane",
+ "weight": 50,
+ "item": ["Life Orb"],
+ "ability": ["Protosynthesis"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Stellar"],
+ "moves": [["Moonblast"], ["Shadow Ball"], ["Psyshock", "Mystical Fire", "Calm Mind"], ["Power Gem"]]
+ }]
+ },
+ "rayquaza": {
+ "weight": 4,
+ "sets": [{
+ "species": "Rayquaza",
+ "weight": 50,
+ "item": ["Life Orb"],
+ "ability": ["Air Lock"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly", "Adamant"],
+ "teraType": ["Flying", "Normal", "Ground", "Steel"],
+ "moves": [["Dragon Ascent"], ["Earthquake"], ["Extreme Speed"], ["Dragon Dance"]]
+ }, {
+ "species": "Rayquaza",
+ "weight": 50,
+ "item": ["Life Orb"],
+ "ability": ["Air Lock"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Normal"],
+ "moves": [["Dragon Ascent"], ["Earthquake"], ["Extreme Speed"], ["Swords Dance"]]
+ }]
+ },
+ "arceusghost": {
+ "weight": 3,
+ "sets": [{
+ "species": "Arceus-Ghost",
+ "weight": 50,
+ "item": ["Spooky Plate"],
+ "ability": ["Multitype"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Stellar"],
+ "moves": [["Calm Mind"], ["Judgment"], ["Focus Blast"], ["Power Gem"]]
+ }, {
+ "species": "Arceus-Ghost",
+ "weight": 50,
+ "item": ["Spooky Plate"],
+ "ability": ["Multitype"],
+ "evs": {"hp": 248, "def": 204, "spe": 56},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Fairy", "Poison"],
+ "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Dragon Tail"]]
+ }]
+ },
+ "lunala": {
+ "weight": 3,
+ "sets": [{
+ "species": "Lunala",
+ "weight": 50,
+ "item": ["Power Herb"],
+ "ability": ["Shadow Shield"],
+ "evs": {"hp": 56, "spa": 252, "spe": 200},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Agility"], ["Meteor Beam"], ["Moonblast"], ["Moongeist Beam"]]
+ }, {
+ "species": "Lunala",
+ "weight": 50,
+ "item": ["Power Herb"],
+ "ability": ["Shadow Shield"],
+ "evs": {"hp": 56, "spa": 252, "spe": 200},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fighting", "Ghost"],
+ "moves": [["Agility"], ["Meteor Beam"], ["Focus Blast"], ["Moongeist Beam"]]
+ }]
+ },
+ "mewtwo": {
+ "weight": 1,
+ "sets": [{
+ "species": "Mewtwo",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Leftovers", "Life Orb"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Nasty Plot"], ["Psystrike"], ["Flamethrower"], ["Taunt", "Earth Power", "Grass Knot"]]
+ }, {
+ "species": "Mewtwo",
+ "weight": 50,
+ "item": ["Choice Specs"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fire"],
+ "moves": [["Ice Beam"], ["Psystrike"], ["Flamethrower"], ["Grass Knot"]]
+ }]
+ },
+ "skeledirge": {
+ "weight": 6,
+ "sets": [{
+ "species": "Skeledirge",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Unaware"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy"],
+ "moves": [["Torch Song"], ["Hex"], ["Will-O-Wisp"], ["Slack Off"]]
+ }]
+ },
+ "toxapex": {
+ "weight": 4,
+ "sets": [{
+ "species": "Toxapex",
+ "weight": 67,
+ "item": ["Rocky Helmet"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy"],
+ "moves": [["Toxic"], ["Recover"], ["Haze"], ["Toxic Spikes", "Ice Beam"]]
+ }, {
+ "species": "Toxapex",
+ "weight": 33,
+ "item": ["Rocky Helmet"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Fairy"],
+ "moves": [["Toxic"], ["Recover"], ["Haze"], ["Poison Jab"]]
+ }]
+ },
+ "ditto": {
+ "weight": 1,
+ "sets": [{
+ "species": "Ditto",
+ "weight": 100,
+ "item": ["Choice Scarf"],
+ "ability": ["Imposter"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy"],
+ "moves": [["Transform"]]
+ }]
+ },
+ "necrozmadawnwings": {
+ "weight": 1,
+ "sets": [{
+ "species": "Necrozma-Dawn-Wings",
+ "wantsTera": true,
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Prism Armor"],
+ "evs": {"hp": 252, "def": 4, "spa": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy", "Steel"],
+ "moves": [["Calm Mind"], ["Iron Defense"], ["Moonlight"], ["Stored Power"]]
+ }]
+ },
+ "arceuselectric": {
+ "weight": 1,
+ "sets": [{
+ "species": "Arceus-Electric",
+ "weight": 100,
+ "item": ["Zap Plate"],
+ "ability": ["Multitype"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Fairy"],
+ "moves": [["Calm Mind"], ["Judgment"], ["Ice Beam"], ["Recover"]]
+ }]
+ }
+ },
+ "OU": {
+ "kingambit": {
+ "weight": 10,
+ "sets": [{
+ "species": "Kingambit",
+ "weight": 20,
+ "item": ["Black Glasses"],
+ "ability": ["Supreme Overlord"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Kowtow Cleave"], ["Swords Dance"], ["Iron Head", "Low Kick"], ["Sucker Punch"]]
+ }, {
+ "species": "Kingambit",
+ "weight": 20,
+ "item": ["Air Balloon", "Leftovers"],
+ "ability": ["Supreme Overlord"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Ghost", "Fairy"],
+ "moves": [["Low Kick"], ["Swords Dance"], ["Iron Head", "Kowtow Cleave"], ["Sucker Punch"]]
+ }, {
+ "species": "Kingambit",
+ "weight": 20,
+ "item": ["Air Balloon", "Leftovers"],
+ "ability": ["Supreme Overlord"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Ghost", "Fairy"],
+ "moves": [["Iron Head"], ["Swords Dance"], ["Kowtow Cleave"], ["Sucker Punch"]]
+ }, {
+ "species": "Kingambit",
+ "weight": 40,
+ "item": ["Leftovers"],
+ "ability": ["Supreme Overlord"],
+ "evs": {"hp": 252, "atk": 252, "spd": 4},
+ "nature": ["Adamant"],
+ "teraType": ["Ghost", "Fairy"],
+ "moves": [["Kowtow Cleave"], ["Swords Dance"], ["Iron Head"], ["Sucker Punch"]]
+ }]
+ },
+ "zamazenta": {
+ "weight": 10,
+ "sets": [{
+ "species": "Zamazenta",
+ "weight": 40,
+ "item": ["Leftovers"],
+ "ability": ["Dauntless Shield"],
+ "evs": {"hp": 252, "def": 88, "spe": 168},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Fire", "Dark"],
+ "moves": [["Iron Defense"], ["Body Press"], ["Crunch"], ["Roar", "Stone Edge"]]
+ }, {
+ "species": "Zamazenta",
+ "weight": 15,
+ "item": ["Chesto Berry"],
+ "ability": ["Dauntless Shield"],
+ "evs": {"hp": 252, "def": 88, "spe": 168},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Fire", "Dark"],
+ "moves": [["Iron Defense"], ["Body Press"], ["Crunch"], ["Rest"]]
+ }, {
+ "species": "Zamazenta",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Dauntless Shield"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Dark"],
+ "moves": [["Close Combat"], ["Stone Edge"], ["Crunch"], ["Heavy Slam"]]
+ }, {
+ "species": "Zamazenta",
+ "weight": 15,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Dauntless Shield"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Close Combat"], ["Stone Edge"], ["Crunch"], ["Ice Fang"]]
+ }]
+ },
+ "dragapult": {
+ "weight": 9,
+ "sets": [{
+ "species": "Dragapult",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Infiltrator"],
+ "evs": {"atk": 60, "spa": 196, "spe": 252},
+ "nature": ["Naive"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Dragon Darts"], ["Hex"], ["Will-O-Wisp", "Thunder Wave"], ["U-turn"]]
+ }, {
+ "species": "Dragapult",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Infiltrator"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Draco Meteor"], ["Hex"], ["Will-O-Wisp", "Thunder Wave"], ["U-turn"]]
+ }, {
+ "species": "Dragapult",
+ "weight": 30,
+ "item": ["Choice Specs"],
+ "ability": ["Infiltrator"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid", "Modest"],
+ "teraType": ["Dragon", "Ghost"],
+ "moves": [["Draco Meteor"], ["Shadow Ball"], ["Flamethrower"], ["U-turn"]]
+ }, {
+ "species": "Dragapult",
+ "wantsTera": true,
+ "weight": 30,
+ "item": ["Choice Band"],
+ "ability": ["Clear Body"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost"],
+ "moves": [["Dragon Darts"], ["Tera Blast"], ["U-turn"], ["Phantom Force", "Sucker Punch"]]
+ }]
+ },
+ "gholdengo": {
+ "weight": 9,
+ "sets": [{
+ "species": "Gholdengo",
+ "weight": 14,
+ "item": ["Heavy-Duty Boots", "Air Balloon"],
+ "ability": ["Good as Gold"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Steel"],
+ "moves": [["Nasty Plot"], ["Shadow Ball"], ["Make It Rain"], ["Recover", "Psyshock"]]
+ }, {
+ "species": "Gholdengo",
+ "weight": 14,
+ "item": ["Heavy-Duty Boots", "Air Balloon"],
+ "ability": ["Good as Gold"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fighting"],
+ "moves": [["Nasty Plot"], ["Shadow Ball"], ["Make It Rain"], ["Focus Blast"]]
+ }, {
+ "species": "Gholdengo",
+ "weight": 12,
+ "item": ["Heavy-Duty Boots", "Air Balloon", "Rocky Helmet"],
+ "ability": ["Good as Gold"],
+ "evs": {"hp": 252, "def": 196, "spe": 60},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy"],
+ "moves": [["Nasty Plot"], ["Shadow Ball"], ["Make It Rain", "Dazzling Gleam"], ["Recover"]]
+ }, {
+ "species": "Gholdengo",
+ "weight": 12,
+ "item": ["Heavy-Duty Boots", "Air Balloon", "Rocky Helmet"],
+ "ability": ["Good as Gold"],
+ "evs": {"hp": 252, "def": 196, "spe": 60},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Nasty Plot"], ["Shadow Ball"], ["Make It Rain"], ["Recover"]]
+ }, {
+ "species": "Gholdengo",
+ "weight": 12,
+ "item": ["Leftovers", "Air Balloon", "Rocky Helmet"],
+ "ability": ["Good as Gold"],
+ "evs": {"hp": 252, "def": 196, "spe": 60},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy"],
+ "moves": [["Hex"], ["Thunder Wave"], ["Make It Rain", "Dazzling Gleam"], ["Recover"]]
+ }, {
+ "species": "Gholdengo",
+ "weight": 12,
+ "item": ["Leftovers", "Air Balloon", "Rocky Helmet"],
+ "ability": ["Good as Gold"],
+ "evs": {"hp": 252, "def": 196, "spe": 60},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Hex"], ["Thunder Wave"], ["Make It Rain", "Focus Blast"], ["Recover"]]
+ }, {
+ "species": "Gholdengo",
+ "weight": 12,
+ "item": ["Choice Scarf"],
+ "ability": ["Good as Gold"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fighting"],
+ "moves": [["Trick"], ["Shadow Ball"], ["Make It Rain"], ["Focus Blast"]]
+ }, {
+ "species": "Gholdengo",
+ "weight": 12,
+ "item": ["Choice Scarf"],
+ "ability": ["Good as Gold"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Flying"],
+ "moves": [["Trick"], ["Shadow Ball"], ["Make It Rain"], ["Nasty Plot", "Recover"]]
+ }]
+ },
+ "greattusk": {
+ "weight": 9,
+ "sets": [{
+ "species": "Great Tusk",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots", "Rocky Helmet", "Booster Energy"],
+ "ability": ["Protosynthesis"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ground", "Steel", "Fire"],
+ "moves": [["Headlong Rush"], ["Ice Spinner"], ["Rapid Spin"], ["Knock Off", "Close Combat"]]
+ }, {
+ "species": "Great Tusk",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots", "Rocky Helmet", "Leftovers"],
+ "ability": ["Protosynthesis"],
+ "evs": {"hp": 252, "atk": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Water"],
+ "moves": [["Headlong Rush"], ["Ice Spinner"], ["Rapid Spin"], ["Knock Off", "Stealth Rock"]]
+ }, {
+ "species": "Great Tusk",
+ "weight": 20,
+ "item": ["Booster Energy"],
+ "ability": ["Protosynthesis"],
+ "evs": {"hp": 252, "atk": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Poison", "Ice"],
+ "moves": [["Headlong Rush"], ["Ice Spinner"], ["Rapid Spin", "Close Combat", "Knock Off"], ["Bulk Up"]]
+ }]
+ },
+ "landorustherian": {
+ "weight": 9,
+ "sets": [{
+ "species": "Landorus-Therian",
+ "weight": 50,
+ "item": ["Rocky Helmet"],
+ "ability": ["Intimidate"],
+ "evs": {"hp": 252, "spa": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Dragon"],
+ "moves": [["Earth Power"], ["U-turn"], ["Stealth Rock"], ["Taunt"]]
+ }, {
+ "species": "Landorus-Therian",
+ "weight": 20,
+ "item": ["Soft Sand", "Rocky Helmet"],
+ "ability": ["Intimidate"],
+ "evs": {"hp": 8, "atk": 240, "spd": 8, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water", "Ground"],
+ "moves": [["Earthquake"], ["U-turn", "Taunt"], ["Stealth Rock"], ["Stone Edge"]]
+ }, {
+ "species": "Landorus-Therian",
+ "wantsTera": true,
+ "weight": 30,
+ "item": ["Choice Scarf"],
+ "ability": ["Intimidate"],
+ "evs": {"hp": 8, "atk": 240, "spd": 8, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Flying", "Ice"],
+ "moves": [["Earthquake"], ["U-turn"], ["Tera Blast"], ["Stone Edge"]]
+ }]
+ },
+ "darkrai": {
+ "weight": 8,
+ "sets": [{
+ "species": "Darkrai",
+ "weight": 5,
+ "item": ["Heavy-Duty Boots", "Leftovers", "Expert Belt"],
+ "ability": ["Bad Dreams"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Dark Pulse"], ["Focus Blast"], ["Ice Beam"], ["Nasty Plot"]]
+ }, {
+ "species": "Darkrai",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots", "Leftovers", "Expert Belt"],
+ "ability": ["Bad Dreams"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Poison", "Ghost"],
+ "moves": [["Dark Pulse"], ["Sludge Bomb"], ["Ice Beam", "Focus Blast"], ["Nasty Plot"]]
+ }, {
+ "species": "Darkrai",
+ "weight": 15,
+ "item": ["Choice Scarf"],
+ "ability": ["Bad Dreams"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Poison", "Dark"],
+ "moves": [["Dark Pulse"], ["Sludge Bomb"], ["Ice Beam", "Focus Blast"], ["Trick"]]
+ }, {
+ "species": "Darkrai",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Bad Dreams"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Poison", "Dark"],
+ "moves": [["Dark Pulse"], ["Sludge Bomb"], ["Ice Beam"], ["Will-O-Wisp"]]
+ }, {
+ "species": "Darkrai",
+ "weight": 35,
+ "item": ["Life Orb", "Expert Belt", "Choice Scarf"],
+ "ability": ["Bad Dreams"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Poison", "Dark"],
+ "moves": [["Dark Pulse"], ["Sludge Bomb"], ["Ice Beam"], ["Focus Blast"]]
+ }]
+ },
+ "dragonite": {
+ "weight": 8,
+ "sets": [{
+ "species": "Dragonite",
+ "wantsTera": true,
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Multiscale"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Normal"],
+ "moves": [["Earthquake"], ["Dragon Dance"], ["Extreme Speed"], ["Ice Spinner", "Roost"]]
+ }, {
+ "species": "Dragonite",
+ "wantsTera": true,
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Multiscale"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Ground"],
+ "moves": [["Earthquake"], ["Dragon Dance"], ["Roost", "Extreme Speed"], ["Ice Spinner"]]
+ }, {
+ "species": "Dragonite",
+ "wantsTera": true,
+ "weight": 20,
+ "item": ["Choice Band"],
+ "ability": ["Multiscale"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Normal"],
+ "moves": [["Earthquake", "Fire Punch"], ["Extreme Speed"], ["Outrage"], ["Ice Spinner"]]
+ }]
+ },
+ "gliscor": {
+ "weight": 8,
+ "sets": [{
+ "species": "Gliscor",
+ "weight": 10,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "def": 248, "spd": 16},
+ "nature": ["Impish"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Earthquake"], ["Toxic"], ["Protect"], ["Spikes"]]
+ }, {
+ "species": "Gliscor",
+ "weight": 10,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "def": 248, "spd": 16},
+ "nature": ["Impish"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Earthquake", "Toxic"], ["Knock Off"], ["Protect"], ["Spikes"]]
+ }, {
+ "species": "Gliscor",
+ "weight": 10,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "def": 36, "spd": 228},
+ "nature": ["Careful"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Earthquake"], ["Toxic"], ["Protect"], ["Spikes"]]
+ }, {
+ "species": "Gliscor",
+ "weight": 10,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "def": 36, "spd": 228},
+ "nature": ["Careful"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Earthquake", "Toxic"], ["Knock Off"], ["Protect"], ["Spikes"]]
+ }, {
+ "species": "Gliscor",
+ "weight": 10,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "def": 248, "spd": 16},
+ "nature": ["Impish"],
+ "teraType": ["Normal"],
+ "moves": [["Earthquake", "Knock Off"], ["Swords Dance"], ["Facade"], ["Protect"]]
+ }, {
+ "species": "Gliscor",
+ "weight": 10,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "def": 248, "spd": 16},
+ "nature": ["Impish"],
+ "teraType": ["Water"],
+ "moves": [["Earthquake"], ["Swords Dance"], ["Knock Off"], ["Protect"]]
+ }, {
+ "species": "Gliscor",
+ "weight": 10,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "def": 36, "spd": 228},
+ "nature": ["Careful"],
+ "teraType": ["Normal"],
+ "moves": [["Earthquake", "Knock Off"], ["Swords Dance"], ["Facade"], ["Protect"]]
+ }, {
+ "species": "Gliscor",
+ "weight": 10,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "def": 36, "spd": 228},
+ "nature": ["Careful"],
+ "teraType": ["Water"],
+ "moves": [["Earthquake"], ["Swords Dance"], ["Knock Off"], ["Protect"]]
+ }, {
+ "species": "Gliscor",
+ "weight": 10,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "atk": 12, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Normal"],
+ "moves": [["Earthquake", "Knock Off"], ["Swords Dance"], ["Facade"], ["Protect"]]
+ }, {
+ "species": "Gliscor",
+ "weight": 10,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 244, "atk": 12, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water"],
+ "moves": [["Earthquake"], ["Swords Dance"], ["Knock Off"], ["Protect"]]
+ }]
+ },
+ "ironmoth": {
+ "weight": 8,
+ "sets": [{
+ "species": "Iron Moth",
+ "weight": 25,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"def": 124, "spa": 132, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Fiery Dance"], ["Sludge Wave"], ["Dazzling Gleam"], ["Substitute"]]
+ }, {
+ "species": "Iron Moth",
+ "weight": 25,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"def": 124, "spa": 132, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Fiery Dance"], ["Sludge Wave"], ["Psychic"], ["Substitute", "Dazzling Gleam"]]
+ }, {
+ "species": "Iron Moth",
+ "wantsTera": true,
+ "weight": 25,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"def": 124, "spa": 132, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Fiery Dance"], ["Sludge Wave"], ["Tera Blast"], ["Substitute", "Dazzling Gleam"]]
+ }, {
+ "species": "Iron Moth",
+ "weight": 25,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"def": 124, "spa": 132, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Grass"],
+ "moves": [["Fiery Dance"], ["Sludge Wave"], ["Energy Ball"], ["Substitute", "Dazzling Gleam"]]
+ }]
+ },
+ "ironvaliant": {
+ "weight": 8,
+ "sets": [{
+ "species": "Iron Valiant",
+ "weight": 15,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Moonblast"], ["Calm Mind"], ["Shadow Ball"], ["Encore", "Thunderbolt"]]
+ }, {
+ "species": "Iron Valiant",
+ "weight": 15,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Moonblast"], ["Calm Mind"], ["Psyshock"], ["Encore"]]
+ }, {
+ "species": "Iron Valiant",
+ "weight": 15,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Electric"],
+ "moves": [["Moonblast"], ["Calm Mind"], ["Shadow Ball", "Psyshock"], ["Thunderbolt"]]
+ }, {
+ "species": "Iron Valiant",
+ "weight": 25,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Dark"],
+ "moves": [["Swords Dance"], ["Close Combat"], ["Spirit Break", "Encore"], ["Knock Off"]]
+ }, {
+ "species": "Iron Valiant",
+ "weight": 15,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "nature": ["Naive"],
+ "teraType": ["Steel", "Fairy"],
+ "moves": [["Moonblast"], ["Knock Off"], ["Close Combat"], ["Encore", "Destiny Bond"]]
+ }, {
+ "species": "Iron Valiant",
+ "weight": 15,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "nature": ["Naive"],
+ "teraType": ["Steel", "Fairy"],
+ "moves": [["Moonblast"], ["Knock Off", "Close Combat"], ["Destiny Bond"], ["Encore"]]
+ }]
+ },
+ "kyurem": {
+ "weight": 8,
+ "sets": [{
+ "species": "Kyurem",
+ "wantsTera": true,
+ "weight": 25,
+ "item": ["Loaded Dice"],
+ "ability": ["Pressure"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ground", "Fire"],
+ "moves": [["Icicle Spear"], ["Scale Shot"], ["Dragon Dance"], ["Tera Blast"]]
+ }, {
+ "species": "Kyurem",
+ "weight": 20,
+ "item": ["Never-Melt Ice", "Heavy-Duty Boots"],
+ "ability": ["Pressure"],
+ "evs": {"atk": 168, "spa": 88, "spe": 252},
+ "nature": ["Hasty"],
+ "teraType": ["Ground", "Ice"],
+ "moves": [["Icicle Spear"], ["Freeze-Dry"], ["Earth Power"], ["Dragon Dance"]]
+ }, {
+ "species": "Kyurem",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Pressure"],
+ "evs": {"hp": 52, "spa": 204, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Substitute"], ["Freeze-Dry"], ["Earth Power"], ["Protect"]]
+ }, {
+ "species": "Kyurem",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground", "Ice"],
+ "moves": [["Draco Meteor"], ["Freeze-Dry"], ["Earth Power"], ["Ice Beam"]]
+ }, {
+ "species": "Kyurem",
+ "weight": 15,
+ "item": ["Choice Specs"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid", "Modest"],
+ "teraType": ["Ground", "Ice", "Fairy"],
+ "moves": [["Draco Meteor"], ["Freeze-Dry"], ["Earth Power"], ["Ice Beam"]]
+ }]
+ },
+ "ogerponwellspring": {
+ "weight": 8,
+ "sets": [{
+ "species": "Ogerpon-Wellspring",
+ "weight": 40,
+ "item": ["Wellspring Mask"],
+ "ability": ["Water Absorb"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water"],
+ "moves": [["Ivy Cudgel"], ["Power Whip", "Horn Leech"], ["Swords Dance"], ["Play Rough", "Encore", "Knock Off"]]
+ }, {
+ "species": "Ogerpon-Wellspring",
+ "weight": 30,
+ "item": ["Wellspring Mask"],
+ "ability": ["Water Absorb"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water"],
+ "moves": [["Ivy Cudgel"], ["Horn Leech"], ["U-turn"], ["Knock Off", "Encore", "Spikes"]]
+ }, {
+ "species": "Ogerpon-Wellspring",
+ "weight": 20,
+ "item": ["Wellspring Mask"],
+ "ability": ["Water Absorb"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Water"],
+ "moves": [["Ivy Cudgel"], ["Power Whip"], ["Knock Off", "Play Rough"], ["Trailblaze"]]
+ }, {
+ "species": "Ogerpon-Wellspring",
+ "weight": 10,
+ "item": ["Wellspring Mask"],
+ "ability": ["Water Absorb"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Water"],
+ "moves": [["Ivy Cudgel"], ["Power Whip"], ["Knock Off"], ["Play Rough"]]
+ }]
+ },
+ "ragingbolt": {
+ "weight": 8,
+ "sets": [{
+ "species": "Raging Bolt",
+ "weight": 80,
+ "item": ["Leftovers", "Booster Energy"],
+ "ability": ["Protosynthesis"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 20},
+ "nature": ["Modest"],
+ "teraType": ["Fairy", "Flying", "Bug"],
+ "moves": [["Thunderclap"], ["Calm Mind"], ["Dragon Pulse", "Draco Meteor"], ["Thunderbolt"]]
+ }, {
+ "species": "Raging Bolt",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Protosynthesis"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 20},
+ "nature": ["Modest"],
+ "teraType": ["Fairy"],
+ "moves": [["Thunderclap"], ["Volt Switch"], ["Dragon Pulse"], ["Taunt"]]
+ }]
+ },
+ "samurotthisui": {
+ "weight": 8,
+ "sets": [{
+ "species": "Samurott-Hisui",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Sharpness"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Poison", "Fire"],
+ "moves": [["Ceaseless Edge"], ["Razor Shell", "Aqua Cutter"], ["Knock Off"], ["Flip Turn", "Encore"]]
+ }, {
+ "species": "Samurott-Hisui",
+ "weight": 30,
+ "item": ["Choice Scarf"],
+ "ability": ["Sharpness"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water", "Dark"],
+ "moves": [["Ceaseless Edge"], ["Razor Shell", "Aqua Cutter"], ["Knock Off"], ["Flip Turn", "Sacred Sword"]]
+ }, {
+ "species": "Samurott-Hisui",
+ "weight": 30,
+ "item": ["Assault Vest"],
+ "ability": ["Sharpness"],
+ "evs": {"hp": 172, "atk": 252, "spe": 84},
+ "nature": ["Adamant"],
+ "teraType": ["Poison"],
+ "moves": [["Ceaseless Edge"], ["Razor Shell", "Aqua Cutter"], ["Knock Off", "Flip Turn"], ["Aqua Jet", "Sucker Punch"]]
+ }]
+ },
+ "slowkinggalar": {
+ "weight": 8,
+ "sets": [{
+ "species": "Slowking-Galar",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 16, "spd": 240},
+ "ivs": {"atk": 0, "spe": 0},
+ "nature": ["Sassy"],
+ "teraType": ["Water", "Grass", "Fairy"],
+ "moves": [["Future Sight", "Psychic Noise"], ["Chilly Reception"], ["Sludge Bomb"], ["Thunder Wave", "Toxic"]]
+ }, {
+ "species": "Slowking-Galar",
+ "weight": 50,
+ "item": ["Assault Vest"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 16, "spa": 144, "spd": 96},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Water", "Grass"],
+ "moves": [["Psyshock", "Psychic Noise"], ["Flamethrower"], ["Sludge Bomb"], ["Ice Beam"]]
+ }]
+ },
+ "tinglu": {
+ "weight": 8,
+ "sets": [{
+ "species": "Ting-Lu",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Vessel of Ruin"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Poison", "Ghost"],
+ "moves": [["Spikes", "Stealth Rock"], ["Earthquake"], ["Whirlwind"], ["Ruination"]]
+ }]
+ },
+ "alomomola": {
+ "weight": 7,
+ "sets": [{
+ "species": "Alomomola",
+ "weight": 33,
+ "item": ["Heavy-Duty Boots", "Rocky Helmet"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"spe": 0},
+ "nature": ["Relaxed"],
+ "teraType": ["Ghost", "Flying"],
+ "moves": [["Flip Turn"], ["Scald"], ["Wish"], ["Protect"]]
+ }, {
+ "species": "Alomomola",
+ "weight": 33,
+ "item": ["Heavy-Duty Boots", "Rocky Helmet"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 4, "def": 252, "spd": 252},
+ "ivs": {"spe": 0},
+ "nature": ["Relaxed"],
+ "teraType": ["Ghost", "Flying"],
+ "moves": [["Flip Turn"], ["Scald"], ["Wish"], ["Protect"]]
+ }, {
+ "species": "Alomomola",
+ "weight": 34,
+ "item": ["Assault Vest"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 20, "def": 236, "spd": 252},
+ "ivs": {"spe": 0},
+ "nature": ["Sassy"],
+ "teraType": ["Ghost", "Flying"],
+ "moves": [["Flip Turn"], ["Scald"], ["Play Rough"], ["Mirror Coat"]]
+ }]
+ },
+ "cinderace": {
+ "weight": 7,
+ "sets": [{
+ "species": "Cinderace",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Blaze"],
+ "evs": {"hp": 224, "atk": 32, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Flying"],
+ "moves": [["Pyro Ball"], ["U-turn"], ["Court Change"], ["Will-O-Wisp"]]
+ }, {
+ "species": "Cinderace",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Libero"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fire"],
+ "moves": [["Pyro Ball"], ["U-turn"], ["Court Change"], ["Sucker Punch", "Gunk Shot"]]
+ }]
+ },
+ "deoxysspeed": {
+ "weight": 7,
+ "sets": [{
+ "species": "Deoxys-Speed",
+ "weight": 20,
+ "item": ["Life Orb", "Expert Belt"],
+ "ability": ["Pressure"],
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "nature": ["Naive"],
+ "teraType": ["Fighting"],
+ "moves": [["Psycho Boost"], ["Superpower"], ["Knock Off"], ["Ice Beam", "Taunt"]]
+ }, {
+ "species": "Deoxys-Speed",
+ "weight": 20,
+ "item": ["Life Orb", "Expert Belt"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fighting", "Psychic", "Ghost"],
+ "moves": [["Psycho Boost"], ["Focus Blast"], ["Shadow Ball"], ["Ice Beam", "Nasty Plot", "Taunt"]]
+ }, {
+ "species": "Deoxys-Speed",
+ "weight": 20,
+ "item": ["Life Orb", "Expert Belt"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Electric", "Psychic"],
+ "moves": [["Psycho Boost"], ["Thunderbolt"], ["Ice Beam"], ["Nasty Plot"]]
+ }, {
+ "species": "Deoxys-Speed",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Pressure"],
+ "evs": {"atk": 200, "spa": 252, "spe": 56},
+ "nature": ["Naive"],
+ "teraType": ["Fighting"],
+ "moves": [["Psycho Boost"], ["Knock Off"], ["Ice Beam"], ["Superpower"]]
+ }]
+ },
+ "garganacl": {
+ "weight": 7,
+ "sets": [{
+ "species": "Garganacl",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Purifying Salt"],
+ "evs": {"hp": 252, "def": 52, "spd": 204},
+ "nature": ["Careful"],
+ "teraType": ["Water", "Fairy"],
+ "moves": [["Salt Cure"], ["Recover"], ["Curse"], ["Earthquake"]]
+ }, {
+ "species": "Garganacl",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Purifying Salt"],
+ "evs": {"hp": 252, "def": 52, "spd": 204},
+ "nature": ["Careful"],
+ "teraType": ["Water", "Fairy"],
+ "moves": [["Salt Cure"], ["Recover"], ["Stealth Rock"], ["Protect"]]
+ }]
+ },
+ "ironcrown": {
+ "weight": 7,
+ "sets": [{
+ "species": "Iron Crown",
+ "weight": 50,
+ "item": ["Assault Vest"],
+ "ability": ["Quark Drive"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 20},
+ "nature": ["Timid"],
+ "teraType": ["Fighting", "Fairy"],
+ "moves": [["Tachyon Cutter"], ["Future Sight", "Psychic Noise"], ["Focus Blast"], ["Volt Switch"]]
+ }, {
+ "species": "Iron Crown",
+ "weight": 50,
+ "item": ["Choice Specs"],
+ "ability": ["Quark Drive"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 20},
+ "nature": ["Timid"],
+ "teraType": ["Fighting", "Steel"],
+ "moves": [["Tachyon Cutter"], ["Psyshock", "Psychic Noise"], ["Focus Blast"], ["Volt Switch"]]
+ }]
+ },
+ "moltres": {
+ "weight": 7,
+ "sets": [{
+ "species": "Moltres",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Flame Body"],
+ "evs": {"hp": 248, "def": 248, "spe": 12},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Grass", "Fairy"],
+ "moves": [["Flamethrower"], ["Will-O-Wisp", "Hurricane"], ["Roar"], ["Roost"]]
+ }, {
+ "species": "Moltres",
+ "weight": 60,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Flame Body"],
+ "evs": {"hp": 248, "def": 248, "spe": 12},
+ "nature": ["Bold"],
+ "teraType": ["Grass", "Fairy"],
+ "moves": [["Flamethrower"], ["Will-O-Wisp", "Hurricane", "Roar"], ["U-turn"], ["Roost"]]
+ }]
+ },
+ "roaringmoon": {
+ "weight": 7,
+ "sets": [{
+ "species": "Roaring Moon",
+ "weight": 50,
+ "item": ["Booster Energy"],
+ "ability": ["Protosynthesis"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly", "Adamant"],
+ "teraType": ["Flying"],
+ "moves": [["Dragon Dance"], ["Knock Off"], ["Acrobatics"], ["Earthquake", "Taunt"]]
+ }, {
+ "species": "Roaring Moon",
+ "weight": 50,
+ "item": ["Booster Energy"],
+ "ability": ["Protosynthesis"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly", "Adamant"],
+ "teraType": ["Ground"],
+ "moves": [["Dragon Dance"], ["Knock Off"], ["Earthquake"], ["Acrobatics", "Taunt"]]
+ }]
+ },
+ "enamorus": {
+ "weight": 6,
+ "sets": [{
+ "species": "Enamorus",
+ "wantsTera": true,
+ "weight": 40,
+ "item": ["Choice Scarf"],
+ "ability": ["Contrary"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Stellar"],
+ "moves": [["Moonblast"], ["Earth Power"], ["Tera Blast"], ["Healing Wish"]]
+ }, {
+ "species": "Enamorus",
+ "weight": 40,
+ "item": ["Choice Scarf"],
+ "ability": ["Contrary"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Ground"],
+ "moves": [["Moonblast"], ["Earth Power"], ["Mystical Fire"], ["Healing Wish"]]
+ }, {
+ "species": "Enamorus",
+ "weight": 10,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Cute Charm"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Ground", "Steel"],
+ "moves": [["Moonblast"], ["Earth Power"], ["Calm Mind"], ["Taunt"]]
+ }, {
+ "species": "Enamorus",
+ "weight": 10,
+ "item": ["Leftovers"],
+ "ability": ["Cute Charm"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Ground", "Steel"],
+ "moves": [["Moonblast"], ["Earth Power"], ["Calm Mind"], ["Substitute"]]
+ }]
+ },
+ "hatterene": {
+ "weight": 6,
+ "sets": [{
+ "species": "Hatterene",
+ "weight": 40,
+ "item": ["Leftovers"],
+ "ability": ["Magic Bounce"],
+ "evs": {"hp": 252, "def": 204, "spe": 52},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water", "Fire"],
+ "moves": [["Calm Mind"], ["Draining Kiss"], ["Psyshock", "Stored Power"], ["Mystical Fire"]]
+ }, {
+ "species": "Hatterene",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Magic Bounce"],
+ "evs": {"hp": 252, "def": 204, "spe": 52},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Calm Mind"], ["Draining Kiss"], ["Psyshock", "Stored Power"], ["Nuzzle"]]
+ }, {
+ "species": "Hatterene",
+ "weight": 40,
+ "item": ["Assault Vest"],
+ "ability": ["Magic Bounce"],
+ "evs": {"hp": 252, "spa": 140, "spd": 104, "spe": 12},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Water", "Steel"],
+ "moves": [["Mystical Fire"], ["Draining Kiss"], ["Psyshock"], ["Nuzzle", "Future Sight"]]
+ }]
+ },
+ "ogerpon": {
+ "weight": 5,
+ "sets": [{
+ "species": "Ogerpon",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Defiant"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Grass"],
+ "moves": [["Ivy Cudgel"], ["Knock Off"], ["U-turn"], ["Encore"]]
+ }]
+ },
+ "primarina": {
+ "weight": 6,
+ "sets": [{
+ "species": "Primarina",
+ "weight": 40,
+ "item": ["Assault Vest"],
+ "ability": ["Torrent"],
+ "evs": {"hp": 80, "spa": 252, "spe": 176},
+ "nature": ["Modest"],
+ "teraType": ["Grass", "Steel"],
+ "moves": [["Surf"], ["Moonblast"], ["Psychic Noise"], ["Flip Turn"]]
+ }, {
+ "species": "Primarina",
+ "weight": 30,
+ "item": ["Leftovers", "Heavy-Duty Boots"],
+ "ability": ["Torrent"],
+ "evs": {"hp": 80, "spa": 252, "spe": 176},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ghost", "Steel"],
+ "moves": [["Surf", "Hydro Pump"], ["Moonblast"], ["Psychic Noise", "Substitute"], ["Calm Mind"]]
+ }, {
+ "species": "Primarina",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Liquid Voice"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Steel"],
+ "moves": [["Psychic Noise"], ["Draining Kiss"], ["Substitute"], ["Calm Mind"]]
+ }, {
+ "species": "Primarina",
+ "weight": 10,
+ "item": ["Leftovers"],
+ "ability": ["Torrent"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Steel"],
+ "moves": [["Surf"], ["Draining Kiss"], ["Substitute"], ["Calm Mind"]]
+ }]
+ },
+ "sinistcha": {
+ "weight": 5,
+ "sets": [{
+ "species": "Sinistcha",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Heatproof"],
+ "evs": {"hp": 252, "def": 160, "spe": 96},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Poison"],
+ "moves": [["Calm Mind"], ["Matcha Gotcha"], ["Shadow Ball"], ["Strength Sap"]]
+ }]
+ },
+ "tinkaton": {
+ "weight": 6,
+ "sets": [{
+ "species": "Tinkaton",
+ "weight": 100,
+ "item": ["Air Balloon"],
+ "ability": ["Pickpocket", "Mold Breaker"],
+ "evs": {"hp": 252, "spd": 24, "spe": 232},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Stealth Rock"], ["Gigaton Hammer"], ["Encore"], ["Thunder Wave", "Knock Off"]]
+ }]
+ },
+ "weavile": {
+ "weight": 6,
+ "sets": [{
+ "species": "Weavile",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Pickpocket"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ice"],
+ "moves": [["Triple Axel"], ["Knock Off"], ["Ice Shard"], ["Swords Dance", "Low Kick"]]
+ }]
+ },
+ "zapdos": {
+ "weight": 6,
+ "sets": [{
+ "species": "Zapdos",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Static"],
+ "evs": {"hp": 248, "def": 244, "spe": 16},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Steel", "Fairy", "Water"],
+ "moves": [["Hurricane"], ["Volt Switch"], ["Thunder Wave"], ["Roost"]]
+ }, {
+ "species": "Zapdos",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Static"],
+ "evs": {"hp": 248, "def": 244, "spe": 16},
+ "nature": ["Bold"],
+ "teraType": ["Steel", "Fairy", "Water"],
+ "moves": [["Hurricane"], ["U-turn"], ["Discharge"], ["Roost"]]
+ }]
+ },
+ "clefable": {
+ "weight": 5,
+ "sets": [{
+ "species": "Clefable",
+ "weight": 50,
+ "item": ["Leftovers", "Sticky Barb"],
+ "ability": ["Magic Guard"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Bold"],
+ "teraType": ["Steel", "Water"],
+ "moves": [["Stealth Rock"], ["Moonlight"], ["Moonblast"], ["Knock Off"]]
+ }, {
+ "species": "Clefable",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Magic Guard"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fire"],
+ "moves": [["Calm Mind"], ["Moonlight"], ["Moonblast"], ["Flamethrower"]]
+ }, {
+ "species": "Clefable",
+ "weight": 25,
+ "item": ["Sticky Barb"],
+ "ability": ["Magic Guard"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Bold"],
+ "teraType": ["Steel", "Water"],
+ "moves": [["Calm Mind"], ["Moonlight"], ["Moonblast"], ["Knock Off"]]
+ }]
+ },
+ "clodsire": {
+ "weight": 4,
+ "sets": [{
+ "species": "Clodsire",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Unaware"],
+ "evs": {"hp": 248, "def": 8, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Dark", "Steel"],
+ "moves": [["Earthquake"], ["Recover"], ["Toxic"], ["Spikes", "Stealth Rock"]]
+ }]
+ },
+ "corviknight": {
+ "weight": 5,
+ "sets": [{
+ "species": "Corviknight",
+ "weight": 50,
+ "item": ["Leftovers", "Rocky Helmet"],
+ "ability": ["Pressure"],
+ "evs": {"hp": 248, "def": 252, "spd": 8},
+ "nature": ["Impish"],
+ "teraType": ["Water", "Dragon"],
+ "moves": [["Brave Bird"], ["Roost"], ["U-turn"], ["Defog"]]
+ }, {
+ "species": "Corviknight",
+ "weight": 15,
+ "item": ["Leftovers", "Rocky Helmet"],
+ "ability": ["Pressure"],
+ "evs": {"hp": 248, "def": 252, "spd": 8},
+ "nature": ["Impish"],
+ "teraType": ["Water", "Dragon"],
+ "moves": [["Body Press"], ["Roost"], ["U-turn"], ["Defog"]]
+ }, {
+ "species": "Corviknight",
+ "weight": 20,
+ "item": ["Leftovers", "Rocky Helmet"],
+ "ability": ["Pressure"],
+ "evs": {"hp": 248, "def": 252, "spd": 8},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water", "Dragon", "Fighting"],
+ "moves": [["Body Press"], ["Roost"], ["Iron Defense"], ["Defog"]]
+ }, {
+ "species": "Corviknight",
+ "weight": 15,
+ "item": ["Leftovers", "Rocky Helmet"],
+ "ability": ["Pressure"],
+ "evs": {"hp": 248, "def": 252, "spd": 8},
+ "nature": ["Impish"],
+ "teraType": ["Water", "Dragon", "Fighting"],
+ "moves": [["Body Press"], ["Roost"], ["U-turn"], ["Iron Defense"]]
+ }]
+ },
+ "dondozo": {
+ "weight": 5,
+ "sets": [{
+ "species": "Dondozo",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Unaware"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Dark", "Grass"],
+ "moves": [["Rest"], ["Sleep Talk"], ["Waterfall"], ["Curse", "Avalanche"]]
+ }, {
+ "species": "Dondozo",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Unaware"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Fighting", "Dark", "Grass"],
+ "moves": [["Rest"], ["Sleep Talk"], ["Body Press"], ["Avalanche"]]
+ }, {
+ "species": "Dondozo",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Unaware"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fighting", "Dark", "Grass"],
+ "moves": [["Rest"], ["Sleep Talk"], ["Body Press"], ["Curse"]]
+ }]
+ },
+ "hydrapple": {
+ "weight": 5,
+ "sets": [{
+ "species": "Hydrapple",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 244, "spa": 252, "spe": 12},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Steel", "Fairy", "Poison"],
+ "moves": [["Fickle Beam"], ["Nasty Plot"], ["Giga Drain"], ["Earth Power"]]
+ }]
+ },
+ "ogerponcornerstone": {
+ "weight": 4,
+ "sets": [{
+ "species": "Ogerpon-Cornerstone",
+ "weight": 100,
+ "item": ["Cornerstone Mask"],
+ "ability": ["Sturdy"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Rock"],
+ "moves": [["Ivy Cudgel"], ["Swords Dance"], ["Power Whip", "Horn Leech"], ["Low Kick", "Knock Off"]]
+ }]
+ },
+ "rillaboom": {
+ "weight": 5,
+ "sets": [{
+ "species": "Rillaboom",
+ "weight": 80,
+ "item": ["Choice Band"],
+ "ability": ["Grassy Surge"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Grass"],
+ "moves": [["Grassy Glide"], ["Wood Hammer"], ["U-turn"], ["Knock Off"]]
+ }, {
+ "species": "Rillaboom",
+ "weight": 10,
+ "item": ["Assault Vest"],
+ "ability": ["Grassy Surge"],
+ "evs": {"hp": 204, "atk": 252, "spe": 52},
+ "nature": ["Adamant"],
+ "teraType": ["Grass", "Fighting"],
+ "moves": [["Grassy Glide"], ["Low Kick"], ["U-turn"], ["Knock Off"]]
+ }, {
+ "species": "Rillaboom",
+ "weight": 10,
+ "item": ["Assault Vest"],
+ "ability": ["Grassy Surge"],
+ "evs": {"hp": 204, "atk": 252, "spe": 52},
+ "nature": ["Adamant"],
+ "teraType": ["Grass"],
+ "moves": [["Grassy Glide"], ["Wood Hammer"], ["U-turn"], ["Knock Off"]]
+ }]
+ },
+ "scizor": {
+ "weight": 5,
+ "sets": [{
+ "species": "Scizor",
+ "weight": 20,
+ "item": ["Leftovers", "Heavy-Duty Boots", "Metal Coat"],
+ "ability": ["Technician"],
+ "evs": {"hp": 120, "atk": 252, "spe": 136},
+ "nature": ["Adamant"],
+ "teraType": ["Steel", "Fire"],
+ "moves": [["Swords Dance"], ["Bullet Punch"], ["Close Combat"], ["Knock Off"]]
+ }, {
+ "species": "Scizor",
+ "weight": 40,
+ "item": ["Choice Band"],
+ "ability": ["Technician"],
+ "evs": {"hp": 120, "atk": 252, "spe": 136},
+ "nature": ["Adamant"],
+ "teraType": ["Flying"],
+ "moves": [["U-turn"], ["Bullet Punch"], ["Dual Wingbeat"], ["Knock Off"]]
+ }, {
+ "species": "Scizor",
+ "weight": 40,
+ "item": ["Choice Band"],
+ "ability": ["Technician"],
+ "evs": {"hp": 120, "atk": 252, "spe": 136},
+ "nature": ["Adamant"],
+ "teraType": ["Steel"],
+ "moves": [["U-turn"], ["Bullet Punch"], ["Close Combat"], ["Knock Off"]]
+ }]
+ },
+ "skarmory": {
+ "weight": 4,
+ "sets": [{
+ "species": "Skarmory",
+ "weight": 50,
+ "item": ["Rocky Helmet"],
+ "ability": ["Sturdy"],
+ "evs": {"hp": 252, "def": 160, "spe": 96},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Dragon", "Fighting"],
+ "moves": [["Body Press"], ["Roost"], ["Spikes", "Stealth Rock"], ["Iron Defense"]]
+ }, {
+ "species": "Skarmory",
+ "weight": 50,
+ "item": ["Rocky Helmet"],
+ "ability": ["Sturdy"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Dragon"],
+ "moves": [["Whirlwind"], ["Roost"], ["Spikes", "Stealth Rock"], ["Brave Bird"]]
+ }]
+ },
+ "ursaluna": {
+ "weight": 5,
+ "sets": [{
+ "species": "Ursaluna",
+ "weight": 100,
+ "item": ["Flame Orb"],
+ "ability": ["Guts"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Normal", "Ghost"],
+ "moves": [["Swords Dance"], ["Facade"], ["Headlong Rush"], ["Fire Punch", "Ice Punch"]]
+ }]
+ },
+ "weezinggalar": {
+ "weight": 5,
+ "sets": [{
+ "species": "Weezing-Galar",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Neutralizing Gas"],
+ "evs": {"hp": 252, "def": 240, "spa": 16},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Flying", "Grass"],
+ "moves": [["Strange Steam"], ["Pain Split"], ["Will-O-Wisp", "Toxic"], ["Defog"]]
+ }]
+ },
+ "greninjabond": {
+ "weight": 4,
+ "sets": [{
+ "species": "Greninja-Bond",
+ "weight": 100,
+ "item": ["Life Orb"],
+ "ability": ["Battle Bond"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Ghost"],
+ "moves": [["Surf", "Hydro Pump"], ["Dark Pulse"], ["Ice Beam"], ["Water Shuriken"]]
+ }]
+ },
+ "heatran": {
+ "weight": 3,
+ "sets": [{
+ "species": "Heatran",
+ "weight": 50,
+ "item": ["Air Balloon", "Leftovers"],
+ "ability": ["Flash Fire"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest", "Timid"],
+ "teraType": ["Grass", "Ghost"],
+ "moves": [["Magma Storm"], ["Earth Power"], ["Taunt"], ["Stealth Rock", "Will-O-Wisp"]]
+ }, {
+ "species": "Heatran",
+ "weight": 15,
+ "item": ["Air Balloon", "Leftovers"],
+ "ability": ["Flash Fire"],
+ "evs": {"hp": 252, "def": 4, "spd": 212, "spe": 40},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Grass"],
+ "moves": [["Magma Storm"], ["Earth Power"], ["Taunt", "Stealth Rock"], ["Will-O-Wisp"]]
+ }, {
+ "species": "Heatran",
+ "weight": 15,
+ "item": ["Air Balloon", "Leftovers"],
+ "ability": ["Flame Body"],
+ "evs": {"hp": 252, "def": 4, "spd": 212, "spe": 40},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Ghost"],
+ "moves": [["Magma Storm"], ["Earth Power"], ["Taunt", "Stealth Rock"], ["Will-O-Wisp"]]
+ }, {
+ "species": "Heatran",
+ "weight": 10,
+ "item": ["Air Balloon", "Leftovers"],
+ "ability": ["Flash Fire"],
+ "evs": {"hp": 252, "def": 4, "spd": 212, "spe": 40},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Grass"],
+ "moves": [["Magma Storm"], ["Earth Power"], ["Taunt"], ["Stealth Rock"]]
+ }, {
+ "species": "Heatran",
+ "weight": 10,
+ "item": ["Air Balloon", "Leftovers"],
+ "ability": ["Flame Body"],
+ "evs": {"hp": 252, "def": 4, "spd": 212, "spe": 40},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Ghost"],
+ "moves": [["Magma Storm"], ["Earth Power"], ["Taunt"], ["Stealth Rock"]]
+ }]
+ },
+ "hoopaunbound": {
+ "weight": 4,
+ "sets": [{
+ "species": "Hoopa-Unbound",
+ "weight": 100,
+ "item": ["Assault Vest"],
+ "ability": ["Magician"],
+ "evs": {"hp": 252, "def": 156, "spa": 100},
+ "nature": ["Quiet"],
+ "teraType": ["Poison", "Fairy"],
+ "moves": [["Knock Off"], ["Psychic Noise"], ["Drain Punch"], ["Thunderbolt"]]
+ }]
+ },
+ "latios": {
+ "weight": 4,
+ "sets": [{
+ "species": "Latios",
+ "weight": 10,
+ "item": ["Choice Specs", "Choice Scarf"],
+ "ability": ["Levitate"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fighting", "Dragon"],
+ "moves": [["Draco Meteor"], ["Aura Sphere"], ["Luster Purge"], ["Trick"]]
+ }, {
+ "species": "Latios",
+ "weight": 10,
+ "item": ["Choice Specs", "Choice Scarf"],
+ "ability": ["Levitate"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Fighting", "Dragon"],
+ "moves": [["Draco Meteor"], ["Aura Sphere"], ["Luster Purge"], ["Flip Turn"]]
+ }, {
+ "species": "Latios",
+ "weight": 80,
+ "item": ["Soul Dew"],
+ "ability": ["Levitate"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Draco Meteor"], ["Aura Sphere", "Calm Mind"], ["Luster Purge", "Psychic Noise"], ["Recover"]]
+ }]
+ },
+ "lokix": {
+ "weight": 4,
+ "sets": [{
+ "species": "Lokix",
+ "weight": 100,
+ "item": ["Choice Band"],
+ "ability": ["Tinted Lens"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Bug"],
+ "moves": [["First Impression"], ["Knock Off"], ["U-turn"], ["Leech Life"]]
+ }]
+ },
+ "manaphy": {
+ "weight": 4,
+ "sets": [{
+ "species": "Manaphy",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Hydration"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Grass"],
+ "moves": [["Tail Glow"], ["Surf", "Scald"], ["Energy Ball"], ["Alluring Voice", "Ice Beam"]]
+ }, {
+ "species": "Manaphy",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Hydration"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Tail Glow"], ["Surf", "Scald"], ["Alluring Voice"], ["Energy Ball", "Ice Beam"]]
+ }]
+ },
+ "meowscarada": {
+ "weight": 3,
+ "sets": [{
+ "species": "Meowscarada",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots", "Choice Scarf", "Choice Band"],
+ "ability": ["Protean"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Grass", "Dark", "Ghost"],
+ "moves": [["Flower Trick"], ["Knock Off"], ["Triple Axel"], ["U-turn"]]
+ }]
+ },
+ "pecharunt": {
+ "weight": 6,
+ "sets": [{
+ "species": "Pecharunt",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Air Balloon"],
+ "ability": ["Poison Puppeteer"],
+ "evs": {"hp": 252, "def": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Dark"],
+ "moves": [["Malignant Chain"], ["Recover"], ["Hex"], ["Parting Shot"]]
+ }, {
+ "species": "Pecharunt",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Air Balloon"],
+ "ability": ["Poison Puppeteer"],
+ "evs": {"hp": 252, "def": 228, "spe": 28},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Ghost", "Dark"],
+ "moves": [["Malignant Chain"], ["Recover"], ["Hex"], ["Parting Shot"]]
+ }]
+ },
+ "rotomwash": {
+ "weight": 3,
+ "sets": [{
+ "species": "Rotom-Wash",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "def": 212, "spe": 44},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Steel"],
+ "moves": [["Hydro Pump"], ["Volt Switch"], ["Will-O-Wisp", "Thunder Wave"], ["Pain Split"]]
+ }, {
+ "species": "Rotom-Wash",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "spd": 212, "spe": 44},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Steel"],
+ "moves": [["Hydro Pump"], ["Volt Switch"], ["Will-O-Wisp", "Thunder Wave"], ["Pain Split"]]
+ }]
+ },
+ "serperior": {
+ "weight": 4,
+ "sets": [{
+ "species": "Serperior",
+ "wantsTera": true,
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Contrary"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Fire", "Ground"],
+ "moves": [["Leaf Storm"], ["Glare"], ["Tera Blast"], ["Substitute", "Dragon Pulse"]]
+ }]
+ },
+ "slitherwing": {
+ "weight": 1,
+ "sets": [{
+ "species": "Slither Wing",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Protosynthesis"],
+ "evs": {"hp": 252, "atk": 28, "def": 220, "spe": 8},
+ "nature": ["Impish"],
+ "teraType": ["Steel", "Dragon"],
+ "moves": [["First Impression"], ["U-turn"], ["Will-O-Wisp", "Stun Spore"], ["Morning Sun"]]
+ }]
+ },
+ "skeledirge": {
+ "weight": 3,
+ "sets": [{
+ "species": "Skeledirge",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Unaware"],
+ "evs": {"hp": 248, "def": 8, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Torch Song"], ["Will-O-Wisp"], ["Hex"], ["Slack Off"]]
+ }, {
+ "species": "Skeledirge",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Unaware"],
+ "evs": {"hp": 248, "def": 252, "spd": 8},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Torch Song"], ["Will-O-Wisp"], ["Hex"], ["Slack Off"]]
+ }]
+ },
+ "tornadustherian": {
+ "weight": 4,
+ "sets": [{
+ "species": "Tornadus-Therian",
+ "weight": 100,
+ "item": ["Assault Vest", "Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "spa": 16, "spd": 72, "spe": 168},
+ "nature": ["Timid"],
+ "teraType": ["Steel", "Fairy"],
+ "moves": [["Bleakwind Storm", "Hurricane"], ["Heat Wave"], ["Knock Off"], ["U-turn"]]
+ }]
+ },
+ "volcanion": {
+ "weight": 3,
+ "sets": [{
+ "species": "Volcanion",
+ "wantsTera": true,
+ "weight": 75,
+ "item": ["Choice Specs", "Heavy-Duty Boots"],
+ "ability": ["Water Absorb"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy"],
+ "moves": [["Steam Eruption"], ["Flamethrower"], ["Tera Blast"], ["Earth Power"]]
+ }, {
+ "species": "Volcanion",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Water Absorb"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ground"],
+ "moves": [["Steam Eruption"], ["Flamethrower"], ["Sludge Bomb"], ["Earth Power"]]
+ }]
+ },
+ "ironboulder": {
+ "weight": 3,
+ "sets": [{
+ "species": "Iron Boulder",
+ "weight": 60,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fighting"],
+ "moves": [["Mighty Cleave"], ["Close Combat"], ["Zen Headbutt", "Earthquake"], ["Swords Dance"]]
+ }, {
+ "species": "Iron Boulder",
+ "weight": 40,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ground"],
+ "moves": [["Mighty Cleave"], ["Earthquake"], ["Zen Headbutt", "Close Combat"], ["Swords Dance"]]
+ }]
+ },
+ "okidogi": {
+ "weight": 3,
+ "sets": [{
+ "species": "Okidogi",
+ "weight": 50,
+ "item": ["Assault Vest"],
+ "ability": ["Guard Dog", "Toxic Chain"],
+ "evs": {"hp": 240, "atk": 252, "spe": 16},
+ "nature": ["Adamant"],
+ "teraType": ["Water", "Dark"],
+ "moves": [["Drain Punch"], ["Gunk Shot"], ["Knock Off"], ["Ice Punch"]]
+ }, {
+ "species": "Okidogi",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Guard Dog"],
+ "evs": {"hp": 252, "spd": 160, "spe": 96},
+ "nature": ["Careful"],
+ "teraType": ["Water", "Ghost"],
+ "moves": [["Drain Punch"], ["Bulk Up"], ["Knock Off"], ["Ice Punch"]]
+ }]
+ },
+ "toxapex": {
+ "weight": 3,
+ "sets": [{
+ "species": "Toxapex",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 248, "def": 252, "spd": 8},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Steel", "Grass"],
+ "moves": [["Surf"], ["Toxic"], ["Haze", "Toxic Spikes", "Baneful Bunker"], ["Recover"]]
+ }, {
+ "species": "Toxapex",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 248, "def": 8, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Steel", "Grass"],
+ "moves": [["Surf"], ["Toxic"], ["Haze", "Toxic Spikes", "Baneful Bunker"], ["Recover"]]
+ }]
+ },
+ "amoonguss": {
+ "weight": 2,
+ "sets": [{
+ "species": "Amoonguss",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 248, "def": 244, "spd": 16},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Dark", "Water", "Steel"],
+ "moves": [["Foul Play"], ["Toxic"], ["Synthesis"], ["Clear Smog", "Sludge Bomb", "Giga Drain"]]
+ }]
+ },
+ "fezandipiti": {
+ "weight": 2,
+ "sets": [{
+ "species": "Fezandipiti",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Toxic Chain"],
+ "evs": {"hp": 248, "atk": 152, "spd": 44, "spe": 64},
+ "nature": ["Careful"],
+ "teraType": ["Dark", "Water"],
+ "moves": [["Play Rough"], ["Roost"], ["U-turn"], ["Beat Up"]]
+ }]
+ },
+ "garchomp": {
+ "weight": 2,
+ "sets": [{
+ "species": "Garchomp",
+ "weight": 80,
+ "item": ["Rocky Helmet"],
+ "ability": ["Rough Skin"],
+ "evs": {"hp": 252, "def": 216, "spe": 40},
+ "nature": ["Impish"],
+ "teraType": ["Ghost", "Steel"],
+ "moves": [["Earthquake"], ["Dragon Tail"], ["Stealth Rock"], ["Spikes"]]
+ }, {
+ "species": "Garchomp",
+ "weight": 20,
+ "item": ["Loaded Dice"],
+ "ability": ["Rough Skin"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fire"],
+ "moves": [["Earthquake"], ["Scale Shot"], ["Swords Dance"], ["Fire Fang", "Stone Edge"]]
+ }]
+ },
+ "goodrahisui": {
+ "weight": 2,
+ "sets": [{
+ "species": "Goodra-Hisui",
+ "weight": 50,
+ "item": ["Assault Vest"],
+ "ability": ["Gooey", "Sap Sipper"],
+ "evs": {"hp": 248, "spa": 252, "spd": 8},
+ "nature": ["Modest"],
+ "teraType": ["Fairy"],
+ "moves": [["Draco Meteor"], ["Flash Cannon"], ["Knock Off"], ["Flamethrower", "Ice Beam"]]
+ }, {
+ "species": "Goodra-Hisui",
+ "weight": 50,
+ "item": ["Assault Vest"],
+ "ability": ["Gooey", "Sap Sipper"],
+ "evs": {"hp": 248, "spa": 252, "spd": 8},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy"],
+ "moves": [["Draco Meteor"], ["Flash Cannon"], ["Ice Beam"], ["Flamethrower"]]
+ }]
+ },
+ "ironhands": {
+ "weight": 2,
+ "sets": [{
+ "species": "Iron Hands",
+ "weight": 35,
+ "item": ["Booster Energy"],
+ "ability": ["Quark Drive"],
+ "evs": {"atk": 252, "spd": 172, "spe": 84},
+ "nature": ["Adamant"],
+ "teraType": ["Flying", "Fire"],
+ "moves": [["Swords Dance"], ["Drain Punch"], ["Thunder Punch"], ["Ice Punch"]]
+ }, {
+ "species": "Iron Hands",
+ "weight": 35,
+ "item": ["Shuca Berry"],
+ "ability": ["Quark Drive"],
+ "evs": {"atk": 252, "spd": 172, "spe": 84},
+ "nature": ["Adamant"],
+ "teraType": ["Fire"],
+ "moves": [["Swords Dance"], ["Drain Punch"], ["Thunder Punch"], ["Ice Punch"]]
+ }, {
+ "species": "Iron Hands",
+ "weight": 30,
+ "item": ["Shuca Berry"],
+ "ability": ["Quark Drive"],
+ "evs": {"atk": 252, "spd": 172, "spe": 84},
+ "nature": ["Adamant"],
+ "teraType": ["Flying", "Fire"],
+ "moves": [["Earthquake"], ["Drain Punch"], ["Thunder Punch"], ["Ice Punch"]]
+ }]
+ },
+ "keldeo": {
+ "weight": 2,
+ "sets": [{
+ "species": "Keldeo",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Justified"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Water"],
+ "moves": [["Aura Sphere"], ["Surf"], ["Flip Turn"], ["Vacuum Wave"]]
+ }]
+ },
+ "mandibuzz": {
+ "weight": 1,
+ "sets": [{
+ "species": "Mandibuzz",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Overcoat", "Big Pecks"],
+ "evs": {"hp": 248, "def": 244, "spe": 16},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water", "Poison"],
+ "moves": [["Foul Play"], ["Roost"], ["Defog"], ["Toxic"]]
+ }, {
+ "species": "Mandibuzz",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Overcoat", "Big Pecks"],
+ "evs": {"hp": 248, "def": 244, "spe": 16},
+ "nature": ["Impish"],
+ "teraType": ["Water", "Poison"],
+ "moves": [["Foul Play"], ["Roost"], ["Defog"], ["U-turn"]]
+ }]
+ },
+ "reuniclus": {
+ "weight": 1,
+ "sets": [{
+ "species": "Reuniclus",
+ "weight": 100,
+ "item": ["Life Orb"],
+ "ability": ["Magic Guard"],
+ "evs": {"hp": 252, "spa": 212, "spe": 44},
+ "nature": ["Modest"],
+ "teraType": ["Water"],
+ "moves": [["Psychic Noise"], ["Recover"], ["Knock Off"], ["Focus Blast"]]
+ }]
+ },
+ "hydreigon": {
+ "weight": 1,
+ "sets": [{
+ "species": "Hydreigon",
+ "wantsTera": true,
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Nasty Plot"], ["Draco Meteor"], ["Flash Cannon"], ["Substitute"]]
+ }]
+ }
+ },
+ "UU": {
+ "tornadustherian": {
+ "weight": 10,
+ "sets": [{
+ "species": "Tornadus-Therian",
+ "weight": 60,
+ "item": ["Assault Vest", "Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "spd": 64, "spe": 192},
+ "nature": ["Timid"],
+ "teraType": ["Steel", "Water"],
+ "moves": [["Bleakwind Storm"], ["Focus Blast"], ["Knock Off"], ["U-turn"]]
+ }, {
+ "species": "Tornadus-Therian",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Bleakwind Storm", "Hurricane"], ["Focus Blast", "Heat Wave"], ["Taunt"], ["Nasty Plot"]]
+ }]
+ },
+ "excadrill": {
+ "weight": 10,
+ "sets": [{
+ "species": "Excadrill",
+ "weight": 50,
+ "item": ["Leftovers", "Air Balloon"],
+ "ability": ["Mold Breaker"],
+ "evs": {"hp": 156, "spd": 252, "spe": 100},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost", "Dragon", "Fairy"],
+ "moves": [["Earthquake"], ["Rapid Spin"], ["Iron Head"], ["Stealth Rock"]]
+ }, {
+ "species": "Excadrill",
+ "weight": 50,
+ "item": ["Leftovers", "Air Balloon"],
+ "ability": ["Mold Breaker"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost", "Dragon", "Fairy"],
+ "moves": [["Earthquake"], ["Rapid Spin"], ["Iron Head"], ["Swords Dance"]]
+ }]
+ },
+ "cobalion": {
+ "weight": 8,
+ "sets": [{
+ "species": "Cobalion",
+ "weight": 50,
+ "item": ["Leftovers", "Rocky Helmet", "Shuca Berry"],
+ "ability": ["Justified"],
+ "evs": {"def": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Dragon", "Flying"],
+ "moves": [["Body Press"], ["Volt Switch"], ["Thunder Wave", "Taunt"], ["Stealth Rock"]]
+ }, {
+ "species": "Cobalion",
+ "weight": 50,
+ "item": ["Leftovers", "Rocky Helmet", "Shuca Berry"],
+ "ability": ["Justified"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost", "Dragon", "Flying"],
+ "moves": [["Close Combat"], ["Volt Switch"], ["Thunder Wave", "Taunt"], ["Stealth Rock"]]
+ }]
+ },
+ "lokix": {
+ "weight": 8,
+ "sets": [{
+ "species": "Lokix",
+ "weight": 70,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Tinted Lens"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Bug"],
+ "moves": [["First Impression"], ["Knock Off"], ["U-turn"], ["Sucker Punch"]]
+ }, {
+ "species": "Lokix",
+ "weight": 30,
+ "item": ["Black Glasses"],
+ "ability": ["Tinted Lens"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["First Impression", "Protect"], ["Knock Off"], ["Swords Dance"], ["Sucker Punch"]]
+ }]
+ },
+ "weavile": {
+ "weight": 8,
+ "sets": [{
+ "species": "Weavile",
+ "weight": 80,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Pickpocket"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost", "Dark"],
+ "moves": [["Swords Dance"], ["Triple Axel", "Icicle Crash"], ["Knock Off"], ["Ice Shard", "Low Kick"]]
+ }, {
+ "species": "Weavile",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Pickpocket"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ice"],
+ "moves": [["Swords Dance"], ["Triple Axel"], ["Knock Off"], ["Ice Shard"]]
+ }]
+ },
+ "greninja": {
+ "weight": 5,
+ "sets": [{
+ "species": "Greninja",
+ "gender": "M",
+ "weight": 67,
+ "item": ["Choice Specs"],
+ "ability": ["Protean"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water"],
+ "moves": [["Dark Pulse"], ["Surf", "Hydro Pump"], ["Ice Beam"], ["Sludge Wave", "Spikes"]]
+ }, {
+ "species": "Greninja",
+ "gender": "M",
+ "weight": 33,
+ "item": ["Choice Specs"],
+ "ability": ["Protean"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Water"],
+ "moves": [["Dark Pulse"], ["Surf", "Hydro Pump"], ["Ice Beam"], ["U-turn"]]
+ }]
+ },
+ "greninjabond": {
+ "weight": 2,
+ "sets": [{
+ "species": "Greninja-Bond",
+ "weight": 100,
+ "item": ["Life Orb"],
+ "ability": ["Battle Bond"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Stellar"],
+ "moves": [["Surf"], ["Dark Pulse"], ["Ice Beam", "Sludge Wave"], ["Protect", "Water Shuriken"]]
+ }]
+ },
+ "heatran": {
+ "weight": 7,
+ "sets": [{
+ "species": "Heatran",
+ "weight": 50,
+ "item": ["Air Balloon"],
+ "ability": ["Flame Body"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy"],
+ "moves": [["Magma Storm"], ["Earth Power"], ["Taunt"], ["Stealth Rock"]]
+ }, {
+ "species": "Heatran",
+ "weight": 50,
+ "item": ["Air Balloon"],
+ "ability": ["Flame Body"],
+ "evs": {"hp": 252, "def": 96, "spe": 160},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Ghost", "Water"],
+ "moves": [["Magma Storm", "Lava Plume"], ["Earth Power"], ["Taunt", "Protect"], ["Stealth Rock"]]
+ }]
+ },
+ "hydrapple": {
+ "weight": 7,
+ "sets": [{
+ "species": "Hydrapple",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 92, "spa": 164},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Steel", "Fairy", "Poison"],
+ "moves": [["Fickle Beam", "Draco Meteor"], ["Nasty Plot"], ["Giga Drain"], ["Earth Power"]]
+ }, {
+ "species": "Hydrapple",
+ "weight": 50,
+ "item": ["Choice Specs"],
+ "ability": ["Regenerator"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Steel", "Fairy"],
+ "moves": [["Fickle Beam", "Giga Drain"], ["Leaf Storm"], ["Draco Meteor"], ["Earth Power"]]
+ }]
+ },
+ "rotomwash": {
+ "weight": 7,
+ "sets": [{
+ "species": "Rotom-Wash",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "def": 168, "spe": 88},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Steel"],
+ "moves": [["Hydro Pump"], ["Volt Switch"], ["Will-O-Wisp", "Thunder Wave"], ["Pain Split"]]
+ }, {
+ "species": "Rotom-Wash",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "spd": 168, "spe": 88},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Steel"],
+ "moves": [["Hydro Pump"], ["Volt Switch"], ["Will-O-Wisp", "Thunder Wave"], ["Pain Split"]]
+ }]
+ },
+ "scizor": {
+ "weight": 7,
+ "sets": [{
+ "species": "Scizor",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Technician"],
+ "evs": {"hp": 120, "atk": 252, "spe": 136},
+ "nature": ["Adamant"],
+ "teraType": ["Steel", "Fire"],
+ "moves": [["Swords Dance"], ["Bullet Punch"], ["U-turn"], ["Knock Off"]]
+ }, {
+ "species": "Scizor",
+ "weight": 30,
+ "item": ["Life Orb"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Steel", "Fire"],
+ "moves": [["Swords Dance"], ["Bullet Punch"], ["Close Combat"], ["Knock Off"]]
+ }, {
+ "species": "Scizor",
+ "weight": 30,
+ "item": ["Choice Band"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Steel"],
+ "moves": [["U-turn"], ["Bullet Punch"], ["Close Combat"], ["Knock Off"]]
+ }]
+ },
+ "latios": {
+ "weight": 6,
+ "sets": [{
+ "species": "Latios",
+ "weight": 20,
+ "item": ["Choice Specs"],
+ "ability": ["Levitate"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Steel", "Dragon"],
+ "moves": [["Draco Meteor"], ["Luster Purge"], ["Flip Turn"], ["Surf", "Trick"]]
+ }, {
+ "species": "Latios",
+ "weight": 10,
+ "item": ["Choice Specs"],
+ "ability": ["Levitate"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel", "Dragon"],
+ "moves": [["Draco Meteor"], ["Luster Purge"], ["Surf"], ["Trick"]]
+ }, {
+ "species": "Latios",
+ "weight": 30,
+ "item": ["Choice Scarf"],
+ "ability": ["Levitate"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Dragon"],
+ "moves": [["Draco Meteor"], ["Luster Purge"], ["Flip Turn"], ["Trick"]]
+ }, {
+ "species": "Latios",
+ "weight": 30,
+ "item": ["Soul Dew"],
+ "ability": ["Levitate"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Draco Meteor"], ["Luster Purge"], ["Flip Turn"], ["Recover"]]
+ }, {
+ "species": "Latios",
+ "weight": 5,
+ "item": ["Soul Dew"],
+ "ability": ["Levitate"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Draco Meteor"], ["Luster Purge"], ["Calm Mind"], ["Recover"]]
+ }, {
+ "species": "Latios",
+ "weight": 5,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel", "Water"],
+ "moves": [["Draco Meteor"], ["Surf"], ["Calm Mind"], ["Recover"]]
+ }]
+ },
+ "ogerponcornerstone": {
+ "weight": 6,
+ "sets": [{
+ "species": "Ogerpon-Cornerstone",
+ "weight": 50,
+ "item": ["Cornerstone Mask"],
+ "ability": ["Sturdy"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Rock"],
+ "moves": [["Ivy Cudgel"], ["Swords Dance"], ["Power Whip", "Horn Leech"], ["Stomping Tantrum", "Spiky Shield"]]
+ }, {
+ "species": "Ogerpon-Cornerstone",
+ "weight": 50,
+ "item": ["Cornerstone Mask"],
+ "ability": ["Sturdy"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Rock"],
+ "moves": [["Ivy Cudgel"], ["Stomping Tantrum"], ["Power Whip"], ["U-turn", "Spiky Shield"]]
+ }]
+ },
+ "quaquaval": {
+ "weight": 6,
+ "sets": [{
+ "species": "Quaquaval",
+ "weight": 100,
+ "item": ["Life Orb", "Lum Berry"],
+ "ability": ["Moxie"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Electric", "Steel"],
+ "moves": [["Aqua Step"], ["Close Combat"], ["Swords Dance"], ["Knock Off", "Triple Axel"]]
+ }]
+ },
+ "skeledirge": {
+ "weight": 6,
+ "sets": [{
+ "species": "Skeledirge",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Unaware"],
+ "evs": {"hp": 252, "def": 96, "spd": 160},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Torch Song"], ["Will-O-Wisp"], ["Hex"], ["Slack Off"]]
+ }]
+ },
+ "slowking": {
+ "weight": 6,
+ "sets": [{
+ "species": "Slowking",
+ "weight": 70,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0, "spe": 0},
+ "nature": ["Relaxed"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Scald"], ["Chilly Reception"], ["Thunder Wave", "Future Sight"], ["Slack Off"]]
+ }, {
+ "species": "Slowking",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 172, "spd": 84},
+ "ivs": {"atk": 0, "spe": 0},
+ "nature": ["Sassy"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Scald"], ["Chilly Reception"], ["Thunder Wave", "Future Sight"], ["Slack Off"]]
+ }]
+ },
+ "thundurustherian": {
+ "weight": 6,
+ "sets": [{
+ "species": "Thundurus-Therian",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Volt Absorb"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel", "Water"],
+ "moves": [["Volt Switch", "Nasty Plot"], ["Thunderbolt"], ["Sludge Bomb"], ["Focus Blast"]]
+ }]
+ },
+ "tyranitar": {
+ "weight": 6,
+ "sets": [{
+ "species": "Tyranitar",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Sand Stream"],
+ "evs": {"hp": 252, "spd": 212, "spe": 44},
+ "nature": ["Careful"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Stone Edge"], ["Knock Off"], ["Thunder Wave"], ["Stealth Rock"]]
+ }, {
+ "species": "Tyranitar",
+ "weight": 50,
+ "item": ["Choice Band"],
+ "ability": ["Sand Stream"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Dark", "Rock"],
+ "moves": [["Stone Edge"], ["Knock Off"], ["Earthquake"], ["Ice Punch"]]
+ }]
+ },
+ "zarude": {
+ "weight": 6,
+ "sets": [{
+ "species": "Zarude",
+ "weight": 50,
+ "item": ["Leftovers", "Heavy-Duty Boots"],
+ "ability": ["Leaf Guard"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Poison"],
+ "moves": [["Power Whip"], ["Knock Off"], ["Swords Dance"], ["Jungle Healing"]]
+ }, {
+ "species": "Zarude",
+ "weight": 25,
+ "item": ["Choice Scarf"],
+ "ability": ["Leaf Guard"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Power Whip"], ["Knock Off"], ["U-turn"], ["Close Combat", "Jungle Healing"]]
+ }, {
+ "species": "Zarude",
+ "weight": 25,
+ "item": ["Choice Scarf"],
+ "ability": ["Leaf Guard"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Fighting"],
+ "moves": [["Power Whip"], ["Knock Off"], ["U-turn"], ["Close Combat"]]
+ }]
+ },
+ "clodsire": {
+ "weight": 5,
+ "sets": [{
+ "species": "Clodsire",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Water Absorb"],
+ "evs": {"hp": 248, "def": 176, "spd": 84},
+ "nature": ["Careful"],
+ "teraType": ["Dark", "Ghost"],
+ "moves": [["Earthquake"], ["Recover"], ["Toxic"], ["Spikes", "Stealth Rock"]]
+ }]
+ },
+ "gastrodon": {
+ "weight": 5,
+ "sets": [{
+ "species": "Gastrodon",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Storm Drain"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Fairy", "Poison"],
+ "moves": [["Earth Power"], ["Recover"], ["Ice Beam", "Sludge Bomb"], ["Spikes", "Stealth Rock"]]
+ }]
+ },
+ "ogerpon": {
+ "weight": 5,
+ "sets": [{
+ "species": "Ogerpon",
+ "wantsTera": true,
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Defiant"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Grass"],
+ "moves": [["Ivy Cudgel"], ["Knock Off"], ["U-turn"], ["Spikes", "Encore", "Stomping Tantrum"]]
+ }]
+ },
+ "pecharunt": {
+ "weight": 5,
+ "sets": [{
+ "species": "Pecharunt",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Poison Puppeteer"],
+ "evs": {"hp": 252, "def": 200, "spa": 4, "spd": 12, "spe": 40},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy"],
+ "moves": [["Malignant Chain"], ["Recover"], ["Hex"], ["Parting Shot"]]
+ }, {
+ "species": "Pecharunt",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Poison Puppeteer"],
+ "evs": {"hp": 252, "def": 200, "spa": 4, "spd": 12, "spe": 40},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Fairy"],
+ "moves": [["Malignant Chain"], ["Recover"], ["Hex"], ["Parting Shot"]]
+ }, {
+ "species": "Pecharunt",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Poison Puppeteer"],
+ "evs": {"hp": 252, "spa": 88, "spd": 96, "spe": 72},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Malignant Chain"], ["Recover"], ["Hex", "Shadow Ball"], ["Nasty Plot"]]
+ }]
+ },
+ "skarmory": {
+ "weight": 5,
+ "sets": [{
+ "species": "Skarmory",
+ "weight": 50,
+ "item": ["Rocky Helmet"],
+ "ability": ["Sturdy"],
+ "evs": {"hp": 252, "def": 208, "spe": 48},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Dragon", "Water"],
+ "moves": [["Body Press"], ["Roost"], ["Spikes"], ["Whirlwind", "Iron Defense"]]
+ }, {
+ "species": "Skarmory",
+ "weight": 50,
+ "item": ["Rocky Helmet"],
+ "ability": ["Sturdy"],
+ "evs": {"hp": 252, "def": 200, "spe": 56},
+ "nature": ["Impish"],
+ "teraType": ["Dragon", "Water"],
+ "moves": [["Body Press"], ["Roost"], ["Spikes"], ["Brave Bird"]]
+ }]
+ },
+ "tinkaton": {
+ "weight": 5,
+ "sets": [{
+ "species": "Tinkaton",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Mold Breaker"],
+ "evs": {"hp": 252, "def": 232, "spe": 24},
+ "nature": ["Impish"],
+ "teraType": ["Flying", "Ghost", "Dark", "Dragon"],
+ "moves": [["Gigaton Hammer"], ["Encore"], ["Knock Off"], ["Stealth Rock", "Thunder Wave"]]
+ }, {
+ "species": "Tinkaton",
+ "weight": 50,
+ "item": ["Air Balloon"],
+ "ability": ["Pickpocket"],
+ "evs": {"hp": 252, "def": 232, "spe": 24},
+ "nature": ["Impish"],
+ "teraType": ["Ghost", "Dark", "Dragon"],
+ "moves": [["Gigaton Hammer"], ["Encore"], ["Knock Off"], ["Stealth Rock", "Thunder Wave"]]
+ }]
+ },
+ "bellibolt": {
+ "weight": 4,
+ "sets": [{
+ "species": "Bellibolt",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Static"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Dragon"],
+ "moves": [["Volt Switch"], ["Muddy Water"], ["Slack Off"], ["Toxic"]]
+ }]
+ },
+ "enamorustherian": {
+ "weight": 4,
+ "sets": [{
+ "species": "Enamorus-Therian",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Overcoat"],
+ "evs": {"hp": 84, "spa": 252, "spe": 172},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy"],
+ "moves": [["Moonblast"], ["Earth Power"], ["Draining Kiss"], ["Mystical Fire", "Calm Mind"]]
+ }, {
+ "species": "Enamorus-Therian",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Overcoat"],
+ "evs": {"hp": 84, "spa": 252, "spe": 172},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ground"],
+ "moves": [["Moonblast"], ["Earth Power"], ["Mystical Fire"], ["Calm Mind"]]
+ }]
+ },
+ "gardevoir": {
+ "weight": 4,
+ "sets": [{
+ "species": "Gardevoir",
+ "weight": 100,
+ "item": ["Choice Scarf"],
+ "ability": ["Trace"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid", "Modest"],
+ "teraType": ["Fairy"],
+ "moves": [["Moonblast"], ["Psychic"], ["Focus Blast", "Trick"], ["Healing Wish"]]
+ }]
+ },
+ "arcaninehisui": {
+ "weight": 4,
+ "sets": [{
+ "species": "Arcanine-Hisui",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Rock Head"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Normal"],
+ "moves": [["Head Smash"], ["Flare Blitz"], ["Extreme Speed"], ["Stealth Rock", "Morning Sun"]]
+ }]
+ },
+ "keldeo": {
+ "weight": 4,
+ "sets": [{
+ "species": "Keldeo",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Justified"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Secret Sword"], ["Surf"], ["Calm Mind"], ["Substitute", "Taunt"]]
+ }, {
+ "species": "Keldeo",
+ "weight": 50,
+ "item": ["Choice Specs"],
+ "ability": ["Justified"],
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Fighting"],
+ "moves": [["Secret Sword"], ["Surf", "Hydro Pump"], ["Flip Turn"], ["Vacuum Wave"]]
+ }]
+ },
+ "manaphy": {
+ "weight": 4,
+ "sets": [{
+ "species": "Manaphy",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Hydration"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Tail Glow"], ["Scald"], ["Ice Beam"], ["Alluring Voice"]]
+ }]
+ },
+ "polteageist": {
+ "weight": 4,
+ "sets": [{
+ "species": "Polteageist",
+ "weight": 100,
+ "item": ["White Herb"],
+ "ability": ["Cursed Body"],
+ "evs": {"hp": 248, "def": 184, "spe": 76},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Steel"],
+ "moves": [["Shell Smash"], ["Shadow Ball"], ["Stored Power"], ["Strength Sap"]]
+ }]
+ },
+ "revavroom": {
+ "weight": 4,
+ "sets": [{
+ "species": "Revavroom",
+ "weight": 100,
+ "item": ["Air Balloon"],
+ "ability": ["Filter"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Ground", "Fire"],
+ "moves": [["Shift Gear"], ["Temper Flare"], ["Gunk Shot"], ["High Horsepower"]]
+ }]
+ },
+ "sandyshocks": {
+ "weight": 4,
+ "sets": [{
+ "species": "Sandy Shocks",
+ "wantsTera": true,
+ "weight": 100,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Protosynthesis"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ice"],
+ "moves": [["Earth Power"], ["Volt Switch"], ["Tera Blast"], ["Spikes", "Stealth Rock"]]
+ }]
+ },
+ "serperior": {
+ "weight": 4,
+ "sets": [{
+ "species": "Serperior",
+ "wantsTera": true,
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Contrary"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Electric"],
+ "moves": [["Leaf Storm"], ["Glare"], ["Tera Blast"], ["Synthesis", "Dragon Pulse"]]
+ }]
+ },
+ "toxapex": {
+ "weight": 4,
+ "sets": [{
+ "species": "Toxapex",
+ "weight": 50,
+ "item": ["Leftovers", "Heavy-Duty Boots", "Rocky Helmet"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 248, "def": 152, "spd": 108},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy"],
+ "moves": [["Surf"], ["Toxic"], ["Haze"], ["Recover"]]
+ }, {
+ "species": "Toxapex",
+ "weight": 50,
+ "item": ["Leftovers", "Heavy-Duty Boots", "Rocky Helmet"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 248, "def": 152, "spd": 108},
+ "nature": ["Impish"],
+ "teraType": ["Fairy"],
+ "moves": [["Liquidation"], ["Toxic"], ["Haze"], ["Recover"]]
+ }]
+ },
+ "azumarill": {
+ "weight": 2,
+ "sets": [{
+ "species": "Azumarill",
+ "weight": 50,
+ "item": ["Leftovers", "Choice Band"],
+ "ability": ["Huge Power"],
+ "evs": {"hp": 124, "atk": 252, "spe": 132},
+ "nature": ["Adamant"],
+ "teraType": ["Water", "Steel"],
+ "moves": [["Aqua Jet"], ["Play Rough"], ["Liquidation"], ["Knock Off"]]
+ }, {
+ "species": "Azumarill",
+ "weight": 50,
+ "item": ["Leftovers", "Choice Band"],
+ "ability": ["Huge Power"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Water", "Steel"],
+ "moves": [["Aqua Jet"], ["Play Rough"], ["Liquidation"], ["Knock Off"]]
+ }]
+ },
+ "chesnaught": {
+ "weight": 2,
+ "sets": [{
+ "species": "Chesnaught",
+ "weight": 100,
+ "item": ["Leftovers", "Rocky Helmet"],
+ "ability": ["Bulletproof"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Poison", "Ghost"],
+ "moves": [["Spikes"], ["Body Press"], ["Synthesis"], ["Knock Off", "Wood Hammer", "Stone Edge"]]
+ }]
+ },
+ "comfey": {
+ "weight": 3,
+ "sets": [{
+ "species": "Comfey",
+ "wantsTera": true,
+ "weight": 100,
+ "item": ["Life Orb"],
+ "ability": ["Triage"],
+ "evs": {"hp": 240, "spa": 252, "spe": 16},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ground"],
+ "moves": [["Calm Mind"], ["Taunt"], ["Draining Kiss"], ["Tera Blast"]]
+ }]
+ },
+ "fezandipiti": {
+ "weight": 2,
+ "sets": [{
+ "species": "Fezandipiti",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Toxic Chain"],
+ "evs": {"hp": 248, "def": 128, "spd": 16, "spe": 116},
+ "nature": ["Calm"],
+ "teraType": ["Water"],
+ "moves": [["Moonblast"], ["U-turn"], ["Beat Up"], ["Roost"]]
+ }]
+ },
+ "hippowdon": {
+ "weight": 2,
+ "sets": [{
+ "species": "Hippowdon",
+ "weight": 100,
+ "item": ["Leftovers", "Rocky Helmet"],
+ "ability": ["Sand Stream"],
+ "evs": {"hp": 252, "def": 208, "spd": 48},
+ "nature": ["Impish"],
+ "teraType": ["Dragon"],
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Slack Off"], ["Stone Edge"]]
+ }]
+ },
+ "hydreigon": {
+ "weight": 2,
+ "sets": [{
+ "species": "Hydreigon",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Poison"],
+ "moves": [["Nasty Plot"], ["Dark Pulse"], ["Draco Meteor"], ["Substitute"]]
+ }, {
+ "species": "Hydreigon",
+ "weight": 50,
+ "item": ["Choice Scarf"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Modest", "Timid"],
+ "teraType": ["Dark"],
+ "moves": [["Fire Blast"], ["Dark Pulse"], ["Draco Meteor"], ["U-turn"]]
+ }]
+ },
+ "mamoswine": {
+ "weight": 3,
+ "sets": [{
+ "species": "Mamoswine",
+ "weight": 50,
+ "item": ["Never-Melt Ice"],
+ "ability": ["Thick Fat"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Grass"],
+ "moves": [["Earthquake"], ["Icicle Crash"], ["Ice Shard"], ["Trailblaze"]]
+ }, {
+ "species": "Mamoswine",
+ "weight": 50,
+ "item": ["Never-Melt Ice"],
+ "ability": ["Thick Fat"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Ice"],
+ "moves": [["Earthquake"], ["Icicle Crash"], ["Ice Shard"], ["Knock Off"]]
+ }]
+ },
+ "mandibuzz": {
+ "weight": 4,
+ "sets": [{
+ "species": "Mandibuzz",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Overcoat"],
+ "evs": {"hp": 248, "def": 136, "spd": 108, "spe": 16},
+ "nature": ["Impish"],
+ "teraType": ["Steel", "Fairy"],
+ "moves": [["Foul Play"], ["Roost"], ["U-turn"], ["Defog", "Toxic"]]
+ }, {
+ "species": "Mandibuzz",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Overcoat"],
+ "evs": {"hp": 248, "def": 136, "spd": 108, "spe": 16},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Steel", "Fairy"],
+ "moves": [["Foul Play"], ["Roost"], ["Toxic"], ["Defog"]]
+ }]
+ },
+ "metagross": {
+ "weight": 3,
+ "sets": [{
+ "species": "Metagross",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Clear Body"],
+ "evs": {"hp": 252, "atk": 160, "spe": 96},
+ "nature": ["Adamant"],
+ "teraType": ["Dark"],
+ "moves": [["Heavy Slam"], ["Psychic Fangs"], ["Knock Off"], ["Stealth Rock", "Bullet Punch"]]
+ }, {
+ "species": "Metagross",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Clear Body"],
+ "evs": {"hp": 252, "atk": 160, "spe": 96},
+ "nature": ["Adamant"],
+ "teraType": ["Water"],
+ "moves": [["Heavy Slam"], ["Psychic Fangs"], ["Earthquake"], ["Stealth Rock", "Bullet Punch"]]
+ }]
+ },
+ "rhyperior": {
+ "weight": 3,
+ "sets": [{
+ "species": "Rhyperior",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Solid Rock"],
+ "evs": {"hp": 252, "atk": 16, "spd": 240},
+ "nature": ["Adamant"],
+ "teraType": ["Dragon"],
+ "moves": [["Earthquake"], ["Stone Edge"], ["Stealth Rock"], ["Megahorn"]]
+ }]
+ },
+ "salamence": {
+ "weight": 2,
+ "sets": [{
+ "species": "Salamence",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Moxie"],
+ "evs": {"hp": 96, "atk": 252, "spe": 160},
+ "nature": ["Jolly"],
+ "teraType": ["Fire"],
+ "moves": [["Roost", "Temper Flare"], ["Outrage"], ["Earthquake"], ["Dragon Dance"]]
+ }, {
+ "species": "Salamence",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Intimidate"],
+ "evs": {"hp": 160, "spa": 252, "spe": 96},
+ "nature": ["Modest"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Roost"], ["Draco Meteor"], ["Hurricane"], ["Earthquake"]]
+ }, {
+ "species": "Salamence",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Intimidate"],
+ "evs": {"hp": 160, "spa": 252, "spe": 96},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Roost"], ["Draco Meteor"], ["Hurricane"], ["Flamethrower"]]
+ }]
+ },
+ "sinistcha": {
+ "weight": 3,
+ "sets": [{
+ "species": "Sinistcha",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Heatproof"],
+ "evs": {"hp": 252, "def": 160, "spe": 96},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Poison"],
+ "moves": [["Calm Mind"], ["Matcha Gotcha"], ["Shadow Ball"], ["Strength Sap"]]
+ }]
+ },
+ "volcanion": {
+ "weight": 2,
+ "sets": [{
+ "species": "Volcanion",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Water Absorb"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy"],
+ "moves": [["Steam Eruption"], ["Flamethrower"], ["Sludge Bomb"], ["Taunt"]]
+ }, {
+ "species": "Volcanion",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Water Absorb"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ground"],
+ "moves": [["Steam Eruption"], ["Flamethrower"], ["Sludge Bomb"], ["Earth Power"]]
+ }]
+ },
+ "araquanid": {
+ "weight": 1,
+ "sets": [{
+ "species": "Araquanid",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Water Bubble"],
+ "evs": {"hp": 252, "atk": 76, "def": 156, "spe": 24},
+ "nature": ["Impish"],
+ "teraType": ["Ghost"],
+ "moves": [["Liquidation"], ["Leech Life"], ["Sticky Web"], ["Mirror Coat"]]
+ }]
+ },
+ "donphan": {
+ "weight": 2,
+ "sets": [{
+ "species": "Donphan",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Assault Vest"],
+ "ability": ["Sturdy"],
+ "evs": {"hp": 252, "atk": 104, "def": 132, "spe": 20},
+ "nature": ["Adamant"],
+ "teraType": ["Dragon", "Grass", "Fairy"],
+ "moves": [["Earthquake"], ["Rapid Spin"], ["Ice Spinner", "Ice Shard"], ["Knock Off"]]
+ }, {
+ "species": "Donphan",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Sturdy"],
+ "evs": {"hp": 252, "atk": 104, "def": 132, "spe": 20},
+ "nature": ["Adamant"],
+ "teraType": ["Dragon", "Grass", "Fairy", "Ghost"],
+ "moves": [["Earthquake"], ["Rapid Spin"], ["Stealth Rock"], ["Knock Off"]]
+ }]
+ },
+ "conkeldurr": {
+ "weight": 1,
+ "sets": [{
+ "species": "Conkeldurr",
+ "weight": 100,
+ "item": ["Flame Orb"],
+ "ability": ["Guts"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Normal"],
+ "moves": [["Close Combat"], ["Mach Punch"], ["Facade"], ["Knock Off"]]
+ }]
+ },
+ "empoleon": {
+ "weight": 1,
+ "sets": [{
+ "species": "Empoleon",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Competitive"],
+ "evs": {"hp": 252, "def": 40, "spd": 216},
+ "nature": ["Sassy"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Surf"], ["Haze"], ["Flip Turn", "Knock Off"], ["Roost"]]
+ }]
+ },
+ "zapdosgalar": {
+ "weight": 1,
+ "sets": [{
+ "species": "Zapdos-Galar",
+ "weight": 100,
+ "item": ["Choice Scarf"],
+ "ability": ["Defiant"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Flying"],
+ "moves": [["Close Combat"], ["Brave Bird"], ["Thunderous Kick", "Knock Off"], ["U-turn"]]
+ }]
+ },
+ "haxorus": {
+ "weight": 1,
+ "sets": [{
+ "species": "Haxorus",
+ "weight": 100,
+ "item": ["Choice Band"],
+ "ability": ["Mold Breaker"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly", "Adamant"],
+ "teraType": ["Dragon"],
+ "moves": [["Close Combat", "Earthquake"], ["Outrage"], ["First Impression"], ["Poison Jab"]]
+ }]
+ },
+ "jirachi": {
+ "weight": 1,
+ "sets": [{
+ "species": "Jirachi",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Serene Grace"],
+ "evs": {"hp": 252, "atk": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water"],
+ "moves": [["Iron Head"], ["Wish"], ["Protect"], ["U-turn"]]
+ }]
+ },
+ "slowbro": {
+ "weight": 1,
+ "sets": [{
+ "species": "Slowbro",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Colbur Berry"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Poison"],
+ "moves": [["Scald"], ["Psychic Noise"], ["Slack Off"], ["Calm Mind"]]
+ }, {
+ "species": "Slowbro",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Colbur Berry"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fighting"],
+ "moves": [["Thunder Wave"], ["Scald"], ["Slack Off"], ["Body Press"]]
+ }]
+ },
+ "krookodile": {
+ "weight": 1,
+ "sets": [{
+ "species": "Krookodile",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Poison"],
+ "moves": [["Stealth Rock"], ["Knock Off"], ["Earthquake"], ["Gunk Shot"]]
+ }]
+ }
+ },
+ "RU": {
+ "slowbro": {
+ "weight": 10,
+ "sets": [{
+ "species": "Slowbro",
+ "weight": 50,
+ "item": ["Rocky Helmet", "Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Poison", "Fairy"],
+ "moves": [["Scald"], ["Slack Off"], ["Psychic Noise"], ["Calm Mind"]]
+ }, {
+ "species": "Slowbro",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Poison", "Fairy"],
+ "moves": [["Scald"], ["Slack Off"], ["Future Sight"], ["Thunder Wave"]]
+ }]
+ },
+ "armarouge": {
+ "weight": 9,
+ "sets": [{
+ "species": "Armarouge",
+ "weight": 85,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Weak Armor"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Grass", "Fairy"],
+ "moves": [["Armor Cannon"], ["Psyshock"], ["Energy Ball"], ["Calm Mind"]]
+ }, {
+ "species": "Armarouge",
+ "weight": 15,
+ "item": ["Weakness Policy"],
+ "ability": ["Weak Armor"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Normal", "Ground"],
+ "moves": [["Armor Cannon"], ["Stored Power"], ["Energy Ball", "Calm Mind"], ["Endure"]]
+ }]
+ },
+ "bisharp": {
+ "weight": 9,
+ "sets": [{
+ "species": "Bisharp",
+ "weight": 100,
+ "item": ["Eviolite"],
+ "ability": ["Defiant"],
+ "evs": {"hp": 200, "atk": 252, "spe": 56},
+ "nature": ["Adamant"],
+ "teraType": ["Flying", "Dark"],
+ "moves": [["Swords Dance"], ["Sucker Punch"], ["Iron Head"], ["Throat Chop"]]
+ }]
+ },
+ "cyclizar": {
+ "weight": 9,
+ "sets": [{
+ "species": "Cyclizar",
+ "weight": 50,
+ "item": ["Assault Vest"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 104, "spd": 152, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fairy", "Steel", "Ghost"],
+ "moves": [["Rapid Spin"], ["Knock Off"], ["U-turn"], ["Dragon Tail", "Facade"]]
+ }, {
+ "species": "Cyclizar",
+ "weight": 30,
+ "item": ["Assault Vest"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 104, "spd": 152, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Steel", "Ghost"],
+ "moves": [["Rapid Spin"], ["Knock Off"], ["U-turn"], ["Draco Meteor"]]
+ }, {
+ "species": "Cyclizar",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost"],
+ "moves": [["Rapid Spin"], ["Knock Off"], ["U-turn"], ["Taunt", "Double-Edge"]]
+ }]
+ },
+ "goodrahisui": {
+ "weight": 9,
+ "sets": [{
+ "species": "Goodra-Hisui",
+ "weight": 100,
+ "item": ["Choice Specs"],
+ "ability": ["Gooey"],
+ "evs": {"hp": 120, "spa": 252, "spe": 136},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ghost", "Dragon"],
+ "moves": [["Flash Cannon"], ["Draco Meteor"], ["Thunderbolt"], ["Flamethrower"]]
+ }]
+ },
+ "jirachi": {
+ "weight": 9,
+ "sets": [{
+ "species": "Jirachi",
+ "weight": 40,
+ "item": ["Leftovers"],
+ "ability": ["Serene Grace"],
+ "evs": {"hp": 252, "spd": 32, "spe": 224},
+ "nature": ["Jolly"],
+ "teraType": ["Water", "Steel", "Fairy"],
+ "moves": [["Iron Head"], ["Stealth Rock"], ["Body Slam"], ["U-turn", "Encore", "Wish"]]
+ }, {
+ "species": "Jirachi",
+ "weight": 25,
+ "item": ["Leftovers", "Expert Belt"],
+ "ability": ["Serene Grace"],
+ "evs": {"hp": 32, "spa": 252, "spe": 224},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Fairy"],
+ "moves": [["Calm Mind"], ["Psychic Noise"], ["Grass Knot"], ["Aura Sphere", "Thunder", "Shadow Ball"]]
+ }, {
+ "species": "Jirachi",
+ "weight": 5,
+ "item": ["Expert Belt"],
+ "ability": ["Serene Grace"],
+ "evs": {"hp": 32, "spa": 252, "spe": 224},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fighting"],
+ "moves": [["Calm Mind"], ["Psychic Noise"], ["Grass Knot"], ["Aura Sphere"]]
+ }, {
+ "species": "Jirachi",
+ "weight": 30,
+ "item": ["Choice Scarf"],
+ "ability": ["Serene Grace"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel"],
+ "moves": [["Iron Head"], ["U-turn"], ["Trick"], ["Healing Wish"]]
+ }]
+ },
+ "krookodile": {
+ "weight": 9,
+ "sets": [{
+ "species": "Krookodile",
+ "weight": 40,
+ "item": ["Choice Band"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark", "Poison"],
+ "moves": [["Earthquake"], ["Knock Off"], ["Gunk Shot"], ["Close Combat", "Crunch"]]
+ }, {
+ "species": "Krookodile",
+ "weight": 15,
+ "item": ["Leftovers"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Poison", "Ghost"],
+ "moves": [["Earthquake"], ["Knock Off"], ["Gunk Shot"], ["Close Combat", "Crunch"]]
+ }, {
+ "species": "Krookodile",
+ "weight": 15,
+ "item": ["Leftovers"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost"],
+ "moves": [["Earthquake"], ["Knock Off"], ["Taunt"], ["Close Combat", "Crunch"]]
+ }, {
+ "species": "Krookodile",
+ "weight": 25,
+ "item": ["Choice Scarf"],
+ "ability": ["Intimidate", "Moxie"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark", "Poison"],
+ "moves": [["Earthquake"], ["Knock Off"], ["Gunk Shot"], ["Stone Edge", "Close Combat", "Stealth Rock"]]
+ }, {
+ "species": "Krookodile",
+ "weight": 5,
+ "item": ["Choice Scarf"],
+ "ability": ["Intimidate", "Moxie"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark", "Poison"],
+ "moves": [["Earthquake"], ["Knock Off"], ["Stone Edge"], ["Close Combat", "Stealth Rock"]]
+ }]
+ },
+ "slitherwing": {
+ "weight": 9,
+ "sets": [{
+ "species": "Slither Wing",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Protosynthesis"],
+ "evs": {"hp": 252, "atk": 16, "def": 72, "spe": 168},
+ "nature": ["Adamant"],
+ "teraType": ["Steel"],
+ "moves": [["U-turn"], ["Close Combat"], ["First Impression", "Will-O-Wisp"], ["Morning Sun"]]
+ }, {
+ "species": "Slither Wing",
+ "weight": 50,
+ "item": ["Choice Band"],
+ "ability": ["Protosynthesis"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Steel", "Bug"],
+ "moves": [["U-turn"], ["Close Combat"], ["First Impression"], ["Earthquake", "Heavy Slam"]]
+ }]
+ },
+ "empoleon": {
+ "weight": 8,
+ "sets": [{
+ "species": "Empoleon",
+ "weight": 30,
+ "item": ["Leftovers"],
+ "ability": ["Competitive"],
+ "evs": {"hp": 144, "spa": 228, "spe": 136},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy"],
+ "moves": [["Surf"], ["Roost"], ["Ice Beam"], ["Grass Knot"]]
+ }, {
+ "species": "Empoleon",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Competitive"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Calm"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Surf"], ["Roost"], ["Flip Turn"], ["Knock Off", "Ice Beam"]]
+ }, {
+ "species": "Empoleon",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Competitive"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Surf"], ["Roost"], ["Stealth Rock"], ["Roar", "Ice Beam"]]
+ }, {
+ "species": "Empoleon",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Competitive"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Calm"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Surf"], ["Roost"], ["Stealth Rock"], ["Knock Off"]]
+ }]
+ },
+ "fezandipiti": {
+ "weight": 8,
+ "sets": [{
+ "species": "Fezandipiti",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Covert Cloak"],
+ "ability": ["Toxic Chain"],
+ "evs": {"hp": 252, "def": 56, "spe": 200},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Moonblast"], ["Roost"], ["Calm Mind"], ["U-turn"]]
+ }, {
+ "species": "Fezandipiti",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Covert Cloak"],
+ "ability": ["Toxic Chain"],
+ "evs": {"hp": 252, "def": 56, "spe": 200},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Moonblast"], ["Roost"], ["Calm Mind"], ["Taunt"]]
+ }]
+ },
+ "hippowdon": {
+ "weight": 8,
+ "sets": [{
+ "species": "Hippowdon",
+ "weight": 80,
+ "item": ["Leftovers", "Rocky Helmet"],
+ "ability": ["Sand Stream"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Dragon", "Ghost", "Poison"],
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Slack Off"], ["Stone Edge", "Whirlwind"]]
+ }, {
+ "species": "Hippowdon",
+ "weight": 20,
+ "item": ["Leftovers", "Rocky Helmet"],
+ "ability": ["Sand Stream"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Dragon", "Ghost", "Poison"],
+ "moves": [["Stone Edge"], ["Earthquake"], ["Slack Off"], ["Whirlwind"]]
+ }]
+ },
+ "suicune": {
+ "weight": 8,
+ "sets": [{
+ "species": "Suicune",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Pressure"],
+ "evs": {"hp": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Dark", "Fairy"],
+ "moves": [["Substitute"], ["Calm Mind"], ["Scald"], ["Protect", "Ice Beam", "Shadow Ball"]]
+ }]
+ },
+ "volcanion": {
+ "weight": 8,
+ "sets": [{
+ "species": "Volcanion",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Water Absorb"],
+ "evs": {"hp": 120, "spa": 252, "spe": 136},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy", "Ghost", "Dark"],
+ "moves": [["Steam Eruption"], ["Flamethrower"], ["Body Press"], ["Earth Power"]]
+ }, {
+ "species": "Volcanion",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Water Absorb"],
+ "evs": {"hp": 120, "spa": 252, "spe": 136},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy", "Ghost", "Dark"],
+ "moves": [["Steam Eruption"], ["Flamethrower"], ["Taunt"], ["Body Press", "Earth Power"]]
+ }]
+ },
+ "zapdosgalar": {
+ "weight": 8,
+ "sets": [{
+ "species": "Zapdos-Galar",
+ "weight": 100,
+ "item": ["Choice Scarf", "Choice Band"],
+ "ability": ["Defiant"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Flying", "Steel", "Dark"],
+ "moves": [["Close Combat"], ["Brave Bird"], ["Knock Off"], ["U-turn"]]
+ }]
+ },
+ "basculegionf": {
+ "weight": 7,
+ "sets": [{
+ "species": "Basculegion-F",
+ "weight": 45,
+ "item": ["Choice Scarf"],
+ "ability": ["Adaptability"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Surf"], ["Shadow Ball"], ["Ice Beam"], ["Flip Turn"]]
+ }, {
+ "species": "Basculegion-F",
+ "weight": 30,
+ "item": ["Choice Specs"],
+ "ability": ["Adaptability"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Surf"], ["Shadow Ball"], ["Ice Beam"], ["Flip Turn"]]
+ }, {
+ "species": "Basculegion-F",
+ "weight": 25,
+ "item": ["Weakness Policy", "Life Orb"],
+ "ability": ["Adaptability"],
+ "evs": {"hp": 108, "def": 52, "spa": 252, "spd": 24, "spe": 72},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Surf"], ["Shadow Ball"], ["Ice Beam"], ["Agility"]]
+ }]
+ },
+ "flygon": {
+ "weight": 6,
+ "sets": [{
+ "species": "Flygon",
+ "weight": 55,
+ "item": ["Loaded Dice"],
+ "ability": ["Levitate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost", "Fairy", "Steel"],
+ "moves": [["Stealth Rock"], ["Scale Shot"], ["Earthquake"], ["U-turn", "Stone Edge"]]
+ }, {
+ "species": "Flygon",
+ "weight": 20,
+ "item": ["Loaded Dice"],
+ "ability": ["Levitate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel"],
+ "moves": [["Dragon Dance"], ["Scale Shot"], ["Earthquake"], ["Stone Edge"]]
+ }, {
+ "species": "Flygon",
+ "weight": 5,
+ "item": ["Loaded Dice"],
+ "ability": ["Levitate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fire"],
+ "moves": [["Dragon Dance"], ["Scale Shot"], ["Earthquake"], ["Fire Punch"]]
+ }, {
+ "species": "Flygon",
+ "weight": 15,
+ "item": ["Choice Band"],
+ "ability": ["Levitate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Bug"],
+ "moves": [["Outrage", "Dragon Claw", "Stone Edge"], ["Earthquake"], ["First Impression"], ["U-turn"]]
+ }, {
+ "species": "Flygon",
+ "weight": 5,
+ "item": ["Choice Scarf"],
+ "ability": ["Levitate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Dragon"],
+ "moves": [["Outrage"], ["U-turn"], ["Earthquake"], ["Stone Edge"]]
+ }]
+ },
+ "gardevoir": {
+ "weight": 7,
+ "sets": [{
+ "species": "Gardevoir",
+ "weight": 100,
+ "item": ["Choice Scarf"],
+ "ability": ["Trace"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Moonblast"], ["Psychic"], ["Trick"], ["Healing Wish"]]
+ }]
+ },
+ "gengar": {
+ "weight": 7,
+ "sets": [{
+ "species": "Gengar",
+ "weight": 50,
+ "item": ["Choice Scarf"],
+ "ability": ["Cursed Body"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Dark"],
+ "moves": [["Shadow Ball"], ["Sludge Wave"], ["Trick"], ["Toxic Spikes", "Focus Blast", "Thunder Wave", "Destiny Bond"]]
+ }, {
+ "species": "Gengar",
+ "weight": 25,
+ "item": ["Leftovers", "Heavy-Duty Boots"],
+ "ability": ["Cursed Body"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Dark"],
+ "moves": [["Hex"], ["Sludge Bomb"], ["Will-O-Wisp"], ["Toxic Spikes", "Focus Blast"]]
+ }, {
+ "species": "Gengar",
+ "weight": 15,
+ "item": ["Air Balloon"],
+ "ability": ["Cursed Body"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fighting"],
+ "moves": [["Shadow Ball"], ["Sludge Wave"], ["Nasty Plot"], ["Focus Blast"]]
+ }, {
+ "species": "Gengar",
+ "weight": 10,
+ "item": ["Air Balloon"],
+ "ability": ["Cursed Body"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Shadow Ball"], ["Sludge Wave"], ["Nasty Plot"], ["Encore"]]
+ }]
+ },
+ "magnezone": {
+ "weight": 7,
+ "sets": [{
+ "species": "Magnezone",
+ "wantsTera": true,
+ "weight": 25,
+ "item": ["Choice Specs"],
+ "ability": ["Analytic"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Grass", "Water"],
+ "moves": [["Thunderbolt"], ["Flash Cannon"], ["Volt Switch"], ["Tera Blast"]]
+ }, {
+ "species": "Magnezone",
+ "wantsTera": true,
+ "weight": 25,
+ "item": ["Choice Specs"],
+ "ability": ["Magnet Pull"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ground"],
+ "moves": [["Thunderbolt"], ["Flash Cannon"], ["Volt Switch"], ["Tera Blast"]]
+ }, {
+ "species": "Magnezone",
+ "wantsTera": true,
+ "weight": 25,
+ "item": ["Assault Vest"],
+ "ability": ["Analytic"],
+ "evs": {"hp": 88, "spa": 208, "spd": 76, "spe": 136},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy"],
+ "moves": [["Discharge"], ["Flash Cannon"], ["Volt Switch"], ["Tera Blast"]]
+ }, {
+ "species": "Magnezone",
+ "weight": 25,
+ "item": ["Assault Vest"],
+ "ability": ["Analytic"],
+ "evs": {"hp": 88, "spa": 208, "spd": 76, "spe": 136},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Flying", "Water"],
+ "moves": [["Discharge"], ["Flash Cannon"], ["Volt Switch"], ["Body Press", "Mirror Coat"]]
+ }]
+ },
+ "maushold": {
+ "weight": 4,
+ "sets": [{
+ "species": "Maushold",
+ "weight": 100,
+ "item": ["Wide Lens"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost", "Normal"],
+ "moves": [["Tidy Up"], ["Population Bomb"], ["Bite", "Bullet Seed"], ["Encore"]]
+ }]
+ },
+ "mew": {
+ "weight": 7,
+ "sets": [{
+ "species": "Mew",
+ "weight": 100,
+ "item": ["Life Orb"],
+ "ability": ["Synchronize"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Nasty Plot"], ["Psyshock"], ["Earth Power"], ["Draining Kiss"]]
+ }]
+ },
+ "mimikyu": {
+ "weight": 4,
+ "sets": [{
+ "species": "Mimikyu",
+ "weight": 100,
+ "item": ["Life Orb", "Red Card"],
+ "ability": ["Disguise"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost"],
+ "moves": [["Swords Dance"], ["Shadow Sneak"], ["Play Rough"], ["Shadow Claw"]]
+ }]
+ },
+ "noivern": {
+ "weight": 7,
+ "sets": [{
+ "species": "Noivern",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Infiltrator"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Fire"],
+ "moves": [["Roost"], ["U-turn"], ["Draco Meteor"], ["Flamethrower"]]
+ }, {
+ "species": "Noivern",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Infiltrator"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fire"],
+ "moves": [["Roost"], ["Defog"], ["Draco Meteor"], ["Flamethrower"]]
+ }, {
+ "species": "Noivern",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Infiltrator"],
+ "evs": {"hp": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Roost"], ["Defog"], ["Draco Meteor", "Psychic Noise"], ["Super Fang"]]
+ }]
+ },
+ "registeel": {
+ "weight": 6,
+ "sets": [{
+ "species": "Registeel",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Clear Body"],
+ "evs": {"hp": 252, "def": 180, "spd": 76},
+ "nature": ["Impish"],
+ "teraType": ["Ghost"],
+ "moves": [["Stealth Rock"], ["Heavy Slam"], ["Body Press"], ["Iron Defense"]]
+ }]
+ },
+ "reuniclus": {
+ "weight": 7,
+ "sets": [{
+ "species": "Reuniclus",
+ "weight": 50,
+ "item": ["Leftovers", "Rocky Helmet"],
+ "ability": ["Magic Guard"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water", "Fairy"],
+ "moves": [["Psychic Noise"], ["Calm Mind"], ["Focus Blast", "Shadow Ball"], ["Recover"]]
+ }, {
+ "species": "Reuniclus",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water", "Fairy"],
+ "moves": [["Psychic Noise"], ["Thunder Wave"], ["Focus Blast"], ["Recover"]]
+ }, {
+ "species": "Reuniclus",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "nature": ["Bold"],
+ "teraType": ["Water", "Fairy"],
+ "moves": [["Psychic Noise"], ["Thunder Wave"], ["Knock Off"], ["Recover"]]
+ }]
+ },
+ "revavroom": {
+ "weight": 4,
+ "sets": [{
+ "species": "Revavroom",
+ "weight": 100,
+ "item": ["Air Balloon"],
+ "ability": ["Filter"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Ground"],
+ "moves": [["Shift Gear"], ["Iron Head"], ["Gunk Shot"], ["High Horsepower"]]
+ }]
+ },
+ "salamence": {
+ "weight": 7,
+ "sets": [{
+ "species": "Salamence",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Intimidate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel", "Water"],
+ "moves": [["Draco Meteor"], ["Hurricane"], ["Flamethrower"], ["Roost"]]
+ }, {
+ "species": "Salamence",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots", "Life Orb"],
+ "ability": ["Intimidate", "Moxie"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Ground"],
+ "moves": [["Dragon Claw"], ["Dual Wingbeat", "Roost"], ["Earthquake"], ["Dragon Dance"]]
+ }, {
+ "species": "Salamence",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots", "Lum Berry"],
+ "ability": ["Intimidate", "Moxie"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Ground"],
+ "moves": [["Outrage"], ["Dual Wingbeat", "Roost"], ["Earthquake"], ["Dragon Dance"]]
+ }]
+ },
+ "terrakion": {
+ "weight": 7,
+ "sets": [{
+ "species": "Terrakion",
+ "weight": 25,
+ "item": ["Choice Band"],
+ "ability": ["Justified"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Rock"],
+ "moves": [["Close Combat"], ["Stone Edge"], ["Earthquake"], ["Quick Attack"]]
+ }, {
+ "species": "Terrakion",
+ "weight": 25,
+ "item": ["Choice Band"],
+ "ability": ["Justified"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost"],
+ "moves": [["Close Combat"], ["Stone Edge"], ["Earthquake"], ["Tera Blast"]]
+ }, {
+ "species": "Terrakion",
+ "weight": 20,
+ "item": ["Air Balloon"],
+ "ability": ["Justified"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Flying"],
+ "moves": [["Close Combat"], ["Stone Edge"], ["Earthquake", "Taunt"], ["Swords Dance"]]
+ }, {
+ "species": "Terrakion",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Justified"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Flying"],
+ "moves": [["Close Combat"], ["Stone Edge"], ["Earthquake", "Substitute"], ["Swords Dance"]]
+ }, {
+ "species": "Terrakion",
+ "weight": 10,
+ "item": ["Leftovers"],
+ "ability": ["Justified"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Rock", "Ground"],
+ "moves": [["Close Combat"], ["Stone Edge"], ["Earthquake"], ["Rock Slide", "Stealth Rock"]]
+ }]
+ },
+ "umbreon": {
+ "weight": 7,
+ "sets": [{
+ "species": "Umbreon",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Synchronize", "Inner Focus"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Poison", "Ghost"],
+ "moves": [["Foul Play"], ["Toxic"], ["Wish"], ["Protect"]]
+ }, {
+ "species": "Umbreon",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Synchronize", "Inner Focus"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Poison", "Ghost"],
+ "moves": [["Foul Play"], ["Toxic"], ["Wish"], ["Moonlight"]]
+ }]
+ },
+ "weezinggalar": {
+ "weight": 7,
+ "sets": [{
+ "species": "Weezing-Galar",
+ "weight": 90,
+ "item": ["Leftovers", "Heavy-Duty Boots"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "def": 120, "spe": 136},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Steel", "Ghost", "Water"],
+ "moves": [["Strange Steam"], ["Pain Split"], ["Will-O-Wisp"], ["Defog", "Flamethrower", "Taunt"]]
+ }, {
+ "species": "Weezing-Galar",
+ "weight": 10,
+ "item": ["Leftovers", "Heavy-Duty Boots"],
+ "ability": ["Neutralizing Gas"],
+ "evs": {"hp": 252, "def": 120, "spe": 136},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Strange Steam"], ["Pain Split"], ["Will-O-Wisp"], ["Defog", "Flamethrower", "Taunt"]]
+ }]
+ },
+ "zoroarkhisui": {
+ "weight": 7,
+ "sets": [{
+ "species": "Zoroark-Hisui",
+ "weight": 20,
+ "item": ["Choice Specs"],
+ "ability": ["Illusion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Shadow Ball"], ["Tera Blast"], ["Flamethrower"], ["Trick", "Grass Knot"]]
+ }, {
+ "species": "Zoroark-Hisui",
+ "weight": 10,
+ "item": ["Choice Specs"],
+ "ability": ["Illusion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Shadow Ball"], ["Tera Blast"], ["Flamethrower"], ["U-turn"]]
+ }, {
+ "species": "Zoroark-Hisui",
+ "weight": 20,
+ "item": ["Choice Specs"],
+ "ability": ["Illusion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Shadow Ball"], ["Hyper Voice"], ["Flamethrower"], ["Trick", "Grass Knot"]]
+ }, {
+ "species": "Zoroark-Hisui",
+ "weight": 10,
+ "item": ["Choice Specs"],
+ "ability": ["Illusion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Shadow Ball"], ["Hyper Voice"], ["Flamethrower"], ["U-turn"]]
+ }, {
+ "species": "Zoroark-Hisui",
+ "weight": 20,
+ "item": ["Choice Scarf"],
+ "ability": ["Illusion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Shadow Ball"], ["Hyper Voice"], ["Flamethrower"], ["Trick"]]
+ }, {
+ "species": "Zoroark-Hisui",
+ "weight": 20,
+ "item": ["Choice Scarf"],
+ "ability": ["Illusion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Shadow Ball"], ["Hyper Voice"], ["U-turn"], ["Trick"]]
+ }]
+ },
+ "amoonguss": {
+ "weight": 5,
+ "sets": [{
+ "species": "Amoonguss",
+ "weight": 100,
+ "item": ["Rocky Helmet", "Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 248, "def": 252, "spd": 8},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Water", "Steel"],
+ "moves": [["Stun Spore"], ["Giga Drain"], ["Sludge Bomb"], ["Foul Play", "Toxic"]]
+ }]
+ },
+ "conkeldurr": {
+ "weight": 5,
+ "sets": [{
+ "species": "Conkeldurr",
+ "weight": 90,
+ "item": ["Flame Orb"],
+ "ability": ["Guts"],
+ "evs": {"hp": 92, "atk": 252, "spe": 164},
+ "nature": ["Adamant"],
+ "teraType": ["Steel", "Normal"],
+ "moves": [["Facade"], ["Close Combat", "Drain Punch"], ["Knock Off"], ["Mach Punch"]]
+ }, {
+ "species": "Conkeldurr",
+ "weight": 10,
+ "item": ["Flame Orb"],
+ "ability": ["Guts"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Steel", "Normal"],
+ "moves": [["Facade"], ["Close Combat", "Drain Punch"], ["Knock Off"], ["Mach Punch"]]
+ }]
+ },
+ "feraligatr": {
+ "weight": 4,
+ "sets": [{
+ "species": "Feraligatr",
+ "weight": 70,
+ "item": ["Life Orb"],
+ "ability": ["Sheer Force"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Dragon Dance"], ["Ice Punch"], ["Liquidation"], ["Crunch"]]
+ }, {
+ "species": "Feraligatr",
+ "weight": 30,
+ "item": ["Life Orb"],
+ "ability": ["Sheer Force"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Swords Dance"], ["Aqua Jet"], ["Liquidation", "Ice Punch"], ["Crunch"]]
+ }]
+ },
+ "gligar": {
+ "weight": 4,
+ "sets": [{
+ "species": "Gligar",
+ "weight": 100,
+ "item": ["Eviolite"],
+ "ability": ["Immunity"],
+ "evs": {"hp": 252, "def": 204, "spd": 36, "spe": 16},
+ "nature": ["Impish"],
+ "teraType": ["Water"],
+ "moves": [["Spikes", "Stealth Rock"], ["Earthquake"], ["Toxic"], ["U-turn", "Knock Off"]]
+ }]
+ },
+ "gyarados": {
+ "weight": 4,
+ "sets": [{
+ "species": "Gyarados",
+ "wantsTera": true,
+ "weight": 70,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Intimidate", "Moxie"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Flying"],
+ "moves": [["Dragon Dance"], ["Waterfall"], ["Earthquake"], ["Tera Blast"]]
+ }, {
+ "species": "Gyarados",
+ "weight": 10,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Intimidate", "Moxie"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ground"],
+ "moves": [["Dragon Dance"], ["Waterfall"], ["Earthquake"], ["Ice Fang"]]
+ }, {
+ "species": "Gyarados",
+ "weight": 20,
+ "item": ["Covert Cloak"],
+ "ability": ["Intimidate", "Moxie"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ground"],
+ "moves": [["Dragon Dance"], ["Waterfall"], ["Earthquake"], ["Taunt"]]
+ }]
+ },
+ "mienshao": {
+ "weight": 4,
+ "sets": [{
+ "species": "Mienshao",
+ "weight": 50,
+ "item": ["Life Orb"],
+ "ability": ["Regenerator"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark", "Steel"],
+ "moves": [["Close Combat"], ["Knock Off"], ["U-turn"], ["Triple Axel", "Ice Spinner"]]
+ }, {
+ "species": "Mienshao",
+ "weight": 50,
+ "item": ["Choice Scarf"],
+ "ability": ["Regenerator"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark", "Fighting"],
+ "moves": [["Close Combat"], ["Knock Off"], ["U-turn"], ["Ice Spinner", "Stone Edge"]]
+ }]
+ },
+ "necrozma": {
+ "weight": 4,
+ "sets": [{
+ "species": "Necrozma",
+ "weight": 25,
+ "item": ["Lum Berry"],
+ "ability": ["Prism Armor"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fairy", "Electric"],
+ "moves": [["Photon Geyser"], ["Earthquake"], ["Dragon Dance"], ["Knock Off", "X-Scissor"]]
+ }, {
+ "species": "Necrozma",
+ "weight": 25,
+ "item": ["Weakness Policy"],
+ "ability": ["Prism Armor"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fire"],
+ "moves": [["Photon Geyser"], ["Earthquake"], ["Dragon Dance"], ["Knock Off", "X-Scissor"]]
+ }, {
+ "species": "Necrozma",
+ "weight": 50,
+ "item": ["Power Herb"],
+ "ability": ["Prism Armor"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ghost"],
+ "moves": [["Photon Geyser"], ["Earth Power"], ["Meteor Beam"], ["Stealth Rock"]]
+ }]
+ },
+ "ninetalesalola": {
+ "weight": 4,
+ "sets": [{
+ "species": "Ninetales-Alola",
+ "wantsTera": true,
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Snow Warning"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Nasty Plot"], ["Freeze-Dry", "Blizzard"], ["Moonblast"], ["Tera Blast"]]
+ }]
+ },
+ "slowbrogalar": {
+ "weight": 3,
+ "sets": [{
+ "species": "Slowbro-Galar",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Psyshock"], ["Flamethrower"], ["Slack Off"], ["Toxic"]]
+ }, {
+ "species": "Slowbro-Galar",
+ "weight": 30,
+ "item": ["Colbur Berry"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Ghost"],
+ "moves": [["Psyshock"], ["Flamethrower"], ["Slack Off"], ["Toxic"]]
+ }, {
+ "species": "Slowbro-Galar",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots", "Covert Cloak"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Sludge Bomb"], ["Flamethrower"], ["Slack Off"], ["Calm Mind"]]
+ }]
+ },
+ "talonflame": {
+ "weight": 1,
+ "sets": [{
+ "species": "Talonflame",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Flame Body"],
+ "evs": {"hp": 248, "def": 28, "spe": 232},
+ "nature": ["Jolly"],
+ "teraType": ["Dragon", "Ghost"],
+ "moves": [["Brave Bird"], ["Defog", "U-turn"], ["Will-O-Wisp"], ["Roost"]]
+ }]
+ },
+ "vaporeon": {
+ "weight": 4,
+ "sets": [{
+ "species": "Vaporeon",
+ "weight": 75,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Water Absorb"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Poison", "Fairy"],
+ "moves": [["Scald"], ["Protect"], ["Wish"], ["Haze", "Calm Mind", "Ice Beam"]]
+ }, {
+ "species": "Vaporeon",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Water Absorb"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Bold"],
+ "teraType": ["Poison", "Fairy"],
+ "moves": [["Scald"], ["Protect"], ["Wish"], ["Flip Turn"]]
+ }]
+ },
+ "wochien": {
+ "weight": 4,
+ "sets": [{
+ "species": "Wo-Chien",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Tablets of Ruin"],
+ "evs": {"hp": 252, "def": 200, "spe": 56},
+ "nature": ["Impish"],
+ "teraType": ["Poison", "Ghost"],
+ "moves": [["Knock Off"], ["Protect"], ["Leech Seed"], ["Foul Play", "Ruination"]]
+ }, {
+ "species": "Wo-Chien",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Tablets of Ruin"],
+ "evs": {"hp": 252, "spd": 200, "spe": 56},
+ "nature": ["Careful"],
+ "teraType": ["Poison", "Ghost"],
+ "moves": [["Knock Off"], ["Protect"], ["Leech Seed"], ["Foul Play", "Ruination"]]
+ }]
+ },
+ "azelf": {
+ "weight": 4,
+ "sets": [{
+ "species": "Azelf",
+ "weight": 60,
+ "item": ["Expert Belt"],
+ "ability": ["Levitate"],
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "nature": ["Naive"],
+ "teraType": ["Steel"],
+ "moves": [["Psychic"], ["Flamethrower"], ["U-turn"], ["Energy Ball"]]
+ }, {
+ "species": "Azelf",
+ "weight": 10,
+ "item": ["Choice Scarf"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Fire"],
+ "moves": [["Psyshock"], ["Flamethrower"], ["Dazzling Gleam"], ["Trick"]]
+ }, {
+ "species": "Azelf",
+ "weight": 10,
+ "item": ["Choice Scarf"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Fire"],
+ "moves": [["Psyshock"], ["Flamethrower"], ["Dazzling Gleam"], ["U-turn"]]
+ }, {
+ "species": "Azelf",
+ "weight": 10,
+ "item": ["Choice Scarf"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Psyshock"], ["Shadow Ball"], ["Dazzling Gleam"], ["Trick"]]
+ }, {
+ "species": "Azelf",
+ "weight": 10,
+ "item": ["Choice Scarf"],
+ "ability": ["Levitate"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Psyshock"], ["Shadow Ball"], ["Dazzling Gleam"], ["U-turn"]]
+ }]
+ },
+ "crawdaunt": {
+ "weight": 4,
+ "sets": [{
+ "species": "Crawdaunt",
+ "weight": 50,
+ "item": ["Life Orb"],
+ "ability": ["Adaptability"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Water"],
+ "moves": [["Crabhammer"], ["Knock Off"], ["Aqua Jet"], ["Swords Dance"]]
+ }, {
+ "species": "Crawdaunt",
+ "weight": 50,
+ "item": ["Choice Band"],
+ "ability": ["Adaptability"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Fighting"],
+ "moves": [["Crabhammer"], ["Knock Off"], ["Aqua Jet"], ["Close Combat"]]
+ }]
+ },
+ "chesnaught": {
+ "weight": 4,
+ "sets": [{
+ "species": "Chesnaught",
+ "weight": 100,
+ "item": ["Rocky Helmet"],
+ "ability": ["Bulletproof"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Steel"],
+ "moves": [["Spikes"], ["Knock Off"], ["Synthesis"], ["Body Press"]]
+ }]
+ },
+ "cresselia": {
+ "weight": 3,
+ "sets": [{
+ "species": "Cresselia",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "def": 236, "spe": 20},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Poison"],
+ "moves": [["Calm Mind"], ["Moonblast"], ["Stored Power"], ["Moonlight"]]
+ }]
+ },
+ "entei": {
+ "weight": 4,
+ "sets": [{
+ "species": "Entei",
+ "weight": 100,
+ "item": ["Choice Band"],
+ "ability": ["Inner Focus"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Normal", "Dark"],
+ "moves": [["Extreme Speed"], ["Sacred Fire"], ["Crunch"], ["Stone Edge", "Stomping Tantrum"]]
+ }]
+ },
+ "gastrodon": {
+ "weight": 3,
+ "sets": [{
+ "species": "Gastrodon",
+ "weight": 100,
+ "item": ["Rocky Helmet", "Heavy-Duty Boots"],
+ "ability": ["Sticky Hold"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Relaxed"],
+ "teraType": ["Ghost", "Poison"],
+ "moves": [["Spikes"], ["Earthquake"], ["Ice Beam"], ["Recover"]]
+ }]
+ },
+ "kleavor": {
+ "weight": 3,
+ "sets": [{
+ "species": "Kleavor",
+ "weight": 100,
+ "item": ["Choice Scarf"],
+ "ability": ["Sharpness"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fighting"],
+ "moves": [["Stone Axe"], ["U-turn"], ["Close Combat"], ["X-Scissor"]]
+ }]
+ },
+ "klefki": {
+ "weight": 3,
+ "sets": [{
+ "species": "Klefki",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Prankster"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Impish"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Thunder Wave"], ["Foul Play", "Magnet Rise"], ["Spikes"], ["Play Rough"]]
+ }, {
+ "species": "Klefki",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Prankster"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Thunder Wave"], ["Foul Play", "Magnet Rise"], ["Spikes"], ["Dazzling Gleam"]]
+ }]
+ },
+ "lilliganthisui": {
+ "weight": 3,
+ "sets": [{
+ "species": "Lilligant-Hisui",
+ "wantsTera": true,
+ "weight": 50,
+ "item": ["Wide Lens"],
+ "ability": ["Hustle"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Psychic"],
+ "moves": [["Close Combat"], ["Leaf Blade"], ["Victory Dance"], ["Tera Blast"]]
+ }, {
+ "species": "Lilligant-Hisui",
+ "weight": 50,
+ "item": ["Wide Lens"],
+ "ability": ["Hustle"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ice", "Fighting"],
+ "moves": [["Close Combat"], ["Leaf Blade"], ["Victory Dance"], ["Ice Spinner"]]
+ }]
+ },
+ "lycanrocdusk": {
+ "weight": 3,
+ "sets": [{
+ "species": "Lycanroc-Dusk",
+ "weight": 50,
+ "item": ["Choice Band", "Life Orb"],
+ "ability": ["Tough Claws"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fighting", "Dark"],
+ "moves": [["Close Combat"], ["Accelerock"], ["Crunch"], ["Psychic Fangs", "Stone Edge"]]
+ }, {
+ "species": "Lycanroc-Dusk",
+ "weight": 25,
+ "item": ["Life Orb"],
+ "ability": ["Tough Claws"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fighting"],
+ "moves": [["Close Combat"], ["Swords Dance"], ["Stone Edge"], ["Accelerock"]]
+ }, {
+ "species": "Lycanroc-Dusk",
+ "weight": 25,
+ "item": ["Life Orb"],
+ "ability": ["Tough Claws"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Close Combat"], ["Swords Dance"], ["Stone Edge"], ["Sucker Punch"]]
+ }]
+ },
+ "mukalola": {
+ "weight": 3,
+ "sets": [{
+ "species": "Muk-Alola",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Poison Touch"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Water", "Fairy", "Steel", "Flying"],
+ "moves": [["Poison Jab"], ["Knock Off"], ["Rest"], ["Sleep Talk"]]
+ }]
+ },
+ "rotomheat": {
+ "weight": 3,
+ "sets": [{
+ "species": "Rotom-Heat",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 248, "spa": 4, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Fairy", "Steel"],
+ "moves": [["Overheat"], ["Volt Switch", "Thunderbolt"], ["Nasty Plot"], ["Will-O-Wisp"]]
+ }, {
+ "species": "Rotom-Heat",
+ "weight": 50,
+ "item": ["Choice Scarf"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Fairy", "Steel"],
+ "moves": [["Overheat"], ["Volt Switch"], ["Trick"], ["Will-O-Wisp", "Thunderbolt"]]
+ }]
+ },
+ "bellibolt": {
+ "weight": 3,
+ "sets": [{
+ "species": "Bellibolt",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Static"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Volt Switch"], ["Slack Off"], ["Muddy Water"], ["Toxic"]]
+ }]
+ },
+ "breloom": {
+ "weight": 3,
+ "sets": [{
+ "species": "Breloom",
+ "weight": 50,
+ "item": ["Choice Band"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Fighting"],
+ "moves": [["Mach Punch"], ["Bullet Seed"], ["Close Combat"], ["Rock Tomb", "Bulldoze"]]
+ }, {
+ "species": "Breloom",
+ "weight": 50,
+ "item": ["Loaded Dice", "Life Orb"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Fighting", "Fire"],
+ "moves": [["Mach Punch"], ["Bullet Seed"], ["Swords Dance"], ["Rock Tomb", "Bulldoze"]]
+ }]
+ },
+ "chansey": {
+ "weight": 2,
+ "sets": [{
+ "species": "Chansey",
+ "weight": 100,
+ "item": ["Eviolite"],
+ "ability": ["Natural Cure"],
+ "evs": {"hp": 4, "def": 252, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Ghost"],
+ "moves": [["Seismic Toss"], ["Soft-Boiled"], ["Heal Bell"], ["Stealth Rock"]]
+ }]
+ },
+ "gallade": {
+ "weight": 3,
+ "sets": [{
+ "species": "Gallade",
+ "weight": 100,
+ "item": ["Lum Berry"],
+ "ability": ["Sharpness"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Dark"],
+ "moves": [["Night Slash"], ["Agility"], ["Sacred Sword"], ["Psycho Cut"]]
+ }]
+ },
+ "infernape": {
+ "weight": 3,
+ "sets": [{
+ "species": "Infernape",
+ "weight": 50,
+ "item": ["Choice Scarf"],
+ "ability": ["Blaze"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fighting"],
+ "moves": [["U-turn"], ["Switcheroo"], ["Close Combat"], ["Flare Blitz"]]
+ }, {
+ "species": "Infernape",
+ "weight": 50,
+ "item": ["Air Balloon", "Expert Belt"],
+ "ability": ["Blaze"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fighting", "Grass"],
+ "moves": [["Nasty Plot"], ["Vacuum Wave"], ["Fire Blast"], ["Grass Knot"]]
+ }]
+ },
+ "kilowattrel": {
+ "weight": 3,
+ "sets": [{
+ "species": "Kilowattrel",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Volt Absorb"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Electric", "Steel"],
+ "moves": [["U-turn"], ["Thunderbolt"], ["Hurricane"], ["Roost"]]
+ }, {
+ "species": "Kilowattrel",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Volt Absorb"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Electric", "Steel"],
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Hurricane"], ["Roost"]]
+ }]
+ },
+ "oricoriopompom": {
+ "weight": 3,
+ "sets": [{
+ "species": "Oricorio-Pom-Pom",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Dancer"],
+ "evs": {"hp": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground", "Water"],
+ "moves": [["Quiver Dance"], ["Revelation Dance"], ["Hurricane", "Taunt"], ["Roost"]]
+ }]
+ },
+ "palossand": {
+ "weight": 3,
+ "sets": [{
+ "species": "Palossand",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Water Compaction"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Water", "Poison"],
+ "moves": [["Stealth Rock"], ["Scorching Sands"], ["Shadow Ball"], ["Shore Up"]]
+ }]
+ },
+ "porygonz": {
+ "weight": 3,
+ "sets": [{
+ "species": "Porygon-Z",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Download"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ground"],
+ "moves": [["Agility"], ["Tera Blast"], ["Ice Beam"], ["Thunderbolt"]]
+ }]
+ },
+ "quagsire": {
+ "weight": 3,
+ "sets": [{
+ "species": "Quagsire",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots", "Leftovers", "Rocky Helmet"],
+ "ability": ["Unaware", "Water Absorb"],
+ "evs": {"hp": 252, "atk": 4, "def": 252},
+ "nature": ["Impish"],
+ "teraType": ["Poison"],
+ "moves": [["Toxic"], ["Earthquake"], ["Recover"], ["Spikes", "Stealth Rock"]]
+ }]
+ },
+ "raikou": {
+ "weight": 3,
+ "sets": [{
+ "species": "Raikou",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Flying"],
+ "moves": [["Calm Mind"], ["Thunderbolt"], ["Scald"], ["Aura Sphere", "Volt Switch"]]
+ }, {
+ "species": "Raikou",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Flying"],
+ "moves": [["Calm Mind"], ["Thunderbolt"], ["Scald"], ["Substitute"]]
+ }, {
+ "species": "Raikou",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Fairy", "Fighting"],
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Scald"], ["Aura Sphere"]]
+ }]
+ },
+ "regidrago": {
+ "weight": 3,
+ "sets": [{
+ "species": "Regidrago",
+ "wantsTera": true,
+ "weight": 40,
+ "item": ["Choice Specs"],
+ "ability": ["Dragon's Maw"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid", "Modest"],
+ "teraType": ["Steel"],
+ "moves": [["Dragon Energy"], ["Draco Meteor"], ["Earth Power"], ["Tera Blast"]]
+ }, {
+ "species": "Regidrago",
+ "wantsTera": true,
+ "weight": 30,
+ "item": ["Loaded Dice"],
+ "ability": ["Dragon's Maw"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel"],
+ "moves": [["Scale Shot"], ["Dragon Dance"], ["Earthquake"], ["Tera Blast"]]
+ }, {
+ "species": "Regidrago",
+ "wantsTera": true,
+ "weight": 30,
+ "item": ["Choice Scarf"],
+ "ability": ["Dragon's Maw"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Dragon Energy"], ["Draco Meteor"], ["Earth Power"], ["Tera Blast"]]
+ }]
+ },
+ "rotommow": {
+ "weight": 3,
+ "sets": [{
+ "species": "Rotom-Mow",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Nasty Plot"], ["Leaf Storm"], ["Discharge"], ["Pain Split"]]
+ }]
+ },
+ "swampert": {
+ "weight": 3,
+ "sets": [{
+ "species": "Swampert",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Torrent"],
+ "evs": {"hp": 252, "atk": 4, "def": 252},
+ "nature": ["Impish"],
+ "teraType": ["Poison"],
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Knock Off", "Roar"], ["Flip Turn"]]
+ }, {
+ "species": "Swampert",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Torrent"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Relaxed"],
+ "teraType": ["Poison"],
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Knock Off", "Roar"], ["Surf"]]
+ }]
+ },
+ "toxtricity": {
+ "weight": 3,
+ "sets": [{
+ "species": "Toxtricity",
+ "weight": 100,
+ "item": ["Choice Specs"],
+ "ability": ["Punk Rock"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Normal"],
+ "moves": [["Overdrive"], ["Boomburst"], ["Volt Switch"], ["Sludge Bomb", "Snarl"]]
+ }]
+ },
+ "araquanid": {
+ "weight": 2,
+ "sets": [{
+ "species": "Araquanid",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Water Bubble"],
+ "evs": {"hp": 68, "atk": 252, "spe": 188},
+ "nature": ["Adamant"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Liquidation"], ["Sticky Web"], ["Mirror Coat"], ["Leech Life"]]
+ }]
+ },
+ "golurk": {
+ "weight": 2,
+ "sets": [{
+ "species": "Golurk",
+ "weight": 100,
+ "item": ["Colbur Berry"],
+ "ability": ["No Guard"],
+ "evs": {"hp": 172, "atk": 252, "spe": 84},
+ "nature": ["Adamant"],
+ "teraType": ["Steel"],
+ "moves": [["Earthquake"], ["Poltergeist"], ["Stone Edge"], ["Stealth Rock"]]
+ }]
+ },
+ "ditto": {
+ "weight": 1,
+ "sets": [{
+ "species": "Ditto",
+ "weight": 100,
+ "item": ["Choice Scarf"],
+ "ability": ["Imposter"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Steel"],
+ "moves": [["Transform"]]
+ }]
+ },
+ "munkidori": {
+ "weight": 1,
+ "sets": [{
+ "species": "Munkidori",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Toxic Chain"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Grass"],
+ "moves": [["Sludge Wave"], ["Psychic", "Psyshock"], ["U-turn"], ["Grass Knot"]]
+ }, {
+ "species": "Munkidori",
+ "weight": 5,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Toxic Chain"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Dark"],
+ "moves": [["Sludge Wave"], ["Psychic", "Psyshock"], ["U-turn"], ["Fake Out"]]
+ }, {
+ "species": "Munkidori",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Choice Scarf"],
+ "ability": ["Toxic Chain"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Fighting"],
+ "moves": [["Sludge Wave"], ["Psychic", "Psyshock"], ["U-turn"], ["Focus Blast"]]
+ }, {
+ "species": "Munkidori",
+ "weight": 25,
+ "item": ["Choice Scarf"],
+ "ability": ["Toxic Chain"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Poison"],
+ "moves": [["Sludge Wave"], ["Psychic", "Psyshock"], ["U-turn"], ["Trick"]]
+ }]
+ },
+ "torterra": {
+ "weight": 2,
+ "sets": [{
+ "species": "Torterra",
+ "weight": 100,
+ "item": ["Loaded Dice"],
+ "ability": ["Overgrow"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Fire", "Poison"],
+ "moves": [["Bullet Seed"], ["Headlong Rush"], ["Rock Blast"], ["Shell Smash"]]
+ }]
+ },
+ "barraskewda": {
+ "weight": 1,
+ "sets": [{
+ "species": "Barraskewda",
+ "weight": 70,
+ "item": ["Choice Band", "Heavy-Duty Boots"],
+ "ability": ["Swift Swim"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark", "Fighting"],
+ "moves": [["Liquidation"], ["Flip Turn"], ["Close Combat"], ["Crunch"]]
+ }, {
+ "species": "Barraskewda",
+ "weight": 30,
+ "item": ["Choice Band", "Heavy-Duty Boots"],
+ "ability": ["Swift Swim"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water", "Fighting"],
+ "moves": [["Liquidation"], ["Flip Turn"], ["Close Combat"], ["Aqua Jet"]]
+ }]
+ },
+ "ribombee": {
+ "weight": 1,
+ "sets": [{
+ "species": "Ribombee",
+ "wantsTera": true,
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Shield Dust"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Moonblast"], ["Bug Buzz"], ["Tera Blast"], ["Quiver Dance"]]
+ }]
+ },
+ "diancie": {
+ "weight": 1,
+ "sets": [{
+ "species": "Diancie",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Clear Body"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Water", "Ghost"],
+ "moves": [["Stealth Rock"], ["Encore"], ["Diamond Storm"], ["Body Press"]]
+ }]
+ },
+ "lucario": {
+ "weight": 1,
+ "sets": [{
+ "species": "Lucario",
+ "weight": 40,
+ "item": ["Life Orb"],
+ "ability": ["Inner Focus"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Normal"],
+ "moves": [["Swords Dance"], ["Close Combat"], ["Meteor Mash"], ["Extreme Speed"]]
+ }, {
+ "species": "Lucario",
+ "weight": 30,
+ "item": ["Choice Band"],
+ "ability": ["Inner Focus", "Justified"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Normal"],
+ "moves": [["Crunch"], ["Close Combat"], ["Meteor Mash"], ["Extreme Speed"]]
+ }, {
+ "species": "Lucario",
+ "weight": 30,
+ "item": ["Life Orb"],
+ "ability": ["Inner Focus"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Nasty Plot"], ["Flash Cannon"], ["Aura Sphere", "Vacuum Wave"], ["Shadow Ball"]]
+ }]
+ },
+ "salazzle": {
+ "weight": 1,
+ "sets": [{
+ "species": "Salazzle",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Corrosion"],
+ "evs": {"hp": 248, "spa": 4, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Dark"],
+ "moves": [["Substitute"], ["Toxic"], ["Flamethrower"], ["Protect"]]
+ }, {
+ "species": "Salazzle",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Corrosion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Dark"],
+ "moves": [["Fire Blast", "Flamethrower"], ["Sludge Bomb"], ["Knock Off"], ["Toxic"]]
+ }, {
+ "species": "Salazzle",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Corrosion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Dark"],
+ "moves": [["Fire Blast", "Flamethrower"], ["Sludge Bomb"], ["Encore"], ["Toxic"]]
+ }]
+ },
+ "indeedee": {
+ "weight": 1,
+ "sets": [{
+ "species": "Indeedee",
+ "weight": 100,
+ "item": ["Choice Scarf"],
+ "ability": ["Psychic Surge"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Expanding Force"], ["Dazzling Gleam"], ["Trick"], ["Healing Wish"]]
+ }]
+ },
+ "toxicroak": {
+ "weight": 1,
+ "sets": [{
+ "species": "Toxicroak",
+ "weight": 100,
+ "item": ["Life Orb", "Air Balloon"],
+ "ability": ["Dry Skin"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Swords Dance"], ["Gunk Shot"], ["Close Combat", "Drain Punch"], ["Knock Off", "Sucker Punch"]]
+ }]
+ }
+ },
+ "NU": {
+ "flygon": {
+ "weight": 10,
+ "sets": [{
+ "species": "Flygon",
+ "weight": 30,
+ "item": ["Choice Scarf"],
+ "ability": ["Levitate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel"],
+ "moves": [["Earthquake"], ["U-turn"], ["Outrage", "Dragon Claw"], ["Stone Edge", "Superpower"]]
+ }, {
+ "species": "Flygon",
+ "weight": 20,
+ "item": ["Loaded Dice"],
+ "ability": ["Levitate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel"],
+ "moves": [["Earthquake"], ["Scale Shot"], ["Dragon Dance"], ["Substitute", "Throat Chop"]]
+ }, {
+ "species": "Flygon",
+ "weight": 20,
+ "item": ["Loaded Dice"],
+ "ability": ["Levitate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fire"],
+ "moves": [["Earthquake"], ["Scale Shot"], ["Dragon Dance"], ["Fire Punch"]]
+ }, {
+ "species": "Flygon",
+ "weight": 20,
+ "item": ["Insect Plate"],
+ "ability": ["Levitate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Bug"],
+ "moves": [["Earthquake"], ["U-turn"], ["First Impression"], ["Stealth Rock"]]
+ }, {
+ "species": "Flygon",
+ "weight": 5,
+ "item": ["Choice Band"],
+ "ability": ["Levitate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Bug"],
+ "moves": [["Earthquake"], ["U-turn"], ["Scale Shot", "Outrage"], ["First Impression"]]
+ }, {
+ "species": "Flygon",
+ "weight": 5,
+ "item": ["Choice Band"],
+ "ability": ["Levitate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel"],
+ "moves": [["Earthquake"], ["U-turn"], ["Scale Shot", "Outrage"], ["Throat Chop", "Stone Edge"]]
+ }]
+ },
+ "mienshao": {
+ "weight": 10,
+ "sets": [{
+ "species": "Mienshao",
+ "weight": 40,
+ "item": ["Choice Scarf"],
+ "ability": ["Regenerator"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fighting", "Dark"],
+ "moves": [["Close Combat"], ["U-turn"], ["Knock Off"], ["Ice Spinner", "Poison Jab", "Triple Axel"]]
+ }, {
+ "species": "Mienshao",
+ "weight": 15,
+ "item": ["Assault Vest"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 132, "spd": 160, "spe": 216},
+ "nature": ["Jolly"],
+ "teraType": ["Electric"],
+ "moves": [["Close Combat"], ["U-turn"], ["Knock Off"], ["Triple Axel", "Ice Spinner"]]
+ }, {
+ "species": "Mienshao",
+ "weight": 15,
+ "item": ["Assault Vest"],
+ "ability": ["Regenerator"],
+ "evs": {"atk": 132, "spd": 160, "spe": 216},
+ "nature": ["Jolly"],
+ "teraType": ["Poison"],
+ "moves": [["Close Combat"], ["U-turn"], ["Knock Off"], ["Poison Jab"]]
+ }, {
+ "species": "Mienshao",
+ "weight": 30,
+ "item": ["Life Orb"],
+ "ability": ["Regenerator"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fighting", "Dark"],
+ "moves": [["Close Combat"], ["Fake Out"], ["Knock Off"], ["U-turn"]]
+ }]
+ },
+ "bronzong": {
+ "weight": 9,
+ "sets": [{
+ "species": "Bronzong",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Stealth Rock"], ["Psychic Noise"], ["Iron Defense"], ["Body Press"]]
+ }, {
+ "species": "Bronzong",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "def": 164, "spd": 92},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Stealth Rock"], ["Psychic Noise"], ["Iron Defense"], ["Body Press"]]
+ }, {
+ "species": "Bronzong",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Sassy"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Stealth Rock"], ["Psychic Noise"], ["Earthquake"], ["Heavy Slam"]]
+ }, {
+ "species": "Bronzong",
+ "weight": 40,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "spd": 204, "spe": 52},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Fairy", "Water", "Poison"],
+ "moves": [["Calm Mind"], ["Iron Defense"], ["Body Press"], ["Stored Power"]]
+ }]
+ },
+ "incineroar": {
+ "weight": 9,
+ "sets": [{
+ "species": "Incineroar",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Ghost", "Flying", "Poison", "Water", "Dragon", "Fairy"],
+ "moves": [["Knock Off"], ["Flare Blitz"], ["Swords Dance"], ["Earthquake", "U-turn", "Drain Punch"]]
+ }, {
+ "species": "Incineroar",
+ "weight": 10,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Ghost", "Flying", "Poison", "Grass"],
+ "moves": [["Knock Off"], ["Flare Blitz"], ["Swords Dance"], ["Trailblaze"]]
+ }, {
+ "species": "Incineroar",
+ "weight": 10,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Intimidate"],
+ "evs": {"hp": 252, "spd": 212, "spe": 44},
+ "nature": ["Careful"],
+ "teraType": ["Ghost", "Flying", "Poison", "Water", "Dragon", "Fairy"],
+ "moves": [["Knock Off"], ["Flare Blitz"], ["Swords Dance"], ["U-turn", "Earthquake"]]
+ }, {
+ "species": "Incineroar",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Intimidate"],
+ "evs": {"hp": 252, "spd": 212, "spe": 44},
+ "nature": ["Careful"],
+ "teraType": ["Fairy", "Water", "Poison", "Ghost", "Dragon", "Flying"],
+ "moves": [["Knock Off"], ["Flare Blitz"], ["Will-O-Wisp"], ["U-turn", "Parting Shot"]]
+ }]
+ },
+ "kilowattrel": {
+ "weight": 9,
+ "sets": [{
+ "species": "Kilowattrel",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Volt Absorb"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["U-turn"], ["Thunderbolt"], ["Hurricane"], ["Roost"]]
+ }, {
+ "species": "Kilowattrel",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Volt Absorb"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Hurricane"], ["Roost"]]
+ }]
+ },
+ "overqwil": {
+ "weight": 9,
+ "sets": [{
+ "species": "Overqwil",
+ "weight": 45,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Intimidate"],
+ "evs": {"hp": 252, "atk": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Fairy", "Flying"],
+ "moves": [["Barb Barrage"], ["Throat Chop"], ["Spikes"], ["Taunt", "Haze", "Pain Split"]]
+ }, {
+ "species": "Overqwil",
+ "weight": 45,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel", "Fairy", "Flying"],
+ "moves": [["Gunk Shot"], ["Throat Chop"], ["Spikes"], ["Taunt", "Haze", "Pain Split"]]
+ }, {
+ "species": "Overqwil",
+ "weight": 10,
+ "item": ["Loaded Dice"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dragon"],
+ "moves": [["Gunk Shot"], ["Throat Chop"], ["Swords Dance"], ["Scale Shot"]]
+ }]
+ },
+ "taurospaldeaaqua": {
+ "weight": 9,
+ "sets": [{
+ "species": "Tauros-Paldea-Aqua",
+ "weight": 25,
+ "item": ["Choice Band"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water", "Flying"],
+ "moves": [["Wave Crash"], ["Close Combat"], ["Aqua Jet"], ["Earthquake", "Zen Headbutt"]]
+ }, {
+ "species": "Tauros-Paldea-Aqua",
+ "weight": 25,
+ "item": ["Choice Scarf"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water", "Flying"],
+ "moves": [["Wave Crash"], ["Close Combat"], ["Raging Bull"], ["Earthquake", "Zen Headbutt"]]
+ }, {
+ "species": "Tauros-Paldea-Aqua",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water", "Steel"],
+ "moves": [["Wave Crash"], ["Close Combat"], ["Bulk Up"], ["Substitute", "Aqua Jet", "Earthquake"]]
+ }, {
+ "species": "Tauros-Paldea-Aqua",
+ "weight": 25,
+ "item": ["Lum Berry"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water", "Steel"],
+ "moves": [["Wave Crash"], ["Close Combat"], ["Bulk Up"], ["Zen Headbutt", "Aqua Jet", "Earthquake"]]
+ }]
+ },
+ "toxicroak": {
+ "weight": 9,
+ "sets": [{
+ "species": "Toxicroak",
+ "weight": 60,
+ "item": ["Life Orb"],
+ "ability": ["Dry Skin"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Close Combat", "Drain Punch"], ["Gunk Shot"], ["Swords Dance"], ["Knock Off", "Sucker Punch"]]
+ }, {
+ "species": "Toxicroak",
+ "weight": 10,
+ "item": ["Life Orb"],
+ "ability": ["Dry Skin"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly", "Adamant"],
+ "teraType": ["Dark"],
+ "moves": [["Close Combat"], ["Knock Off"], ["Swords Dance"], ["Sucker Punch"]]
+ }, {
+ "species": "Toxicroak",
+ "weight": 30,
+ "item": ["Life Orb"],
+ "ability": ["Dry Skin"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ground"],
+ "moves": [["Close Combat", "Drain Punch"], ["Gunk Shot"], ["Swords Dance"], ["Earthquake"]]
+ }]
+ },
+ "basculegion": {
+ "weight": 7,
+ "sets": [{
+ "species": "Basculegion",
+ "weight": 50,
+ "item": ["Assault Vest"],
+ "ability": ["Adaptability"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water"],
+ "moves": [["Wave Crash"], ["Flip Turn"], ["Psychic Fangs", "Phantom Force"], ["Aqua Jet"]]
+ }, {
+ "species": "Basculegion",
+ "weight": 50,
+ "item": ["Choice Scarf"],
+ "ability": ["Adaptability"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water"],
+ "moves": [["Wave Crash"], ["Flip Turn"], ["Psychic Fangs", "Phantom Force"], ["Liquidation"]]
+ }]
+ },
+ "breloom": {
+ "weight": 8,
+ "sets": [{
+ "species": "Breloom",
+ "weight": 25,
+ "item": ["Life Orb", "Loaded Dice"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly", "Adamant"],
+ "teraType": ["Steel", "Fighting"],
+ "moves": [["Swords Dance"], ["Mach Punch"], ["Bullet Seed"], ["Aerial Ace", "Bulldoze"]]
+ }, {
+ "species": "Breloom",
+ "weight": 15,
+ "item": ["Life Orb", "Loaded Dice"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly", "Adamant"],
+ "teraType": ["Rock"],
+ "moves": [["Swords Dance"], ["Mach Punch"], ["Bullet Seed"], ["Rock Tomb"]]
+ }, {
+ "species": "Breloom",
+ "weight": 15,
+ "item": ["Choice Band"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly", "Adamant"],
+ "teraType": ["Rock"],
+ "moves": [["Close Combat"], ["Mach Punch"], ["Bullet Seed"], ["Rock Tomb"]]
+ }, {
+ "species": "Breloom",
+ "weight": 15,
+ "item": ["Choice Band"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly", "Adamant"],
+ "teraType": ["Fighting", "Fire"],
+ "moves": [["Close Combat"], ["Mach Punch"], ["Bullet Seed"], ["Aerial Ace", "Bulldoze"]]
+ }, {
+ "species": "Breloom",
+ "weight": 30,
+ "item": ["Toxic Orb"],
+ "ability": ["Poison Heal"],
+ "evs": {"hp": 240, "atk": 80, "spe": 188},
+ "nature": ["Adamant"],
+ "teraType": ["Normal"],
+ "moves": [["Swords Dance", "Bulk Up"], ["Facade"], ["Seed Bomb"], ["Protect", "Substitute", "Toxic"]]
+ }]
+ },
+ "mukalola": {
+ "weight": 8,
+ "sets": [{
+ "species": "Muk-Alola",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Poison Touch"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Water", "Dragon"],
+ "moves": [["Poison Jab", "Poison Fang"], ["Knock Off"], ["Rest"], ["Sleep Talk"]]
+ }, {
+ "species": "Muk-Alola",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Poison Touch"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Water", "Dragon"],
+ "moves": [["Poison Jab", "Poison Fang"], ["Knock Off"], ["Drain Punch"], ["Protect"]]
+ }]
+ },
+ "munkidori": {
+ "weight": 8,
+ "sets": [{
+ "species": "Munkidori",
+ "wantsTera": true,
+ "weight": 20,
+ "item": ["Heavy-Duty Boots", "Choice Scarf"],
+ "ability": ["Toxic Chain"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Sludge Wave", "Sludge Bomb"], ["Psychic", "Psyshock"], ["U-turn"], ["Tera Blast"]]
+ }, {
+ "species": "Munkidori",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots", "Choice Scarf"],
+ "ability": ["Toxic Chain"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Fighting", "Flying"],
+ "moves": [["Sludge Wave", "Sludge Bomb"], ["Psychic", "Psyshock"], ["U-turn"], ["Focus Blast"]]
+ }, {
+ "species": "Munkidori",
+ "weight": 20,
+ "item": ["Choice Scarf"],
+ "ability": ["Toxic Chain"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Flying"],
+ "moves": [["Sludge Wave", "Sludge Bomb"], ["Psychic", "Psyshock"], ["U-turn"], ["Trick"]]
+ }, {
+ "species": "Munkidori",
+ "wantsTera": true,
+ "weight": 10,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Toxic Chain"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Sludge Wave", "Sludge Bomb"], ["Psychic", "Psyshock"], ["Nasty Plot"], ["Tera Blast"]]
+ }, {
+ "species": "Munkidori",
+ "weight": 10,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Toxic Chain"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Flying", "Fighting"],
+ "moves": [["Sludge Wave", "Sludge Bomb"], ["Psychic", "Psyshock"], ["Nasty Plot"], ["Focus Blast"]]
+ }]
+ },
+ "vaporeon": {
+ "weight": 8,
+ "sets": [{
+ "species": "Vaporeon",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Water Absorb"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Poison", "Dark"],
+ "moves": [["Scald"], ["Protect"], ["Wish"], ["Haze"]]
+ }, {
+ "species": "Vaporeon",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Water Absorb"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Bold"],
+ "teraType": ["Poison", "Dark"],
+ "moves": [["Scald"], ["Protect"], ["Wish"], ["Flip Turn"]]
+ }]
+ },
+ "vileplume": {
+ "weight": 8,
+ "sets": [{
+ "species": "Vileplume",
+ "weight": 100,
+ "item": ["Rocky Helmet", "Leftovers"],
+ "ability": ["Effect Spore"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water", "Fairy"],
+ "moves": [["Sludge Bomb"], ["Giga Drain", "Stun Spore"], ["Leech Seed"], ["Strength Sap"]]
+ }]
+ },
+ "brambleghast": {
+ "weight": 7,
+ "sets": [{
+ "species": "Brambleghast",
+ "weight": 70,
+ "item": ["Heavy-Duty Boots", "Colbur Berry"],
+ "ability": ["Wind Rider"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost", "Fairy"],
+ "moves": [["Poltergeist"], ["Power Whip"], ["Rapid Spin"], ["Strength Sap", "Spikes", "Shadow Sneak"]]
+ }, {
+ "species": "Brambleghast",
+ "weight": 30,
+ "item": ["Rocky Helmet"],
+ "ability": ["Wind Rider"],
+ "evs": {"hp": 252, "def": 240, "spe": 16},
+ "nature": ["Impish"],
+ "teraType": ["Fairy"],
+ "moves": [["Poltergeist", "Power Whip", "Night Shade"], ["Infestation", "Spikes", "Leech Seed"], ["Rapid Spin"], ["Strength Sap"]]
+ }]
+ },
+ "chandelure": {
+ "weight": 7,
+ "sets": [{
+ "species": "Chandelure",
+ "weight": 40,
+ "item": ["Choice Specs"],
+ "ability": ["Flash Fire"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Grass", "Fire"],
+ "moves": [["Fire Blast", "Flamethrower"], ["Shadow Ball"], ["Energy Ball"], ["Trick", "Overheat"]]
+ }, {
+ "species": "Chandelure",
+ "weight": 40,
+ "item": ["Choice Scarf"],
+ "ability": ["Flash Fire"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Grass", "Fire"],
+ "moves": [["Fire Blast", "Flamethrower"], ["Shadow Ball"], ["Energy Ball"], ["Trick"]]
+ }, {
+ "species": "Chandelure",
+ "weight": 10,
+ "item": ["Heavy-Duty Boots", "Air Balloon"],
+ "ability": ["Flash Fire"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Grass"],
+ "moves": [["Fire Blast", "Flamethrower"], ["Shadow Ball"], ["Energy Ball"], ["Calm Mind"]]
+ }, {
+ "species": "Chandelure",
+ "weight": 10,
+ "item": ["Heavy-Duty Boots", "Air Balloon"],
+ "ability": ["Flame Body"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Fire Blast", "Flamethrower"], ["Shadow Ball"], ["Energy Ball"], ["Calm Mind"]]
+ }]
+ },
+ "cinccino": {
+ "weight": 7,
+ "sets": [{
+ "species": "Cinccino",
+ "weight": 100,
+ "item": ["Loaded Dice"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost", "Fire"],
+ "moves": [["Tidy Up"], ["Tail Slap"], ["Bullet Seed", "Knock Off"], ["Encore", "Rock Blast", "Triple Axel"]]
+ }]
+ },
+ "diancie": {
+ "weight": 7,
+ "sets": [{
+ "species": "Diancie",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Clear Body"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Sassy"],
+ "teraType": ["Water", "Steel", "Dragon"],
+ "moves": [["Stealth Rock"], ["Diamond Storm"], ["Moonblast"], ["Body Press"]]
+ }, {
+ "species": "Diancie",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Clear Body"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Water", "Steel", "Dragon"],
+ "moves": [["Stealth Rock"], ["Diamond Storm"], ["Encore"], ["Body Press"]]
+ }, {
+ "species": "Diancie",
+ "weight": 50,
+ "item": ["Power Herb"],
+ "ability": ["Clear Body"],
+ "evs": {"hp": 252, "def": 4, "spa": 252},
+ "ivs": {"atk": 0, "spe": 0},
+ "nature": ["Quiet"],
+ "teraType": ["Grass", "Ground"],
+ "moves": [["Trick Room"], ["Moonblast"], ["Meteor Beam"], ["Earth Power"]]
+ }]
+ },
+ "gligar": {
+ "weight": 7,
+ "sets": [{
+ "species": "Gligar",
+ "weight": 50,
+ "item": ["Eviolite"],
+ "ability": ["Immunity"],
+ "evs": {"hp": 252, "def": 200, "spe": 56},
+ "nature": ["Impish"],
+ "teraType": ["Water"],
+ "moves": [["Spikes"], ["Earthquake"], ["U-turn"], ["Toxic", "Stealth Rock"]]
+ }, {
+ "species": "Gligar",
+ "weight": 50,
+ "item": ["Eviolite"],
+ "ability": ["Immunity"],
+ "evs": {"hp": 252, "def": 200, "spe": 56},
+ "nature": ["Impish"],
+ "teraType": ["Water"],
+ "moves": [["Spikes", "Stealth Rock"], ["Earthquake"], ["U-turn", "Toxic"], ["Knock Off"]]
+ }]
+ },
+ "inteleon": {
+ "weight": 7,
+ "sets": [{
+ "species": "Inteleon",
+ "weight": 100,
+ "item": ["Choice Specs"],
+ "ability": ["Torrent"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Ghost"],
+ "moves": [["Hydro Pump", "Surf"], ["Ice Beam"], ["U-turn"], ["Dark Pulse"]]
+ }]
+ },
+ "milotic": {
+ "weight": 7,
+ "sets": [{
+ "species": "Milotic",
+ "weight": 50,
+ "item": ["Leftovers", "Heavy-Duty Boots", "Rocky Helmet"],
+ "ability": ["Marvel Scale", "Competitive"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Dragon", "Steel"],
+ "moves": [["Scald"], ["Ice Beam", "Haze", "Dragon Tail"], ["Recover"], ["Flip Turn"]]
+ }, {
+ "species": "Milotic",
+ "weight": 50,
+ "item": ["Leftovers", "Heavy-Duty Boots", "Rocky Helmet"],
+ "ability": ["Marvel Scale", "Competitive"],
+ "evs": {"hp": 252, "def": 128, "spd": 128},
+ "nature": ["Calm"],
+ "teraType": ["Fairy", "Dragon", "Steel"],
+ "moves": [["Scald"], ["Ice Beam", "Haze", "Dragon Tail"], ["Recover"], ["Flip Turn"]]
+ }]
+ },
+ "porygonz": {
+ "weight": 7,
+ "sets": [{
+ "species": "Porygon-Z",
+ "weight": 25,
+ "item": ["Choice Specs"],
+ "ability": ["Adaptability", "Download"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Tri Attack"], ["Shadow Ball"], ["Trick"], ["Nasty Plot", "Thunderbolt", "Ice Beam", "Recover"]]
+ }, {
+ "species": "Porygon-Z",
+ "weight": 25,
+ "item": ["Choice Specs"],
+ "ability": ["Adaptability", "Download"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Tera Blast"], ["Shadow Ball"], ["Trick"], ["Nasty Plot", "Ice Beam", "Recover"]]
+ }, {
+ "species": "Porygon-Z",
+ "weight": 5,
+ "item": ["Life Orb", "Heavy-Duty Boots"],
+ "ability": ["Adaptability", "Download"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Tri Attack"], ["Shadow Ball"], ["Recover"], ["Nasty Plot"]]
+ }, {
+ "species": "Porygon-Z",
+ "weight": 5,
+ "item": ["Life Orb", "Heavy-Duty Boots"],
+ "ability": ["Adaptability", "Download"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Tera Blast"], ["Shadow Ball"], ["Recover"], ["Nasty Plot"]]
+ }, {
+ "species": "Porygon-Z",
+ "weight": 5,
+ "item": ["Life Orb", "Heavy-Duty Boots"],
+ "ability": ["Download"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Electric"],
+ "moves": [["Tri Attack"], ["Thunderbolt"], ["Recover"], ["Nasty Plot"]]
+ }, {
+ "species": "Porygon-Z",
+ "weight": 5,
+ "item": ["Life Orb"],
+ "ability": ["Adaptability", "Download"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid", "Modest"],
+ "teraType": ["Ghost"],
+ "moves": [["Tri Attack"], ["Shadow Ball"], ["Agility"], ["Nasty Plot"]]
+ }, {
+ "species": "Porygon-Z",
+ "weight": 5,
+ "item": ["Life Orb"],
+ "ability": ["Adaptability", "Download"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid", "Modest"],
+ "teraType": ["Ground"],
+ "moves": [["Tera Blast"], ["Shadow Ball"], ["Agility"], ["Nasty Plot"]]
+ }, {
+ "species": "Porygon-Z",
+ "weight": 5,
+ "item": ["Life Orb"],
+ "ability": ["Download"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid", "Modest"],
+ "teraType": ["Electric"],
+ "moves": [["Tri Attack"], ["Thunderbolt"], ["Recover"], ["Nasty Plot"]]
+ }, {
+ "species": "Porygon-Z",
+ "weight": 5,
+ "item": ["Life Orb"],
+ "ability": ["Download"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Electric", "Ghost"],
+ "moves": [["Tri Attack", "Ice Beam"], ["Thunderbolt"], ["Shadow Ball"], ["Agility"]]
+ }, {
+ "species": "Porygon-Z",
+ "weight": 10,
+ "item": ["Life Orb"],
+ "ability": ["Download"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ground"],
+ "moves": [["Tera Blast"], ["Thunderbolt"], ["Shadow Ball"], ["Agility"]]
+ }, {
+ "species": "Porygon-Z",
+ "wantsTera": true,
+ "weight": 5,
+ "item": ["Life Orb"],
+ "ability": ["Download"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fighting"],
+ "moves": [["Tera Blast"], ["Tri Attack"], ["Shadow Ball"], ["Agility"]]
+ }]
+ },
+ "registeel": {
+ "weight": 7,
+ "sets": [{
+ "species": "Registeel",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Clear Body"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Ghost", "Fairy", "Dragon", "Water"],
+ "moves": [["Heavy Slam"], ["Stealth Rock"], ["Earthquake"], ["Thunder Wave"]]
+ }, {
+ "species": "Registeel",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Clear Body"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Ghost", "Fairy", "Dragon", "Water"],
+ "moves": [["Heavy Slam"], ["Stealth Rock"], ["Body Press"], ["Iron Defense", "Thunder Wave"]]
+ }]
+ },
+ "scyther": {
+ "weight": 6,
+ "sets": [{
+ "species": "Scyther",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Electric", "Fighting"],
+ "moves": [["Swords Dance"], ["Dual Wingbeat"], ["Close Combat"], ["Trailblaze"]]
+ }, {
+ "species": "Scyther",
+ "weight": 35,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Electric", "Fighting"],
+ "moves": [["Swords Dance"], ["Dual Wingbeat"], ["U-turn"], ["Close Combat", "Defog"]]
+ }, {
+ "species": "Scyther",
+ "weight": 15,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fighting"],
+ "moves": [["Close Combat"], ["Dual Wingbeat"], ["U-turn"], ["Defog"]]
+ }]
+ },
+ "slowbrogalar": {
+ "weight": 7,
+ "sets": [{
+ "species": "Slowbro-Galar",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Rocky Helmet", "Leftovers"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy"],
+ "moves": [["Slack Off"], ["Calm Mind", "Thunder Wave"], ["Flamethrower"], ["Sludge Bomb"]]
+ }, {
+ "species": "Slowbro-Galar",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Rocky Helmet", "Leftovers"],
+ "ability": ["Regenerator"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Slack Off"], ["Calm Mind", "Thunder Wave", "Toxic"], ["Surf"], ["Psyshock"]]
+ }]
+ },
+ "swampert": {
+ "weight": 7,
+ "sets": [{
+ "species": "Swampert",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Torrent"],
+ "evs": {"hp": 252, "atk": 4, "def": 252},
+ "nature": ["Impish"],
+ "teraType": ["Fairy"],
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Knock Off", "Roar"], ["Flip Turn"]]
+ }, {
+ "species": "Swampert",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Torrent"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Fairy"],
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Knock Off", "Roar"], ["Flip Turn"]]
+ }]
+ },
+ "sylveon": {
+ "weight": 7,
+ "sets": [{
+ "species": "Sylveon",
+ "weight": 25,
+ "item": ["Choice Specs"],
+ "ability": ["Pixilate"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest", "Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Hyper Voice"], ["Psyshock"], ["Shadow Ball"], ["Draining Kiss"]]
+ }, {
+ "species": "Sylveon",
+ "wantsTera": true,
+ "weight": 25,
+ "item": ["Choice Specs"],
+ "ability": ["Pixilate"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest", "Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Hyper Voice"], ["Psyshock"], ["Shadow Ball"], ["Tera Blast"]]
+ }, {
+ "species": "Sylveon",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Pixilate"],
+ "evs": {"hp": 252, "def": 212, "spe": 44},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Steel", "Poison", "Water"],
+ "moves": [["Hyper Voice"], ["Wish"], ["Protect"], ["Roar", "Calm Mind"]]
+ }]
+ },
+ "toxtricity": {
+ "weight": 6,
+ "sets": [{
+ "species": "Toxtricity",
+ "weight": 50,
+ "item": ["Choice Specs"],
+ "ability": ["Punk Rock"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest", "Timid"],
+ "teraType": ["Normal"],
+ "moves": [["Overdrive"], ["Boomburst"], ["Volt Switch"], ["Sludge Bomb", "Snarl"]]
+ }, {
+ "species": "Toxtricity",
+ "wantsTera": true,
+ "weight": 50,
+ "item": ["Throat Spray"],
+ "ability": ["Punk Rock"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Normal"],
+ "moves": [["Overdrive"], ["Boomburst"], ["Shift Gear"], ["Encore", "Snarl"]]
+ }]
+ },
+ "typhlosionhisui": {
+ "weight": 7,
+ "sets": [{
+ "species": "Typhlosion-Hisui",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Frisk"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fighting"],
+ "moves": [["Eruption"], ["Flamethrower"], ["Shadow Ball"], ["Focus Blast"]]
+ }, {
+ "species": "Typhlosion-Hisui",
+ "weight": 50,
+ "item": ["Choice Scarf", "Choice Specs"],
+ "ability": ["Frisk"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fighting", "Fire"],
+ "moves": [["Eruption"], ["Flamethrower", "Fire Blast"], ["Shadow Ball"], ["Focus Blast"]]
+ }]
+ },
+ "articunogalar": {
+ "weight": 5,
+ "sets": [{
+ "species": "Articuno-Galar",
+ "weight": 70,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Competitive"],
+ "evs": {"hp": 248, "spa": 8, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel", "Fairy"],
+ "moves": [["Calm Mind"], ["Recover"], ["Hurricane"], ["Psychic Noise"]]
+ }, {
+ "species": "Articuno-Galar",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Competitive"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Steel", "Fairy", "Ground"],
+ "moves": [["Future Sight"], ["Recover"], ["Hurricane"], ["U-turn"]]
+ }]
+ },
+ "copperajah": {
+ "weight": 4,
+ "sets": [{
+ "species": "Copperajah",
+ "weight": 80,
+ "item": ["Leftovers"],
+ "ability": ["Heavy Metal"],
+ "evs": {"hp": 252, "spd": 228, "spe": 28},
+ "nature": ["Careful"],
+ "teraType": ["Dragon", "Fairy"],
+ "moves": [["Heavy Slam"], ["Stealth Rock"], ["Knock Off"], ["Whirlwind", "Protect", "Earthquake"]]
+ }, {
+ "species": "Copperajah",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Sheer Force"],
+ "evs": {"hp": 252, "spd": 228, "spe": 28},
+ "nature": ["Careful"],
+ "teraType": ["Dragon", "Fairy"],
+ "moves": [["Iron Head"], ["Stealth Rock"], ["Knock Off"], ["Whirlwind", "Protect", "Earthquake"]]
+ }]
+ },
+ "decidueye": {
+ "weight": 4,
+ "sets": [{
+ "species": "Decidueye",
+ "weight": 100,
+ "item": ["Spell Tag"],
+ "ability": ["Long Reach"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Ghost"],
+ "moves": [["Swords Dance"], ["Spirit Shackle", "Poltergeist"], ["Shadow Sneak"], ["Leaf Blade"]]
+ }]
+ },
+ "gastrodon": {
+ "weight": 4,
+ "sets": [{
+ "species": "Gastrodon",
+ "weight": 50,
+ "item": ["Leftovers", "Heavy-Duty Boots"],
+ "ability": ["Sticky Hold", "Storm Drain"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Fairy", "Poison", "Dragon"],
+ "moves": [["Spikes", "Stealth Rock"], ["Earth Power"], ["Ice Beam", "Sludge Bomb", "Surf"], ["Recover"]]
+ }, {
+ "species": "Gastrodon",
+ "weight": 50,
+ "item": ["Leftovers", "Heavy-Duty Boots"],
+ "ability": ["Sticky Hold", "Storm Drain"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Poison", "Dragon"],
+ "moves": [["Spikes", "Stealth Rock"], ["Earth Power"], ["Ice Beam", "Sludge Bomb", "Surf"], ["Recover"]]
+ }]
+ },
+ "klefki": {
+ "weight": 5,
+ "sets": [{
+ "species": "Klefki",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Prankster"],
+ "evs": {"hp": 252, "def": 96, "spd": 160},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Water"],
+ "moves": [["Spikes"], ["Foul Play"], ["Thunder Wave"], ["Dazzling Gleam"]]
+ }, {
+ "species": "Klefki",
+ "weight": 25,
+ "item": ["Air Balloon"],
+ "ability": ["Magician"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Water"],
+ "moves": [["Spikes"], ["Foul Play"], ["Thunder Wave"], ["Dazzling Gleam"]]
+ }, {
+ "species": "Klefki",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Prankster"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Water"],
+ "moves": [["Spikes"], ["Magnet Rise"], ["Thunder Wave"], ["Dazzling Gleam"]]
+ }, {
+ "species": "Klefki",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Prankster"],
+ "evs": {"hp": 252, "def": 96, "spd": 160},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Fairy", "Water"],
+ "moves": [["Calm Mind"], ["Iron Defense"], ["Draining Kiss"], ["Stored Power"]]
+ }]
+ },
+ "taurospaldeablaze": {
+ "weight": 4,
+ "sets": [{
+ "species": "Tauros-Paldea-Blaze",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Lum Berry"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Grass", "Electric", "Steel"],
+ "moves": [["Bulk Up"], ["Close Combat"], ["Raging Bull"], ["Trailblaze"]]
+ }, {
+ "species": "Tauros-Paldea-Blaze",
+ "weight": 50,
+ "item": ["Choice Scarf", "Choice Band"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fighting"],
+ "moves": [["Flare Blitz"], ["Close Combat"], ["Earthquake"], ["Stone Edge", "Iron Head"]]
+ }]
+ },
+ "tentacruel": {
+ "weight": 4,
+ "sets": [{
+ "species": "Tentacruel",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Liquid Ooze"],
+ "evs": {"hp": 252, "def": 120, "spe": 136},
+ "nature": ["Jolly"],
+ "teraType": ["Dark", "Flying"],
+ "moves": [["Flip Turn"], ["Knock Off"], ["Rapid Spin"], ["Sludge Bomb", "Ice Beam", "Haze", "Toxic"]]
+ }]
+ },
+ "tornadus": {
+ "weight": 5,
+ "sets": [{
+ "species": "Tornadus",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Defiant"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Steel", "Ground"],
+ "moves": [["Knock Off"], ["U-turn"], ["Hurricane", "Bleakwind Storm"], ["Heat Wave", "Grass Knot", "Taunt"]]
+ }, {
+ "species": "Tornadus",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Prankster"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Steel", "Ground", "Dark"],
+ "moves": [["Nasty Plot"], ["Heat Wave", "Focus Blast"], ["Hurricane", "Bleakwind Storm"], ["Dark Pulse"]]
+ }, {
+ "species": "Tornadus",
+ "wantsTera": true,
+ "weight": 20,
+ "item": ["Sitrus Berry", ""],
+ "ability": ["Defiant"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ground"],
+ "moves": [["Knock Off"], ["Bulk Up"], ["Acrobatics"], ["Tera Blast"]]
+ }, {
+ "species": "Tornadus",
+ "weight": 10,
+ "item": ["Sitrus Berry", ""],
+ "ability": ["Defiant"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ground", "Steel"],
+ "moves": [["Knock Off"], ["Bulk Up"], ["Acrobatics"], ["Brick Break", "Hammer Arm"]]
+ }]
+ },
+ "torterra": {
+ "weight": 5,
+ "sets": [{
+ "species": "Torterra",
+ "weight": 50,
+ "item": ["Loaded Dice"],
+ "ability": ["Overgrow"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Electric"],
+ "moves": [["Bullet Seed"], ["Headlong Rush", "Earthquake"], ["Rock Blast"], ["Shell Smash"]]
+ }, {
+ "species": "Torterra",
+ "wantsTera": true,
+ "weight": 50,
+ "item": ["Loaded Dice"],
+ "ability": ["Overgrow"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ghost", "Fire"],
+ "moves": [["Bullet Seed"], ["Headlong Rush", "Earthquake"], ["Tera Blast"], ["Shell Smash"]]
+ }]
+ },
+ "uxie": {
+ "weight": 4,
+ "sets": [{
+ "species": "Uxie",
+ "wantsTera": true,
+ "weight": 50,
+ "item": ["Leftovers", "Heavy-Duty Boots"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "def": 40, "spe": 216},
+ "nature": ["Timid"],
+ "teraType": ["Dark", "Steel"],
+ "moves": [["U-turn"], ["Psychic Noise"], ["Stealth Rock"], ["Encore", "Knock Off", "Thunder Wave"]]
+ }, {
+ "species": "Uxie",
+ "wantsTera": true,
+ "weight": 25,
+ "item": ["Leftovers", "Kee Berry"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Calm Mind"], ["Psychic Noise"], ["Draining Kiss"], ["Encore"]]
+ }, {
+ "species": "Uxie",
+ "wantsTera": true,
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Calm Mind"], ["Psychic Noise"], ["Draining Kiss"], ["Substitute"]]
+ }]
+ },
+ "araquanid": {
+ "weight": 3,
+ "sets": [{
+ "species": "Araquanid",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Water Bubble"],
+ "evs": {"hp": 68, "atk": 252, "spe": 188},
+ "nature": ["Adamant"],
+ "teraType": ["Ghost"],
+ "moves": [["Liquidation"], ["Leech Life"], ["Sticky Web"], ["Mirror Coat", "Trailblaze"]]
+ }]
+ },
+ "avalugg": {
+ "weight": 3,
+ "sets": [{
+ "species": "Avalugg",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Sturdy"],
+ "evs": {"hp": 252, "atk": 4, "def": 252},
+ "nature": ["Impish"],
+ "teraType": ["Ghost", "Poison", "Water"],
+ "moves": [["Avalanche", "Ice Spinner"], ["Body Press", "Earthquake"], ["Recover"], ["Rapid Spin"]]
+ }]
+ },
+ "dragalge": {
+ "weight": 3,
+ "sets": [{
+ "species": "Dragalge",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Adaptability"],
+ "evs": {"hp": 252, "def": 200, "spe": 56},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Sludge Bomb"], ["Draco Meteor"], ["Toxic Spikes", "Dragon Tail"], ["Flip Turn"]]
+ }, {
+ "species": "Dragalge",
+ "weight": 50,
+ "item": ["Choice Specs"],
+ "ability": ["Adaptability"],
+ "evs": {"hp": 80, "spa": 252, "spe": 176},
+ "nature": ["Modest"],
+ "teraType": ["Poison"],
+ "moves": [["Sludge Bomb", "Sludge Wave"], ["Draco Meteor"], ["Focus Blast"], ["Flip Turn"]]
+ }]
+ },
+ "florges": {
+ "weight": 3,
+ "sets": [{
+ "species": "Florges",
+ "wantsTera": true,
+ "weight": 30,
+ "item": ["Choice Specs"],
+ "ability": ["Flower Veil", "Symbiosis"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ground"],
+ "moves": [["Moonblast"], ["Psychic"], ["Tera Blast"], ["Trick"]]
+ }, {
+ "species": "Florges",
+ "wantsTera": true,
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Flower Veil", "Symbiosis"],
+ "evs": {"hp": 252, "def": 120, "spe": 136},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Ground"],
+ "moves": [["Moonblast"], ["Calm Mind"], ["Tera Blast"], ["Synthesis"]]
+ }, {
+ "species": "Florges",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Flower Veil", "Symbiosis"],
+ "evs": {"hp": 252, "def": 120, "spe": 136},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water", "Steel"],
+ "moves": [["Moonblast"], ["Calm Mind"], ["Psychic Noise", "Wish"], ["Synthesis"]]
+ }, {
+ "species": "Florges",
+ "weight": 30,
+ "item": ["Choice Scarf"],
+ "ability": ["Flower Veil", "Symbiosis"],
+ "evs": {"hp": 252, "def": 120, "spe": 136},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water", "Steel"],
+ "moves": [["Moonblast"], ["Trick"], ["Calm Mind", "Psychic"], ["Synthesis"]]
+ }]
+ },
+ "goodra": {
+ "weight": 3,
+ "sets": [{
+ "species": "Goodra",
+ "weight": 40,
+ "item": ["Choice Specs"],
+ "ability": ["Sap Sipper"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Poison"],
+ "moves": [["Draco Meteor"], ["Fire Blast", "Flamethrower"], ["Sludge Bomb", "Sludge Wave"], ["Hydro Pump", "Dragon Pulse"]]
+ }, {
+ "species": "Goodra",
+ "weight": 30,
+ "item": ["Leftovers"],
+ "ability": ["Sap Sipper"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Poison"],
+ "moves": [["Draco Meteor"], ["Fire Blast", "Flamethrower"], ["Acid Spray"], ["Substitute"]]
+ }, {
+ "species": "Goodra",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Sap Sipper"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Poison", "Steel"],
+ "moves": [["Draco Meteor"], ["Fire Blast", "Flamethrower"], ["Knock Off"], ["Toxic", "Scald", "Dragon Tail"]]
+ }, {
+ "species": "Goodra",
+ "weight": 5,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Sap Sipper"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Poison"],
+ "moves": [["Draco Meteor"], ["Fire Blast", "Flamethrower"], ["Sludge Wave"], ["Toxic", "Scald"]]
+ }, {
+ "species": "Goodra",
+ "weight": 5,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Sap Sipper"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Poison"],
+ "moves": [["Draco Meteor"], ["Fire Blast", "Flamethrower"], ["Sludge Wave"], ["Dragon Tail"]]
+ }]
+ },
+ "heracross": {
+ "weight": 3,
+ "sets": [{
+ "species": "Heracross",
+ "weight": 70,
+ "item": ["Flame Orb"],
+ "ability": ["Guts"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Normal"],
+ "moves": [["Facade"], ["Close Combat"], ["Trailblaze"], ["Knock Off"]]
+ }, {
+ "species": "Heracross",
+ "weight": 30,
+ "item": ["Choice Scarf"],
+ "ability": ["Moxie"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark", "Fighting"],
+ "moves": [["Megahorn"], ["Close Combat"], ["Earthquake", "Stone Edge"], ["Knock Off"]]
+ }]
+ },
+ "meloetta": {
+ "weight": 3,
+ "sets": [{
+ "species": "Meloetta",
+ "weight": 45,
+ "item": ["Choice Specs", "Choice Scarf"],
+ "ability": ["Serene Grace"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Hyper Voice"], ["Psychic", "Psyshock"], ["Shadow Ball"], ["Trick", "Focus Blast"]]
+ }, {
+ "species": "Meloetta",
+ "weight": 25,
+ "item": ["Choice Specs", "Choice Scarf"],
+ "ability": ["Serene Grace"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Hyper Voice"], ["Psychic", "Psyshock"], ["Shadow Ball"], ["U-turn"]]
+ }, {
+ "species": "Meloetta",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Serene Grace"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Hyper Voice"], ["Shadow Ball"], ["Substitute"], ["Calm Mind"]]
+ }, {
+ "species": "Meloetta",
+ "weight": 10,
+ "item": ["Leftovers"],
+ "ability": ["Serene Grace"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fighting"],
+ "moves": [["Tera Blast"], ["Shadow Ball"], ["Substitute"], ["Calm Mind"]]
+ }]
+ },
+ "orthworm": {
+ "weight": 3,
+ "sets": [{
+ "species": "Orthworm",
+ "weight": 70,
+ "item": ["Leftovers"],
+ "ability": ["Earth Eater"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Impish"],
+ "teraType": ["Ghost", "Fairy"],
+ "moves": [["Stealth Rock", "Spikes"], ["Heavy Slam"], ["Body Press"], ["Iron Defense", "Protect"]]
+ }, {
+ "species": "Orthworm",
+ "weight": 30,
+ "item": ["Leftovers"],
+ "ability": ["Earth Eater"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Impish"],
+ "teraType": ["Ghost", "Fairy"],
+ "moves": [["Stealth Rock"], ["Heavy Slam"], ["Body Press"], ["Spikes"]]
+ }]
+ },
+ "raikou": {
+ "weight": 3,
+ "sets": [{
+ "species": "Raikou",
+ "weight": 15,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water"],
+ "moves": [["Calm Mind"], ["Thunderbolt"], ["Scald"], ["Volt Switch"]]
+ }, {
+ "species": "Raikou",
+ "wantsTera": true,
+ "weight": 15,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Calm Mind"], ["Thunderbolt"], ["Tera Blast"], ["Volt Switch"]]
+ }, {
+ "species": "Raikou",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Calm Mind"], ["Thunderbolt"], ["Shadow Ball"], ["Volt Switch"]]
+ }, {
+ "species": "Raikou",
+ "weight": 15,
+ "item": ["Leftovers"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water"],
+ "moves": [["Calm Mind"], ["Thunderbolt"], ["Scald"], ["Substitute"]]
+ }, {
+ "species": "Raikou",
+ "wantsTera": true,
+ "weight": 15,
+ "item": ["Leftovers"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Calm Mind"], ["Thunderbolt"], ["Tera Blast"], ["Substitute"]]
+ }, {
+ "species": "Raikou",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Pressure"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Calm Mind"], ["Thunderbolt"], ["Shadow Ball"], ["Substitute"]]
+ }]
+ },
+ "rotomheat": {
+ "weight": 3,
+ "sets": [{
+ "species": "Rotom-Heat",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 248, "spa": 4, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Steel", "Fairy"],
+ "moves": [["Volt Switch"], ["Pain Split"], ["Overheat"], ["Will-O-Wisp", "Nasty Plot"]]
+ }]
+ },
+ "scrafty": {
+ "weight": 3,
+ "sets": [{
+ "species": "Scrafty",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Shed Skin"],
+ "evs": {"hp": 252, "spd": 196, "spe": 60},
+ "nature": ["Careful"],
+ "teraType": ["Poison", "Steel"],
+ "moves": [["Bulk Up"], ["Drain Punch"], ["Knock Off"], ["Rest"]]
+ }, {
+ "species": "Scrafty",
+ "weight": 10,
+ "item": ["Leftovers", "Lum Berry"],
+ "ability": ["Intimidate", "Moxie"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Poison"],
+ "moves": [["Dragon Dance"], ["Drain Punch", "Close Combat"], ["Knock Off"], ["Encore", "Poison Jab"]]
+ }, {
+ "species": "Scrafty",
+ "weight": 15,
+ "item": ["Leftovers"],
+ "ability": ["Shed Skin", "Intimidate", "Moxie"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Poison"],
+ "moves": [["Dragon Dance"], ["Drain Punch", "Close Combat"], ["Knock Off"], ["Encore", "Poison Jab"]]
+ }, {
+ "species": "Scrafty",
+ "weight": 15,
+ "item": ["Leftovers"],
+ "ability": ["Shed Skin", "Intimidate", "Moxie"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel"],
+ "moves": [["Dragon Dance"], ["Drain Punch", "Close Combat"], ["Knock Off"], ["Encore", "Iron Head"]]
+ }, {
+ "species": "Scrafty",
+ "weight": 10,
+ "item": ["Leftovers", "Lum Berry"],
+ "ability": ["Intimidate", "Moxie"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel"],
+ "moves": [["Dragon Dance"], ["Drain Punch", "Close Combat"], ["Knock Off"], ["Encore", "Iron Head"]]
+ }]
+ },
+ "screamtail": {
+ "weight": 3,
+ "sets": [{
+ "species": "Scream Tail",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Protosynthesis"],
+ "evs": {"hp": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Steel", "Dragon"],
+ "moves": [["Wish"], ["Protect"], ["Encore", "Thunder Wave"], ["Psychic Noise"]]
+ }, {
+ "species": "Scream Tail",
+ "wantsTera": true,
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Protosynthesis"],
+ "evs": {"hp": 40, "spa": 252, "spe": 216},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Normal"],
+ "moves": [["Fire Blast", "Flamethrower"], ["Calm Mind"], ["Boomburst"], ["Psychic Noise", "Dazzling Gleam"]]
+ }]
+ },
+ "bellibolt": {
+ "weight": 1,
+ "sets": [{
+ "species": "Bellibolt",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots", "Rocky Helmet"],
+ "ability": ["Static", "Electromorphosis"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Volt Switch"], ["Slack Off"], ["Muddy Water"], ["Toxic"]]
+ }]
+ },
+ "ditto": {
+ "weight": 1,
+ "sets": [{
+ "species": "Ditto",
+ "weight": 100,
+ "item": ["Choice Scarf"],
+ "ability": ["Imposter"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Steel", "Ghost"],
+ "moves": [["Transform"]]
+ }]
+ },
+ "drednaw": {
+ "weight": 1,
+ "sets": [{
+ "species": "Drednaw",
+ "weight": 100,
+ "item": ["White Herb"],
+ "ability": ["Strong Jaw"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Shell Smash"], ["Liquidation"], ["Stone Edge"], ["Crunch"]]
+ }]
+ },
+ "dudunsparce": {
+ "weight": 1,
+ "sets": [{
+ "species": "Dudunsparce",
+ "weight": 50,
+ "item": ["Leftovers", "Heavy-Duty Boots"],
+ "ability": ["Serene Grace"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Poison", "Fairy"],
+ "moves": [["Body Slam"], ["Coil", "Stealth Rock"], ["Roost"], ["Dragon Tail"]]
+ }, {
+ "species": "Dudunsparce",
+ "weight": 50,
+ "item": ["Leftovers", "Heavy-Duty Boots"],
+ "ability": ["Rattled"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Ghost"],
+ "moves": [["Boomburst"], ["Calm Mind"], ["Roost"], ["Shadow Ball"]]
+ }]
+ },
+ "palossand": {
+ "weight": 1,
+ "sets": [{
+ "species": "Palossand",
+ "weight": 100,
+ "item": ["Leftovers", "Rocky Helmet", "Colbur Berry"],
+ "ability": ["Water Compaction"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Dragon", "Fairy", "Water"],
+ "moves": [["Stealth Rock"], ["Scorching Sands", "Earth Power"], ["Shore Up"], ["Shadow Ball", "Sludge Bomb"]]
+ }]
+ },
+ "tsareena": {
+ "weight": 1,
+ "sets": [{
+ "species": "Tsareena",
+ "weight": 50,
+ "item": ["Lum Berry", "Heavy-Duty Boots"],
+ "ability": ["Queenly Majesty"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Dragon", "Steel"],
+ "moves": [["Power Whip"], ["Rapid Spin"], ["Knock Off"], ["Triple Axel", "U-turn"]]
+ }, {
+ "species": "Tsareena",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Queenly Majesty"],
+ "evs": {"atk": 252, "def": 228, "spe": 28},
+ "nature": ["Impish"],
+ "teraType": ["Dragon", "Steel", "Poison"],
+ "moves": [["Power Whip"], ["Rapid Spin"], ["Knock Off"], ["Synthesis"]]
+ }]
+ },
+ "whimsicott": {
+ "weight": 1,
+ "sets": [{
+ "species": "Whimsicott",
+ "weight": 50,
+ "item": ["Rocky Helmet", "Heavy-Duty Boots"],
+ "ability": ["Prankster"],
+ "evs": {"hp": 252, "def": 12, "spa": 76, "spe": 168},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Steel"],
+ "moves": [["Moonblast"], ["U-turn"], ["Encore"], ["Stun Spore", "Giga Drain", "Leech Seed"]]
+ }, {
+ "species": "Whimsicott",
+ "weight": 50,
+ "item": ["Rocky Helmet", "Heavy-Duty Boots"],
+ "ability": ["Prankster"],
+ "evs": {"hp": 180, "spa": 76, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Steel"],
+ "moves": [["Moonblast"], ["U-turn"], ["Encore"], ["Stun Spore", "Giga Drain", "Leech Seed"]]
+ }]
+ },
+ "wochien": {
+ "weight": 1,
+ "sets": [{
+ "species": "Wo-Chien",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Tablets of Ruin"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Poison", "Fairy", "Dragon", "Water"],
+ "moves": [["Knock Off"], ["Protect"], ["Leech Seed"], ["Stun Spore", "Ruination"]]
+ }]
+ },
+ "duraludon": {
+ "weight": 1,
+ "sets": [{
+ "species": "Duraludon",
+ "weight": 100,
+ "item": ["Eviolite"],
+ "ability": ["Heavy Metal"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Fairy", "Water"],
+ "moves": [["Draco Meteor"], ["Flash Cannon"], ["Stealth Rock"], ["Dark Pulse", "Body Press"]]
+ }]
+ },
+ "minior": {
+ "weight": 1,
+ "sets": [{
+ "species": "Minior",
+ "weight": 50,
+ "item": ["White Herb"],
+ "ability": ["Shields Down"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Flying", "Ground"],
+ "moves": [["Shell Smash"], ["Acrobatics"], ["Earthquake"], ["Stone Edge", "Substitute"]]
+ }, {
+ "species": "Minior",
+ "wantsTera": true,
+ "weight": 50,
+ "item": ["White Herb"],
+ "ability": ["Shields Down"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Ghost"],
+ "moves": [["Shell Smash"], ["Acrobatics"], ["Earthquake"], ["Tera Blast"]]
+ }]
+ },
+ "pawmot": {
+ "weight": 1,
+ "sets": [{
+ "species": "Pawmot",
+ "weight": 40,
+ "item": ["Life Orb"],
+ "ability": ["Natural Cure"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Electric"],
+ "moves": [["Double Shock"], ["Close Combat"], ["Knock Off", "Ice Punch"], ["Rest"]]
+ }, {
+ "species": "Pawmot",
+ "weight": 30,
+ "item": ["Life Orb"],
+ "ability": ["Volt Absorb"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Electric"],
+ "moves": [["Double Shock"], ["Close Combat"], ["Knock Off", "Ice Punch"], ["Volt Switch"]]
+ }, {
+ "species": "Pawmot",
+ "weight": 30,
+ "item": ["Life Orb"],
+ "ability": ["Iron Fist"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Electric"],
+ "moves": [["Double Shock"], ["Close Combat"], ["Ice Punch"], ["Mach Punch"]]
+ }]
+ }
+ },
+ "PU": {
+ "arcanine": {
+ "weight": 10,
+ "sets": [{
+ "species": "Arcanine",
+ "weight": 70,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Intimidate"],
+ "evs": {"hp": 160, "atk": 252, "spe": 96},
+ "nature": ["Adamant"],
+ "teraType": ["Normal"],
+ "moves": [["Curse"], ["Extreme Speed"], ["Flare Blitz"], ["Morning Sun"]]
+ }, {
+ "species": "Arcanine",
+ "weight": 30,
+ "item": ["Choice Band"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Normal"],
+ "moves": [["Raging Fury"], ["Extreme Speed"], ["Flare Blitz"], ["Close Combat"]]
+ }]
+ },
+ "meloetta": {
+ "weight": 10,
+ "sets": [{
+ "species": "Meloetta",
+ "weight": 50,
+ "item": ["Choice Specs"],
+ "ability": ["Serene Grace"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Normal"],
+ "moves": [["Hyper Voice"], ["Psychic"], ["Shadow Ball"], ["Focus Blast"]]
+ }, {
+ "species": "Meloetta",
+ "weight": 15,
+ "item": ["Choice Scarf"],
+ "ability": ["Serene Grace"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Fairy"],
+ "moves": [["Hyper Voice"], ["Psychic"], ["Shadow Ball"], ["U-turn"]]
+ }, {
+ "species": "Meloetta",
+ "weight": 10,
+ "item": ["Choice Scarf"],
+ "ability": ["Serene Grace"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Fairy"],
+ "moves": [["Hyper Voice"], ["Psychic"], ["Shadow Ball"], ["Trick"]]
+ }, {
+ "species": "Meloetta",
+ "wantsTera": true,
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Serene Grace"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fire"],
+ "moves": [["Tera Blast"], ["Psyshock"], ["Substitute"], ["Calm Mind"]]
+ }]
+ },
+ "bombirdier": {
+ "weight": 9,
+ "sets": [{
+ "species": "Bombirdier",
+ "weight": 70,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Big Pecks"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Dark"],
+ "moves": [["Knock Off"], ["Brave Bird"], ["Sucker Punch"], ["Taunt", "Stealth Rock", "Roost"]]
+ }, {
+ "species": "Bombirdier",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Big Pecks"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Dark"],
+ "moves": [["Knock Off"], ["Parting Shot"], ["Stealth Rock"], ["Roost"]]
+ }]
+ },
+ "florges": {
+ "weight": 9,
+ "sets": [{
+ "species": "Florges",
+ "weight": 20,
+ "item": ["Choice Scarf"],
+ "ability": ["Flower Veil", "Symbiosis"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Poison", "Fairy"],
+ "moves": [["Moonblast"], ["Psychic Noise", "Calm Mind", "Wish"], ["Synthesis"], ["Trick"]]
+ }, {
+ "species": "Florges",
+ "weight": 20,
+ "item": ["Choice Specs"],
+ "ability": ["Flower Veil", "Symbiosis"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Fairy"],
+ "moves": [["Moonblast"], ["Trick"], ["Psychic Noise"], ["Synthesis"]]
+ }, {
+ "species": "Florges",
+ "wantsTera": true,
+ "weight": 15,
+ "item": ["Choice Scarf"],
+ "ability": ["Flower Veil", "Symbiosis"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Moonblast"], ["Tera Blast"], ["Synthesis"], ["Trick"]]
+ }, {
+ "species": "Florges",
+ "wantsTera": true,
+ "weight": 15,
+ "item": ["Choice Specs"],
+ "ability": ["Flower Veil", "Symbiosis"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ground"],
+ "moves": [["Moonblast"], ["Trick"], ["Tera Blast"], ["Synthesis", "Psychic Noise"]]
+ }, {
+ "species": "Florges",
+ "wantsTera": true,
+ "weight": 10,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Flower Veil", "Symbiosis"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ground"],
+ "moves": [["Moonblast"], ["Calm Mind"], ["Tera Blast"], ["Synthesis"]]
+ }, {
+ "species": "Florges",
+ "weight": 10,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Flower Veil", "Symbiosis"],
+ "evs": {"hp": 252, "def": 160, "spe": 96},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Poison"],
+ "moves": [["Moonblast"], ["Calm Mind"], ["Wish", "Psychic Noise"], ["Synthesis"]]
+ }, {
+ "species": "Florges",
+ "weight": 5,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Flower Veil", "Symbiosis"],
+ "evs": {"hp": 252, "def": 160, "spe": 96},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Poison"],
+ "moves": [["Moonblast"], ["Calm Mind"], ["Wish"], ["Synthesis"]]
+ }, {
+ "species": "Florges",
+ "weight": 5,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Flower Veil", "Symbiosis"],
+ "evs": {"hp": 252, "def": 160, "spe": 96},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Poison"],
+ "moves": [["Moonblast"], ["Calm Mind"], ["Wish"], ["Protect"]]
+ }]
+ },
+ "gastrodon": {
+ "weight": 9,
+ "sets": [{
+ "species": "Gastrodon",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Storm Drain", "Sticky Hold"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Fairy", "Poison"],
+ "moves": [["Earth Power"], ["Recover"], ["Ice Beam", "Surf", "Clear Smog"], ["Spikes", "Stealth Rock"]]
+ }, {
+ "species": "Gastrodon",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Leftovers", "Rocky Helmet"],
+ "ability": ["Storm Drain", "Sticky Hold"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Earth Power"], ["Recover"], ["Ice Beam", "Surf", "Clear Smog"], ["Spikes", "Stealth Rock"]]
+ }]
+ },
+ "taurospaldeablaze": {
+ "weight": 9,
+ "sets": [{
+ "species": "Tauros-Paldea-Blaze",
+ "weight": 25,
+ "item": ["Leftovers", "Lum Berry"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Grass"],
+ "moves": [["Bulk Up"], ["Close Combat"], ["Raging Bull", "Flare Blitz"], ["Trailblaze"]]
+ }, {
+ "species": "Tauros-Paldea-Blaze",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Steel"],
+ "moves": [["Bulk Up"], ["Close Combat"], ["Raging Bull", "Flare Blitz"], ["Stone Edge", "Substitute"]]
+ }, {
+ "species": "Tauros-Paldea-Blaze",
+ "weight": 50,
+ "item": ["Choice Scarf", "Choice Band"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fighting"],
+ "moves": [["Flare Blitz"], ["Close Combat"], ["Earthquake"], ["Stone Edge", "Raging Bull"]]
+ }]
+ },
+ "zoroark": {
+ "weight": 9,
+ "sets": [{
+ "species": "Zoroark",
+ "weight": 30,
+ "item": ["Life Orb"],
+ "ability": ["Illusion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Dark", "Ghost", "Poison"],
+ "moves": [["Dark Pulse"], ["Sludge Bomb"], ["Nasty Plot"], ["Focus Blast", "Flamethrower"]]
+ }, {
+ "species": "Zoroark",
+ "weight": 20,
+ "item": ["Choice Specs"],
+ "ability": ["Illusion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Dark", "Poison"],
+ "moves": [["Dark Pulse"], ["Sludge Bomb"], ["Trick"], ["U-turn"]]
+ }, {
+ "species": "Zoroark",
+ "weight": 5,
+ "item": ["Choice Specs"],
+ "ability": ["Illusion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Dark", "Poison", "Fighting"],
+ "moves": [["Dark Pulse"], ["Sludge Bomb"], ["Trick"], ["Focus Blast"]]
+ }, {
+ "species": "Zoroark",
+ "weight": 25,
+ "item": ["Choice Scarf"],
+ "ability": ["Illusion"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark", "Fighting"],
+ "moves": [["Knock Off"], ["U-turn"], ["Trick"], ["Low Kick"]]
+ }, {
+ "species": "Zoroark",
+ "weight": 20,
+ "item": ["Life Orb", "Heavy-Duty Boots"],
+ "ability": ["Illusion"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Knock Off"], ["Sucker Punch"], ["Swords Dance"], ["Low Kick", "Aerial Ace"]]
+ }]
+ },
+ "bellibolt": {
+ "weight": 7,
+ "sets": [{
+ "species": "Bellibolt",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Static"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Volt Switch"], ["Muddy Water"], ["Slack Off"], ["Toxic"]]
+ }]
+ },
+ "decidueye": {
+ "weight": 8,
+ "sets": [{
+ "species": "Decidueye",
+ "weight": 35,
+ "item": ["Spell Tag"],
+ "ability": ["Long Reach"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Ghost", "Fairy"],
+ "moves": [["Swords Dance"], ["Spirit Shackle", "Poltergeist"], ["Shadow Sneak"], ["Leaf Blade", "Low Kick"]]
+ }, {
+ "species": "Decidueye",
+ "weight": 35,
+ "item": ["Spell Tag", "Choice Band", "Heavy-Duty Boots"],
+ "ability": ["Long Reach"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Ghost", "Fairy"],
+ "moves": [["U-turn"], ["Spirit Shackle", "Poltergeist"], ["Shadow Sneak"], ["Leaf Blade", "Low Kick"]]
+ }, {
+ "species": "Decidueye",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Long Reach"],
+ "evs": {"hp": 252, "spd": 120, "spe": 136},
+ "nature": ["Calm"],
+ "teraType": ["Fairy"],
+ "moves": [["U-turn"], ["Roost"], ["Defog"], ["Leaf Storm"]]
+ }]
+ },
+ "golurk": {
+ "weight": 8,
+ "sets": [{
+ "species": "Golurk",
+ "weight": 50,
+ "item": ["Colbur Berry"],
+ "ability": ["No Guard"],
+ "evs": {"hp": 172, "atk": 252, "spe": 84},
+ "nature": ["Adamant"],
+ "teraType": ["Steel"],
+ "moves": [["Earthquake"], ["Poltergeist"], ["Stone Edge"], ["Stealth Rock"]]
+ }, {
+ "species": "Golurk",
+ "weight": 50,
+ "item": ["Choice Band"],
+ "ability": ["No Guard"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Dark"],
+ "moves": [["Earthquake"], ["Poltergeist"], ["Stone Edge"], ["Dynamic Punch", "Close Combat"]]
+ }]
+ },
+ "pawmot": {
+ "weight": 8,
+ "sets": [{
+ "species": "Pawmot",
+ "weight": 40,
+ "item": ["Life Orb", "Heavy-Duty Boots"],
+ "ability": ["Iron Fist"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Electric"],
+ "moves": [["Close Combat"], ["Double Shock"], ["Knock Off"], ["Mach Punch"]]
+ }, {
+ "species": "Pawmot",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Volt Absorb", "Natural Cure"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Electric"],
+ "moves": [["Close Combat"], ["Double Shock"], ["Knock Off"], ["Volt Switch"]]
+ }, {
+ "species": "Pawmot",
+ "weight": 20,
+ "item": ["Life Orb"],
+ "ability": ["Natural Cure"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Electric"],
+ "moves": [["Close Combat"], ["Double Shock"], ["Knock Off"], ["Rest"]]
+ }]
+ },
+ "rhydon": {
+ "weight": 8,
+ "sets": [{
+ "species": "Rhydon",
+ "weight": 100,
+ "item": ["Eviolite"],
+ "ability": ["Lightning Rod"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Poison", "Water"],
+ "moves": [["Earthquake"], ["Stone Edge"], ["Rock Polish", "Heat Crash"], ["Swords Dance"]]
+ }]
+ },
+ "rotomheat": {
+ "weight": 8,
+ "sets": [{
+ "species": "Rotom-Heat",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 248, "spa": 8, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Poison", "Steel"],
+ "moves": [["Overheat"], ["Volt Switch"], ["Nasty Plot", "Thunder Wave"], ["Pain Split"]]
+ }]
+ },
+ "salazzle": {
+ "weight": 8,
+ "sets": [{
+ "species": "Salazzle",
+ "wantsTera": true,
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Corrosion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Fire Blast"], ["Sludge Bomb"], ["Nasty Plot"], ["Tera Blast"]]
+ }, {
+ "species": "Salazzle",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Corrosion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Dark", "Ghost"],
+ "moves": [["Encore", "Toxic"], ["Sludge Bomb"], ["Nasty Plot"], ["Fire Blast"]]
+ }, {
+ "species": "Salazzle",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Corrosion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Grass", "Steel"],
+ "moves": [["Encore"], ["Sludge Bomb"], ["Toxic"], ["Fire Blast", "Flamethrower"]]
+ }, {
+ "species": "Salazzle",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Corrosion"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Grass", "Steel"],
+ "moves": [["Knock Off"], ["Sludge Bomb"], ["Toxic"], ["Fire Blast", "Flamethrower"]]
+ }]
+ },
+ "skuntank": {
+ "weight": 8,
+ "sets": [{
+ "species": "Skuntank",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots", "Rocky Helmet", "Black Glasses"],
+ "ability": ["Aftermath"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly", "Adamant"],
+ "teraType": ["Dark", "Ghost"],
+ "moves": [["Gunk Shot"], ["Knock Off"], ["Sucker Punch"], ["Taunt", "Toxic", "Toxic Spikes"]]
+ }]
+ },
+ "tornadus": {
+ "weight": 8,
+ "sets": [{
+ "species": "Tornadus",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Defiant"],
+ "evs": {"atk": 4, "spa": 252, "spe": 252},
+ "nature": ["Naive"],
+ "teraType": ["Flying", "Ground"],
+ "moves": [["Bleakwind Storm"], ["Focus Blast"], ["U-turn"], ["Knock Off"]]
+ }, {
+ "species": "Tornadus",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Prankster"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Flying", "Ground"],
+ "moves": [["Bleakwind Storm"], ["Focus Blast"], ["U-turn"], ["Taunt"]]
+ }, {
+ "species": "Tornadus",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Prankster"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Flying", "Ground"],
+ "moves": [["Bleakwind Storm"], ["Focus Blast"], ["Nasty Plot"], ["Heat Wave"]]
+ }, {
+ "species": "Tornadus",
+ "weight": 20,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Defiant"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Bleakwind Storm"], ["Focus Blast", "Heat Wave"], ["Nasty Plot"], ["Tera Blast"]]
+ }, {
+ "species": "Tornadus",
+ "wantsTera": true,
+ "weight": 10,
+ "item": ["Choice Specs"],
+ "ability": ["Defiant"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Bleakwind Storm"], ["Grass Knot"], ["Heat Wave"], ["Tera Blast"]]
+ }, {
+ "species": "Tornadus",
+ "weight": 10,
+ "item": ["Choice Specs"],
+ "ability": ["Prankster"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Flying"],
+ "moves": [["Bleakwind Storm"], ["Grass Knot"], ["Heat Wave"], ["Focus Blast"]]
+ }]
+ },
+ "toxtricity": {
+ "weight": 8,
+ "sets": [{
+ "species": "Toxtricity",
+ "weight": 35,
+ "item": ["Throat Spray"],
+ "ability": ["Punk Rock"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Normal"],
+ "moves": [["Overdrive"], ["Boomburst"], ["Shift Gear"], ["Sludge Bomb", "Snarl"]]
+ }, {
+ "species": "Toxtricity",
+ "weight": 35,
+ "item": ["Choice Specs"],
+ "ability": ["Punk Rock"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Normal"],
+ "moves": [["Overdrive"], ["Boomburst"], ["Volt Switch"], ["Snarl"]]
+ }, {
+ "species": "Toxtricity",
+ "weight": 30,
+ "item": ["Choice Scarf"],
+ "ability": ["Punk Rock"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Normal"],
+ "moves": [["Overdrive"], ["Boomburst"], ["Volt Switch"], ["Snarl", "Sludge Bomb"]]
+ }]
+ },
+ "bruxish": {
+ "weight": 6,
+ "sets": [{
+ "species": "Bruxish",
+ "weight": 35,
+ "item": ["Choice Scarf"],
+ "ability": ["Strong Jaw"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Psychic", "Water"],
+ "moves": [["Psychic Fangs"], ["Wave Crash"], ["Flip Turn"], ["Crunch", "Ice Fang", "Aqua Jet"]]
+ }, {
+ "species": "Bruxish",
+ "weight": 35,
+ "item": ["Choice Band"],
+ "ability": ["Strong Jaw"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Psychic", "Water"],
+ "moves": [["Psychic Fangs"], ["Wave Crash"], ["Flip Turn"], ["Aqua Jet"]]
+ }, {
+ "species": "Bruxish",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots", "Mystic Water"],
+ "ability": ["Dazzling"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water"],
+ "moves": [["Psychic Fangs"], ["Swords Dance"], ["Wave Crash"], ["Aqua Jet"]]
+ }]
+ },
+ "copperajah": {
+ "weight": 7,
+ "sets": [{
+ "species": "Copperajah",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Heavy Metal"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Heavy Slam"], ["Whirlwind"], ["Knock Off"], ["Stealth Rock", "Protect"]]
+ }, {
+ "species": "Copperajah",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Heavy Metal"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Ground", "Ghost", "Water"],
+ "moves": [["Heavy Slam"], ["Whirlwind", "Stealth Rock", "Protect"], ["Knock Off"], ["Earthquake"]]
+ }, {
+ "species": "Copperajah",
+ "weight": 50,
+ "item": ["Assault Vest"],
+ "ability": ["Sheer Force"],
+ "evs": {"atk": 192, "spd": 192, "spe": 124},
+ "nature": ["Adamant"],
+ "teraType": ["Fairy", "Ground"],
+ "moves": [["Iron Head"], ["Knock Off"], ["Earthquake"], ["Play Rough"]]
+ }]
+ },
+ "goodra": {
+ "weight": 7,
+ "sets": [{
+ "species": "Goodra",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Sap Sipper"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Poison"],
+ "moves": [["Draco Meteor"], ["Flamethrower"], ["Sludge Bomb"], ["Toxic", "Acid Spray"]]
+ }, {
+ "species": "Goodra",
+ "weight": 25,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Sap Sipper"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Dragon", "Fairy", "Poison"],
+ "moves": [["Draco Meteor"], ["Flamethrower"], ["Sludge Bomb"], ["Knock Off", "Dragon Tail"]]
+ }, {
+ "species": "Goodra",
+ "weight": 50,
+ "item": ["Choice Specs"],
+ "ability": ["Sap Sipper"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Dragon", "Fairy", "Poison"],
+ "moves": [["Draco Meteor"], ["Flamethrower", "Fire Blast"], ["Sludge Bomb"], ["Scald", "Dragon Pulse"]]
+ }]
+ },
+ "grimmsnarl": {
+ "weight": 7,
+ "sets": [{
+ "species": "Grimmsnarl",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Prankster"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Poison", "Steel"],
+ "moves": [["Parting Shot"], ["Spirit Break"], ["Sucker Punch"], ["Thunder Wave"]]
+ }, {
+ "species": "Grimmsnarl",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Prankster"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Poison", "Steel"],
+ "moves": [["Bulk Up"], ["Spirit Break"], ["Sucker Punch"], ["Substitute"]]
+ }]
+ },
+ "mudsdale": {
+ "weight": 7,
+ "sets": [{
+ "species": "Mudsdale",
+ "weight": 100,
+ "item": ["Rocky Helmet", "Leftovers"],
+ "ability": ["Stamina"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Steel"],
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Body Press", "Heavy Slam", "Stone Edge"], ["Roar"]]
+ }]
+ },
+ "scrafty": {
+ "weight": 7,
+ "sets": [{
+ "species": "Scrafty",
+ "weight": 20,
+ "item": ["Leftovers"],
+ "ability": ["Shed Skin"],
+ "evs": {"hp": 248, "atk": 8, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Poison"],
+ "moves": [["Bulk Up"], ["Drain Punch"], ["Knock Off"], ["Rest"]]
+ }, {
+ "species": "Scrafty",
+ "weight": 40,
+ "item": ["Leftovers"],
+ "ability": ["Shed Skin"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Poison"],
+ "moves": [["Dragon Dance"], ["Drain Punch"], ["Knock Off"], ["Poison Jab", "Ice Punch"]]
+ }, {
+ "species": "Scrafty",
+ "weight": 40,
+ "item": ["Leftovers"],
+ "ability": ["Shed Skin"],
+ "evs": {"hp": 176, "atk": 100, "spe": 232},
+ "nature": ["Adamant"],
+ "teraType": ["Poison"],
+ "moves": [["Dragon Dance"], ["Drain Punch"], ["Knock Off"], ["Poison Jab", "Ice Punch"]]
+ }]
+ },
+ "tatsugiri": {
+ "weight": 6,
+ "sets": [{
+ "species": "Tatsugiri",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Storm Drain"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid", "Modest"],
+ "teraType": ["Fairy", "Ghost"],
+ "moves": [["Nasty Plot"], ["Draco Meteor"], ["Rapid Spin"], ["Surf"]]
+ }]
+ },
+ "venusaur": {
+ "weight": 7,
+ "sets": [{
+ "species": "Venusaur",
+ "weight": 70,
+ "item": ["Heavy-Duty Boots", "Life Orb"],
+ "ability": ["Overgrow"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Leaf Storm"], ["Sludge Bomb"], ["Earth Power"], ["Synthesis"]]
+ }, {
+ "species": "Venusaur",
+ "weight": 15,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Overgrow"],
+ "evs": {"hp": 252, "def": 200, "spe": 56},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Leech Seed"], ["Sludge Bomb"], ["Giga Drain"], ["Synthesis"]]
+ }, {
+ "species": "Venusaur",
+ "weight": 15,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Overgrow"],
+ "evs": {"hp": 252, "def": 200, "spe": 56},
+ "nature": ["Bold"],
+ "teraType": ["Water"],
+ "moves": [["Knock Off"], ["Sludge Bomb"], ["Giga Drain"], ["Synthesis"]]
+ }]
+ },
+ "articunogalar": {
+ "weight": 5,
+ "sets": [{
+ "species": "Articuno-Galar",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Competitive"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Steel"],
+ "moves": [["Future Sight"], ["Recover"], ["Hurricane"], ["U-turn"]]
+ }]
+ },
+ "coalossal": {
+ "weight": 4,
+ "sets": [{
+ "species": "Coalossal",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Flame Body"],
+ "evs": {"hp": 248, "def": 8, "spd": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Calm"],
+ "teraType": ["Ghost"],
+ "moves": [["Rapid Spin"], ["Flamethrower"], ["Earth Power"], ["Stealth Rock", "Spikes"]]
+ }, {
+ "species": "Coalossal",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Flame Body"],
+ "evs": {"hp": 248, "def": 252, "spd": 8},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Ghost"],
+ "moves": [["Rapid Spin"], ["Flamethrower"], ["Earth Power"], ["Stealth Rock", "Spikes"]]
+ }]
+ },
+ "cramorant": {
+ "weight": 5,
+ "sets": [{
+ "species": "Cramorant",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Gulp Missile"],
+ "evs": {"hp": 248, "def": 188, "spd": 56, "spe": 16},
+ "nature": ["Bold"],
+ "teraType": ["Steel"],
+ "moves": [["Roost"], ["Defog"], ["Surf"], ["Brave Bird"]]
+ }]
+ },
+ "decidueyehisui": {
+ "weight": 5,
+ "sets": [{
+ "species": "Decidueye-Hisui",
+ "weight": 25,
+ "item": ["Lum Berry"],
+ "ability": ["Scrappy"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Swords Dance"], ["Trailblaze", "Leaf Blade", "Sucker Punch"], ["Triple Arrows", "Close Combat"], ["Knock Off"]]
+ }, {
+ "species": "Decidueye-Hisui",
+ "weight": 25,
+ "item": ["Lum Berry"],
+ "ability": ["Scrappy"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Swords Dance"], ["Knock Off", "Leaf Blade"], ["Triple Arrows", "Close Combat"], ["Sucker Punch"]]
+ }, {
+ "species": "Decidueye-Hisui",
+ "weight": 50,
+ "item": ["Choice Scarf"],
+ "ability": ["Scrappy"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["U-turn"], ["Knock Off"], ["Triple Arrows", "Close Combat"], ["Leaf Blade"]]
+ }]
+ },
+ "delphox": {
+ "weight": 5,
+ "sets": [{
+ "species": "Delphox",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Blaze"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Nasty Plot"], ["Fire Blast", "Flamethrower"], ["Psyshock"], ["Encore"]]
+ }, {
+ "species": "Delphox",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Blaze"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Grass"],
+ "moves": [["Nasty Plot"], ["Fire Blast", "Flamethrower"], ["Psyshock"], ["Grass Knot"]]
+ }]
+ },
+ "dudunsparce": {
+ "weight": 5,
+ "sets": [{
+ "species": "Dudunsparce",
+ "weight": 40,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Rattled"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Ghost", "Poison"],
+ "moves": [["Calm Mind"], ["Boomburst"], ["Shadow Ball"], ["Roost"]]
+ }, {
+ "species": "Dudunsparce",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Serene Grace"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Poison"],
+ "moves": [["Dragon Tail"], ["Body Slam"], ["Coil"], ["Roost"]]
+ }, {
+ "species": "Dudunsparce",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Serene Grace"],
+ "evs": {"hp": 252, "def": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Poison"],
+ "moves": [["Dragon Tail", "Toxic"], ["Body Slam"], ["Stealth Rock"], ["Roost"]]
+ }]
+ },
+ "electrodehisui": {
+ "weight": 5,
+ "sets": [{
+ "species": "Electrode-Hisui",
+ "wantsTera": true,
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Soundproof", "Aftermath"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fire"],
+ "moves": [["Volt Switch"], ["Giga Drain", "Leaf Storm"], ["Thunderbolt"], ["Tera Blast"]]
+ }, {
+ "species": "Electrode-Hisui",
+ "weight": 60,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Soundproof", "Aftermath"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Volt Switch"], ["Giga Drain", "Leaf Storm"], ["Thunderbolt"], ["Taunt", "Foul Play"]]
+ }]
+ },
+ "frosmoth": {
+ "weight": 5,
+ "sets": [{
+ "species": "Frosmoth",
+ "wantsTera": true,
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Ice Scales"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ground"],
+ "moves": [["Quiver Dance"], ["Ice Beam"], ["Tera Blast"], ["Giga Drain", "Bug Buzz"]]
+ }, {
+ "species": "Frosmoth",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Ice Scales"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Water", "Steel"],
+ "moves": [["Defog"], ["Ice Beam"], ["U-turn"], ["Giga Drain", "Stun Spore"]]
+ }]
+ },
+ "hariyama": {
+ "weight": 5,
+ "sets": [{
+ "species": "Hariyama",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Guts", "Thick Fat"],
+ "evs": {"hp": 12, "atk": 200, "spd": 252, "spe": 44},
+ "nature": ["Adamant"],
+ "teraType": ["Steel"],
+ "moves": [["Bulk Up"], ["Drain Punch"], ["Knock Off"], ["Bullet Punch"]]
+ }]
+ },
+ "hoopa": {
+ "weight": 5,
+ "sets": [{
+ "species": "Hoopa",
+ "weight": 50,
+ "item": ["Choice Scarf"],
+ "ability": ["Magician"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fighting", "Ghost"],
+ "moves": [["Trick"], ["Shadow Ball"], ["Psyshock", "Psychic"], ["Focus Blast"]]
+ }, {
+ "species": "Hoopa",
+ "weight": 50,
+ "item": ["Choice Specs"],
+ "ability": ["Magician"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost", "Psychic", "Dark", "Fighting"],
+ "moves": [["Psyshock"], ["Shadow Ball"], ["Future Sight", "Psychic"], ["Focus Blast"]]
+ }]
+ },
+ "sandslashalola": {
+ "weight": 5,
+ "sets": [{
+ "species": "Sandslash-Alola",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots", "Leftovers"],
+ "ability": ["Slush Rush"],
+ "evs": {"hp": 252, "atk": 4, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Water", "Ghost"],
+ "moves": [["Rapid Spin"], ["Ice Spinner", "Triple Axel"], ["Knock Off"], ["Spikes", "Stealth Rock"]]
+ }]
+ },
+ "uxie": {
+ "weight": 5,
+ "sets": [{
+ "species": "Uxie",
+ "weight": 40,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Steel"],
+ "moves": [["Draining Kiss"], ["Nasty Plot"], ["Psyshock", "Psychic Noise"], ["Encore"]]
+ }, {
+ "species": "Uxie",
+ "weight": 40,
+ "item": ["Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Electric"],
+ "moves": [["Thunderbolt"], ["Nasty Plot"], ["Psyshock", "Psychic Noise"], ["Encore"]]
+ }, {
+ "species": "Uxie",
+ "weight": 20,
+ "item": ["Leftovers", "Colbur Berry"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Bold"],
+ "teraType": ["Steel", "Fairy"],
+ "moves": [["Stealth Rock", "Encore"], ["Knock Off"], ["Psychic Noise"], ["U-turn"]]
+ }]
+ },
+ "virizion": {
+ "weight": 5,
+ "sets": [{
+ "species": "Virizion",
+ "weight": 100,
+ "item": ["Lum Berry"],
+ "ability": ["Justified"],
+ "evs": {"atk": 252, "spd": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Rock"],
+ "moves": [["Swords Dance"], ["Close Combat"], ["Stone Edge"], ["Leaf Blade", "Synthesis"]]
+ }]
+ },
+ "wochien": {
+ "weight": 5,
+ "sets": [{
+ "species": "Wo-Chien",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Tablets of Ruin"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Poison"],
+ "moves": [["Knock Off"], ["Protect"], ["Leech Seed"], ["Foul Play", "Ruination"]]
+ }]
+ },
+ "altaria": {
+ "weight": 4,
+ "sets": [{
+ "species": "Altaria",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Natural Cure"],
+ "evs": {"hp": 252, "def": 200, "spd": 56},
+ "nature": ["Impish"],
+ "teraType": ["Steel"],
+ "moves": [["Brave Bird"], ["Roost"], ["Defog"], ["Will-O-Wisp", "Haze", "Roar"]]
+ }]
+ },
+ "ambipom": {
+ "weight": 4,
+ "sets": [{
+ "species": "Ambipom",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Technician"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Normal"],
+ "moves": [["Fake Out"], ["U-turn"], ["Knock Off"], ["Triple Axel"]]
+ }]
+ },
+ "articuno": {
+ "weight": 4,
+ "sets": [{
+ "species": "Articuno",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Pressure"],
+ "evs": {"hp": 252, "def": 120, "spe": 136},
+ "nature": ["Bold"],
+ "teraType": ["Fairy", "Water", "Steel"],
+ "moves": [["Roost"], ["U-turn"], ["Freeze-Dry"], ["Roar", "Haze", "Hurricane"]]
+ }]
+ },
+ "floatzel": {
+ "weight": 4,
+ "sets": [{
+ "species": "Floatzel",
+ "weight": 100,
+ "item": ["Choice Band"],
+ "ability": ["Water Veil"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water"],
+ "moves": [["Wave Crash"], ["Flip Turn"], ["Ice Spinner"], ["Aqua Jet"]]
+ }]
+ },
+ "glastrier": {
+ "weight": 4,
+ "sets": [{
+ "species": "Glastrier",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Chilling Neigh"],
+ "evs": {"hp": 132, "atk": 252, "spe": 124},
+ "nature": ["Adamant"],
+ "teraType": ["Water", "Poison"],
+ "moves": [["Icicle Crash"], ["Close Combat"], ["High Horsepower"], ["Swords Dance"]]
+ }]
+ },
+ "mesprit": {
+ "weight": 4,
+ "sets": [{
+ "species": "Mesprit",
+ "weight": 100,
+ "item": ["Colbur Berry", "Leftovers"],
+ "ability": ["Levitate"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Bold"],
+ "teraType": ["Ghost", "Fairy", "Steel"],
+ "moves": [["Stealth Rock"], ["Psychic Noise"], ["U-turn"], ["Knock Off", "Thunder Wave", "Healing Wish"]]
+ }]
+ },
+ "oricorio": {
+ "weight": 4,
+ "sets": [{
+ "species": "Oricorio",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Dancer"],
+ "evs": {"hp": 252, "spa": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ground"],
+ "moves": [["Quiver Dance"], ["Revelation Dance"], ["Hurricane", "Taunt"], ["Roost"]]
+ }, {
+ "species": "Oricorio",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Dancer"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Ground"],
+ "moves": [["Quiver Dance"], ["Revelation Dance"], ["Hurricane", "Taunt"], ["Roost"]]
+ }]
+ },
+ "palossand": {
+ "weight": 4,
+ "sets": [{
+ "species": "Palossand",
+ "weight": 100,
+ "item": ["", "Rocky Helmet", "Colbur Berry"],
+ "ability": ["Water Compaction"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Dark", "Water"],
+ "moves": [["Stealth Rock"], ["Scorching Sands", "Earth Power"], ["Shore Up"], ["Shadow Ball", "Sludge Bomb"]]
+ }]
+ },
+ "qwilfish": {
+ "weight": 4,
+ "sets": [{
+ "species": "Qwilfish",
+ "weight": 50,
+ "item": ["Rocky Helmet"],
+ "ability": ["Intimidate"],
+ "evs": {"hp": 252, "def": 240, "spe": 16},
+ "nature": ["Impish"],
+ "teraType": ["Ground", "Ghost"],
+ "moves": [["Spikes"], ["Barb Barrage"], ["Flip Turn"], ["Pain Split", "Taunt", "Thunder Wave", "Toxic"]]
+ }, {
+ "species": "Qwilfish",
+ "weight": 50,
+ "item": ["Leftovers", "Life Orb"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water"],
+ "moves": [["Swords Dance"], ["Gunk Shot"], ["Liquidation"], ["Aqua Jet"]]
+ }]
+ },
+ "qwilfishhisui": {
+ "weight": 4,
+ "sets": [{
+ "species": "Qwilfish-Hisui",
+ "weight": 50,
+ "item": ["Eviolite"],
+ "ability": ["Intimidate"],
+ "evs": {"hp": 252, "spd": 240, "spe": 16},
+ "nature": ["Careful"],
+ "teraType": ["Dragon"],
+ "moves": [["Spikes"], ["Barb Barrage"], ["Crunch"], ["Taunt", "Haze", "Toxic"]]
+ }, {
+ "species": "Qwilfish-Hisui",
+ "weight": 50,
+ "item": ["Eviolite"],
+ "ability": ["Intimidate"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Water"],
+ "moves": [["Swords Dance"], ["Gunk Shot"], ["Crunch"], ["Aqua Jet"]]
+ }]
+ },
+ "rotommow": {
+ "weight": 4,
+ "sets": [{
+ "species": "Rotom-Mow",
+ "weight": 100,
+ "item": ["Choice Scarf"],
+ "ability": ["Levitate"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Electric"],
+ "moves": [["Volt Switch"], ["Thunderbolt", "Discharge"], ["Leaf Storm"], ["Trick"]]
+ }]
+ },
+ "sandaconda": {
+ "weight": 4,
+ "sets": [{
+ "species": "Sandaconda",
+ "weight": 100,
+ "item": ["Rocky Helmet", "Leftovers", "Heavy-Duty Boots"],
+ "ability": ["Shed Skin"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Ghost", "Dragon"],
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Glare", "Stone Edge"], ["Rest"]]
+ }]
+ },
+ "sneasel": {
+ "weight": 4,
+ "sets": [{
+ "species": "Sneasel",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Inner Focus"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Ice", "Dark", "Ghost"],
+ "moves": [["Swords Dance"], ["Triple Axel", "Icicle Crash"], ["Knock Off"], ["Ice Shard"]]
+ }]
+ },
+ "sneaselhisui": {
+ "weight": 4,
+ "sets": [{
+ "species": "Sneasel-Hisui",
+ "weight": 100,
+ "item": ["Eviolite"],
+ "ability": ["Inner Focus"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Swords Dance"], ["Gunk Shot"], ["Close Combat"], ["Throat Chop"]]
+ }]
+ },
+ "whimsicott": {
+ "weight": 4,
+ "sets": [{
+ "species": "Whimsicott",
+ "weight": 50,
+ "item": ["Choice Specs"],
+ "ability": ["Prankster", "Infiltrator"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Energy Ball"], ["Moonblast"], ["Psychic"], ["Switcheroo"]]
+ }, {
+ "species": "Whimsicott",
+ "weight": 50,
+ "item": ["Choice Specs"],
+ "ability": ["Infiltrator"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Energy Ball"], ["Moonblast"], ["Psychic"], ["U-turn"]]
+ }]
+ },
+ "braviaryhisui": {
+ "weight": 3,
+ "sets": [{
+ "species": "Braviary-Hisui",
+ "weight": 100,
+ "item": ["Life Orb"],
+ "ability": ["Sheer Force"],
+ "evs": {"def": 4, "spa": 252, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Fire"],
+ "moves": [["Psychic"], ["Hurricane"], ["Heat Wave"], ["Agility", "Roost"]]
+ }]
+ },
+ "farigiraf": {
+ "weight": 3,
+ "sets": [{
+ "species": "Farigiraf",
+ "wantsTera": true,
+ "weight": 100,
+ "item": ["Life Orb"],
+ "ability": ["Armor Tail"],
+ "evs": {"hp": 252, "def": 4, "spa": 252},
+ "ivs": {"atk": 0, "spe": 0},
+ "nature": ["Quiet"],
+ "teraType": ["Fairy", "Fire"],
+ "moves": [["Psyshock"], ["Tera Blast"], ["Trick Room"], ["Nasty Plot"]]
+ }]
+ },
+ "hattrem": {
+ "weight": 2,
+ "sets": [{
+ "species": "Hattrem",
+ "weight": 100,
+ "item": ["Eviolite"],
+ "ability": ["Magic Bounce"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy", "Fire"],
+ "moves": [["Psychic"], ["Nuzzle"], ["Mystical Fire"], ["Giga Drain", "Healing Wish"]]
+ }]
+ },
+ "naclstack": {
+ "weight": 2,
+ "sets": [{
+ "species": "Naclstack",
+ "weight": 50,
+ "item": ["Eviolite"],
+ "ability": ["Purifying Salt"],
+ "evs": {"hp": 248, "def": 8, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Water"],
+ "moves": [["Salt Cure"], ["Protect"], ["Recover"], ["Curse"]]
+ }, {
+ "species": "Naclstack",
+ "weight": 50,
+ "item": ["Eviolite"],
+ "ability": ["Purifying Salt"],
+ "evs": {"hp": 248, "def": 8, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Ghost"],
+ "moves": [["Salt Cure"], ["Protect"], ["Recover"], ["Stealth Rock"]]
+ }]
+ },
+ "orthworm": {
+ "weight": 1,
+ "sets": [{
+ "species": "Orthworm",
+ "weight": 50,
+ "item": ["Leftovers"],
+ "ability": ["Earth Eater"],
+ "evs": {"hp": 248, "def": 8, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Ghost", "Electric"],
+ "moves": [["Coil"], ["Iron Tail"], ["Body Press"], ["Stealth Rock"]]
+ }, {
+ "species": "Orthworm",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Earth Eater"],
+ "evs": {"hp": 248, "def": 8, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Ghost", "Electric"],
+ "moves": [["Iron Defense"], ["Heavy Slam"], ["Body Press"], ["Stealth Rock", "Spikes"]]
+ }, {
+ "species": "Orthworm",
+ "weight": 25,
+ "item": ["Leftovers"],
+ "ability": ["Earth Eater"],
+ "evs": {"hp": 248, "def": 8, "spd": 252},
+ "nature": ["Careful"],
+ "teraType": ["Ghost", "Electric"],
+ "moves": [["Spikes"], ["Heavy Slam"], ["Body Press"], ["Stealth Rock"]]
+ }]
+ },
+ "passimian": {
+ "weight": 3,
+ "sets": [{
+ "species": "Passimian",
+ "weight": 100,
+ "item": ["Choice Scarf"],
+ "ability": ["Defiant"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Fighting", "Dark"],
+ "moves": [["Close Combat"], ["U-turn"], ["Knock Off"], ["Gunk Shot", "Earthquake"]]
+ }]
+ },
+ "brutebonnet": {
+ "weight": 2,
+ "sets": [{
+ "species": "Brute Bonnet",
+ "weight": 100,
+ "item": ["Choice Band"],
+ "ability": ["Protosynthesis"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant"],
+ "teraType": ["Fighting", "Dark"],
+ "moves": [["Close Combat"], ["Seed Bomb"], ["Crunch"], ["Sucker Punch"]]
+ }]
+ },
+ "jolteon": {
+ "weight": 2,
+ "sets": [{
+ "species": "Jolteon",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Volt Absorb"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Fairy"],
+ "moves": [["Thunderbolt"], ["Calm Mind"], ["Volt Switch"], ["Alluring Voice"]]
+ }, {
+ "species": "Jolteon",
+ "weight": 30,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Volt Absorb"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ghost"],
+ "moves": [["Thunderbolt"], ["Calm Mind"], ["Volt Switch"], ["Shadow Ball"]]
+ }, {
+ "species": "Jolteon",
+ "wantsTera": true,
+ "weight": 40,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Volt Absorb"],
+ "evs": {"spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"atk": 0},
+ "nature": ["Timid"],
+ "teraType": ["Ice"],
+ "moves": [["Thunderbolt"], ["Calm Mind"], ["Volt Switch"], ["Tera Blast"]]
+ }]
+ },
+ "sandslash": {
+ "weight": 2,
+ "sets": [{
+ "species": "Sandslash",
+ "weight": 100,
+ "item": ["Heavy-Duty Boots", "Leftovers", "Rocky Helmet"],
+ "ability": ["Sand Rush"],
+ "evs": {"hp": 248, "def": 252, "spd": 8},
+ "nature": ["Impish"],
+ "teraType": ["Ghost", "Water"],
+ "moves": [["Earthquake"], ["Rapid Spin"], ["Spikes", "Stealth Rock"], ["Knock Off"]]
+ }]
+ },
+ "emboar": {
+ "weight": 1,
+ "sets": [{
+ "species": "Emboar",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots", "Choice Band"],
+ "ability": ["Reckless"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Adamant", "Jolly"],
+ "teraType": ["Dark"],
+ "moves": [["Flare Blitz"], ["Close Combat"], ["Sucker Punch"], ["Knock Off", "Earthquake"]]
+ }, {
+ "species": "Emboar",
+ "weight": 50,
+ "item": ["Choice Scarf"],
+ "ability": ["Reckless"],
+ "evs": {"atk": 252, "def": 4, "spe": 252},
+ "nature": ["Jolly"],
+ "teraType": ["Dark", "Fighting", "Fire"],
+ "moves": [["Flare Blitz"], ["Close Combat"], ["Knock Off"], ["Head Smash", "Earthquake"]]
+ }]
+ },
+ "oricoriosensu": {
+ "weight": 1,
+ "sets": [{
+ "species": "Oricorio-Sensu",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Dancer"],
+ "evs": {"hp": 252, "spa": 252, "spd": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Modest"],
+ "teraType": ["Ground", "Fairy"],
+ "moves": [["Quiver Dance"], ["Revelation Dance"], ["Hurricane", "Taunt"], ["Roost"]]
+ }, {
+ "species": "Oricorio-Sensu",
+ "weight": 50,
+ "item": ["Heavy-Duty Boots"],
+ "ability": ["Dancer"],
+ "evs": {"hp": 252, "def": 252, "spa": 4},
+ "ivs": {"atk": 0},
+ "nature": ["Bold"],
+ "teraType": ["Ground", "Fairy"],
+ "moves": [["Quiver Dance"], ["Revelation Dance"], ["Hurricane", "Taunt"], ["Roost"]]
+ }]
+ },
+ "regirock": {
+ "weight": 1,
+ "sets": [{
+ "species": "Regirock",
+ "weight": 100,
+ "item": ["Leftovers"],
+ "ability": ["Clear Body"],
+ "evs": {"hp": 252, "def": 252, "spd": 4},
+ "nature": ["Impish"],
+ "teraType": ["Ghost", "Poison"],
+ "moves": [["Stealth Rock"], ["Stone Edge"], ["Body Press"], ["Thunder Wave", "Iron Defense"]]
+ }]
+ }
+ }
+}
diff --git a/data/random-battles/gen9/sets.json b/data/random-battles/gen9/sets.json
new file mode 100644
index 000000000000..eab0b7f52388
--- /dev/null
+++ b/data/random-battles/gen9/sets.json
@@ -0,0 +1,7726 @@
+{
+ "venusaur": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Giga Drain", "Leech Seed", "Sleep Powder", "Sludge Bomb", "Substitute"],
+ "abilities": ["Chlorophyll", "Overgrow"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earth Power", "Energy Ball", "Knock Off", "Sleep Powder", "Sludge Bomb", "Synthesis", "Toxic"],
+ "abilities": ["Chlorophyll", "Overgrow"],
+ "teraTypes": ["Dark", "Steel", "Water"]
+ }
+ ]
+ },
+ "charizard": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earthquake", "Flamethrower", "Focus Blast", "Hurricane", "Will-O-Wisp"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Dragon", "Fire", "Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Flare Blitz", "Outrage", "Swords Dance"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Dragon", "Ground"]
+ }
+ ]
+ },
+ "blastoise": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earthquake", "Hydro Pump", "Ice Beam", "Shell Smash"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Ground", "Steel", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Hydro Pump", "Ice Beam", "Shell Smash", "Tera Blast"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Electric", "Grass"]
+ }
+ ]
+ },
+ "arbok": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Earthquake", "Glare", "Gunk Shot", "Knock Off", "Sucker Punch", "Toxic Spikes"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Coil", "Earthquake", "Gunk Shot", "Trailblaze"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Grass", "Ground"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Coil", "Earthquake", "Gunk Shot", "Sucker Punch"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Ground"]
+ }
+ ]
+ },
+ "pikachu": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Fake Out", "Knock Off", "Play Rough", "Surf", "Volt Switch", "Volt Tackle"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "raichu": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Alluring Voice", "Encore", "Focus Blast", "Grass Knot", "Knock Off", "Nasty Plot", "Nuzzle", "Surf", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Grass", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Encore", "Focus Blast", "Nasty Plot", "Surf", "Tera Blast", "Thunderbolt"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "raichualola": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Alluring Voice", "Focus Blast", "Grass Knot", "Psychic", "Psyshock", "Surf", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Surge Surfer"],
+ "teraTypes": ["Fairy", "Fighting", "Grass", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Alluring Voice", "Focus Blast", "Grass Knot", "Nasty Plot", "Psyshock", "Surf", "Thunderbolt"],
+ "abilities": ["Surge Surfer"],
+ "teraTypes": ["Fairy", "Fighting", "Grass", "Water"]
+ }
+ ]
+ },
+ "sandslash": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Knock Off", "Rapid Spin", "Spikes", "Stone Edge", "Swords Dance"],
+ "abilities": ["Sand Rush"],
+ "teraTypes": ["Dragon", "Steel", "Water"]
+ }
+ ]
+ },
+ "sandslashalola": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Iron Head", "Knock Off", "Rapid Spin", "Spikes", "Triple Axel"],
+ "abilities": ["Slush Rush"],
+ "teraTypes": ["Flying", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earthquake", "Ice Shard", "Knock Off", "Rapid Spin", "Swords Dance", "Triple Axel"],
+ "abilities": ["Slush Rush"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "clefable": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Fire Blast", "Knock Off", "Moonblast", "Moonlight", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Magic Guard", "Unaware"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Fire Blast", "Moonblast", "Moonlight"],
+ "abilities": ["Magic Guard", "Unaware"],
+ "teraTypes": ["Fire", "Steel"]
+ }
+ ]
+ },
+ "ninetales": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Fire Blast", "Nasty Plot", "Scorching Sands", "Solar Beam"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Fire", "Grass"]
+ }
+ ]
+ },
+ "ninetalesalola": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Aurora Veil", "Blizzard", "Encore", "Moonblast", "Nasty Plot"],
+ "abilities": ["Snow Warning"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Aurora Veil", "Blizzard", "Freeze-Dry", "Moonblast", "Nasty Plot"],
+ "abilities": ["Snow Warning"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "wigglytuff": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Alluring Voice", "Dazzling Gleam", "Fire Blast", "Knock Off", "Protect", "Thunder Wave", "Wish"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "vileplume": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Giga Drain", "Leech Seed", "Sleep Powder", "Sludge Bomb", "Strength Sap"],
+ "abilities": ["Effect Spore"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "venomoth": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bug Buzz", "Quiver Dance", "Sleep Powder", "Sludge Wave"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Bug", "Poison", "Steel", "Water"]
+ }
+ ]
+ },
+ "dugtrio": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Earthquake", "Stone Edge", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Arena Trap"],
+ "teraTypes": ["Dark", "Fairy", "Flying", "Ghost", "Ground"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Earthquake", "Stone Edge", "Sucker Punch", "Throat Chop"],
+ "abilities": ["Arena Trap"],
+ "teraTypes": ["Dark", "Fairy", "Flying", "Ghost", "Ground"]
+ }
+ ]
+ },
+ "dugtrioalola": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earthquake", "Iron Head", "Stealth Rock", "Stone Edge", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Sand Force", "Tangling Hair"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "persian": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Double-Edge", "Gunk Shot", "Knock Off", "Switcheroo", "U-turn"],
+ "abilities": ["Limber"],
+ "teraTypes": ["Normal", "Poison"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Double-Edge", "Fake Out", "Knock Off", "U-turn"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "persianalola": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Dark Pulse", "Hypnosis", "Nasty Plot", "Power Gem", "Thunderbolt"],
+ "abilities": ["Fur Coat"],
+ "teraTypes": ["Dark", "Electric"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Dark Pulse", "Nasty Plot", "Tera Blast", "Thunderbolt"],
+ "abilities": ["Fur Coat"],
+ "teraTypes": ["Fairy", "Poison"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Knock Off", "Parting Shot", "Taunt", "Thunder Wave"],
+ "abilities": ["Fur Coat"],
+ "teraTypes": ["Fairy", "Ghost", "Poison"]
+ }
+ ]
+ },
+ "golduck": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Encore", "Grass Knot", "Hydro Pump", "Ice Beam", "Nasty Plot"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Flip Turn", "Grass Knot", "Hydro Pump", "Ice Beam", "Nasty Plot"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "annihilape": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Gunk Shot", "Rage Fist", "Rest", "Taunt"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Fairy", "Ghost", "Steel", "Water"]
+ }
+ ]
+ },
+ "arcanine": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Morning Sun", "Roar", "Will-O-Wisp"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fighting", "Normal"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Morning Sun", "Wild Charge"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fighting", "Normal"]
+ }
+ ]
+ },
+ "arcaninehisui": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Head Smash", "Wild Charge"],
+ "abilities": ["Rock Head"],
+ "teraTypes": ["Fire", "Normal", "Rock"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Extreme Speed", "Flare Blitz", "Head Smash", "Morning Sun"],
+ "abilities": ["Rock Head"],
+ "teraTypes": ["Fire", "Grass", "Normal", "Rock"]
+ }
+ ]
+ },
+ "poliwrath": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Knock Off", "Liquidation", "Rain Dance"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Dark", "Fighting", "Water"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Circle Throw", "Close Combat", "Knock Off", "Liquidation"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Dark", "Fighting", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Ice Punch", "Knock Off", "Liquidation", "Poison Jab"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Fighting", "Steel", "Water"]
+ }
+ ]
+ },
+ "victreebel": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Poison Jab", "Power Whip", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Dark", "Grass"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Knock Off", "Power Whip", "Sleep Powder", "Sludge Wave", "Strength Sap", "Sucker Punch"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Grass", "Steel"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Power Whip", "Sludge Wave", "Sunny Day", "Weather Ball"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "tentacruel": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Flip Turn", "Haze", "Knock Off", "Rapid Spin", "Sludge Bomb", "Surf", "Toxic", "Toxic Spikes"],
+ "abilities": ["Liquid Ooze"],
+ "teraTypes": ["Flying", "Grass"]
+ }
+ ]
+ },
+ "golem": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Explosion", "Rock Polish", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Grass", "Ground", "Steel"]
+ }
+ ]
+ },
+ "golemalola": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Double-Edge", "Earthquake", "Rock Polish", "Stone Edge"],
+ "abilities": ["Galvanize"],
+ "teraTypes": ["Flying", "Grass"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Double-Edge", "Earthquake", "Explosion", "Stone Edge"],
+ "abilities": ["Galvanize"],
+ "teraTypes": ["Electric", "Grass", "Ground"]
+ }
+ ]
+ },
+ "slowbro": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "Psychic Noise", "Psyshock", "Scald", "Slack Off", "Thunder Wave"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fairy", "Water"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Body Press", "Fire Blast", "Future Sight", "Ice Beam", "Psychic Noise", "Scald"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fairy", "Fighting"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Scald", "Slack Off"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "slowbrogalar": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Earthquake", "Fire Blast", "Foul Play", "Psychic", "Shell Side Arm", "Surf"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Ground", "Poison", "Water"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Fire Blast", "Psychic", "Shell Side Arm", "Trick Room"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Poison", "Psychic"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Fire Blast", "Psychic", "Shell Side Arm", "Slack Off", "Thunder Wave"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Ground", "Poison"]
+ }
+ ]
+ },
+ "dodrio": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Brave Bird", "Double-Edge", "Drill Run", "Knock Off", "Swords Dance"],
+ "abilities": ["Early Bird"],
+ "teraTypes": ["Flying", "Ground", "Normal"]
+ }
+ ]
+ },
+ "dewgong": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Flip Turn", "Knock Off", "Surf", "Triple Axel"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Dragon", "Grass", "Ground", "Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Flip Turn", "Hydro Pump", "Ice Beam", "Knock Off", "Surf"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Dragon", "Grass", "Ground", "Poison", "Steel"]
+ }
+ ]
+ },
+ "muk": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Drain Punch", "Gunk Shot", "Haze", "Ice Punch", "Knock Off", "Poison Jab", "Shadow Sneak", "Toxic Spikes"],
+ "abilities": ["Poison Touch"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Drain Punch", "Gunk Shot", "Ice Punch", "Knock Off", "Poison Jab", "Shadow Sneak"],
+ "abilities": ["Poison Touch"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "mukalola": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Drain Punch", "Gunk Shot", "Ice Punch", "Knock Off", "Poison Jab", "Shadow Sneak"],
+ "abilities": ["Poison Touch"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "cloyster": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Drill Run", "Icicle Spear", "Rock Blast", "Shell Smash"],
+ "abilities": ["Skill Link"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Hydro Pump", "Icicle Spear", "Rock Blast", "Shell Smash"],
+ "abilities": ["Skill Link"],
+ "teraTypes": ["Ice", "Rock"]
+ }
+ ]
+ },
+ "gengar": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Focus Blast", "Nasty Plot", "Shadow Ball", "Sludge Wave", "Trick"],
+ "abilities": ["Cursed Body"],
+ "teraTypes": ["Dark", "Fighting", "Ghost"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Encore", "Focus Blast", "Shadow Ball", "Sludge Wave", "Toxic Spikes", "Will-O-Wisp"],
+ "abilities": ["Cursed Body"],
+ "teraTypes": ["Dark", "Fighting", "Ghost"]
+ }
+ ]
+ },
+ "hypno": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Knock Off", "Psychic Noise", "Thunder Wave", "Toxic"],
+ "abilities": ["Insomnia"],
+ "teraTypes": ["Dark", "Fairy", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Focus Blast", "Protect", "Psychic Noise", "Toxic"],
+ "abilities": ["Insomnia"],
+ "teraTypes": ["Dark", "Fighting", "Steel"]
+ }
+ ]
+ },
+ "electrode": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Explosion", "Foul Play", "Taunt", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Aftermath", "Soundproof", "Static"],
+ "teraTypes": ["Dark", "Electric"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Taunt", "Tera Blast", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Aftermath", "Soundproof", "Static"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "electrodehisui": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Giga Drain", "Leaf Storm", "Taunt", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Aftermath", "Soundproof", "Static"],
+ "teraTypes": ["Electric", "Grass"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Giga Drain", "Leech Seed", "Substitute", "Thunderbolt"],
+ "abilities": ["Soundproof"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "exeggutor": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Leech Seed", "Psychic", "Psychic Noise", "Sleep Powder", "Sludge Bomb", "Substitute"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Leech Seed", "Protect", "Psychic Noise", "Substitute"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Giga Drain", "Psychic", "Psyshock", "Substitute"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "exeggutoralola": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Draco Meteor", "Flamethrower", "Giga Drain", "Leaf Storm"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Fire"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Draco Meteor", "Dragon Tail", "Flamethrower", "Knock Off", "Moonlight", "Sleep Powder", "Stun Spore", "Wood Hammer"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Fire"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Dragon Pulse", "Flamethrower", "Giga Drain"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Fire", "Steel"]
+ }
+ ]
+ },
+ "hitmonlee": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["High Jump Kick", "Knock Off", "Mach Punch", "Poison Jab", "Stone Edge"],
+ "abilities": ["Reckless"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Knock Off", "Poison Jab", "Stone Edge", "Swords Dance"],
+ "abilities": ["Unburden"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ }
+ ]
+ },
+ "hitmonchan": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Drain Punch", "Ice Punch", "Knock Off", "Mach Punch", "Rapid Spin", "Swords Dance"],
+ "abilities": ["Inner Focus", "Iron Fist"],
+ "teraTypes": ["Dark", "Fighting"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Knock Off", "Poison Jab", "Rapid Spin"],
+ "abilities": ["Iron Fist"],
+ "teraTypes": ["Dark", "Poison", "Steel"]
+ }
+ ]
+ },
+ "weezing": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Fire Blast", "Gunk Shot", "Pain Split", "Sludge Bomb", "Toxic Spikes", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "weezinggalar": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Defog", "Fire Blast", "Gunk Shot", "Pain Split", "Strange Steam", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "rhydon": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Megahorn", "Stealth Rock", "Stone Edge", "Swords Dance"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Dragon", "Fairy", "Flying", "Grass", "Water"]
+ }
+ ]
+ },
+ "scyther": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bug Bite", "Close Combat", "Dual Wingbeat", "Swords Dance"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Close Combat", "Defog", "Dual Wingbeat", "U-turn"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "tauros": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Body Slam", "Close Combat", "Earthquake", "Throat Chop"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Fighting", "Ground", "Normal"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Body Slam", "Close Combat", "Throat Chop", "Zen Headbutt"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Fighting", "Normal", "Psychic"]
+ }
+ ]
+ },
+ "taurospaldeacombat": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Iron Head", "Stone Edge", "Throat Chop"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Fighting", "Steel"]
+ }
+ ]
+ },
+ "taurospaldeablaze": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Bulk Up", "Close Combat", "Raging Bull", "Substitute"],
+ "abilities": ["Cud Chew"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Flare Blitz", "Stone Edge", "Wild Charge"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "taurospaldeaaqua": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Bulk Up", "Close Combat", "Liquidation", "Substitute"],
+ "abilities": ["Cud Chew"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Aqua Jet", "Close Combat", "Stone Edge", "Wave Crash"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Aqua Jet", "Bulk Up", "Close Combat", "Liquidation"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "gyarados": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Stone Edge", "Temper Flare", "Waterfall"],
+ "abilities": ["Intimidate", "Moxie"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Dragon Dance", "Earthquake", "Tera Blast", "Waterfall"],
+ "abilities": ["Intimidate", "Moxie"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "lapras": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Freeze-Dry", "Hydro Pump", "Ice Beam", "Sparkling Aria"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Ice", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Freeze-Dry", "Rest", "Sleep Talk", "Sparkling Aria"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Dragon", "Ghost", "Ground", "Poison", "Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Icicle Spear", "Waterfall"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "ditto": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Transform"],
+ "abilities": ["Imposter"],
+ "teraTypes": ["Bug", "Dark", "Dragon", "Electric", "Fairy", "Fighting", "Fire", "Flying", "Ghost", "Grass", "Ground", "Ice", "Normal", "Poison", "Psychic", "Rock", "Steel", "Water"]
+ }
+ ]
+ },
+ "vaporeon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Flip Turn", "Ice Beam", "Protect", "Scald", "Wish"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Ghost", "Ground", "Poison"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Protect", "Scald", "Wish"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Ghost", "Ground", "Poison"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Haze", "Protect", "Roar", "Scald", "Wish"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Ghost", "Ground", "Poison"]
+ }
+ ]
+ },
+ "jolteon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Alluring Voice", "Calm Mind", "Shadow Ball", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Electric", "Fairy"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Calm Mind", "Substitute", "Tera Blast", "Thunderbolt"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "flareon": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Facade", "Flare Blitz", "Quick Attack", "Trailblaze", "Will-O-Wisp"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "snorlax": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Slam", "Curse", "Rest", "Sleep Talk"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fairy", "Poison"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Slam", "Crunch", "Curse", "Earthquake", "Rest"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Ground", "Poison"]
+ }
+ ]
+ },
+ "articuno": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Brave Bird", "Freeze-Dry", "Haze", "Roost", "Substitute", "U-turn"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "articunogalar": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Calm Mind", "Freezing Glare", "Hurricane", "Recover"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "zapdos": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Discharge", "Heat Wave", "Hurricane", "Roost", "Thunderbolt", "U-turn"],
+ "abilities": ["Static"],
+ "teraTypes": ["Electric", "Steel"]
+ }
+ ]
+ },
+ "zapdosgalar": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Brave Bird", "Bulk Up", "Close Combat", "Knock Off", "U-turn"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Dark", "Fighting", "Steel"]
+ }
+ ]
+ },
+ "moltres": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Brave Bird", "Fire Blast", "Roost", "Scorching Sands", "U-turn", "Will-O-Wisp"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Dragon", "Ground", "Steel"]
+ }
+ ]
+ },
+ "moltresgalar": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Agility", "Fiery Wrath", "Hurricane", "Nasty Plot", "Rest"],
+ "abilities": ["Berserk"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "dragonite": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Dragon Dance", "Earthquake", "Outrage", "Roost"],
+ "abilities": ["Multiscale"],
+ "teraTypes": ["Ground", "Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Iron Head", "Outrage"],
+ "abilities": ["Multiscale"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Dragon Dance", "Earthquake", "Outrage", "Tera Blast"],
+ "abilities": ["Multiscale"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "mewtwo": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Aura Sphere", "Dark Pulse", "Fire Blast", "Nasty Plot", "Psystrike", "Recover"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Dark", "Fighting", "Fire", "Psychic"]
+ }
+ ]
+ },
+ "mew": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Knock Off", "Psychic", "Psychic Noise", "Stealth Rock", "Toxic Spikes", "U-turn", "Will-O-Wisp"],
+ "abilities": ["Synchronize"],
+ "teraTypes": ["Dark", "Fairy", "Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Knock Off", "Leech Life", "Psychic Fangs", "Swords Dance"],
+ "abilities": ["Synchronize"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Aura Sphere", "Bug Buzz", "Dark Pulse", "Earth Power", "Fire Blast", "Hydro Pump", "Nasty Plot", "Psychic", "Psyshock"],
+ "abilities": ["Synchronize"],
+ "teraTypes": ["Dark", "Fighting", "Fire", "Ground", "Psychic", "Water"]
+ }
+ ]
+ },
+ "meganium": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dragon Tail", "Encore", "Energy Ball", "Knock Off", "Leech Seed", "Synthesis"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Poison", "Steel", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earthquake", "Knock Off", "Petal Blizzard", "Swords Dance"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Ground", "Steel", "Water"]
+ }
+ ]
+ },
+ "typhlosion": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Eruption", "Fire Blast", "Focus Blast", "Scorching Sands"],
+ "abilities": ["Blaze", "Flash Fire"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "typhlosionhisui": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Calm Mind", "Fire Blast", "Focus Blast", "Shadow Ball", "Substitute", "Will-O-Wisp"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Fighting", "Fire", "Ghost"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Eruption", "Fire Blast", "Focus Blast", "Shadow Ball"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "feraligatr": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Crunch", "Dragon Dance", "Ice Punch", "Liquidation"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Dark", "Dragon", "Steel", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Ice Punch", "Liquidation", "Trailblaze"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "furret": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Double-Edge", "Knock Off", "Trick", "U-turn"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Ghost", "Normal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Brick Break", "Double-Edge", "Knock Off", "Tidy Up"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Ghost", "Normal"]
+ }
+ ]
+ },
+ "noctowl": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "Defog", "Hurricane", "Hyper Voice", "Nasty Plot", "Roost"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Ground", "Normal", "Steel"]
+ }
+ ]
+ },
+ "ariados": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Knock Off", "Megahorn", "Poison Jab", "Sticky Web", "Sucker Punch", "Toxic Spikes"],
+ "abilities": ["Insomnia", "Swarm"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "lanturn": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Scald", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Ice Beam", "Scald", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying", "Water"]
+ }
+ ]
+ },
+ "ampharos": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Agility", "Dazzling Gleam", "Focus Blast", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Static"],
+ "teraTypes": ["Electric", "Fairy"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Dazzling Gleam", "Discharge", "Dragon Tail", "Focus Blast", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Static"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "bellossom": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Giga Drain", "Quiver Dance", "Sleep Powder", "Strength Sap"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Poison", "Steel", "Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Giga Drain", "Moonblast", "Quiver Dance", "Sludge Bomb", "Strength Sap"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fairy", "Poison"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Giga Drain", "Quiver Dance", "Strength Sap", "Tera Blast"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire", "Rock"]
+ }
+ ]
+ },
+ "azumarill": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Aqua Jet", "Belly Drum", "Ice Spinner", "Knock Off", "Liquidation", "Play Rough", "Superpower"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "sudowoodo": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Head Smash", "Stealth Rock", "Sucker Punch", "Wood Hammer"],
+ "abilities": ["Rock Head"],
+ "teraTypes": ["Grass", "Rock"]
+ }
+ ]
+ },
+ "politoed": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Haze", "Hydro Pump", "Hypnosis", "Ice Beam", "Rest", "Surf"],
+ "abilities": ["Drizzle"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Focus Blast", "Hydro Pump", "Ice Beam", "Weather Ball"],
+ "abilities": ["Drizzle"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "jumpluff": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Acrobatics", "Leech Seed", "Strength Sap", "Substitute"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Acrobatics", "Encore", "Sleep Powder", "Strength Sap", "U-turn"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "sunflora": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Dazzling Gleam", "Earth Power", "Leaf Storm", "Sludge Bomb"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fairy", "Grass", "Ground", "Poison"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earth Power", "Solar Beam", "Sunny Day", "Weather Ball"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "quagsire": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Ice Beam", "Recover", "Spikes", "Toxic"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Fairy", "Poison", "Steel"]
+ }
+ ]
+ },
+ "clodsire": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Gunk Shot", "Poison Jab", "Recover", "Spikes", "Toxic"],
+ "abilities": ["Unaware", "Water Absorb"],
+ "teraTypes": ["Flying", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Curse", "Earthquake", "Gunk Shot", "Poison Jab", "Recover", "Stealth Rock", "Toxic Spikes"],
+ "abilities": ["Unaware", "Water Absorb"],
+ "teraTypes": ["Flying", "Steel"]
+ }
+ ]
+ },
+ "espeon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Alluring Voice", "Calm Mind", "Morning Sun", "Psychic", "Psyshock", "Shadow Ball", "Trick"],
+ "abilities": ["Magic Bounce"],
+ "teraTypes": ["Fairy", "Psychic"]
+ }
+ ]
+ },
+ "umbreon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Foul Play", "Protect", "Toxic", "Wish"],
+ "abilities": ["Synchronize"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "slowking": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Chilly Reception", "Psychic Noise", "Psyshock", "Scald", "Slack Off", "Thunder Wave"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dragon", "Fairy"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Chilly Reception", "Future Sight", "Scald", "Slack Off"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dragon", "Fairy"]
+ }
+ ]
+ },
+ "slowkinggalar": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Chilly Reception", "Fire Blast", "Psychic Noise", "Psyshock", "Slack Off", "Sludge Bomb", "Thunder Wave", "Toxic Spikes"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Poison"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Fire Blast", "Future Sight", "Psychic Noise", "Sludge Bomb", "Surf"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Poison", "Psychic", "Water"]
+ }
+ ]
+ },
+ "misdreavus": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Draining Kiss", "Shadow Ball", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "girafarig": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Dazzling Gleam", "Nasty Plot", "Psychic", "Psyshock", "Shadow Ball", "Thunderbolt"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Electric", "Fairy", "Psychic"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Hyper Voice", "Nasty Plot", "Psyshock", "Thunderbolt"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Electric", "Normal"]
+ }
+ ]
+ },
+ "forretress": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Iron Head", "Rapid Spin", "Stealth Rock", "Toxic Spikes", "Volt Switch"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Iron Head", "Rapid Spin", "Spikes", "Stealth Rock"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Fighting", "Water"]
+ }
+ ]
+ },
+ "dunsparce": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Slam", "Coil", "Earthquake", "Roost"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Ghost", "Ground"]
+ }
+ ]
+ },
+ "granbull": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Encore", "Play Rough", "Thunder Wave"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Play Rough", "Roar", "Thunder Wave"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "qwilfish": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Destiny Bond", "Gunk Shot", "Spikes", "Taunt", "Thunder Wave", "Toxic Spikes", "Waterfall"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Grass"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Flip Turn", "Gunk Shot", "Pain Split", "Thunder Wave", "Toxic", "Toxic Spikes"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Grass"]
+ }
+ ]
+ },
+ "qwilfishhisui": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Crunch", "Gunk Shot", "Spikes", "Taunt", "Toxic Spikes"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Flying", "Poison"]
+ }
+ ]
+ },
+ "overqwil": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Aqua Jet", "Crunch", "Gunk Shot", "Liquidation", "Swords Dance"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Crunch", "Gunk Shot", "Scale Shot", "Swords Dance"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "scizor": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Bullet Punch", "Close Combat", "Defog", "Knock Off", "U-turn"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Dragon", "Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bug Bite", "Bullet Punch", "Close Combat", "Knock Off", "Swords Dance"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Bullet Punch", "Close Combat", "Knock Off", "U-turn"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "heracross": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Facade", "Knock Off", "Trailblaze"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Earthquake", "Knock Off", "Megahorn", "Stone Edge"],
+ "abilities": ["Moxie"],
+ "teraTypes": ["Bug", "Fighting", "Rock"]
+ }
+ ]
+ },
+ "ursaring": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Slam", "Earthquake", "Rest", "Sleep Talk", "Throat Chop"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Ghost", "Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Crunch", "Facade", "Swords Dance", "Throat Chop"],
+ "abilities": ["Quick Feet"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "magcargo": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earth Power", "Fire Blast", "Power Gem", "Shell Smash"],
+ "abilities": ["Weak Armor"],
+ "teraTypes": ["Dragon", "Grass"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Lava Plume", "Power Gem", "Recover", "Stealth Rock", "Yawn"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Dragon", "Grass"]
+ }
+ ]
+ },
+ "piloswine": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Roar", "Stealth Rock"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Dragon", "Poison"]
+ }
+ ]
+ },
+ "delibird": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Brave Bird", "Drill Run", "Ice Shard", "Ice Spinner", "Spikes"],
+ "abilities": ["Hustle"],
+ "teraTypes": ["Flying", "Ground", "Ice"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Brave Bird", "Freeze-Dry", "Rapid Spin", "Spikes"],
+ "abilities": ["Insomnia", "Vital Spirit"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "skarmory": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Brave Bird", "Iron Defense", "Roost"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Brave Bird", "Roost", "Spikes", "Stealth Rock"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Dragon", "Fighting"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Brave Bird", "Roost", "Spikes", "Stealth Rock", "Whirlwind"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "houndoom": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dark Pulse", "Fire Blast", "Nasty Plot", "Sludge Bomb", "Sucker Punch"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Dark", "Fire", "Poison"]
+ }
+ ]
+ },
+ "kingdra": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Draco Meteor", "Hurricane", "Rain Dance", "Wave Crash"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Outrage", "Waterfall", "Wave Crash"],
+ "abilities": ["Sniper", "Swift Swim"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Dragon Dance", "Iron Head", "Outrage", "Wave Crash"],
+ "abilities": ["Sniper", "Swift Swim"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "donphan": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Ice Shard", "Ice Spinner", "Knock Off", "Rapid Spin", "Stealth Rock"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Dragon", "Steel", "Water"]
+ }
+ ]
+ },
+ "porygon2": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Discharge", "Ice Beam", "Recover", "Tri Attack"],
+ "abilities": ["Download"],
+ "teraTypes": ["Electric", "Ghost", "Poison"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Recover", "Shadow Ball", "Tera Blast", "Thunder Wave"],
+ "abilities": ["Download"],
+ "teraTypes": ["Fairy", "Fighting"]
+ }
+ ]
+ },
+ "smeargle": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Ceaseless Edge", "Spore", "Stealth Rock", "Sticky Web", "Whirlwind"],
+ "abilities": ["Own Tempo"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Population Bomb", "Power Trip", "Shell Smash", "Spore"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Ghost", "Normal"]
+ }
+ ]
+ },
+ "hitmontop": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Close Combat", "Earthquake", "Rapid Spin", "Stone Edge", "Sucker Punch"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Close Combat", "Rapid Spin", "Triple Axel"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "chansey": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Heal Bell", "Seismic Toss", "Soft-Boiled", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Fairy", "Ghost", "Poison", "Steel"]
+ }
+ ]
+ },
+ "blissey": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Heal Bell", "Seismic Toss", "Soft-Boiled", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Fairy", "Ghost", "Poison", "Steel"]
+ }
+ ]
+ },
+ "raikou": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Scald", "Substitute", "Thunderbolt"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "Scald", "Shadow Ball", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Electric", "Water"]
+ }
+ ]
+ },
+ "entei": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Extreme Speed", "Flare Blitz", "Sacred Fire", "Stomping Tantrum"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Fire", "Normal"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Extreme Speed", "Flare Blitz", "Sacred Fire", "Stone Edge"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Fire", "Normal"]
+ }
+ ]
+ },
+ "suicune": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "Rest", "Scald", "Sleep Talk"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Ice Beam", "Scald", "Substitute"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Steel"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Calm Mind", "Protect", "Scald", "Substitute"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "tyranitar": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Dragon Dance", "Earthquake", "Ice Punch", "Knock Off", "Stone Edge"],
+ "abilities": ["Sand Stream"],
+ "teraTypes": ["Ghost", "Rock"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Dragon Tail", "Earthquake", "Ice Beam", "Knock Off", "Stealth Rock", "Stone Edge", "Thunder Wave"],
+ "abilities": ["Sand Stream"],
+ "teraTypes": ["Ghost", "Rock"]
+ }
+ ]
+ },
+ "lugia": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Aeroblast", "Calm Mind", "Earth Power", "Recover"],
+ "abilities": ["Multiscale"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "hooh": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Brave Bird", "Earthquake", "Recover", "Sacred Fire"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "sceptile": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earthquake", "Focus Blast", "Giga Drain", "Leaf Storm", "Rock Slide", "Shed Tail"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Grass", "Ground", "Steel"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Focus Blast", "Giga Drain", "Leech Seed", "Substitute"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earthquake", "Leaf Blade", "Rock Slide", "Swords Dance"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Rock"]
+ }
+ ]
+ },
+ "blaziken": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Flare Blitz", "Knock Off", "Protect", "Stone Edge", "Swords Dance"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Dark", "Fighting"]
+ }
+ ]
+ },
+ "swampert": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Flip Turn", "Ice Beam", "Knock Off", "Roar", "Stealth Rock", "Yawn"],
+ "abilities": ["Damp", "Torrent"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "mightyena": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Crunch", "Play Rough", "Poison Fang", "Sucker Punch", "Taunt", "Throat Chop"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fairy", "Poison"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Crunch", "Play Rough", "Poison Fang", "Sucker Punch", "Super Fang", "Throat Chop"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fairy", "Poison"]
+ }
+ ]
+ },
+ "ludicolo": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Giga Drain", "Hydro Pump", "Ice Beam", "Rain Dance"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Grass", "Steel", "Water"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Giga Drain", "Hydro Pump", "Ice Beam", "Leaf Storm"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "shiftry": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Defog", "Knock Off", "Leaf Storm", "Sucker Punch", "Will-O-Wisp"],
+ "abilities": ["Wind Rider"],
+ "teraTypes": ["Dark", "Poison"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Knock Off", "Leaf Blade", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Wind Rider"],
+ "teraTypes": ["Dark", "Poison"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Knock Off", "Leaf Blade", "Low Kick", "Tailwind"],
+ "abilities": ["Wind Rider"],
+ "teraTypes": ["Dark", "Fighting"]
+ }
+ ]
+ },
+ "pelipper": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Hurricane", "Hydro Pump", "Knock Off", "Roost", "Surf", "U-turn"],
+ "abilities": ["Drizzle"],
+ "teraTypes": ["Ground", "Water"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Hurricane", "Hydro Pump", "U-turn", "Weather Ball"],
+ "abilities": ["Drizzle"],
+ "teraTypes": ["Flying", "Water"]
+ }
+ ]
+ },
+ "gardevoir": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Calm Mind", "Focus Blast", "Healing Wish", "Moonblast", "Mystical Fire", "Psychic", "Psyshock", "Trick"],
+ "abilities": ["Trace"],
+ "teraTypes": ["Fairy", "Fighting", "Fire"]
+ }
+ ]
+ },
+ "masquerain": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bug Buzz", "Hurricane", "Hydro Pump", "Quiver Dance"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Bug Buzz", "Hurricane", "Hydro Pump", "Sticky Web", "Stun Spore", "U-turn"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Ground", "Steel", "Water"]
+ }
+ ]
+ },
+ "breloom": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Bullet Seed", "Mach Punch", "Rock Tomb", "Spore", "Swords Dance"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Fighting", "Rock"]
+ }
+ ]
+ },
+ "vigoroth": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Slam", "Bulk Up", "Knock Off", "Slack Off"],
+ "abilities": ["Vital Spirit"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Slam", "Bulk Up", "Earthquake", "Slack Off"],
+ "abilities": ["Vital Spirit"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "slaking": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Double-Edge", "Earthquake", "Giga Impact", "Knock Off"],
+ "abilities": ["Truant"],
+ "teraTypes": ["Ghost", "Ground", "Normal"]
+ }
+ ]
+ },
+ "hariyama": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Bullet Punch", "Close Combat", "Facade", "Fake Out", "Headlong Rush", "Knock Off"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Bullet Punch", "Close Combat", "Headlong Rush", "Heavy Slam", "Knock Off", "Stone Edge"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "sableye": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Knock Off", "Recover", "Thunder Wave", "Will-O-Wisp"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "medicham": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Bullet Punch", "Close Combat", "Ice Punch", "Poison Jab", "Zen Headbutt"],
+ "abilities": ["Pure Power"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "plusle": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Alluring Voice", "Encore", "Grass Knot", "Nasty Plot", "Thunderbolt"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Electric", "Fairy", "Grass"]
+ }
+ ]
+ },
+ "minun": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Alluring Voice", "Encore", "Grass Knot", "Nasty Plot", "Thunderbolt"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Electric", "Fairy", "Grass"]
+ }
+ ]
+ },
+ "volbeat": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Roost", "Thunder Wave", "U-turn"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Lunge", "Roost", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "illumise": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Bug Buzz", "Encore", "Roost", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "swalot": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Clear Smog", "Earthquake", "Encore", "Ice Beam", "Knock Off", "Pain Split", "Sludge Bomb", "Toxic Spikes"],
+ "abilities": ["Liquid Ooze"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Protect", "Sludge Bomb", "Toxic"],
+ "abilities": ["Liquid Ooze"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Earthquake", "Gunk Shot", "Knock Off", "Swords Dance"],
+ "abilities": ["Liquid Ooze"],
+ "teraTypes": ["Dark", "Ground"]
+ }
+ ]
+ },
+ "camerupt": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Overheat", "Roar", "Stealth Rock", "Will-O-Wisp"],
+ "abilities": ["Solid Rock"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "torkoal": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Earthquake", "Lava Plume", "Rapid Spin", "Solar Beam", "Stealth Rock", "Yawn"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Grass"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Lava Plume", "Rapid Spin", "Solar Beam", "Stealth Rock", "Yawn"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Dragon", "Grass"]
+ }
+ ]
+ },
+ "grumpig": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Dazzling Gleam", "Earth Power", "Nasty Plot", "Psychic", "Psyshock", "Shadow Ball"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fairy", "Ghost", "Ground", "Psychic"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earth Power", "Focus Blast", "Psychic", "Psyshock", "Shadow Ball", "Trick"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fighting", "Ghost", "Ground", "Psychic"]
+ }
+ ]
+ },
+ "flygon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dragon Dance", "Earthquake", "Outrage", "Stone Edge", "U-turn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Ground", "Rock", "Steel"]
+ }
+ ]
+ },
+ "cacturne": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Focus Blast", "Knock Off", "Leaf Storm", "Spikes", "Sucker Punch", "Toxic Spikes"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Dark", "Grass", "Poison"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Drain Punch", "Knock Off", "Seed Bomb", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Dark", "Poison"]
+ }
+ ]
+ },
+ "altaria": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Brave Bird", "Defog", "Earthquake", "Haze", "Roost", "Will-O-Wisp"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Brave Bird", "Dragon Dance", "Earthquake", "Roost"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "zangoose": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Facade", "Knock Off", "Quick Attack", "Swords Dance"],
+ "abilities": ["Toxic Boost"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "seviper": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earthquake", "Flamethrower", "Giga Drain", "Glare", "Gunk Shot", "Knock Off", "Switcheroo"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Dark", "Fire", "Grass", "Ground", "Poison"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earthquake", "Gunk Shot", "Swords Dance", "Trailblaze"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Grass", "Ground"]
+ }
+ ]
+ },
+ "whiscash": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Hydro Pump", "Ice Beam", "Spikes", "Stealth Rock"],
+ "abilities": ["Oblivious"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Liquidation", "Stone Edge"],
+ "abilities": ["Oblivious"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "crawdaunt": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Aqua Jet", "Close Combat", "Crabhammer", "Dragon Dance", "Knock Off"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Aqua Jet", "Crabhammer", "Dragon Dance", "Knock Off"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "milotic": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dragon Tail", "Flip Turn", "Haze", "Ice Beam", "Recover", "Scald"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Dragon", "Steel"]
+ }
+ ]
+ },
+ "banette": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Gunk Shot", "Poltergeist", "Shadow Sneak", "Swords Dance", "Thunder Wave"],
+ "abilities": ["Cursed Body", "Frisk"],
+ "teraTypes": ["Ghost", "Poison"]
+ }
+ ]
+ },
+ "tropius": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Air Slash", "Leech Seed", "Protect", "Substitute"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Dual Wingbeat", "Earthquake", "Leaf Blade", "Synthesis"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "chimecho": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Heal Bell", "Knock Off", "Psychic Noise", "Recover", "Thunder Wave"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dark", "Electric", "Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Dazzling Gleam", "Psychic Noise", "Psyshock", "Recover"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Fairy", "Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Cosmic Power", "Dazzling Gleam", "Recover", "Stored Power"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "glalie": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Disable", "Earthquake", "Freeze-Dry", "Spikes", "Taunt"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Ghost", "Ground", "Water"]
+ }
+ ]
+ },
+ "luvdisc": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Endeavor", "Substitute", "Surf", "Whirlpool"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Ghost", "Ground"]
+ }
+ ]
+ },
+ "salamence": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Dual Wingbeat", "Earthquake", "Outrage", "Roost"],
+ "abilities": ["Intimidate", "Moxie"],
+ "teraTypes": ["Dragon", "Ground", "Steel"]
+ }
+ ]
+ },
+ "metagross": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Agility", "Earthquake", "Heavy Slam", "Knock Off", "Psychic Fangs"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Bullet Punch", "Earthquake", "Heavy Slam", "Knock Off", "Psychic Fangs", "Stealth Rock"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "regirock": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Iron Defense", "Stealth Rock", "Stone Edge", "Thunder Wave"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Curse", "Iron Defense", "Rest", "Stone Edge"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "regice": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Ice Beam", "Rest", "Sleep Talk", "Thunder Wave", "Thunderbolt"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "registeel": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Iron Head", "Rest"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Press", "Iron Defense", "Iron Head", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "latias": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Calm Mind", "Draco Meteor", "Psyshock", "Recover"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "latios": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Draco Meteor", "Psyshock", "Recover"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Aura Sphere", "Calm Mind", "Draco Meteor", "Flip Turn", "Luster Purge"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dragon", "Psychic", "Steel"]
+ }
+ ]
+ },
+ "kyogre": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Ice Beam", "Origin Pulse", "Thunder", "Water Spout"],
+ "abilities": ["Drizzle"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Ice Beam", "Origin Pulse", "Thunder"],
+ "abilities": ["Drizzle"],
+ "teraTypes": ["Dragon", "Electric", "Steel"]
+ }
+ ]
+ },
+ "groudon": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Heat Crash", "Precipice Blades", "Roar", "Spikes", "Stealth Rock", "Stone Edge", "Thunder Wave", "Will-O-Wisp"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Fire"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Heat Crash", "Precipice Blades", "Stone Edge", "Swords Dance", "Thunder Wave"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "rayquaza": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Ascent", "Dragon Dance", "Earthquake", "Outrage"],
+ "abilities": ["Air Lock"],
+ "teraTypes": ["Flying", "Steel"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dragon Ascent", "Earthquake", "Extreme Speed", "Swords Dance", "U-turn"],
+ "abilities": ["Air Lock"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Dragon Ascent", "Earthquake", "Scale Shot", "Swords Dance"],
+ "abilities": ["Air Lock"],
+ "teraTypes": ["Dragon", "Flying", "Steel"]
+ }
+ ]
+ },
+ "jirachi": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Body Slam", "Iron Head", "Protect", "Wish"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Slam", "Drain Punch", "Iron Head", "Stealth Rock", "U-turn"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Fighting", "Water"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Healing Wish", "Iron Head", "Protect", "Psychic", "U-turn", "Wish"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "deoxys": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Extreme Speed", "Knock Off", "Psycho Boost", "Superpower"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Fighting", "Normal", "Psychic"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Ice Beam", "Knock Off", "Psycho Boost", "Superpower"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Fighting", "Psychic"]
+ }
+ ]
+ },
+ "deoxysattack": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Extreme Speed", "Knock Off", "Psycho Boost", "Superpower"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Fighting", "Normal", "Psychic"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Ice Beam", "Knock Off", "Psycho Boost", "Superpower"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Fighting", "Psychic"]
+ }
+ ]
+ },
+ "deoxysdefense": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Cosmic Power", "Night Shade", "Recover", "Stored Power"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Knock Off", "Psychic Noise", "Recover", "Spikes", "Stealth Rock", "Teleport"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dark", "Fairy", "Steel"]
+ }
+ ]
+ },
+ "deoxysspeed": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Knock Off", "Psycho Boost", "Spikes", "Stealth Rock", "Superpower", "Taunt"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dark", "Fighting", "Ghost", "Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dark Pulse", "Focus Blast", "Nasty Plot", "Psycho Boost"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dark", "Fighting", "Psychic"]
+ }
+ ]
+ },
+ "torterra": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bullet Seed", "Headlong Rush", "Rock Blast", "Shell Smash"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Grass", "Ground", "Rock", "Water"]
+ }
+ ]
+ },
+ "infernape": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Grass Knot", "Gunk Shot", "Knock Off", "Mach Punch", "Overheat", "Stone Edge"],
+ "abilities": ["Blaze", "Iron Fist"],
+ "teraTypes": ["Dark", "Fighting", "Fire"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Close Combat", "Flare Blitz", "Gunk Shot", "Knock Off", "Mach Punch", "Stone Edge", "Swords Dance", "U-turn"],
+ "abilities": ["Blaze", "Iron Fist"],
+ "teraTypes": ["Dark", "Fighting", "Fire"]
+ }
+ ]
+ },
+ "empoleon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Flip Turn", "Ice Beam", "Knock Off", "Roar", "Roost", "Stealth Rock", "Surf", "Yawn"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Flying", "Grass"]
+ }
+ ]
+ },
+ "staraptor": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Brave Bird", "Close Combat", "Double-Edge", "Quick Attack", "U-turn"],
+ "abilities": ["Reckless"],
+ "teraTypes": ["Fighting", "Flying"]
+ }
+ ]
+ },
+ "kricketune": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Knock Off", "Pounce", "Sticky Web", "Swords Dance", "Taunt"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "luxray": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Facade", "Play Rough", "Supercell Slam", "Throat Chop", "Trailblaze"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Ice Fang", "Play Rough", "Throat Chop", "Volt Switch", "Wild Charge"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Electric", "Fairy"]
+ }
+ ]
+ },
+ "rampardos": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earthquake", "Fire Punch", "Head Smash", "Rock Slide"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Ground", "Rock"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Earthquake", "Fire Punch", "Rock Slide", "Zen Headbutt"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Psychic", "Rock"]
+ }
+ ]
+ },
+ "bastiodon": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Foul Play", "Iron Defense", "Rest"],
+ "abilities": ["Soundproof"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "vespiquen": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Air Slash", "Hurricane", "Roost", "Spikes", "Toxic", "Toxic Spikes", "U-turn"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "pachirisu": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Nuzzle", "Super Fang", "Thunderbolt", "U-turn"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Discharge", "Encore", "Super Fang", "U-turn"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "floatzel": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Crunch", "Flip Turn", "Ice Spinner", "Wave Crash"],
+ "abilities": ["Water Veil"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Ice Spinner", "Taunt", "Wave Crash"],
+ "abilities": ["Water Veil"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "gastrodon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Clear Smog", "Earthquake", "Ice Beam", "Recover", "Spikes", "Stealth Rock", "Surf"],
+ "abilities": ["Storm Drain"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Recover", "Sludge Bomb", "Stealth Rock", "Surf"],
+ "abilities": ["Storm Drain"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "ambipom": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Double-Edge", "Knock Off", "Low Kick", "Triple Axel", "U-turn"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Ice"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Double-Edge", "Fake Out", "Knock Off", "Low Kick", "U-turn"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "drifblim": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Air Slash", "Calm Mind", "Defog", "Shadow Ball", "Strength Sap"],
+ "abilities": ["Aftermath", "Unburden"],
+ "teraTypes": ["Fairy", "Ghost"]
+ }
+ ]
+ },
+ "mismagius": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Dazzling Gleam", "Energy Ball", "Mystical Fire", "Shadow Ball", "Thunderbolt", "Trick"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Fairy", "Fire", "Ghost"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dazzling Gleam", "Mystical Fire", "Nasty Plot", "Shadow Ball", "Substitute", "Thunderbolt"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Fairy"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Nasty Plot", "Shadow Ball", "Substitute", "Tera Blast"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "honchkrow": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Brave Bird", "Heat Wave", "Sucker Punch", "U-turn"],
+ "abilities": ["Moxie"],
+ "teraTypes": ["Dark", "Flying"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Brave Bird", "Heat Wave", "Lash Out", "Sucker Punch", "Thunder Wave"],
+ "abilities": ["Moxie"],
+ "teraTypes": ["Dark", "Flying"]
+ }
+ ]
+ },
+ "skuntank": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Fire Blast", "Gunk Shot", "Knock Off", "Sucker Punch", "Taunt", "Toxic Spikes"],
+ "abilities": ["Aftermath"],
+ "teraTypes": ["Dark", "Poison"]
+ }
+ ]
+ },
+ "bronzong": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Hypnosis", "Iron Head", "Psychic", "Psychic Noise", "Stealth Rock"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Iron Head", "Psychic Noise", "Rest"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "spiritomb": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Foul Play", "Pain Split", "Poltergeist", "Shadow Sneak", "Sucker Punch", "Toxic", "Will-O-Wisp"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Dark", "Ghost"]
+ }
+ ]
+ },
+ "garchomp": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Dragon Tail", "Earthquake", "Outrage", "Spikes", "Stealth Rock"],
+ "abilities": ["Rough Skin"],
+ "teraTypes": ["Ground", "Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earthquake", "Fire Fang", "Iron Head", "Scale Shot", "Stone Edge", "Swords Dance"],
+ "abilities": ["Rough Skin"],
+ "teraTypes": ["Fire", "Ground", "Steel"]
+ }
+ ]
+ },
+ "lucario": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Extreme Speed", "Meteor Mash", "Stone Edge", "Swords Dance"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Aura Sphere", "Flash Cannon", "Focus Blast", "Nasty Plot", "Vacuum Wave"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "hippowdon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Slack Off", "Stealth Rock", "Stone Edge", "Whirlwind"],
+ "abilities": ["Sand Stream"],
+ "teraTypes": ["Dragon", "Rock", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Curse", "Earthquake", "Slack Off", "Stone Edge"],
+ "abilities": ["Sand Stream"],
+ "teraTypes": ["Rock", "Steel"]
+ }
+ ]
+ },
+ "toxicroak": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Earthquake", "Gunk Shot", "Knock Off", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Dry Skin"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Earthquake", "Gunk Shot", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Dry Skin"],
+ "teraTypes": ["Dark", "Fighting", "Ground"]
+ }
+ ]
+ },
+ "lumineon": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Alluring Voice", "Encore", "Hydro Pump", "Ice Beam", "U-turn"],
+ "abilities": ["Storm Drain"],
+ "teraTypes": ["Fairy", "Water"]
+ }
+ ]
+ },
+ "abomasnow": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Aurora Veil", "Blizzard", "Earthquake", "Ice Shard", "Wood Hammer"],
+ "abilities": ["Snow Warning"],
+ "teraTypes": ["Ice", "Water"]
+ }
+ ]
+ },
+ "weavile": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Ice Shard", "Knock Off", "Low Kick", "Swords Dance", "Triple Axel"],
+ "abilities": ["Pickpocket"],
+ "teraTypes": ["Dark", "Fighting", "Ice"]
+ }
+ ]
+ },
+ "sneasler": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Dire Claw", "Gunk Shot", "Throat Chop", "U-turn"],
+ "abilities": ["Poison Touch"],
+ "teraTypes": ["Dark", "Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Acrobatics", "Close Combat", "Gunk Shot", "Swords Dance"],
+ "abilities": ["Unburden"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "magnezone": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Body Press", "Flash Cannon", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Magnet Pull"],
+ "teraTypes": ["Electric", "Fighting", "Flying", "Water"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Discharge", "Flash Cannon", "Mirror Coat", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Analytic", "Magnet Pull"],
+ "teraTypes": ["Flying", "Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Discharge", "Flash Cannon", "Iron Defense", "Thunderbolt"],
+ "abilities": ["Magnet Pull"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "rhyperior": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Earthquake", "Ice Punch", "Megahorn", "Rock Polish", "Stone Edge"],
+ "abilities": ["Solid Rock"],
+ "teraTypes": ["Bug", "Ground", "Rock"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dragon Tail", "Earthquake", "Ice Punch", "Megahorn", "Stone Edge"],
+ "abilities": ["Solid Rock"],
+ "teraTypes": ["Bug", "Dragon", "Grass", "Steel"]
+ }
+ ]
+ },
+ "electivire": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earthquake", "Flamethrower", "Ice Punch", "Knock Off", "Supercell Slam", "Volt Switch"],
+ "abilities": ["Motor Drive"],
+ "teraTypes": ["Dark", "Electric", "Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bulk Up", "Earthquake", "Ice Punch", "Supercell Slam"],
+ "abilities": ["Motor Drive"],
+ "teraTypes": ["Flying", "Ground"]
+ }
+ ]
+ },
+ "magmortar": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Fire Blast", "Focus Blast", "Knock Off", "Scorching Sands", "Taunt", "Thunderbolt"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Electric", "Fighting", "Water"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earthquake", "Fire Blast", "Focus Blast", "Knock Off", "Thunderbolt", "Will-O-Wisp"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Electric", "Fighting", "Water"]
+ }
+ ]
+ },
+ "yanmega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Air Slash", "Bug Buzz", "Giga Drain", "U-turn"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Bug"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Air Slash", "Bug Buzz", "Protect", "Tera Blast"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "leafeon": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Double-Edge", "Knock Off", "Leaf Blade", "Substitute", "Swords Dance", "Synthesis"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Dark", "Normal"]
+ }
+ ]
+ },
+ "glaceon": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Freeze-Dry", "Protect", "Wish"],
+ "abilities": ["Ice Body"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Freeze-Dry", "Mud Shot", "Protect", "Wish"],
+ "abilities": ["Ice Body"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "gliscor": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Earthquake", "Protect", "Substitute", "Toxic"],
+ "abilities": ["Poison Heal"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Knock Off", "Protect", "Toxic", "Toxic Spikes", "U-turn"],
+ "abilities": ["Poison Heal"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "mamoswine": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Knock Off", "Stealth Rock"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Ground", "Ice"]
+ }
+ ]
+ },
+ "porygonz": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Agility", "Nasty Plot", "Shadow Ball", "Tera Blast"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Ice Beam", "Nasty Plot", "Shadow Ball", "Thunderbolt", "Tri Attack", "Trick"],
+ "abilities": ["Adaptability", "Download"],
+ "teraTypes": ["Electric", "Ghost"]
+ }
+ ]
+ },
+ "gallade": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Leaf Blade", "Night Slash", "Psycho Cut", "Sacred Sword", "Swords Dance"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Dark", "Fighting", "Grass"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Agility", "Night Slash", "Psycho Cut", "Sacred Sword"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Dark", "Fighting"]
+ }
+ ]
+ },
+ "probopass": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Flash Cannon", "Iron Defense", "Power Gem", "Rest", "Thunder Wave"],
+ "abilities": ["Magnet Pull"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "dusknoir": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Earthquake", "Leech Life", "Pain Split", "Poltergeist", "Shadow Sneak", "Trick"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Ghost", "Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Pain Split", "Poltergeist", "Shadow Sneak", "Will-O-Wisp"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Dark", "Fairy"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Focus Punch", "Pain Split", "Poltergeist", "Substitute"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "froslass": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Destiny Bond", "Poltergeist", "Spikes", "Taunt", "Triple Axel", "Will-O-Wisp"],
+ "abilities": ["Cursed Body"],
+ "teraTypes": ["Ghost", "Ice"]
+ }
+ ]
+ },
+ "rotom": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Nasty Plot", "Shadow Ball", "Thunderbolt", "Trick", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Ghost"]
+ }
+ ]
+ },
+ "rotomwash": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Hydro Pump", "Nasty Plot", "Pain Split", "Thunderbolt", "Trick", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Water"]
+ }
+ ]
+ },
+ "rotomheat": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Nasty Plot", "Overheat", "Pain Split", "Thunderbolt", "Trick", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Fire"]
+ }
+ ]
+ },
+ "rotomfrost": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Blizzard", "Nasty Plot", "Thunderbolt", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "rotomfan": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Air Slash", "Nasty Plot", "Thunderbolt", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Steel"]
+ }
+ ]
+ },
+ "rotommow": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Leaf Storm", "Nasty Plot", "Thunderbolt", "Trick", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Grass"]
+ }
+ ]
+ },
+ "uxie": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Knock Off", "Psychic Noise", "Stealth Rock", "Thunder Wave", "U-turn", "Yawn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dark", "Electric", "Steel"]
+ }
+ ]
+ },
+ "mesprit": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dazzling Gleam", "Healing Wish", "Ice Beam", "Nasty Plot", "Psychic", "Shadow Ball", "Thunderbolt", "U-turn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Fairy"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Knock Off", "Psychic Noise", "Stealth Rock", "Thunder Wave", "U-turn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dark", "Electric", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Drain Punch", "Ice Beam", "Knock Off", "Psychic Noise", "Thunder Wave", "Thunderbolt", "U-turn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dark", "Fighting"]
+ }
+ ]
+ },
+ "azelf": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Encore", "Explosion", "Fire Blast", "Knock Off", "Psychic", "Stealth Rock", "Taunt", "U-turn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dark", "Fire"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dazzling Gleam", "Fire Blast", "Nasty Plot", "Psychic", "Psyshock", "Thunderbolt", "Trick", "U-turn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Fairy", "Fire", "Psychic"]
+ }
+ ]
+ },
+ "dialga": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Draco Meteor", "Fire Blast", "Heavy Slam", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Flying", "Steel"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Draco Meteor", "Dragon Tail", "Fire Blast", "Heavy Slam"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Flying", "Steel"]
+ }
+ ]
+ },
+ "dialgaorigin": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Draco Meteor", "Fire Blast", "Flash Cannon", "Heavy Slam", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Flying", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Draco Meteor", "Dragon Tail", "Fire Blast", "Flash Cannon", "Heavy Slam", "Stealth Rock"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Flying", "Steel"]
+ }
+ ]
+ },
+ "palkia": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Draco Meteor", "Fire Blast", "Hydro Pump", "Spacial Rend"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Fire", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Draco Meteor", "Fire Blast", "Hydro Pump", "Spacial Rend", "Thunder Wave"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Fire", "Water"]
+ }
+ ]
+ },
+ "palkiaorigin": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Draco Meteor", "Fire Blast", "Hydro Pump", "Spacial Rend", "Thunder Wave"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Fire", "Water"]
+ }
+ ]
+ },
+ "heatran": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earth Power", "Flash Cannon", "Heavy Slam", "Lava Plume", "Magma Storm", "Stealth Rock"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Flying", "Grass", "Steel"]
+ }
+ ]
+ },
+ "regigigas": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Slam", "Knock Off", "Rest", "Sleep Talk"],
+ "abilities": ["Slow Start"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Slam", "Knock Off", "Protect", "Substitute"],
+ "abilities": ["Slow Start"],
+ "teraTypes": ["Ghost", "Poison"]
+ }
+ ]
+ },
+ "giratina": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Dragon Tail", "Rest", "Shadow Ball", "Sleep Talk", "Will-O-Wisp"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Dragon Pulse", "Rest", "Sleep Talk"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Defog", "Dragon Tail", "Rest", "Shadow Ball", "Will-O-Wisp"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "giratinaorigin": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Defog", "Draco Meteor", "Dragon Tail", "Poltergeist", "Shadow Sneak", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dragon", "Fairy", "Ghost", "Steel"]
+ }
+ ]
+ },
+ "cresselia": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Moonblast", "Moonlight", "Psyshock", "Thunderbolt"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Fairy", "Poison", "Steel"]
+ }
+ ]
+ },
+ "phione": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Rest", "Scald", "Sleep Talk", "Take Heart"],
+ "abilities": ["Hydration"],
+ "teraTypes": ["Dragon", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Grass Knot", "Ice Beam", "Scald", "Take Heart"],
+ "abilities": ["Hydration"],
+ "teraTypes": ["Grass", "Steel"]
+ }
+ ]
+ },
+ "manaphy": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Energy Ball", "Hydro Pump", "Ice Beam", "Surf", "Tail Glow"],
+ "abilities": ["Hydration"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "darkrai": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dark Pulse", "Focus Blast", "Hypnosis", "Nasty Plot", "Sludge Bomb", "Substitute"],
+ "abilities": ["Bad Dreams"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "shaymin": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Air Slash", "Earth Power", "Seed Flare", "Synthesis"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Ground", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Air Slash", "Leech Seed", "Seed Flare", "Substitute"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "shayminsky": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Air Slash", "Dazzling Gleam", "Earth Power", "Seed Flare"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Flying", "Grass"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Air Slash", "Leech Seed", "Seed Flare", "Substitute"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Air Slash", "Earth Power", "Seed Flare", "Synthesis"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "arceus": {
+ "level": 68,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Earthquake", "Extreme Speed", "Recover", "Shadow Claw", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earthquake", "Extreme Speed", "Recover", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "arceusbug": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire", "Ground"]
+ }
+ ]
+ },
+ "arceusdark": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Dazzling Gleam", "Judgment", "Recover", "Sludge Bomb"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fairy", "Poison"]
+ }
+ ]
+ },
+ "arceusdragon": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Extreme Speed", "Flare Blitz", "Heavy Slam", "Outrage", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Dragon Dance", "Flare Blitz", "Heavy Slam", "Outrage"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire", "Steel"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover", "Sludge Bomb"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "arceuselectric": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Ice Beam", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Electric", "Ice"]
+ }
+ ]
+ },
+ "arceusfairy": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "arceusfighting": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Body Press", "Cosmic Power", "Recover", "Stored Power"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Recover", "Shadow Ball"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "arceusfire": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earthquake", "Extreme Speed", "Flare Blitz", "Recover", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire", "Ground"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Dragon Dance", "Earthquake", "Flare Blitz", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire", "Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Energy Ball", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Grass", "Ground"]
+ }
+ ]
+ },
+ "arceusflying": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "arceusghost": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Focus Blast", "Judgment", "Recover", "Will-O-Wisp"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fighting", "Normal"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Focus Blast", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fighting", "Ghost", "Normal"]
+ }
+ ]
+ },
+ "arceusgrass": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Calm Mind", "Earth Power", "Ice Beam", "Judgment"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "arceusground": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Fire Blast", "Ice Beam", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Dragon", "Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earthquake", "Extreme Speed", "Stone Edge", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Dragon Dance", "Earthquake", "Recover", "Stone Edge"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "arceusice": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover", "Thunderbolt"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Electric", "Ground"]
+ }
+ ]
+ },
+ "arceuspoison": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Flare Blitz", "Gunk Shot", "Liquidation", "Recover", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Earthquake", "Extreme Speed", "Gunk Shot", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ground", "Normal"]
+ }
+ ]
+ },
+ "arceuspsychic": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Cosmic Power", "Recover", "Stored Power"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "arceusrock": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Dragon", "Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Recover", "Stone Edge", "Swords Dance"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceussteel": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Judgment", "Recover", "Will-O-Wisp"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "arceuswater": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Calm Mind", "Ice Beam", "Judgment", "Recover", "Will-O-Wisp"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "serperior": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Glare", "Leaf Storm", "Leech Seed", "Substitute", "Synthesis", "Tera Blast"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fire", "Rock"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dragon Pulse", "Glare", "Leaf Storm", "Leech Seed", "Substitute", "Synthesis"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Dragon", "Grass", "Water"]
+ }
+ ]
+ },
+ "emboar": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Close Combat", "Flare Blitz", "Knock Off", "Scald", "Sucker Punch", "Wild Charge"],
+ "abilities": ["Reckless"],
+ "teraTypes": ["Dark", "Electric", "Fire", "Water"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Flare Blitz", "Head Smash", "Knock Off", "Wild Charge"],
+ "abilities": ["Reckless"],
+ "teraTypes": ["Fire"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bulk Up", "Drain Punch", "Flare Blitz", "Trailblaze"],
+ "abilities": ["Reckless"],
+ "teraTypes": ["Fighting", "Grass"]
+ }
+ ]
+ },
+ "samurott": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Aqua Jet", "Flip Turn", "Grass Knot", "Hydro Pump", "Ice Beam", "Knock Off", "Megahorn", "Sacred Sword"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Dark", "Grass", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Aqua Jet", "Knock Off", "Liquidation", "Megahorn", "Sacred Sword", "Swords Dance"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Dark", "Water"]
+ }
+ ]
+ },
+ "samurotthisui": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Ceaseless Edge", "Flip Turn", "Razor Shell", "Sacred Sword", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Dark", "Poison", "Water"]
+ }
+ ]
+ },
+ "zebstrika": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["High Horsepower", "Overheat", "Supercell Slam", "Volt Switch"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "excadrill": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Earthquake", "Iron Head", "Rapid Spin", "Swords Dance"],
+ "abilities": ["Mold Breaker", "Sand Rush"],
+ "teraTypes": ["Grass", "Ground", "Water"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Earthquake", "Iron Head", "Rapid Spin", "Rock Slide"],
+ "abilities": ["Mold Breaker", "Sand Rush"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "gurdurr": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Bulk Up", "Defog", "Drain Punch", "Knock Off", "Mach Punch"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "conkeldurr": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Facade", "Knock Off", "Mach Punch"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "leavanny": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Knock Off", "Leaf Blade", "Lunge", "Sticky Web", "Swords Dance"],
+ "abilities": ["Chlorophyll", "Swarm"],
+ "teraTypes": ["Ghost", "Rock"]
+ }, {
+ "role": "Fast Attacker",
+ "movepool": ["Bullet Seed", "Knock Off", "Sticky Web", "Swords Dance", "Triple Axel"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Ghost", "Rock"]
+ }
+ ]
+ },
+ "whimsicott": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Encore", "Giga Drain", "Moonblast", "Stun Spore", "U-turn"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Hurricane", "Leech Seed", "Moonblast", "Substitute"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "lilligant": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Giga Drain", "Quiver Dance", "Sleep Powder", "Tera Blast"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire", "Rock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Alluring Voice", "Petal Dance", "Quiver Dance", "Sleep Powder"],
+ "abilities": ["Own Tempo"],
+ "teraTypes": ["Fairy", "Grass"]
+ }
+ ]
+ },
+ "lilliganthisui": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Ice Spinner", "Leaf Blade", "Sleep Powder", "Victory Dance"],
+ "abilities": ["Hustle"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "basculin": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Aqua Jet", "Double-Edge", "Flip Turn", "Wave Crash"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "basculegion": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Aqua Jet", "Flip Turn", "Shadow Ball", "Wave Crash"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "basculegionf": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Flip Turn", "Hydro Pump", "Ice Beam", "Shadow Ball"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Flip Turn", "Hydro Pump", "Shadow Ball", "Wave Crash"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "krookodile": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Bulk Up", "Earthquake", "Gunk Shot", "Knock Off", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Ground", "Poison"]
+ }
+ ]
+ },
+ "scrafty": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Knock Off", "Rest"],
+ "abilities": ["Shed Skin"],
+ "teraTypes": ["Poison"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Dragon Dance", "Knock Off", "Poison Jab"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "zoroark": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Dark Pulse", "Flamethrower", "Focus Blast", "Psychic", "Sludge Bomb", "Trick", "U-turn"],
+ "abilities": ["Illusion"],
+ "teraTypes": ["Poison"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dark Pulse", "Encore", "Focus Blast", "Nasty Plot", "Psychic", "Sludge Bomb"],
+ "abilities": ["Illusion"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "zoroarkhisui": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Bitter Malice", "Flamethrower", "Focus Blast", "Hyper Voice", "Nasty Plot", "Trick", "U-turn"],
+ "abilities": ["Illusion"],
+ "teraTypes": ["Fighting", "Normal"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Focus Blast", "Hyper Voice", "Poltergeist", "Will-O-Wisp"],
+ "abilities": ["Illusion"],
+ "teraTypes": ["Fighting", "Normal"]
+ }
+ ]
+ },
+ "cinccino": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Bullet Seed", "Tail Slap", "Tidy Up", "Triple Axel", "U-turn"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Grass", "Ice", "Normal"]
+ }
+ ]
+ },
+ "gothitelle": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Dark Pulse", "Focus Blast", "Psychic Noise", "Thunderbolt"],
+ "abilities": ["Shadow Tag"],
+ "teraTypes": ["Dark", "Electric", "Fairy", "Fighting", "Flying", "Ghost", "Ground", "Steel"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dark Pulse", "Focus Blast", "Psychic", "Trick"],
+ "abilities": ["Shadow Tag"],
+ "teraTypes": ["Dark", "Fairy", "Fighting", "Flying", "Ghost", "Ground", "Psychic", "Steel"]
+ }
+ ]
+ },
+ "reuniclus": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Focus Blast", "Psychic", "Psyshock", "Recover", "Shadow Ball"],
+ "abilities": ["Magic Guard"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "swanna": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Brave Bird", "Defog", "Hydro Pump", "Knock Off", "Roost"],
+ "abilities": ["Hydration"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "sawsbuck": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Double-Edge", "High Horsepower", "Horn Leech", "Swords Dance"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Ground", "Normal"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Headbutt", "High Horsepower", "Horn Leech", "Swords Dance"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "amoonguss": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Clear Smog", "Giga Drain", "Sludge Bomb", "Spore", "Toxic"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Giga Drain", "Sludge Bomb", "Spore", "Stomping Tantrum"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "alomomola": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Flip Turn", "Protect", "Scald", "Wish"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Flip Turn", "Protect", "Scald", "Wish"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "galvantula": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Bug Buzz", "Giga Drain", "Sticky Web", "Thunder", "Volt Switch"],
+ "abilities": ["Compound Eyes"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "eelektross": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Coil", "Drain Punch", "Fire Punch", "Knock Off", "Supercell Slam"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Close Combat", "Discharge", "Dragon Tail", "Flamethrower", "Giga Drain", "Knock Off", "U-turn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "chandelure": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Calm Mind", "Energy Ball", "Fire Blast", "Pain Split", "Shadow Ball", "Substitute", "Will-O-Wisp"],
+ "abilities": ["Flame Body", "Flash Fire"],
+ "teraTypes": ["Fire", "Ghost", "Grass"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Energy Ball", "Fire Blast", "Shadow Ball", "Trick"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Fire", "Ghost", "Grass"]
+ }
+ ]
+ },
+ "haxorus": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Dragon Dance", "Earthquake", "Iron Head", "Outrage"],
+ "abilities": ["Mold Breaker"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Close Combat", "Earthquake", "Iron Head", "Scale Shot", "Swords Dance"],
+ "abilities": ["Mold Breaker"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "beartic": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Aqua Jet", "Close Combat", "Earthquake", "Icicle Crash", "Snowscape", "Swords Dance"],
+ "abilities": ["Slush Rush", "Swift Swim"],
+ "teraTypes": ["Fighting", "Ground"]
+ }
+ ]
+ },
+ "cryogonal": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Flash Cannon", "Freeze-Dry", "Haze", "Rapid Spin", "Recover"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Ice Beam", "Rapid Spin", "Recover", "Tera Blast"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "mienshao": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["High Jump Kick", "Knock Off", "Poison Jab", "Stone Edge", "U-turn"],
+ "abilities": ["Reckless"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Close Combat", "Fake Out", "Knock Off", "U-turn"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Knock Off", "Poison Jab", "Swords Dance", "Triple Axel"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ }
+ ]
+ },
+ "golurk": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Dynamic Punch", "Earthquake", "Poltergeist", "Stealth Rock", "Stone Edge"],
+ "abilities": ["No Guard"],
+ "teraTypes": ["Fighting", "Ghost", "Ground"]
+ }
+ ]
+ },
+ "braviary": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Brave Bird", "Bulk Up", "Close Combat", "Roost"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "braviaryhisui": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Agility", "Heat Wave", "Hurricane", "Psychic"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Fairy", "Fire", "Psychic", "Steel"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Esper Wing", "Hurricane", "U-turn", "Vacuum Wave"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Fairy", "Fighting", "Psychic", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "Defog", "Esper Wing", "Hurricane", "Roost"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Fairy", "Psychic", "Steel"]
+ }
+ ]
+ },
+ "mandibuzz": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Defog", "Foul Play", "Roost", "Toxic", "U-turn"],
+ "abilities": ["Overcoat"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Brave Bird", "Defog", "Foul Play", "Knock Off", "Roost", "Toxic"],
+ "abilities": ["Overcoat"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "hydreigon": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dark Pulse", "Draco Meteor", "Fire Blast", "Flash Cannon", "Nasty Plot", "U-turn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Dark", "Dragon", "Fire", "Steel"]
+ }
+ ]
+ },
+ "volcarona": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Bug Buzz", "Fiery Dance", "Fire Blast", "Giga Drain", "Morning Sun", "Quiver Dance"],
+ "abilities": ["Flame Body", "Swarm"],
+ "teraTypes": ["Fire", "Grass", "Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Bug Buzz", "Fiery Dance", "Fire Blast", "Giga Drain", "Quiver Dance", "Tera Blast"],
+ "abilities": ["Flame Body", "Swarm"],
+ "teraTypes": ["Ground", "Water"]
+ }
+ ]
+ },
+ "cobalion": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Close Combat", "Iron Head", "Stone Edge", "Swords Dance", "Taunt"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Aura Sphere", "Calm Mind", "Flash Cannon", "Vacuum Wave"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Fighting", "Ghost", "Water"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Press", "Iron Defense", "Iron Head", "Stealth Rock", "Stone Edge", "Thunder Wave", "Volt Switch"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Ghost", "Water"]
+ }
+ ]
+ },
+ "terrakion": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Earthquake", "Stone Edge", "Swords Dance"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Fighting", "Ground"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Earthquake", "Quick Attack", "Stone Edge"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Fighting", "Ground"]
+ }
+ ]
+ },
+ "virizion": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Leaf Blade", "Stone Edge", "Swords Dance"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Rock"]
+ }
+ ]
+ },
+ "tornadus": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Bleakwind Storm", "Focus Blast", "Grass Knot", "Heat Wave", "Nasty Plot", "U-turn"],
+ "abilities": ["Defiant", "Prankster"],
+ "teraTypes": ["Fighting", "Fire", "Flying"]
+ }
+ ]
+ },
+ "tornadustherian": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Bleakwind Storm", "Focus Blast", "Grass Knot", "Heat Wave", "Nasty Plot", "U-turn"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fighting", "Fire", "Flying"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Bleakwind Storm", "Heat Wave", "Knock Off", "U-turn"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "thundurus": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Focus Blast", "Grass Knot", "Knock Off", "Nasty Plot", "Sludge Wave", "Taunt", "Thunder Wave", "Thunderbolt", "U-turn"],
+ "abilities": ["Defiant", "Prankster"],
+ "teraTypes": ["Electric", "Grass", "Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Focus Blast", "Nasty Plot", "Tera Blast", "Thunderbolt"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Flying"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Acrobatics", "Focus Blast", "Grass Knot", "Knock Off", "Taunt", "Thunder Wave", "Thunderbolt", "U-turn"],
+ "abilities": ["Defiant", "Prankster"],
+ "teraTypes": ["Electric", "Flying", "Grass", "Steel"]
+ }
+ ]
+ },
+ "thundurustherian": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Focus Blast", "Grass Knot", "Nasty Plot", "Psychic", "Sludge Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Electric", "Poison", "Psychic"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Focus Blast", "Nasty Plot", "Tera Blast", "Thunderbolt"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "reshiram": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Blue Flare", "Draco Meteor", "Dragon Tail", "Earth Power", "Will-O-Wisp"],
+ "abilities": ["Turboblaze"],
+ "teraTypes": ["Fire", "Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Flare Blitz", "Outrage", "Stone Edge"],
+ "abilities": ["Turboblaze"],
+ "teraTypes": ["Dragon", "Fire"]
+ }
+ ]
+ },
+ "zekrom": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bolt Strike", "Dragon Dance", "Outrage", "Substitute"],
+ "abilities": ["Teravolt"],
+ "teraTypes": ["Electric", "Fairy", "Grass", "Steel"]
+ }
+ ]
+ },
+ "landorus": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earth Power", "Focus Blast", "Nasty Plot", "Psychic", "Rock Slide", "Sludge Wave", "Stealth Rock"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Ground", "Poison", "Psychic"]
+ }
+ ]
+ },
+ "landorustherian": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Stealth Rock", "Stone Edge", "Taunt", "U-turn"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Ground", "Water"]
+ }
+ ]
+ },
+ "kyurem": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Dragon Dance", "Icicle Spear", "Scale Shot", "Tera Blast"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Draco Meteor", "Earth Power", "Freeze-Dry", "Ice Beam", "Outrage"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "kyuremwhite": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Draco Meteor", "Earth Power", "Freeze-Dry", "Fusion Flare"],
+ "abilities": ["Turboblaze"],
+ "teraTypes": ["Dragon", "Fire"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Draco Meteor", "Freeze-Dry", "Fusion Flare", "Ice Beam"],
+ "abilities": ["Turboblaze"],
+ "teraTypes": ["Dragon", "Fire", "Ice"]
+ }
+ ]
+ },
+ "kyuremblack": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Fusion Bolt", "Icicle Spear", "Scale Shot"],
+ "abilities": ["Teravolt"],
+ "teraTypes": ["Electric"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Dragon Dance", "Icicle Spear", "Scale Shot", "Tera Blast"],
+ "abilities": ["Teravolt"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "keldeoresolute": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Air Slash", "Calm Mind", "Flip Turn", "Hydro Pump", "Secret Sword", "Vacuum Wave"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Fighting", "Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Hydro Pump", "Secret Sword", "Substitute", "Surf"],
+ "abilities": ["Justified"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "meloetta": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Calm Mind", "Focus Blast", "Hyper Voice", "Psyshock", "U-turn"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Fighting", "Normal", "Psychic"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Knock Off", "Relic Song", "Triple Axel"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Dark", "Fighting"]
+ }
+ ]
+ },
+ "chesnaught": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Press", "Knock Off", "Spikes", "Synthesis", "Wood Hammer"],
+ "abilities": ["Bulletproof"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Synthesis", "Trailblaze"],
+ "abilities": ["Bulletproof"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "delphox": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Fire Blast", "Focus Blast", "Grass Knot", "Nasty Plot", "Psyshock"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Fighting", "Fire", "Grass"]
+ }
+ ]
+ },
+ "greninja": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dark Pulse", "Grass Knot", "Gunk Shot", "Hydro Pump", "Ice Beam", "Toxic Spikes", "U-turn"],
+ "abilities": ["Protean"],
+ "teraTypes": ["Dark", "Poison", "Water"]
+ }
+ ]
+ },
+ "greninjabond": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dark Pulse", "Gunk Shot", "Hydro Pump", "Ice Beam"],
+ "abilities": ["Battle Bond"],
+ "teraTypes": ["Poison", "Water"]
+ }
+ ]
+ },
+ "talonflame": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Brave Bird", "Defog", "Overheat", "Roost", "Taunt", "U-turn", "Will-O-Wisp"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Dragon", "Ground"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Brave Bird", "Flare Blitz", "Swords Dance", "Tera Blast"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "vivillon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Bug Buzz", "Hurricane", "Quiver Dance", "Sleep Powder"],
+ "abilities": ["Compound Eyes"],
+ "teraTypes": ["Flying"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Hurricane", "Quiver Dance", "Sleep Powder", "Tera Blast"],
+ "abilities": ["Compound Eyes"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "pyroar": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dark Pulse", "Fire Blast", "Hyper Voice", "Taunt", "Will-O-Wisp", "Work Up"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "florges": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Moonblast", "Protect", "Wish"],
+ "abilities": ["Flower Veil"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Calm Mind", "Moonblast", "Synthesis", "Tera Blast"],
+ "abilities": ["Flower Veil"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "gogoat": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Earthquake", "Horn Leech", "Milk Drink", "Rock Slide"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Ground", "Water"]
+ }
+ ]
+ },
+ "meowstic": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Alluring Voice", "Light Screen", "Psychic Noise", "Reflect", "Thunder Wave", "Yawn"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "meowsticf": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Alluring Voice", "Dark Pulse", "Nasty Plot", "Psychic", "Psyshock", "Thunderbolt"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Dark", "Electric", "Fairy"]
+ }
+ ]
+ },
+ "malamar": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Knock Off", "Rest", "Sleep Talk", "Superpower"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting", "Poison", "Steel"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Knock Off", "Psycho Cut", "Rest", "Superpower"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting", "Poison", "Steel"]
+ }
+ ]
+ },
+ "dragalge": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Draco Meteor", "Dragon Tail", "Flip Turn", "Focus Blast", "Sludge Wave", "Toxic", "Toxic Spikes"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "clawitzer": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "U-turn", "Water Pulse"],
+ "abilities": ["Mega Launcher"],
+ "teraTypes": ["Dark", "Dragon", "Fighting"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "U-turn", "Water Pulse"],
+ "abilities": ["Mega Launcher"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "sylveon": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Hyper Voice", "Protect", "Wish"],
+ "abilities": ["Pixilate"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "hawlucha": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Acrobatics", "Brave Bird", "Close Combat", "Encore", "Stone Edge", "Swords Dance", "Throat Chop"],
+ "abilities": ["Unburden"],
+ "teraTypes": ["Fighting", "Flying"]
+ }
+ ]
+ },
+ "dedenne": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Dazzling Gleam", "Nuzzle", "Super Fang", "Thunderbolt", "U-turn"],
+ "abilities": ["Cheek Pouch"],
+ "teraTypes": ["Electric", "Flying"]
+ }
+ ]
+ },
+ "carbink": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Moonblast", "Rest", "Rock Polish"],
+ "abilities": ["Clear Body", "Sturdy"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "goodra": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Draco Meteor", "Dragon Tail", "Earthquake", "Fire Blast", "Knock Off", "Power Whip", "Scald", "Sludge Bomb"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Fire", "Grass", "Ground", "Poison", "Water"]
+ }
+ ]
+ },
+ "goodrahisui": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Draco Meteor", "Dragon Tail", "Earthquake", "Fire Blast", "Heavy Slam", "Hydro Pump", "Knock Off", "Thunderbolt"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Dragon", "Flying", "Ground", "Water"]
+ }
+ ]
+ },
+ "klefki": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Magnet Rise", "Play Rough", "Spikes", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dazzling Gleam", "Foul Play", "Spikes", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Flying", "Water"]
+ }
+ ]
+ },
+ "trevenant": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Drain Punch", "Horn Leech", "Poltergeist", "Rest", "Trick Room", "Will-O-Wisp", "Wood Hammer"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Drain Punch", "Poltergeist", "Protect", "Toxic"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Dark", "Fairy", "Fighting", "Steel"]
+ }
+ ]
+ },
+ "avalugg": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Avalanche", "Body Press", "Curse", "Rapid Spin", "Recover"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "avalugghisui": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Avalanche", "Body Press", "Rapid Spin", "Recover", "Stone Edge"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Flying", "Ghost", "Poison"]
+ }
+ ]
+ },
+ "noivern": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Boomburst", "Draco Meteor", "Flamethrower", "Hurricane", "Roost", "U-turn"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Defog", "Draco Meteor", "Flamethrower", "Hurricane", "Roost", "U-turn"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "diancie": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Diamond Storm", "Earth Power", "Moonblast", "Rock Polish", "Stealth Rock"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Diamond Storm", "Draining Kiss", "Earth Power"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Fairy", "Water"]
+ }
+ ]
+ },
+ "hoopa": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Focus Blast", "Nasty Plot", "Psychic", "Psyshock", "Shadow Ball", "Trick"],
+ "abilities": ["Magician"],
+ "teraTypes": ["Fighting", "Ghost", "Psychic"]
+ }
+ ]
+ },
+ "hoopaunbound": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Drain Punch", "Gunk Shot", "Hyperspace Fury", "Trick", "Zen Headbutt"],
+ "abilities": ["Magician"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Focus Blast", "Gunk Shot", "Hyperspace Fury", "Psychic", "Trick"],
+ "abilities": ["Magician"],
+ "teraTypes": ["Fighting", "Poison"]
+ }
+ ]
+ },
+ "volcanion": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earth Power", "Flame Charge", "Flamethrower", "Haze", "Sludge Bomb", "Steam Eruption"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Fire", "Ground", "Water"]
+ }
+ ]
+ },
+ "decidueye": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Defog", "Knock Off", "Leaf Storm", "Roost", "Spirit Shackle", "U-turn"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Dark", "Ghost", "Grass"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Leaf Blade", "Poltergeist", "Shadow Sneak", "Swords Dance"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "decidueyehisui": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Defog", "Knock Off", "Leaf Blade", "Roost", "Sucker Punch", "Swords Dance", "Triple Arrows", "U-turn"],
+ "abilities": ["Scrappy"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "incineroar": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Close Combat", "Fake Out", "Knock Off", "Overheat", "U-turn"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fighting", "Water"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Earthquake", "Flare Blitz", "Knock Off", "Parting Shot", "Will-O-Wisp"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fighting", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Flare Blitz", "Knock Off", "Swords Dance", "Trailblaze"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "primarina": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Flip Turn", "Hydro Pump", "Moonblast", "Psychic"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Draining Kiss", "Moonblast", "Psychic Noise"],
+ "abilities": ["Liquid Voice"],
+ "teraTypes": ["Fairy", "Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "Draining Kiss", "Psychic", "Sparkling Aria"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Fairy", "Poison", "Steel"]
+ }
+ ]
+ },
+ "toucannon": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Beak Blast", "Boomburst", "Bullet Seed", "Knock Off", "Roost", "U-turn"],
+ "abilities": ["Keen Eye", "Skill Link"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "gumshoos": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Double-Edge", "Earthquake", "Knock Off", "U-turn"],
+ "abilities": ["Stakeout"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Double-Edge", "Earthquake", "Knock Off", "U-turn"],
+ "abilities": ["Adaptability", "Stakeout"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "vikavolt": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Bug Buzz", "Discharge", "Energy Ball", "Sticky Web", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "crabominable": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Drain Punch", "Earthquake", "Gunk Shot", "Ice Hammer", "Knock Off"],
+ "abilities": ["Iron Fist"],
+ "teraTypes": ["Fighting", "Ground"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Drain Punch", "Earthquake", "Ice Hammer", "Knock Off"],
+ "abilities": ["Iron Fist"],
+ "teraTypes": ["Fighting", "Ground", "Water"]
+ }
+ ]
+ },
+ "oricorio": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Hurricane", "Quiver Dance", "Revelation Dance", "Roost"],
+ "abilities": ["Dancer"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "oricoriopompom": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Hurricane", "Quiver Dance", "Revelation Dance", "Roost"],
+ "abilities": ["Dancer"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "oricoriopau": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Hurricane", "Quiver Dance", "Revelation Dance", "Roost"],
+ "abilities": ["Dancer"],
+ "teraTypes": ["Fighting", "Ground"]
+ }
+ ]
+ },
+ "oricoriosensu": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Hurricane", "Quiver Dance", "Revelation Dance", "Roost"],
+ "abilities": ["Dancer"],
+ "teraTypes": ["Fighting", "Ghost"]
+ }
+ ]
+ },
+ "ribombee": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Bug Buzz", "Moonblast", "Sticky Web", "Stun Spore", "U-turn"],
+ "abilities": ["Shield Dust"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Bug Buzz", "Moonblast", "Quiver Dance", "Tera Blast"],
+ "abilities": ["Shield Dust"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "lycanroc": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Accelerock", "Close Combat", "Crunch", "Psychic Fangs", "Stealth Rock", "Stone Edge", "Swords Dance", "Taunt"],
+ "abilities": ["Sand Rush"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "lycanrocmidnight": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Knock Off", "Stealth Rock", "Stone Edge", "Sucker Punch", "Swords Dance"],
+ "abilities": ["No Guard"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "lycanrocdusk": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Accelerock", "Close Combat", "Psychic Fangs", "Stone Edge", "Swords Dance", "Throat Chop"],
+ "abilities": ["Tough Claws"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "toxapex": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Haze", "Liquidation", "Recover", "Toxic", "Toxic Spikes"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fairy", "Flying", "Grass", "Steel"]
+ }
+ ]
+ },
+ "mudsdale": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Heavy Slam", "Roar", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Stamina"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "araquanid": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Hydro Pump", "Leech Life", "Liquidation", "Mirror Coat", "Sticky Web"],
+ "abilities": ["Water Bubble"],
+ "teraTypes": ["Ground", "Steel", "Water"]
+ }
+ ]
+ },
+ "lurantis": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Defog", "Knock Off", "Leaf Storm", "Superpower", "Synthesis"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Knock Off", "Leaf Storm", "Leech Life", "Superpower"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting", "Steel", "Water"]
+ }
+ ]
+ },
+ "salazzle": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Flamethrower", "Protect", "Substitute", "Toxic"],
+ "abilities": ["Corrosion"],
+ "teraTypes": ["Flying", "Grass"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Fire Blast", "Nasty Plot", "Sludge Wave", "Tera Blast"],
+ "abilities": ["Corrosion"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "tsareena": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["High Jump Kick", "Knock Off", "Power Whip", "Rapid Spin", "Synthesis", "Triple Axel", "U-turn"],
+ "abilities": ["Queenly Majesty"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "comfey": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Draining Kiss", "Giga Drain", "Stored Power"],
+ "abilities": ["Triage"],
+ "teraTypes": ["Fairy", "Poison", "Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Calm Mind", "Draining Kiss", "Encore", "Giga Drain", "Synthesis", "Taunt", "Tera Blast"],
+ "abilities": ["Triage"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "oranguru": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Focus Blast", "Nasty Plot", "Psychic", "Psyshock", "Thunderbolt"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Electric", "Fighting", "Psychic"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Focus Blast", "Hyper Voice", "Nasty Plot", "Psyshock", "Thunderbolt", "Trick"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Electric", "Fighting", "Normal", "Psychic"]
+ }
+ ]
+ },
+ "passimian": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Earthquake", "Gunk Shot", "Knock Off", "Rock Slide", "U-turn"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Gunk Shot", "Knock Off"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Dark", "Poison", "Steel"]
+ }
+ ]
+ },
+ "palossand": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earth Power", "Shadow Ball", "Shore Up", "Sludge Bomb", "Stealth Rock"],
+ "abilities": ["Water Compaction"],
+ "teraTypes": ["Poison", "Water"]
+ }
+ ]
+ },
+ "minior": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Acrobatics", "Earthquake", "Power Gem", "Shell Smash"],
+ "abilities": ["Shields Down"],
+ "teraTypes": ["Flying", "Ground", "Steel", "Water"]
+ }
+ ]
+ },
+ "komala": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Double-Edge", "Earthquake", "Knock Off", "Superpower", "U-turn", "Wood Hammer"],
+ "abilities": ["Comatose"],
+ "teraTypes": ["Fighting", "Grass", "Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Slam", "Earthquake", "Knock Off", "Rapid Spin", "U-turn"],
+ "abilities": ["Comatose"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "mimikyu": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Drain Punch", "Play Rough", "Shadow Sneak", "Swords Dance", "Wood Hammer"],
+ "abilities": ["Disguise"],
+ "teraTypes": ["Fairy", "Fighting", "Grass"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Play Rough", "Shadow Claw", "Shadow Sneak", "Swords Dance"],
+ "abilities": ["Disguise"],
+ "teraTypes": ["Fairy", "Ghost"]
+ }
+ ]
+ },
+ "bruxish": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Aqua Jet", "Crunch", "Flip Turn", "Ice Fang", "Psychic Fangs", "Swords Dance", "Wave Crash"],
+ "abilities": ["Strong Jaw"],
+ "teraTypes": ["Dark", "Psychic"]
+ }
+ ]
+ },
+ "kommoo": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Boomburst", "Clanging Scales", "Clangorous Soul", "Close Combat", "Iron Head"],
+ "abilities": ["Soundproof"],
+ "teraTypes": ["Normal", "Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Iron Head", "Scale Shot", "Swords Dance"],
+ "abilities": ["Soundproof"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "solgaleo": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Close Combat", "Flame Charge", "Knock Off", "Psychic", "Sunsteel Strike"],
+ "abilities": ["Full Metal Body"],
+ "teraTypes": ["Dark", "Fighting"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Close Combat", "Flare Blitz", "Knock Off", "Morning Sun", "Psychic Fangs", "Sunsteel Strike"],
+ "abilities": ["Full Metal Body"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "lunala": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Moonblast", "Moongeist Beam", "Moonlight"],
+ "abilities": ["Shadow Shield"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Calm Mind", "Moongeist Beam", "Moonlight", "Psyshock"],
+ "abilities": ["Shadow Shield"],
+ "teraTypes": ["Dark", "Fairy"]
+ }
+ ]
+ },
+ "necrozma": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Knock Off", "Photon Geyser", "Swords Dance"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Dark", "Ground", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Heat Wave", "Moonlight", "Photon Geyser"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Fairy", "Ground", "Steel"]
+ }
+ ]
+ },
+ "necrozmaduskmane": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Dragon Dance", "Earthquake", "Morning Sun", "Sunsteel Strike"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Ground", "Steel", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Photon Geyser", "Sunsteel Strike"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Ground", "Steel", "Water"]
+ }
+ ]
+ },
+ "necrozmadawnwings": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Moongeist Beam", "Moonlight", "Photon Geyser"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Dark", "Fairy"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Brick Break", "Dragon Dance", "Moongeist Beam", "Photon Geyser"],
+ "abilities": ["Prism Armor"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "magearna": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Aura Sphere", "Flash Cannon", "Fleur Cannon", "Pain Split", "Spikes", "Thunder Wave", "Volt Switch"],
+ "abilities": ["Soul-Heart"],
+ "teraTypes": ["Fairy", "Fighting", "Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Flash Cannon", "Fleur Cannon", "Shift Gear"],
+ "abilities": ["Soul-Heart"],
+ "teraTypes": ["Fairy", "Flying", "Steel", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Fleur Cannon", "Iron Head", "Shift Gear", "Tera Blast"],
+ "abilities": ["Soul-Heart"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "rillaboom": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Grassy Glide", "Knock Off", "Swords Dance", "U-turn", "Wood Hammer"],
+ "abilities": ["Grassy Surge"],
+ "teraTypes": ["Grass"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Grassy Glide", "High Horsepower", "Swords Dance", "U-turn", "Wood Hammer"],
+ "abilities": ["Grassy Surge"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "cinderace": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Gunk Shot", "High Jump Kick", "Pyro Ball", "U-turn"],
+ "abilities": ["Libero"],
+ "teraTypes": ["Fire"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Court Change", "High Jump Kick", "Pyro Ball", "Sucker Punch"],
+ "abilities": ["Libero"],
+ "teraTypes": ["Fighting", "Fire"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Court Change", "Gunk Shot", "High Jump Kick", "Pyro Ball", "U-turn"],
+ "abilities": ["Libero"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "inteleon": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dark Pulse", "Hydro Pump", "Ice Beam", "U-turn"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Hydro Pump", "Ice Beam", "Scald", "U-turn"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "greedent": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Slam", "Double-Edge", "Earthquake", "Knock Off", "Swords Dance"],
+ "abilities": ["Cheek Pouch"],
+ "teraTypes": ["Ghost", "Ground"]
+ }
+ ]
+ },
+ "corviknight": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Press", "Brave Bird", "Defog", "Roost", "U-turn"],
+ "abilities": ["Mirror Armor", "Pressure"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "drednaw": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Crunch", "Liquidation", "Shell Smash", "Stone Edge"],
+ "abilities": ["Strong Jaw"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Earthquake", "Liquidation", "Shell Smash", "Stone Edge"],
+ "abilities": ["Shell Armor", "Swift Swim"],
+ "teraTypes": ["Ground", "Water"]
+ }
+ ]
+ },
+ "coalossal": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Flamethrower", "Overheat", "Rapid Spin", "Spikes", "Stealth Rock", "Stone Edge", "Will-O-Wisp"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Ghost", "Grass", "Water"]
+ }
+ ]
+ },
+ "flapple": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dragon Dance", "Grav Apple", "Outrage", "Sucker Punch", "U-turn"],
+ "abilities": ["Hustle"],
+ "teraTypes": ["Dragon", "Grass"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Dragon Dance", "Grav Apple", "Outrage", "Tera Blast"],
+ "abilities": ["Hustle"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "appletun": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Apple Acid", "Draco Meteor", "Dragon Pulse", "Leech Seed", "Recover"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "sandaconda": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Coil", "Earthquake", "Glare", "Rest", "Stone Edge"],
+ "abilities": ["Shed Skin"],
+ "teraTypes": ["Dragon", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Glare", "Rest", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Shed Skin"],
+ "teraTypes": ["Dragon", "Water"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Coil", "Earthquake", "Rock Blast", "Scale Shot"],
+ "abilities": ["Shed Skin"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "cramorant": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Brave Bird", "Defog", "Roost", "Surf"],
+ "abilities": ["Gulp Missile"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "barraskewda": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Flip Turn", "Poison Jab", "Psychic Fangs", "Throat Chop", "Waterfall"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Fighting", "Water"]
+ }
+ ]
+ },
+ "toxtricity": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Boomburst", "Overdrive", "Sludge Wave", "Volt Switch"],
+ "abilities": ["Punk Rock"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Boomburst", "Gunk Shot", "Overdrive", "Shift Gear"],
+ "abilities": ["Punk Rock"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "polteageist": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Shadow Ball", "Shell Smash", "Stored Power", "Strength Sap", "Tera Blast"],
+ "abilities": ["Cursed Body"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Giga Drain", "Shadow Ball", "Shell Smash", "Stored Power", "Strength Sap"],
+ "abilities": ["Cursed Body"],
+ "teraTypes": ["Psychic"]
+ }
+ ]
+ },
+ "hatterene": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Draining Kiss", "Mystical Fire", "Psychic", "Psyshock"],
+ "abilities": ["Magic Bounce"],
+ "teraTypes": ["Fairy", "Steel"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Draining Kiss", "Mystical Fire", "Nuzzle", "Psychic", "Psychic Noise"],
+ "abilities": ["Magic Bounce"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "grimmsnarl": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Light Screen", "Parting Shot", "Reflect", "Spirit Break", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Parting Shot", "Spirit Break", "Sucker Punch", "Taunt", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "perrserker": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Iron Head", "Knock Off", "Stealth Rock", "U-turn"],
+ "abilities": ["Tough Claws"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Iron Head", "Knock Off", "Stealth Rock", "U-turn"],
+ "abilities": ["Steely Spirit"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "alcremie": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Alluring Voice", "Calm Mind", "Psychic", "Psyshock", "Recover"],
+ "abilities": ["Aroma Veil"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Alluring Voice", "Calm Mind", "Recover", "Tera Blast"],
+ "abilities": ["Aroma Veil"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "falinks": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Iron Head", "Knock Off", "No Retreat"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "pincurchin": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Discharge", "Recover", "Scald", "Spikes", "Thunderbolt", "Toxic Spikes"],
+ "abilities": ["Electric Surge"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Curse", "Liquidation", "Recover", "Zing Zap"],
+ "abilities": ["Electric Surge"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "frosmoth": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Bug Buzz", "Giga Drain", "Ice Beam", "Quiver Dance", "Tera Blast"],
+ "abilities": ["Ice Scales"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bug Buzz", "Giga Drain", "Hurricane", "Ice Beam", "Quiver Dance"],
+ "abilities": ["Ice Scales"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "stonjourner": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earthquake", "Heat Crash", "Rock Polish", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Power Spot"],
+ "teraTypes": ["Fire", "Ground"]
+ }
+ ]
+ },
+ "eiscue": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Belly Drum", "Ice Spinner", "Iron Head", "Liquidation", "Substitute", "Zen Headbutt"],
+ "abilities": ["Ice Face"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Belly Drum", "Ice Spinner", "Liquidation", "Substitute", "Tera Blast"],
+ "abilities": ["Ice Face"],
+ "teraTypes": ["Electric", "Ground"]
+ }
+ ]
+ },
+ "indeedee": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Calm Mind", "Dazzling Gleam", "Expanding Force", "Healing Wish", "Hyper Voice", "Shadow Ball"],
+ "abilities": ["Psychic Surge"],
+ "teraTypes": ["Psychic"]
+ }
+ ]
+ },
+ "indeedeef": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Calm Mind", "Dazzling Gleam", "Healing Wish", "Hyper Voice", "Psychic", "Psyshock", "Shadow Ball"],
+ "abilities": ["Psychic Surge"],
+ "teraTypes": ["Fairy", "Psychic"]
+ }
+ ]
+ },
+ "morpeko": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Aura Wheel", "Parting Shot", "Protect", "Rapid Spin"],
+ "abilities": ["Hunger Switch"],
+ "teraTypes": ["Electric"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Aura Wheel", "Knock Off", "Protect", "Rapid Spin"],
+ "abilities": ["Hunger Switch"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "copperajah": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Earthquake", "Iron Head", "Play Rough", "Rock Slide", "Stealth Rock", "Superpower"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Heat Crash", "Heavy Slam", "Knock Off", "Stone Edge", "Supercell Slam", "Superpower"],
+ "abilities": ["Heavy Metal"],
+ "teraTypes": ["Fire", "Steel"]
+ }
+ ]
+ },
+ "duraludon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Draco Meteor", "Dragon Tail", "Flash Cannon", "Iron Defense", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Light Metal"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "dragapult": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Draco Meteor", "Fire Blast", "Shadow Ball", "Thunderbolt", "U-turn"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Dragon", "Fire", "Ghost"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Dragon Dance", "Dragon Darts", "Fire Blast", "Tera Blast"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Dragon Darts", "Hex", "U-turn", "Will-O-Wisp"],
+ "abilities": ["Cursed Body", "Infiltrator"],
+ "teraTypes": ["Dragon", "Fairy"]
+ }
+ ]
+ },
+ "zacian": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Crunch", "Play Rough", "Psychic Fangs", "Swords Dance", "Wild Charge"],
+ "abilities": ["Intrepid Sword"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "zaciancrowned": {
+ "level": 64,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Behemoth Blade", "Close Combat", "Play Rough", "Swords Dance"],
+ "abilities": ["Intrepid Sword"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "zamazenta": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Close Combat", "Crunch", "Iron Head", "Psychic Fangs", "Stone Edge"],
+ "abilities": ["Dauntless Shield"],
+ "teraTypes": ["Dark", "Fighting", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Crunch", "Iron Defense", "Iron Head", "Rest", "Stone Edge", "Substitute"],
+ "abilities": ["Dauntless Shield"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "zamazentacrowned": {
+ "level": 68,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Crunch", "Heavy Slam", "Iron Defense", "Stone Edge"],
+ "abilities": ["Dauntless Shield"],
+ "teraTypes": ["Fighting", "Ghost"]
+ }
+ ]
+ },
+ "eternatus": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dynamax Cannon", "Fire Blast", "Recover", "Sludge Bomb"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Fire"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Dynamax Cannon", "Flamethrower", "Recover", "Toxic", "Toxic Spikes"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dynamax Cannon", "Fire Blast", "Meteor Beam", "Sludge Bomb"],
+ "abilities": ["Pressure"],
+ "teraTypes": ["Dragon", "Fire", "Poison"]
+ }
+ ]
+ },
+ "urshifu": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Poison Jab", "Sucker Punch", "Swords Dance", "U-turn", "Wicked Blow"],
+ "abilities": ["Unseen Fist"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ }
+ ]
+ },
+ "urshifurapidstrike": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Aqua Jet", "Close Combat", "Ice Spinner", "Surging Strikes", "Swords Dance", "U-turn"],
+ "abilities": ["Unseen Fist"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "zarude": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Close Combat", "Knock Off", "Power Whip", "Swords Dance", "Synthesis"],
+ "abilities": ["Leaf Guard"],
+ "teraTypes": ["Dark", "Fighting", "Grass"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Knock Off", "Power Whip", "U-turn"],
+ "abilities": ["Leaf Guard"],
+ "teraTypes": ["Dark", "Fighting", "Grass"]
+ }
+ ]
+ },
+ "regieleki": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Explosion", "Rapid Spin", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Transistor"],
+ "teraTypes": ["Electric"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Rapid Spin", "Tera Blast", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Transistor"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "regidrago": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Draco Meteor", "Dragon Dance", "Earthquake", "Outrage"],
+ "abilities": ["Dragon's Maw"],
+ "teraTypes": ["Dragon"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Dragon Claw", "Dragon Dance", "Earthquake", "Tera Blast"],
+ "abilities": ["Dragon's Maw"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Draco Meteor", "Dragon Energy", "Earthquake", "Outrage"],
+ "abilities": ["Dragon's Maw"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "glastrier": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Close Combat", "Heavy Slam", "High Horsepower", "Icicle Crash", "Swords Dance"],
+ "abilities": ["Chilling Neigh"],
+ "teraTypes": ["Fighting", "Ground", "Steel"]
+ }
+ ]
+ },
+ "spectrier": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dark Pulse", "Draining Kiss", "Nasty Plot", "Shadow Ball", "Substitute", "Will-O-Wisp"],
+ "abilities": ["Grim Neigh"],
+ "teraTypes": ["Dark", "Fairy"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Nasty Plot", "Shadow Ball", "Substitute", "Tera Blast", "Will-O-Wisp"],
+ "abilities": ["Grim Neigh"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "calyrex": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Encore", "Giga Drain", "Leech Seed", "Psychic", "Psyshock"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Encore", "Giga Drain", "Leech Seed", "Psychic", "Psyshock"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "calyrexice": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Agility", "Close Combat", "Glacial Lance", "High Horsepower"],
+ "abilities": ["As One (Glastrier)"],
+ "teraTypes": ["Fighting", "Ground"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Glacial Lance", "High Horsepower", "Trick Room"],
+ "abilities": ["As One (Glastrier)"],
+ "teraTypes": ["Fighting", "Ground"]
+ }
+ ]
+ },
+ "calyrexshadow": {
+ "level": 64,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Astral Barrage", "Nasty Plot", "Pollen Puff", "Psyshock", "Trick"],
+ "abilities": ["As One (Spectrier)"],
+ "teraTypes": ["Dark", "Ghost"]
+ }
+ ]
+ },
+ "wyrdeer": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Slam", "Earthquake", "Megahorn", "Psychic Noise", "Thunder Wave"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "kleavor": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Close Combat", "Defog", "Stone Axe", "Swords Dance", "U-turn", "X-Scissor"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Bug", "Fighting", "Rock"]
+ }
+ ]
+ },
+ "ursaluna": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Crunch", "Facade", "Headlong Rush", "Swords Dance", "Throat Chop", "Trailblaze"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "ursalunabloodmoon": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Blood Moon", "Calm Mind", "Earth Power", "Moonlight"],
+ "abilities": ["Mind's Eye"],
+ "teraTypes": ["Ghost", "Normal", "Poison"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Blood Moon", "Calm Mind", "Moonlight", "Vacuum Wave"],
+ "abilities": ["Mind's Eye"],
+ "teraTypes": ["Fighting", "Ghost", "Normal", "Poison"]
+ }
+ ]
+ },
+ "enamorus": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Play Rough", "Substitute", "Superpower", "Taunt", "Zen Headbutt"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Moonblast", "Mystical Fire", "Substitute"],
+ "abilities": ["Cute Charm"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "enamorustherian": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earth Power", "Moonblast", "Mystical Fire", "Psychic", "Superpower"],
+ "abilities": ["Overcoat"],
+ "teraTypes": ["Fairy", "Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Agility", "Earth Power", "Moonblast", "Mystical Fire", "Superpower"],
+ "abilities": ["Overcoat"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "meowscarada": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Flower Trick", "Knock Off", "Toxic Spikes", "Triple Axel", "U-turn"],
+ "abilities": ["Protean"],
+ "teraTypes": ["Dark", "Grass"]
+ }
+ ]
+ },
+ "skeledirge": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Flame Charge", "Shadow Ball", "Slack Off", "Torch Song"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Fairy", "Water"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Hex", "Slack Off", "Torch Song", "Will-O-Wisp"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Fairy", "Water"]
+ }
+ ]
+ },
+ "quaquaval": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Aqua Step", "Close Combat", "Knock Off", "Rapid Spin", "Roost", "Triple Axel", "U-turn"],
+ "abilities": ["Moxie"],
+ "teraTypes": ["Fighting", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Aqua Step", "Close Combat", "Encore", "Knock Off", "Roost", "Swords Dance", "Triple Axel"],
+ "abilities": ["Moxie"],
+ "teraTypes": ["Fighting", "Water"]
+ }
+ ]
+ },
+ "oinkologne": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Slam", "Curse", "Double-Edge", "High Horsepower", "Lash Out"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "oinkolognef": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Slam", "Curse", "Double-Edge", "High Horsepower", "Lash Out"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Slam", "Curse", "Rest", "Sleep Talk"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fairy", "Poison"]
+ }
+ ]
+ },
+ "spidops": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Circle Throw", "Knock Off", "Spikes", "Sticky Web", "Toxic Spikes", "U-turn"],
+ "abilities": ["Stakeout"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "lokix": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["First Impression", "Knock Off", "Leech Life", "Sucker Punch"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Bug"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["First Impression", "Knock Off", "Sucker Punch", "U-turn"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Bug"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Knock Off", "Leech Life", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "pawmot": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Double Shock", "Knock Off", "Nuzzle", "Revival Blessing"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Electric"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Double Shock", "Ice Punch", "Revival Blessing"],
+ "abilities": ["Iron Fist"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "maushold": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bite", "Encore", "Population Bomb", "Tidy Up"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Ghost", "Normal"]
+ }
+ ]
+ },
+ "dachsbun": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Press", "Play Rough", "Protect", "Stomping Tantrum", "Wish"],
+ "abilities": ["Well-Baked Body"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "arboliva": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earth Power", "Energy Ball", "Hyper Voice", "Strength Sap"],
+ "abilities": ["Seed Sower"],
+ "teraTypes": ["Grass", "Ground", "Poison"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Hyper Voice", "Leech Seed", "Protect", "Substitute"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Poison", "Water"]
+ }
+ ]
+ },
+ "squawkabilly": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Brave Bird", "Facade", "Protect", "Quick Attack", "U-turn"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "squawkabillywhite": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Brave Bird", "Double-Edge", "Foul Play", "Parting Shot", "Quick Attack"],
+ "abilities": ["Hustle"],
+ "teraTypes": ["Flying", "Normal"]
+ }
+ ]
+ },
+ "squawkabillyblue": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Brave Bird", "Facade", "Protect", "Quick Attack", "U-turn"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "squawkabillyyellow": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Brave Bird", "Double-Edge", "Foul Play", "Parting Shot", "Quick Attack"],
+ "abilities": ["Hustle"],
+ "teraTypes": ["Flying", "Normal"]
+ }
+ ]
+ },
+ "garganacl": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Protect", "Recover", "Salt Cure", "Stealth Rock"],
+ "abilities": ["Purifying Salt"],
+ "teraTypes": ["Dragon", "Ghost"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Press", "Protect", "Recover", "Salt Cure", "Stealth Rock"],
+ "abilities": ["Purifying Salt"],
+ "teraTypes": ["Dragon", "Ghost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Recover", "Salt Cure"],
+ "abilities": ["Purifying Salt"],
+ "teraTypes": ["Dragon", "Ghost"]
+ }
+ ]
+ },
+ "armarouge": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Armor Cannon", "Aura Sphere", "Energy Ball", "Focus Blast", "Psyshock"],
+ "abilities": ["Weak Armor"],
+ "teraTypes": ["Fighting", "Fire", "Grass", "Psychic"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Armor Cannon", "Energy Ball", "Meteor Beam", "Psyshock"],
+ "abilities": ["Weak Armor"],
+ "teraTypes": ["Fire", "Grass"]
+ }
+ ]
+ },
+ "ceruledge": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bitter Blade", "Close Combat", "Poltergeist", "Shadow Sneak", "Swords Dance"],
+ "abilities": ["Weak Armor"],
+ "teraTypes": ["Fighting", "Fire", "Ghost"]
+ }
+ ]
+ },
+ "bellibolt": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Muddy Water", "Slack Off", "Thunderbolt", "Toxic", "Volt Switch"],
+ "abilities": ["Electromorphosis"],
+ "teraTypes": ["Electric", "Water"]
+ }
+ ]
+ },
+ "kilowattrel": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Hurricane", "Roost", "Thunder Wave", "Thunderbolt", "U-turn"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Electric", "Flying", "Steel", "Water"]
+ }
+ ]
+ },
+ "mabosstiff": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Crunch", "Play Rough", "Psychic Fangs", "Wild Charge"],
+ "abilities": ["Stakeout"],
+ "teraTypes": ["Dark", "Fairy"]
+ }
+ ]
+ },
+ "grafaiai": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Gunk Shot", "Knock Off", "Super Fang", "U-turn"],
+ "abilities": ["Poison Touch"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Encore", "Gunk Shot", "Knock Off", "Parting Shot"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Gunk Shot", "Knock Off", "Low Kick", "Swords Dance"],
+ "abilities": ["Poison Touch"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "brambleghast": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Leech Seed", "Poltergeist", "Power Whip", "Rapid Spin", "Spikes", "Strength Sap", "Substitute"],
+ "abilities": ["Wind Rider"],
+ "teraTypes": ["Fairy", "Steel", "Water"]
+ }
+ ]
+ },
+ "toedscruel": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earth Power", "Giga Drain", "Knock Off", "Leaf Storm", "Rapid Spin", "Spore", "Toxic"],
+ "abilities": ["Mycelium Might"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "klawf": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Crabhammer", "High Horsepower", "Knock Off", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Ground", "Rock", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Crabhammer", "High Horsepower", "Knock Off", "Stone Edge", "Swords Dance"],
+ "abilities": ["Anger Shell"],
+ "teraTypes": ["Dark", "Ground", "Rock", "Water"]
+ }
+ ]
+ },
+ "scovillain": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Flamethrower", "Leech Seed", "Protect", "Substitute"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Energy Ball", "Flamethrower", "Leaf Storm", "Overheat"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire", "Grass"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Energy Ball", "Fire Blast", "Stomping Tantrum", "Sunny Day"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire", "Grass", "Ground"]
+ }
+ ]
+ },
+ "rabsca": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Bug Buzz", "Earth Power", "Psychic", "Recover", "Revival Blessing", "Trick Room"],
+ "abilities": ["Synchronize"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "espathra": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Dazzling Gleam", "Lumina Crash", "Shadow Ball", "U-turn"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Fairy", "Psychic"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Calm Mind", "Dazzling Gleam", "Protect", "Roost", "Stored Power", "Substitute"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "tinkaton": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Gigaton Hammer", "Knock Off", "Play Rough", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Mold Breaker"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Gigaton Hammer", "Knock Off", "Play Rough", "Swords Dance"],
+ "abilities": ["Mold Breaker"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "wugtrio": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Aqua Jet", "Liquidation", "Stomping Tantrum", "Throat Chop"],
+ "abilities": ["Gooey"],
+ "teraTypes": ["Dark", "Ground", "Water"]
+ }
+ ]
+ },
+ "bombirdier": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Brave Bird", "Knock Off", "Roost", "Stone Edge", "Sucker Punch", "U-turn"],
+ "abilities": ["Rocky Payload"],
+ "teraTypes": ["Rock"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Brave Bird", "Knock Off", "Roost", "Stealth Rock", "Sucker Punch", "U-turn"],
+ "abilities": ["Big Pecks"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "palafin": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Flip Turn", "Jet Punch", "Wave Crash"],
+ "abilities": ["Zero to Hero"],
+ "teraTypes": ["Fighting", "Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Ice Punch", "Jet Punch", "Wave Crash"],
+ "abilities": ["Zero to Hero"],
+ "teraTypes": ["Dragon", "Steel"]
+ }
+ ]
+ },
+ "revavroom": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Gunk Shot", "High Horsepower", "Iron Head", "Shift Gear"],
+ "abilities": ["Filter"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "cyclizar": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Draco Meteor", "Knock Off", "Rapid Spin", "Shed Tail", "Taunt"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dragon", "Fairy", "Ghost", "Steel"]
+ }
+ ]
+ },
+ "orthworm": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Coil", "Iron Tail", "Rest"],
+ "abilities": ["Earth Eater"],
+ "teraTypes": ["Electric", "Fighting"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Heavy Slam", "Rest", "Shed Tail", "Spikes", "Stealth Rock"],
+ "abilities": ["Earth Eater"],
+ "teraTypes": ["Electric", "Fighting", "Ghost", "Poison"]
+ }
+ ]
+ },
+ "glimmora": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Earth Power", "Mortal Spin", "Power Gem", "Sludge Wave", "Spikes", "Stealth Rock"],
+ "abilities": ["Toxic Debris"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earth Power", "Energy Ball", "Meteor Beam", "Sludge Wave"],
+ "abilities": ["Toxic Debris"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "houndstone": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Play Rough", "Poltergeist", "Roar", "Shadow Sneak", "Trick", "Will-O-Wisp"],
+ "abilities": ["Fluffy"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Press", "Poltergeist", "Rest", "Sleep Talk"],
+ "abilities": ["Fluffy"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Body Press", "Play Rough", "Poltergeist", "Shadow Sneak"],
+ "abilities": ["Fluffy"],
+ "teraTypes": ["Fairy", "Fighting"]
+ }
+ ]
+ },
+ "flamigo": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Brave Bird", "Close Combat", "Throat Chop", "U-turn"],
+ "abilities": ["Scrappy"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Brave Bird", "Close Combat", "Roost", "Swords Dance", "Throat Chop"],
+ "abilities": ["Scrappy"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "cetitan": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Liquidation", "Superpower"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Belly Drum", "Earthquake", "Ice Shard", "Ice Spinner"],
+ "abilities": ["Slush Rush", "Thick Fat"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "veluza": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Aqua Cutter", "Aqua Jet", "Flip Turn", "Night Slash", "Psycho Cut"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Dark", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Aqua Cutter", "Fillet Away", "Night Slash", "Psycho Cut"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Dark", "Psychic", "Water"]
+ }
+ ]
+ },
+ "dondozo": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Curse", "Rest", "Sleep Talk", "Wave Crash"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Dragon", "Fairy"]
+ }
+ ]
+ },
+ "tatsugiri": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Draco Meteor", "Hydro Pump", "Nasty Plot", "Rapid Spin", "Surf"],
+ "abilities": ["Storm Drain"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "farigiraf": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Slam", "Protect", "Psychic Noise", "Wish"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Fairy", "Ground", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Future Sight", "Hyper Voice", "Protect", "Wish"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Fairy", "Ground", "Water"]
+ }
+ ]
+ },
+ "dudunsparce": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Glare", "Headbutt", "Roost"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Ghost", "Ground"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Boomburst", "Calm Mind", "Earth Power", "Roost"],
+ "abilities": ["Rattled"],
+ "teraTypes": ["Fairy", "Ghost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Boomburst", "Calm Mind", "Roost", "Shadow Ball"],
+ "abilities": ["Rattled"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "kingambit": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Iron Head", "Kowtow Cleave", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Supreme Overlord"],
+ "teraTypes": ["Dark", "Flying"]
+ }
+ ]
+ },
+ "greattusk": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Rapid Spin", "Stone Edge"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Ground", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Rapid Spin", "Stone Edge"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Ground", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Close Combat", "Headlong Rush", "Ice Spinner", "Knock Off", "Rapid Spin", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "brutebonnet": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Close Combat", "Seed Bomb", "Spore", "Sucker Punch"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Fighting", "Poison"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Crunch", "Seed Bomb", "Spore", "Sucker Punch"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Dark", "Poison"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Crunch", "Seed Bomb", "Sucker Punch"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ }
+ ]
+ },
+ "sandyshocks": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Earth Power", "Spikes", "Stealth Rock", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Electric", "Grass", "Ground"]
+ }
+ ]
+ },
+ "screamtail": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Play Rough", "Protect", "Thunder Wave", "Wish"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dazzling Gleam", "Encore", "Protect", "Thunder Wave", "Wish"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "fluttermane": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Calm Mind", "Moonblast", "Mystical Fire", "Psyshock", "Shadow Ball", "Thunderbolt"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Electric", "Fairy", "Fire", "Ghost"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Moonblast", "Mystical Fire", "Psyshock", "Shadow Ball", "Thunderbolt"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "slitherwing": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Flame Charge", "Leech Life", "Wild Charge"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Electric", "Fighting"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Earthquake", "First Impression", "Flare Blitz", "U-turn", "Wild Charge"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Bug", "Electric", "Fighting", "Fire"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Close Combat", "Morning Sun", "U-turn", "Will-O-Wisp"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Fire", "Steel"]
+ }
+ ]
+ },
+ "roaringmoon": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Iron Head", "Knock Off", "Outrage", "Roost"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Dark", "Dragon", "Ground", "Poison", "Steel"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Acrobatics", "Dragon Dance", "Iron Head", "Knock Off", "Outrage"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Flying", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Iron Head", "Knock Off", "Outrage", "U-turn"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Dark", "Dragon", "Steel"]
+ }
+ ]
+ },
+ "walkingwake": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Draco Meteor", "Flamethrower", "Flip Turn", "Hydro Pump"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Fire", "Water"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Draco Meteor", "Flamethrower", "Hydro Steam", "Sunny Day"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "irontreads": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Iron Head", "Knock Off", "Rapid Spin", "Stealth Rock", "Volt Switch"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "ironmoth": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Energy Ball", "Fiery Dance", "Fire Blast", "Morning Sun", "Sludge Wave", "Toxic Spikes", "U-turn"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fire", "Grass"]
+ }
+ ]
+ },
+ "ironhands": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Close Combat", "Drain Punch", "Fake Out", "Heavy Slam", "Ice Punch", "Thunder Punch", "Volt Switch", "Wild Charge"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Electric", "Fighting"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Drain Punch", "Ice Punch", "Swords Dance", "Thunder Punch", "Wild Charge"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting", "Flying", "Steel"]
+ }
+ ]
+ },
+ "ironjugulis": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Dark Pulse", "Earth Power", "Fire Blast", "Hurricane", "Hydro Pump", "U-turn"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Dark", "Flying", "Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dark Pulse", "Earth Power", "Hurricane", "Meteor Beam"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Dark", "Ground"]
+ }
+ ]
+ },
+ "ironthorns": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Earthquake", "Ice Punch", "Spikes", "Stealth Rock", "Stone Edge", "Volt Switch", "Wild Charge"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Flying", "Grass", "Water"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Dragon Dance", "Earthquake", "Ice Punch", "Stone Edge", "Wild Charge"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Flying", "Grass", "Ground", "Rock"]
+ }
+ ]
+ },
+ "ironbundle": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Encore", "Flip Turn", "Freeze-Dry", "Hydro Pump", "Ice Beam", "Substitute"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Ice", "Water"]
+ }
+ ]
+ },
+ "ironvaliant": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Knock Off", "Spirit Break", "Swords Dance"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Dark", "Fighting"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Calm Mind", "Close Combat", "Moonblast", "Psychic"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fairy", "Fighting", "Steel"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Encore", "Knock Off", "Moonblast"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Dark", "Fairy", "Fighting", "Steel"]
+ }
+ ]
+ },
+ "ironleaves": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Leaf Blade", "Megahorn", "Psyblade", "Swords Dance"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "baxcalibur": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earthquake", "Glaive Rush", "Ice Shard", "Icicle Crash"],
+ "abilities": ["Thermal Exchange"],
+ "teraTypes": ["Dragon", "Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Glaive Rush", "Icicle Crash"],
+ "abilities": ["Thermal Exchange"],
+ "teraTypes": ["Dragon", "Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Earthquake", "Icicle Spear", "Scale Shot", "Swords Dance"],
+ "abilities": ["Thermal Exchange"],
+ "teraTypes": ["Dragon", "Ground"]
+ }
+ ]
+ },
+ "gholdengo": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Focus Blast", "Make It Rain", "Nasty Plot", "Shadow Ball", "Trick"],
+ "abilities": ["Good as Gold"],
+ "teraTypes": ["Fighting", "Ghost", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Make It Rain", "Nasty Plot", "Recover", "Shadow Ball", "Thunder Wave"],
+ "abilities": ["Good as Gold"],
+ "teraTypes": ["Dark", "Steel", "Water"]
+ }
+ ]
+ },
+ "tinglu": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Spikes", "Stealth Rock", "Throat Chop", "Whirlwind"],
+ "abilities": ["Vessel of Ruin"],
+ "teraTypes": ["Ghost", "Poison"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Heavy Slam", "Payback", "Ruination", "Spikes", "Stealth Rock"],
+ "abilities": ["Vessel of Ruin"],
+ "teraTypes": ["Ghost", "Poison", "Steel"]
+ }
+ ]
+ },
+ "chienpao": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Crunch", "Ice Shard", "Icicle Crash", "Sacred Sword", "Throat Chop"],
+ "abilities": ["Sword of Ruin"],
+ "teraTypes": ["Dark", "Fighting", "Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Ice Shard", "Icicle Crash", "Sacred Sword", "Sucker Punch", "Swords Dance", "Throat Chop"],
+ "abilities": ["Sword of Ruin"],
+ "teraTypes": ["Dark", "Fighting", "Ice"]
+ }
+ ]
+ },
+ "wochien": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Giga Drain", "Knock Off", "Leech Seed", "Protect", "Ruination", "Stun Spore"],
+ "abilities": ["Tablets of Ruin"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "chiyu": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dark Pulse", "Fire Blast", "Nasty Plot", "Psychic", "Will-O-Wisp"],
+ "abilities": ["Beads of Ruin"],
+ "teraTypes": ["Dark", "Fire"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dark Pulse", "Flamethrower", "Overheat", "Psychic"],
+ "abilities": ["Beads of Ruin"],
+ "teraTypes": ["Dark", "Fire"]
+ }
+ ]
+ },
+ "koraidon": {
+ "level": 64,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Flare Blitz", "Outrage", "U-turn"],
+ "abilities": ["Orichalcum Pulse"],
+ "teraTypes": ["Fire"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Collision Course", "Flare Blitz", "Scale Shot", "Swords Dance"],
+ "abilities": ["Orichalcum Pulse"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "miraidon": {
+ "level": 65,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Calm Mind", "Draco Meteor", "Electro Drift", "Substitute"],
+ "abilities": ["Hadron Engine"],
+ "teraTypes": ["Electric"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Draco Meteor", "Electro Drift", "Overheat", "Volt Switch"],
+ "abilities": ["Hadron Engine"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "dipplin": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dragon Pulse", "Dragon Tail", "Giga Drain", "Recover", "Sucker Punch"],
+ "abilities": ["Sticky Hold"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "sinistcha": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Matcha Gotcha", "Shadow Ball", "Strength Sap"],
+ "abilities": ["Heatproof"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "okidogi": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Gunk Shot", "Knock Off"],
+ "abilities": ["Toxic Chain"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Drain Punch", "Gunk Shot", "High Horsepower", "Knock Off", "Psychic Fangs"],
+ "abilities": ["Toxic Chain"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "munkidori": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Focus Blast", "Nasty Plot", "Psyshock", "Sludge Wave", "U-turn"],
+ "abilities": ["Toxic Chain"],
+ "teraTypes": ["Fighting", "Poison"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Fake Out", "Psychic Noise", "Sludge Wave", "U-turn"],
+ "abilities": ["Toxic Chain"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "fezandipiti": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Beat Up", "Gunk Shot", "Heat Wave", "Play Rough", "U-turn"],
+ "abilities": ["Toxic Chain"],
+ "teraTypes": ["Dark", "Steel", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Beat Up", "Gunk Shot", "Play Rough", "Roost", "U-turn"],
+ "abilities": ["Toxic Chain"],
+ "teraTypes": ["Dark", "Steel", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Gunk Shot", "Play Rough", "Swords Dance", "Tera Blast"],
+ "abilities": ["Toxic Chain"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "ogerpon": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Encore", "Ivy Cudgel", "Knock Off", "Spikes", "Superpower", "Synthesis", "U-turn"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Grass"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Ivy Cudgel", "Knock Off", "Superpower", "Swords Dance"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "ogerponwellspring": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Ivy Cudgel", "Spikes", "Synthesis", "U-turn", "Wood Hammer"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Horn Leech", "Ivy Cudgel", "Knock Off", "Play Rough", "Power Whip", "Swords Dance"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "ogerponhearthflame": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Horn Leech", "Ivy Cudgel", "Knock Off", "Power Whip", "Stomping Tantrum", "Swords Dance"],
+ "abilities": ["Mold Breaker"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "ogerponcornerstone": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Ivy Cudgel", "Power Whip", "Spikes", "Superpower", "Synthesis"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Rock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Horn Leech", "Ivy Cudgel", "Power Whip", "Superpower", "Swords Dance"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Rock"]
+ }
+ ]
+ },
+ "archaludon": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Earthquake", "Iron Head", "Outrage", "Swords Dance"],
+ "abilities": ["Stamina"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Draco Meteor", "Dragon Tail", "Flash Cannon", "Stealth Rock", "Thunder Wave", "Thunderbolt"],
+ "abilities": ["Stamina"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "hydrapple": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Dragon Tail", "Earth Power", "Fickle Beam", "Giga Drain", "Leaf Storm"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Earth Power", "Fickle Beam", "Giga Drain", "Nasty Plot", "Recover"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Draco Meteor", "Earth Power", "Fickle Beam", "Leaf Storm"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dragon", "Steel"]
+ }
+ ]
+ },
+ "gougingfire": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Heat Crash", "Outrage"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Dragon Dance", "Flare Blitz", "Heat Crash", "Morning Sun", "Outrage"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "ragingbolt": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Discharge", "Draco Meteor", "Thunderbolt", "Thunderclap", "Volt Switch"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Electric"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Dragon Pulse", "Thunderbolt", "Thunderclap"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Electric", "Fairy"]
+ }
+ ]
+ },
+ "ironboulder": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Mighty Cleave", "Swords Dance", "Zen Headbutt"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Close Combat", "Mighty Cleave", "Swords Dance", "Zen Headbutt"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "ironcrown": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Focus Blast", "Psyshock", "Tachyon Cutter"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting", "Steel"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Focus Blast", "Psyshock", "Tachyon Cutter", "Volt Switch"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "terapagos": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Calm Mind", "Dark Pulse", "Rapid Spin", "Rest", "Tera Starstorm"],
+ "abilities": ["Tera Shift"],
+ "teraTypes": ["Stellar"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Rapid Spin", "Rest", "Tera Starstorm"],
+ "abilities": ["Tera Shift"],
+ "teraTypes": ["Stellar"]
+ }
+ ]
+ },
+ "pecharunt": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Malignant Chain", "Nasty Plot", "Parting Shot", "Recover", "Shadow Ball"],
+ "abilities": ["Poison Puppeteer"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen9/teams.ts b/data/random-battles/gen9/teams.ts
new file mode 100644
index 000000000000..c3df7c8609ea
--- /dev/null
+++ b/data/random-battles/gen9/teams.ts
@@ -0,0 +1,3004 @@
+import {Dex, toID} from '../../../sim/dex';
+import {Utils} from '../../../lib';
+import {PRNG, PRNGSeed} from '../../../sim/prng';
+import {RuleTable} from '../../../sim/dex-formats';
+import {Tags} from './../../tags';
+import {Teams} from '../../../sim/teams';
+
+export interface TeamData {
+ typeCount: {[k: string]: number};
+ typeComboCount: {[k: string]: number};
+ baseFormes: {[k: string]: number};
+ megaCount?: number;
+ zCount?: number;
+ wantsTeraCount?: number;
+ has: {[k: string]: number};
+ forceResult: boolean;
+ weaknesses: {[k: string]: number};
+ resistances: {[k: string]: number};
+ weather?: string;
+ eeveeLimCount?: number;
+ gigantamax?: boolean;
+}
+export interface BattleFactorySpecies {
+ sets: BattleFactorySet[];
+ weight: number;
+}
+interface BattleFactorySet {
+ species: string;
+ weight: number;
+ item: string[];
+ ability: string[];
+ nature: string[];
+ moves: string[][];
+ teraType: string[];
+ gender?: string;
+ wantsTera?: boolean;
+ evs?: Partial;
+ ivs?: Partial;
+ shiny?: boolean;
+}
+interface BSSFactorySet {
+ species: string;
+ weight: number;
+ item: string[];
+ ability: string;
+ nature: string;
+ moves: string[][];
+ teraType: string[];
+ gender?: string;
+ wantsTera?: boolean;
+ evs: number[];
+ ivs?: number[];
+}
+export class MoveCounter extends Utils.Multiset {
+ damagingMoves: Set;
+
+ constructor() {
+ super();
+ this.damagingMoves = new Set();
+ }
+}
+
+type MoveEnforcementChecker = (
+ movePool: string[], moves: Set, abilities: string[], types: string[],
+ counter: MoveCounter, species: Species, teamDetails: RandomTeamsTypes.TeamDetails,
+ isLead: boolean, isDoubles: boolean, teraType: string, role: RandomTeamsTypes.Role,
+) => boolean;
+
+// Moves that restore HP:
+const RECOVERY_MOVES = [
+ 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis',
+];
+// Moves that drop stats:
+const CONTRARY_MOVES = [
+ 'armorcannon', 'closecombat', 'leafstorm', 'makeitrain', 'overheat', 'spinout', 'superpower', 'vcreate',
+];
+// Moves that boost Attack:
+const PHYSICAL_SETUP = [
+ 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'swordsdance', 'tidyup', 'victorydance',
+];
+// Moves which boost Special Attack:
+const SPECIAL_SETUP = [
+ 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', 'takeheart', 'torchsong',
+];
+// Moves that boost Attack AND Special Attack:
+const MIXED_SETUP = [
+ 'clangoroussoul', 'growth', 'happyhour', 'holdhands', 'noretreat', 'shellsmash', 'workup',
+];
+// Some moves that only boost Speed:
+const SPEED_SETUP = [
+ 'agility', 'autotomize', 'flamecharge', 'rockpolish', 'snowscape', 'trailblaze',
+];
+// Conglomerate for ease of access
+const SETUP = [
+ 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse', 'dragondance',
+ 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', 'quiverdance',
+ 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'takeheart', 'tidyup', 'trailblaze', 'workup', 'victorydance',
+];
+const SPEED_CONTROL = [
+ 'electroweb', 'glare', 'icywind', 'lowsweep', 'quash', 'stringshot', 'tailwind', 'thunderwave', 'trickroom',
+];
+// Moves that shouldn't be the only STAB moves:
+const NO_STAB = [
+ 'accelerock', 'aquajet', 'bounce', 'breakingswipe', 'bulletpunch', 'chatter', 'chloroblast', 'circlethrow', 'clearsmog', 'covet',
+ 'dragontail', 'doomdesire', 'electroweb', 'eruption', 'explosion', 'fakeout', 'feint', 'flamecharge', 'flipturn', 'futuresight',
+ 'grassyglide', 'iceshard', 'icywind', 'incinerate', 'infestation', 'machpunch', 'meteorbeam', 'mortalspin', 'nuzzle', 'pluck', 'pursuit',
+ 'quickattack', 'rapidspin', 'reversal', 'selfdestruct', 'shadowsneak', 'skydrop', 'snarl', 'strugglebug', 'suckerpunch', 'uturn',
+ 'vacuumwave', 'voltswitch', 'watershuriken', 'waterspout',
+];
+// Hazard-setting moves
+const HAZARDS = [
+ 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes',
+];
+// Protect and its variants
+const PROTECT_MOVES = [
+ 'banefulbunker', 'burningbulwark', 'protect', 'silktrap', 'spikyshield',
+];
+// Moves that switch the user out
+const PIVOT_MOVES = [
+ 'chillyreception', 'flipturn', 'partingshot', 'shedtail', 'teleport', 'uturn', 'voltswitch',
+];
+
+// Moves that should be paired together when possible
+const MOVE_PAIRS = [
+ ['lightscreen', 'reflect'],
+ ['sleeptalk', 'rest'],
+ ['protect', 'wish'],
+ ['leechseed', 'protect'],
+ ['leechseed', 'substitute'],
+];
+
+/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */
+const PRIORITY_POKEMON = [
+ 'breloom', 'brutebonnet', 'cacturne', 'honchkrow', 'mimikyu', 'ragingbolt', 'scizor',
+];
+
+/** Pokemon who should never be in the lead slot */
+const NO_LEAD_POKEMON = [
+ 'Zacian', 'Zamazenta',
+];
+const DOUBLES_NO_LEAD_POKEMON = [
+ 'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta',
+];
+
+const DEFENSIVE_TERA_BLAST_USERS = [
+ 'alcremie', 'bellossom', 'comfey', 'fezandipiti', 'florges', 'raikou',
+];
+
+function sereneGraceBenefits(move: Move) {
+ return move.secondary?.chance && move.secondary.chance > 20 && move.secondary.chance < 100;
+}
+
+export class RandomTeams {
+ readonly dex: ModdedDex;
+ gen: number;
+ factoryTier: string;
+ format: Format;
+ prng: PRNG;
+ noStab: string[];
+ readonly maxTeamSize: number;
+ readonly adjustLevel: number | null;
+ readonly maxMoveCount: number;
+ readonly forceMonotype: string | undefined;
+ readonly forceTeraType: string | undefined;
+
+ /**
+ * Checkers for move enforcement based on types or other factors
+ *
+ * returns true to try to force the move type, false otherwise.
+ */
+ moveEnforcementCheckers: {[k: string]: MoveEnforcementChecker};
+
+ /** Used by .getPools() */
+ private poolsCacheKey: [string | undefined, number | undefined, RuleTable | undefined, boolean] | undefined;
+ private cachedPool: number[] | undefined;
+ private cachedSpeciesPool: Species[] | undefined;
+ protected cachedStatusMoves: ID[];
+
+ constructor(format: Format | string, prng: PRNG | PRNGSeed | null) {
+ format = Dex.formats.get(format);
+ this.dex = Dex.forFormat(format);
+ this.gen = this.dex.gen;
+ this.noStab = NO_STAB;
+
+ const ruleTable = Dex.formats.getRuleTable(format);
+ this.maxTeamSize = ruleTable.maxTeamSize;
+ this.adjustLevel = ruleTable.adjustLevel;
+ this.maxMoveCount = ruleTable.maxMoveCount;
+ const forceMonotype = ruleTable.valueRules.get('forcemonotype');
+ this.forceMonotype = forceMonotype && this.dex.types.get(forceMonotype).exists ?
+ this.dex.types.get(forceMonotype).name : undefined;
+ const forceTeraType = ruleTable.valueRules.get('forceteratype');
+ this.forceTeraType = forceTeraType && this.dex.types.get(forceTeraType).exists ?
+ this.dex.types.get(forceTeraType).name : undefined;
+
+ this.factoryTier = '';
+ this.format = format;
+ this.prng = prng && !Array.isArray(prng) ? prng : new PRNG(prng);
+
+ this.moveEnforcementCheckers = {
+ Bug: (movePool, moves, abilities, types, counter) => (
+ movePool.includes('megahorn') || movePool.includes('xscissor') ||
+ (!counter.get('Bug') && (types.includes('Electric') || types.includes('Psychic')))
+ ),
+ Dark: (
+ movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles, teraType, role
+ ) => {
+ if (
+ counter.get('Dark') < 2 && PRIORITY_POKEMON.includes(species.id) && role === 'Wallbreaker'
+ ) return true;
+ return !counter.get('Dark');
+ },
+ Dragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon'),
+ Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'),
+ Fairy: (movePool, moves, abilities, types, counter) => !counter.get('Fairy'),
+ Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'),
+ Fire: (movePool, moves, abilities, types, counter, species) => !counter.get('Fire'),
+ Flying: (movePool, moves, abilities, types, counter) => !counter.get('Flying'),
+ Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'),
+ Grass: (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Grass') && (
+ movePool.includes('leafstorm') || species.baseStats.atk >= 100 ||
+ types.includes('Electric') || abilities.includes('Seed Sower')
+ )
+ ),
+ Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'),
+ Ice: (movePool, moves, abilities, types, counter) => (
+ movePool.includes('freezedry') || movePool.includes('blizzard') || !counter.get('Ice')
+ ),
+ Normal: (movePool, moves, types, counter) => (movePool.includes('boomburst') || movePool.includes('hypervoice')),
+ Poison: (movePool, moves, abilities, types, counter) => {
+ if (types.includes('Ground')) return false;
+ return !counter.get('Poison');
+ },
+ Psychic: (movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles) => {
+ if ((isDoubles || species.id === 'bruxish') && movePool.includes('psychicfangs')) return true;
+ if (species.id === 'hoopaunbound' && movePool.includes('psychic')) return true;
+ if (['Dark', 'Steel', 'Water'].some(m => types.includes(m))) return false;
+ return !counter.get('Psychic');
+ },
+ Rock: (movePool, moves, abilities, types, counter, species) => !counter.get('Rock') && species.baseStats.atk >= 80,
+ Steel: (movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles) => (
+ !counter.get('Steel') &&
+ (isDoubles || species.baseStats.atk >= 90 || movePool.includes('gigatonhammer') || movePool.includes('makeitrain'))
+ ),
+ Water: (movePool, moves, abilities, types, counter) => (!counter.get('Water') && !types.includes('Ground')),
+ };
+ this.poolsCacheKey = undefined;
+ this.cachedPool = undefined;
+ this.cachedSpeciesPool = undefined;
+ this.cachedStatusMoves = this.dex.moves.all().filter(move => move.category === 'Status').map(move => move.id);
+ }
+
+ setSeed(prng?: PRNG | PRNGSeed) {
+ this.prng = prng && !Array.isArray(prng) ? prng : new PRNG(prng);
+ }
+
+ getTeam(options?: PlayerOptions | null): PokemonSet[] {
+ const generatorName = (
+ typeof this.format.team === 'string' && this.format.team.startsWith('random')
+ ) ? this.format.team + 'Team' : '';
+ // @ts-ignore
+ return this[generatorName || 'randomTeam'](options);
+ }
+
+ randomChance(numerator: number, denominator: number) {
+ return this.prng.randomChance(numerator, denominator);
+ }
+
+ sample(items: readonly T[]): T {
+ return this.prng.sample(items);
+ }
+
+ sampleIfArray(item: T | T[]): T {
+ if (Array.isArray(item)) {
+ return this.sample(item);
+ }
+ return item;
+ }
+
+ random(m?: number, n?: number) {
+ return this.prng.next(m, n);
+ }
+
+ /**
+ * Remove an element from an unsorted array significantly faster
+ * than .splice
+ */
+ fastPop(list: any[], index: number) {
+ // If an array doesn't need to be in order, replacing the
+ // element at the given index with the removed element
+ // is much, much faster than using list.splice(index, 1).
+ const length = list.length;
+ if (index < 0 || index >= list.length) {
+ // sanity check
+ throw new Error(`Index ${index} out of bounds for given array`);
+ }
+
+ const element = list[index];
+ list[index] = list[length - 1];
+ list.pop();
+ return element;
+ }
+
+ /**
+ * Remove a random element from an unsorted array and return it.
+ * Uses the battle's RNG if in a battle.
+ */
+ sampleNoReplace(list: any[]) {
+ const length = list.length;
+ if (length === 0) return null;
+ const index = this.random(length);
+ return this.fastPop(list, index);
+ }
+
+ /**
+ * Removes n random elements from an unsorted array and returns them.
+ * If n is less than the array's length, randomly removes and returns all the elements
+ * in the array (so the returned array could have length < n).
+ */
+ multipleSamplesNoReplace(list: T[], n: number): T[] {
+ const samples = [];
+ while (samples.length < n && list.length) {
+ samples.push(this.sampleNoReplace(list));
+ }
+
+ return samples;
+ }
+
+ /**
+ * Check if user has directly tried to ban/unban/restrict things in a custom battle.
+ * Doesn't count bans nested inside other formats/rules.
+ */
+ private hasDirectCustomBanlistChanges() {
+ if (this.format.ruleTable?.has('+pokemontag:cap')) return false;
+ if (this.format.banlist.length || this.format.restricted.length || this.format.unbanlist.length) return true;
+ if (!this.format.customRules) return false;
+ for (const rule of this.format.customRules) {
+ for (const banlistOperator of ['-', '+', '*']) {
+ if (rule.startsWith(banlistOperator)) return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Inform user when custom bans are unsupported in a team generator.
+ */
+ protected enforceNoDirectCustomBanlistChanges() {
+ if (this.hasDirectCustomBanlistChanges()) {
+ throw new Error(`Custom bans are not currently supported in ${this.format.name}.`);
+ }
+ }
+
+ /**
+ * Inform user when complex bans are unsupported in a team generator.
+ */
+ protected enforceNoDirectComplexBans() {
+ if (!this.format.customRules) return false;
+ for (const rule of this.format.customRules) {
+ if (rule.includes('+') && !rule.startsWith('+')) {
+ throw new Error(`Complex bans are not currently supported in ${this.format.name}.`);
+ }
+ }
+ }
+
+ /**
+ * Validate set element pool size is sufficient to support size requirements after simple bans.
+ */
+ private enforceCustomPoolSizeNoComplexBans(
+ effectTypeName: string,
+ basicEffectPool: BasicEffect[],
+ requiredCount: number,
+ requiredCountExplanation: string
+ ) {
+ if (basicEffectPool.length >= requiredCount) return;
+ throw new Error(`Legal ${effectTypeName} count is insufficient to support ${requiredCountExplanation} (${basicEffectPool.length} / ${requiredCount}).`);
+ }
+
+ queryMoves(
+ moves: Set | null,
+ species: Species,
+ teraType: string,
+ abilities: string[],
+ ): MoveCounter {
+ // This is primarily a helper function for random setbuilder functions.
+ const counter = new MoveCounter();
+ const types = species.types;
+ if (!moves?.size) return counter;
+
+ const categories = {Physical: 0, Special: 0, Status: 0};
+
+ // Iterate through all moves we've chosen so far and keep track of what they do:
+ for (const moveid of moves) {
+ const move = this.dex.moves.get(moveid);
+
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (move.damage || move.damageCallback) {
+ // Moves that do a set amount of damage:
+ counter.add('damage');
+ counter.damagingMoves.add(move);
+ } else {
+ // Are Physical/Special/Status moves:
+ categories[move.category]++;
+ }
+ // Moves that have a low base power:
+ if (moveid === 'lowkick' || (move.basePower && move.basePower <= 60 && moveid !== 'rapidspin')) {
+ counter.add('technician');
+ }
+ // Moves that hit up to 5 times:
+ if (move.multihit && Array.isArray(move.multihit) && move.multihit[1] === 5) counter.add('skilllink');
+ if (move.recoil || move.hasCrashDamage) counter.add('recoil');
+ if (move.drain) counter.add('drain');
+ // Moves which have a base power:
+ if (move.basePower || move.basePowerCallback) {
+ if (!this.noStab.includes(moveid) || PRIORITY_POKEMON.includes(species.id) && move.priority > 0) {
+ counter.add(moveType);
+ if (types.includes(moveType)) counter.add('stab');
+ if (teraType === moveType) counter.add('stabtera');
+ counter.damagingMoves.add(move);
+ }
+ if (move.flags['bite']) counter.add('strongjaw');
+ if (move.flags['punch']) counter.add('ironfist');
+ if (move.flags['sound']) counter.add('sound');
+ if (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) {
+ counter.add('priority');
+ }
+ }
+ // Moves with secondary effects:
+ if (move.secondary || move.hasSheerForce) {
+ counter.add('sheerforce');
+ if (sereneGraceBenefits(move)) {
+ counter.add('serenegrace');
+ }
+ }
+ // Moves with low accuracy:
+ if (move.accuracy && move.accuracy !== true && move.accuracy < 90) counter.add('inaccurate');
+
+ // Moves that change stats:
+ if (RECOVERY_MOVES.includes(moveid)) counter.add('recovery');
+ if (CONTRARY_MOVES.includes(moveid)) counter.add('contrary');
+ if (PHYSICAL_SETUP.includes(moveid)) counter.add('physicalsetup');
+ if (SPECIAL_SETUP.includes(moveid)) counter.add('specialsetup');
+ if (MIXED_SETUP.includes(moveid)) counter.add('mixedsetup');
+ if (SPEED_SETUP.includes(moveid)) counter.add('speedsetup');
+ if (SETUP.includes(moveid)) counter.add('setup');
+ if (HAZARDS.includes(moveid)) counter.add('hazards');
+ }
+
+ counter.set('Physical', Math.floor(categories['Physical']));
+ counter.set('Special', Math.floor(categories['Special']));
+ counter.set('Status', categories['Status']);
+ return counter;
+ }
+
+ cullMovePool(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): void {
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
+ if (moves.size === this.maxMoveCount - 2) {
+ const unpairedMoves = [...movePool];
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
+ }
+ }
+ if (unpairedMoves.length === 1) {
+ this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
+ }
+ }
+
+ // These moves are paired, and shouldn't appear if there is not room for them both.
+ if (moves.size === this.maxMoveCount - 1) {
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(movePool, movePool.indexOf(pair[0]));
+ this.fastPop(movePool, movePool.indexOf(pair[1]));
+ }
+ }
+ }
+
+ // Develop additional move lists
+ const statusMoves = this.cachedStatusMoves;
+
+ // Team-based move culls
+ if (teamDetails.screens) {
+ if (movePool.includes('auroraveil')) this.fastPop(movePool, movePool.indexOf('auroraveil'));
+ if (movePool.length >= this.maxMoveCount + 2) {
+ if (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect'));
+ if (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen'));
+ }
+ }
+ if (teamDetails.stickyWeb) {
+ if (movePool.includes('stickyweb')) this.fastPop(movePool, movePool.indexOf('stickyweb'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.stealthRock) {
+ if (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.defog || teamDetails.rapidSpin) {
+ if (movePool.includes('defog')) this.fastPop(movePool, movePool.indexOf('defog'));
+ if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.toxicSpikes) {
+ if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.spikes && teamDetails.spikes >= 2) {
+ if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.statusCure) {
+ if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+
+ if (isDoubles) {
+ const doublesIncompatiblePairs = [
+ // In order of decreasing generalizability
+ [SPEED_CONTROL, SPEED_CONTROL],
+ [HAZARDS, HAZARDS],
+ ['rockslide', 'stoneedge'],
+ [SETUP, ['fakeout', 'helpinghand']],
+ [PROTECT_MOVES, 'wideguard'],
+ [['fierydance', 'fireblast'], 'heatwave'],
+ ['dazzlinggleam', ['fleurcannon', 'moonblast']],
+ ['poisongas', ['toxicspikes', 'willowisp']],
+ [RECOVERY_MOVES, 'healpulse'],
+ ['lifedew', 'healpulse'],
+ ['haze', 'icywind'],
+ [['hydropump', 'muddywater'], ['muddywater', 'scald']],
+ ['disable', 'encore'],
+ ['freezedry', 'icebeam'],
+ ['energyball', 'leafstorm'],
+ ['wildcharge', 'thunderbolt'],
+ ['earthpower', 'sandsearstorm'],
+ ['coaching', ['helpinghand', 'howl']],
+ ];
+
+ for (const pair of doublesIncompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
+
+ if (role !== 'Offensive Protect') this.incompatibleMoves(moves, movePool, PROTECT_MOVES, ['flipturn', 'uturn']);
+ }
+
+ // General incompatibilities
+ const incompatiblePairs = [
+ // These moves don't mesh well with other aspects of the set
+ [statusMoves, ['healingwish', 'switcheroo', 'trick']],
+ [SETUP, PIVOT_MOVES],
+ [SETUP, HAZARDS],
+ [SETUP, ['defog', 'nuzzle', 'toxic', 'yawn', 'haze']],
+ [PHYSICAL_SETUP, PHYSICAL_SETUP],
+ [SPECIAL_SETUP, 'thunderwave'],
+ ['substitute', PIVOT_MOVES],
+ [SPEED_SETUP, ['aquajet', 'rest', 'trickroom']],
+ ['curse', ['irondefense', 'rapidspin']],
+ ['dragondance', 'dracometeor'],
+ ['yawn', 'roar'],
+
+ // These attacks are redundant with each other
+ [['psychic', 'psychicnoise'], ['psyshock', 'psychicnoise']],
+ ['surf', 'hydropump'],
+ ['liquidation', 'wavecrash'],
+ ['aquajet', 'flipturn'],
+ ['gigadrain', 'leafstorm'],
+ ['powerwhip', 'hornleech'],
+ [['airslash', 'bravebird', 'hurricane'], ['airslash', 'bravebird', 'hurricane']],
+ ['knockoff', 'foulplay'],
+ ['throatchop', ['crunch', 'lashout']],
+ ['doubleedge', ['bodyslam', 'headbutt']],
+ ['fireblast', ['fierydance', 'flamethrower']],
+ ['lavaplume', 'magmastorm'],
+ ['thunderpunch', 'wildcharge'],
+ ['thunderbolt', 'discharge'],
+ ['gunkshot', ['direclaw', 'poisonjab', 'sludgebomb']],
+ ['aurasphere', 'focusblast'],
+ ['closecombat', 'drainpunch'],
+ ['bugbite', 'pounce'],
+ [['dragonpulse', 'spacialrend'], 'dracometeor'],
+ ['heavyslam', 'flashcannon'],
+ ['alluringvoice', 'dazzlinggleam'],
+
+ // These status moves are redundant with each other
+ ['taunt', 'disable'],
+ [['thunderwave', 'toxic'], ['thunderwave', 'willowisp']],
+ [['thunderwave', 'toxic', 'willowisp'], 'toxicspikes'],
+
+ // This space reserved for assorted hardcodes that otherwise make little sense out of context
+ // Landorus and Thundurus
+ ['nastyplot', ['rockslide', 'knockoff']],
+ // Persian
+ ['switcheroo', 'fakeout'],
+ // Amoonguss, though this can work well as a general rule later
+ ['toxic', 'clearsmog'],
+ // Chansey and Blissey
+ ['healbell', 'stealthrock'],
+ // Azelf and Zoroarks
+ ['trick', 'uturn'],
+ // Araquanid
+ ['mirrorcoat', 'hydropump'],
+ ];
+
+ for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
+
+ if (!types.includes('Ice')) this.incompatibleMoves(moves, movePool, 'icebeam', 'icywind');
+
+ if (!isDoubles) this.incompatibleMoves(moves, movePool, 'taunt', 'encore');
+
+ if (!types.includes('Dark') && teraType !== 'Dark') this.incompatibleMoves(moves, movePool, 'knockoff', 'suckerpunch');
+
+ if (!abilities.includes('Prankster')) this.incompatibleMoves(moves, movePool, 'thunderwave', 'yawn');
+
+ // This space reserved for assorted hardcodes that otherwise make little sense out of context
+ if (species.id === 'barraskewda') {
+ this.incompatibleMoves(moves, movePool, ['psychicfangs', 'throatchop'], ['poisonjab', 'throatchop']);
+ }
+ if (species.id === 'cyclizar') this.incompatibleMoves(moves, movePool, 'taunt', 'knockoff');
+ if (species.id === 'mesprit') this.incompatibleMoves(moves, movePool, 'healingwish', 'uturn');
+ if (species.id === 'camerupt') this.incompatibleMoves(moves, movePool, 'roar', 'willowisp');
+ if (species.id === 'coalossal') this.incompatibleMoves(moves, movePool, 'flamethrower', 'overheat');
+ }
+
+ // Checks for and removes incompatible moves, starting with the first move in movesA.
+ incompatibleMoves(
+ moves: Set,
+ movePool: string[],
+ movesA: string | string[],
+ movesB: string | string[],
+ ): void {
+ const moveArrayA = (Array.isArray(movesA)) ? movesA : [movesA];
+ const moveArrayB = (Array.isArray(movesB)) ? movesB : [movesB];
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ for (const moveid1 of moves) {
+ if (moveArrayB.includes(moveid1)) {
+ for (const moveid2 of moveArrayA) {
+ if (moveid1 !== moveid2 && movePool.includes(moveid2)) {
+ this.fastPop(movePool, movePool.indexOf(moveid2));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ }
+ }
+ if (moveArrayA.includes(moveid1)) {
+ for (const moveid2 of moveArrayB) {
+ if (moveid1 !== moveid2 && movePool.includes(moveid2)) {
+ this.fastPop(movePool, movePool.indexOf(moveid2));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ }
+ }
+ }
+ }
+
+ // Adds a move to the moveset, returns the MoveCounter
+ addMove(
+ move: string,
+ moves: Set,
+ types: string[],
+ abilities: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ movePool: string[],
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): MoveCounter {
+ moves.add(move);
+ this.fastPop(movePool, movePool.indexOf(move));
+ const counter = this.queryMoves(moves, species, teraType, abilities);
+ this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role);
+ return counter;
+ }
+
+ // Returns the type of a given move for STAB/coverage enforcement purposes
+ getMoveType(move: Move, species: Species, abilities: string[], teraType: string): string {
+ if (move.id === 'terablast') return teraType;
+ if (['judgment', 'revelationdance'].includes(move.id)) return species.types[0];
+
+ if (move.name === "Raging Bull" && species.name.startsWith("Tauros-Paldea")) {
+ if (species.name.endsWith("Combat")) return "Fighting";
+ if (species.name.endsWith("Blaze")) return "Fire";
+ if (species.name.endsWith("Aqua")) return "Water";
+ }
+
+ if (move.name === "Ivy Cudgel" && species.name.startsWith("Ogerpon")) {
+ if (species.name.endsWith("Wellspring")) return "Water";
+ if (species.name.endsWith("Hearthflame")) return "Fire";
+ if (species.name.endsWith("Cornerstone")) return "Rock";
+ }
+
+ const moveType = move.type;
+ if (moveType === 'Normal') {
+ if (abilities.includes('Aerilate')) return 'Flying';
+ if (abilities.includes('Galvanize')) return 'Electric';
+ if (abilities.includes('Pixilate')) return 'Fairy';
+ if (abilities.includes('Refrigerate')) return 'Ice';
+ }
+ return moveType;
+ }
+
+ // Generate random moveset for a given species, role, tera type.
+ randomMoveset(
+ types: string[],
+ abilities: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ movePool: string[],
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): Set {
+ const moves = new Set();
+ let counter = this.queryMoves(moves, species, teraType, abilities);
+ this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role);
+
+ // If there are only four moves, add all moves and return early
+ if (movePool.length <= this.maxMoveCount) {
+ for (const moveid of movePool) {
+ moves.add(moveid);
+ }
+ return moves;
+ }
+
+ const runEnforcementChecker = (checkerName: string) => {
+ if (!this.moveEnforcementCheckers[checkerName]) return false;
+ return this.moveEnforcementCheckers[checkerName](
+ movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles, teraType, role
+ );
+ };
+
+ if (role === 'Tera Blast user') {
+ counter = this.addMove('terablast', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ // Add required move (e.g. Relic Song for Meloetta-P)
+ if (species.requiredMove) {
+ const move = this.dex.moves.get(species.requiredMove).id;
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Add other moves you really want to have, e.g. STAB, recovery, setup.
+
+ // Enforce Facade if Guts is a possible ability
+ if (movePool.includes('facade') && abilities.includes('Guts')) {
+ counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce Night Shade, Revelation Dance, Revival Blessing, and Sticky Web
+ for (const moveid of ['nightshade', 'revelationdance', 'revivalblessing', 'stickyweb']) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Trick Room on Doubles Wallbreaker
+ if (movePool.includes('trickroom') && role === 'Doubles Wallbreaker') {
+ counter = this.addMove('trickroom', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce hazard removal on Bulky Support if the team doesn't already have it
+ if (role === 'Bulky Support' && !teamDetails.defog && !teamDetails.rapidSpin) {
+ if (movePool.includes('rapidspin')) {
+ counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ if (movePool.includes('defog')) {
+ counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Aurora Veil if the team doesn't already have screens
+ if (!teamDetails.screens && movePool.includes('auroraveil')) {
+ counter = this.addMove('auroraveil', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce Knock Off on pure Normal- and Fighting-types in singles
+ if (!isDoubles && types.length === 1 && (types.includes('Normal') || types.includes('Fighting'))) {
+ if (movePool.includes('knockoff')) {
+ counter = this.addMove('knockoff', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Spore on Smeargle
+ if (species.id === 'smeargle') {
+ if (movePool.includes('spore')) {
+ counter = this.addMove('spore', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce moves in doubles
+ if (isDoubles) {
+ const doublesEnforcedMoves = ['mortalspin', 'spore'];
+ for (const moveid of doublesEnforcedMoves) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ // Enforce Fake Out on slow Pokemon
+ if (movePool.includes('fakeout') && species.baseStats.spe <= 50) {
+ counter = this.addMove('fakeout', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ // Enforce Tailwind on Prankster and Gale Wings users
+ if (movePool.includes('tailwind') && (abilities.includes('Prankster') || abilities.includes('Gale Wings'))) {
+ counter = this.addMove('tailwind', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ // Enforce Thunder Wave on Prankster users as well
+ if (movePool.includes('thunderwave') && abilities.includes('Prankster')) {
+ counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce STAB priority
+ if (
+ ['Bulky Attacker', 'Bulky Setup', 'Wallbreaker', 'Doubles Wallbreaker'].includes(role) ||
+ PRIORITY_POKEMON.includes(species.id)
+ ) {
+ const priorityMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (
+ types.includes(moveType) && (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) &&
+ (move.basePower || move.basePowerCallback)
+ ) {
+ priorityMoves.push(moveid);
+ }
+ }
+ if (priorityMoves.length) {
+ const moveid = this.sample(priorityMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce STAB
+ for (const type of types) {
+ // Check if a STAB move of that type should be required
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ while (runEnforcementChecker(type)) {
+ if (!stabMoves.length) break;
+ const moveid = this.sampleNoReplace(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Tera STAB
+ if (!counter.get('stabtera') && !['Bulky Support', 'Doubles Support'].includes(role)) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && teraType === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // If no STAB move was added, add a STAB move
+ if (!counter.get('stab')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce recovery
+ if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup'].includes(role)) {
+ const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));
+ if (recoveryMoves.length) {
+ const moveid = this.sample(recoveryMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce pivoting moves on AV Pivot
+ if (role === 'AV Pivot') {
+ const pivotMoves = movePool.filter(moveid => ['uturn', 'voltswitch'].includes(moveid));
+ if (pivotMoves.length) {
+ const moveid = this.sample(pivotMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce setup
+ if (role.includes('Setup') || role === 'Tera Blast user') {
+ // First, try to add a non-Speed setup move
+ const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && !SPEED_SETUP.includes(moveid));
+ if (nonSpeedSetupMoves.length) {
+ const moveid = this.sample(nonSpeedSetupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ } else {
+ // No non-Speed setup moves, so add any (Speed) setup move
+ const setupMoves = movePool.filter(moveid => SETUP.includes(moveid));
+ if (setupMoves.length) {
+ const moveid = this.sample(setupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+
+ // Enforce redirecting moves and Fake Out on Doubles Support
+ if (role === 'Doubles Support') {
+ for (const moveid of ['fakeout', 'followme', 'ragepowder']) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+
+ // Enforce Protect
+ if (role.includes('Protect')) {
+ const protectMoves = movePool.filter(moveid => PROTECT_MOVES.includes(moveid));
+ if (protectMoves.length) {
+ const moveid = this.sample(protectMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce a move not on the noSTAB list
+ if (!counter.damagingMoves.size) {
+ // Choose an attacking move
+ const attackingMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);
+ }
+ if (attackingMoves.length) {
+ const moveid = this.sample(attackingMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce coverage move
+ if (!['AV Pivot', 'Fast Support', 'Bulky Support', 'Bulky Protect', 'Doubles Support'].includes(role)) {
+ if (counter.damagingMoves.size === 1) {
+ // Find the type of the current attacking move
+ const currentAttackType = counter.damagingMoves.values().next().value.type;
+ // Choose an attacking move that is of different type to the current single attack
+ const coverageMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {
+ if (currentAttackType !== moveType) coverageMoves.push(moveid);
+ }
+ }
+ if (coverageMoves.length) {
+ const moveid = this.sample(coverageMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+
+ // Add (moves.size < this.maxMoveCount) as a condition if moves is getting larger than 4 moves.
+ // If you want moves to be favored but not required, add something like && this.randomChance(1, 2) to your condition.
+
+ // Choose remaining moves randomly from movepool and add them to moves list:
+ while (moves.size < this.maxMoveCount && movePool.length) {
+ if (moves.size + movePool.length <= this.maxMoveCount) {
+ for (const moveid of movePool) {
+ moves.add(moveid);
+ }
+ break;
+ }
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ for (const pair of MOVE_PAIRS) {
+ if (moveid === pair[0] && movePool.includes(pair[1])) {
+ counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ if (moveid === pair[1] && movePool.includes(pair[0])) {
+ counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+ return moves;
+ }
+
+ shouldCullAbility(
+ ability: string,
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): boolean {
+ switch (ability) {
+ // Abilities which are primarily useful for certain moves or with team support
+ case 'Chlorophyll': case 'Solar Power':
+ return !teamDetails.sun;
+ case 'Defiant':
+ return (species.id === 'thundurus' && !!counter.get('Status'));
+ case 'Hydration': case 'Swift Swim':
+ return !teamDetails.rain;
+ case 'Iron Fist': case 'Skill Link':
+ return !counter.get(toID(ability));
+ case 'Overgrow':
+ return !counter.get('Grass');
+ case 'Prankster':
+ return !counter.get('Status');
+ case 'Sand Force': case 'Sand Rush':
+ return !teamDetails.sand;
+ case 'Slush Rush':
+ return !teamDetails.snow;
+ case 'Swarm':
+ return !counter.get('Bug');
+ case 'Torrent':
+ return (!counter.get('Water') && !moves.has('flipturn'));
+ }
+
+ return false;
+ }
+
+
+ getAbility(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ // ffa abilities that differ from doubles
+ if (this.format.gameType === 'freeforall') {
+ if (species.id === 'bellossom') return 'Chlorophyll';
+ if (species.id === 'sinistcha') return 'Heatproof';
+ if (abilities.length === 1 && abilities[0] === 'Telepathy') {
+ return species.id === 'oranguru' ? 'Inner Focus' : 'Pressure';
+ }
+ if (species.id === 'duraludon') return 'Light Metal';
+ if (species.id === 'clefairy') return 'Magic Guard';
+ if (species.id === 'blissey') return 'Natural Cure';
+ if (species.id === 'barraskewda') return 'Swift Swim';
+ }
+
+ if (abilities.length <= 1) return abilities[0];
+
+ // Hard-code abilities here
+ if (species.id === 'drifblim') return moves.has('defog') ? 'Aftermath' : 'Unburden';
+ if (abilities.includes('Flash Fire') && this.dex.getEffectiveness('Fire', teraType) >= 1) return 'Flash Fire';
+ if (species.id === 'hitmonchan' && counter.get('ironfist')) return 'Iron Fist';
+ if ((species.id === 'thundurus' || species.id === 'tornadus') && !counter.get('Physical')) return 'Prankster';
+ if (species.id === 'swampert' && (counter.get('Water') || moves.has('flipturn'))) return 'Torrent';
+ if (species.id === 'toucannon' && counter.get('skilllink')) return 'Skill Link';
+ if (abilities.includes('Slush Rush') && moves.has('snowscape')) return 'Slush Rush';
+ if (species.id === 'golduck' && teamDetails.rain) return 'Swift Swim';
+
+ const abilityAllowed: string[] = [];
+ // Obtain a list of abilities that are allowed (not culled)
+ for (const ability of abilities) {
+ if (!this.shouldCullAbility(
+ ability, types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role
+ )) {
+ abilityAllowed.push(ability);
+ }
+ }
+
+ // Pick a random allowed ability
+ if (abilityAllowed.length >= 1) return this.sample(abilityAllowed);
+
+ // If all abilities are rejected, prioritize weather abilities over non-weather abilities
+ if (!abilityAllowed.length) {
+ const weatherAbilities = abilities.filter(
+ a => ['Chlorophyll', 'Hydration', 'Sand Force', 'Sand Rush', 'Slush Rush', 'Solar Power', 'Swift Swim'].includes(a)
+ );
+ if (weatherAbilities.length) return this.sample(weatherAbilities);
+ }
+
+ // Pick a random ability
+ return this.sample(abilities);
+ }
+
+ getPriorityItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ) {
+ if (!isDoubles) {
+ if (role === 'Fast Bulky Setup' && (ability === 'Quark Drive' || ability === 'Protosynthesis')) {
+ return 'Booster Energy';
+ }
+ if (species.id === 'lokix') {
+ return (role === 'Fast Attacker') ? 'Silver Powder' : 'Life Orb';
+ }
+ }
+ if (species.requiredItems) {
+ // Z-Crystals aren't available in Gen 9, so require Plates
+ if (species.baseSpecies === 'Arceus') {
+ return species.requiredItems[0];
+ }
+ return this.sample(species.requiredItems);
+ }
+ if (role === 'AV Pivot') return 'Assault Vest';
+ if (species.id === 'pikachu') return 'Light Ball';
+ if (species.id === 'regieleki') return 'Magnet';
+ if (types.includes('Normal') && moves.has('doubleedge') && moves.has('fakeout')) return 'Silk Scarf';
+ if (
+ species.id === 'froslass' || moves.has('populationbomb') ||
+ (ability === 'Hustle' && counter.get('setup') && !isDoubles && this.randomChance(1, 2))
+ ) return 'Wide Lens';
+ if (species.id === 'smeargle' && !isDoubles) return 'Focus Sash';
+ if (moves.has('clangoroussoul') || (species.id === 'toxtricity' && moves.has('shiftgear'))) return 'Throat Spray';
+ if (
+ (species.baseSpecies === 'Magearna' && role === 'Tera Blast user') ||
+ species.id === 'necrozmaduskmane' || (species.id === 'calyrexice' && isDoubles)
+ ) return 'Weakness Policy';
+ if (['dragonenergy', 'lastrespects', 'waterspout'].some(m => moves.has(m))) return 'Choice Scarf';
+ if (
+ !isDoubles && (ability === 'Imposter' || (species.id === 'magnezone' && role === 'Fast Attacker'))
+ ) return 'Choice Scarf';
+ if (species.id === 'rampardos' && (role === 'Fast Attacker' || isDoubles)) return 'Choice Scarf';
+ if (species.id === 'palkia' && counter.get('Special') < 4) return 'Lustrous Orb';
+ if (
+ moves.has('courtchange') ||
+ !isDoubles && (species.id === 'luvdisc' || (species.id === 'terapagos' && !moves.has('rest')))
+ ) return 'Heavy-Duty Boots';
+ if (moves.has('bellydrum') && moves.has('substitute')) return 'Salac Berry';
+ if (
+ ['Cheek Pouch', 'Cud Chew', 'Harvest', 'Ripen'].some(m => ability === m) ||
+ moves.has('bellydrum') || moves.has('filletaway')
+ ) {
+ return 'Sitrus Berry';
+ }
+ if (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) {
+ if (
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
+ role !== 'Wallbreaker' && role !== 'Doubles Wallbreaker' && !counter.get('priority')
+ ) {
+ return 'Choice Scarf';
+ } else {
+ return (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs';
+ }
+ }
+ if (counter.get('Status') && (species.name === 'Latias' || species.name === 'Latios')) return 'Soul Dew';
+ if (species.id === 'scyther' && !isDoubles) return (isLead && !moves.has('uturn')) ? 'Eviolite' : 'Heavy-Duty Boots';
+ if (ability === 'Poison Heal' || ability === 'Quick Feet') return 'Toxic Orb';
+ if (species.nfe) return 'Eviolite';
+ if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {
+ return (types.includes('Fire') || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb';
+ }
+ if (ability === 'Magic Guard' || (ability === 'Sheer Force' && counter.get('sheerforce'))) return 'Life Orb';
+ if (ability === 'Anger Shell') return this.sample(['Rindo Berry', 'Passho Berry', 'Scope Lens', 'Sitrus Berry']);
+ if (moves.has('dragondance') && isDoubles) return 'Clear Amulet';
+ if (counter.get('skilllink') && ability !== 'Skill Link' && species.id !== 'breloom') return 'Loaded Dice';
+ if (ability === 'Unburden') {
+ return (moves.has('closecombat') || moves.has('leafstorm')) ? 'White Herb' : 'Sitrus Berry';
+ }
+ if (moves.has('shellsmash') && ability !== 'Weak Armor') return 'White Herb';
+ if (moves.has('meteorbeam') || (moves.has('electroshot') && !teamDetails.rain)) return 'Power Herb';
+ if (moves.has('acrobatics') && ability !== 'Protosynthesis') return '';
+ if (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';
+ if (ability === 'Gluttony') return `${this.sample(['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'])} Berry`;
+ if (
+ moves.has('rest') && !moves.has('sleeptalk') &&
+ ability !== 'Natural Cure' && ability !== 'Shed Skin'
+ ) {
+ return 'Chesto Berry';
+ }
+ if (
+ species.id !== 'yanmega' &&
+ this.dex.getEffectiveness('Rock', species) >= 2 && (!types.includes('Flying') || !isDoubles)
+ ) return 'Heavy-Duty Boots';
+ }
+
+ /** Item generation specific to Random Doubles */
+ getDoublesItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ const scarfReqs = (
+ !counter.get('priority') && ability !== 'Speed Boost' && role !== 'Doubles Wallbreaker' &&
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
+ this.randomChance(1, 2)
+ );
+ const offensiveRole = (
+ ['Doubles Fast Attacker', 'Doubles Wallbreaker', 'Doubles Setup Sweeper', 'Offensive Protect'].some(m => role === m)
+ );
+
+ if (species.id === 'ursalunabloodmoon' && moves.has('protect')) return 'Silk Scarf';
+ if (
+ moves.has('flipturn') && moves.has('protect') && (moves.has('aquajet') || (moves.has('jetpunch')))
+ ) return 'Mystic Water';
+ if (counter.get('speedsetup') && role === 'Doubles Bulky Setup') return 'Weakness Policy';
+ if (species.id === 'toxapex') return 'Binding Band';
+ if (moves.has('blizzard') && ability !== 'Snow Warning' && !teamDetails.snow) return 'Blunder Policy';
+
+ if (role === 'Choice Item user') {
+ if (scarfReqs || (counter.get('Physical') < 4 && counter.get('Special') < 3 && !moves.has('memento'))) {
+ return 'Choice Scarf';
+ }
+ return (counter.get('Physical') >= 3) ? 'Choice Band' : 'Choice Specs';
+ }
+ if (counter.get('Physical') >= 4 &&
+ ['fakeout', 'feint', 'firstimpression', 'rapidspin', 'suckerpunch'].every(m => !moves.has(m)) &&
+ (moves.has('flipturn') || moves.has('uturn') || role === 'Doubles Wallbreaker')
+ ) {
+ return (scarfReqs) ? 'Choice Scarf' : 'Choice Band';
+ }
+ if (
+ ((counter.get('Special') >= 4 && (moves.has('voltswitch') || role === 'Doubles Wallbreaker')) || (
+ counter.get('Special') >= 3 && (moves.has('uturn') || moves.has('flipturn'))
+ )) && !moves.has('electroweb')
+ ) {
+ return (scarfReqs) ? 'Choice Scarf' : 'Choice Specs';
+ }
+ if (
+ (role === 'Bulky Protect' && counter.get('setup')) || moves.has('substitute') || moves.has('irondefense') ||
+ moves.has('coil') || species.id === 'eternatus' || species.id === 'regigigas'
+ ) return 'Leftovers';
+ if (species.id === 'sylveon') return 'Pixie Plate';
+ if (ability === 'Intimidate' && this.dex.getEffectiveness('Rock', species) >= 1) return 'Heavy-Duty Boots';
+ if (
+ (offensiveRole || (role === 'Tera Blast user' && (species.baseStats.spe >= 80 || moves.has('trickroom')))) &&
+ (!moves.has('fakeout') || species.id === 'ambipom') && !moves.has('incinerate') &&
+ (!moves.has('uturn') || types.includes('Bug') || ability === 'Libero') &&
+ ((!moves.has('icywind') && !moves.has('electroweb')) || species.id === 'ironbundle')
+ ) {
+ return (
+ (ability === 'Quark Drive' || ability === 'Protosynthesis') && !isLead && species.id !== 'ironvaliant' &&
+ ['dracometeor', 'firstimpression', 'uturn', 'voltswitch'].every(m => !moves.has(m))
+ ) ? 'Booster Energy' : 'Life Orb';
+ }
+ if (isLead && (species.id === 'glimmora' ||
+ (['Doubles Fast Attacker', 'Doubles Wallbreaker', 'Offensive Protect'].includes(role) &&
+ species.baseStats.hp + species.baseStats.def + species.baseStats.spd <= 230))
+ ) return 'Focus Sash';
+ if (
+ ['Doubles Fast Attacker', 'Doubles Wallbreaker', 'Offensive Protect'].includes(role) &&
+ moves.has('fakeout') || moves.has('incinerate')
+ ) {
+ return (this.dex.getEffectiveness('Rock', species) >= 1) ? 'Heavy-Duty Boots' : 'Clear Amulet';
+ }
+ if (!counter.get('Status')) return 'Assault Vest';
+ return 'Sitrus Berry';
+ }
+
+ getItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ if (
+ species.id !== 'jirachi' && (counter.get('Physical') >= 4) &&
+ ['dragontail', 'fakeout', 'firstimpression', 'flamecharge', 'rapidspin'].every(m => !moves.has(m))
+ ) {
+ const scarfReqs = (
+ role !== 'Wallbreaker' &&
+ (species.baseStats.atk >= 100 || ability === 'Huge Power' || ability === 'Pure Power') &&
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
+ ability !== 'Speed Boost' && !counter.get('priority') && !moves.has('aquastep')
+ );
+ return (scarfReqs && this.randomChance(1, 2)) ? 'Choice Scarf' : 'Choice Band';
+ }
+ if (
+ (counter.get('Special') >= 4) ||
+ (counter.get('Special') >= 3 && ['flipturn', 'uturn'].some(m => moves.has(m)))
+ ) {
+ const scarfReqs = (
+ role !== 'Wallbreaker' &&
+ species.baseStats.spa >= 100 &&
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
+ ability !== 'Speed Boost' && ability !== 'Tinted Lens' && !moves.has('uturn') && !counter.get('priority')
+ );
+ return (scarfReqs && this.randomChance(1, 2)) ? 'Choice Scarf' : 'Choice Specs';
+ }
+ if (counter.get('speedsetup') && role === 'Bulky Setup') return 'Weakness Policy';
+ if (
+ !counter.get('Status') &&
+ !['Fast Attacker', 'Wallbreaker', 'Tera Blast user'].includes(role)
+ ) {
+ return 'Assault Vest';
+ }
+ if (species.id === 'golem') return (counter.get('speedsetup')) ? 'Weakness Policy' : 'Custap Berry';
+ if (moves.has('substitute')) return 'Leftovers';
+ if (
+ moves.has('stickyweb') && isLead &&
+ (species.baseStats.hp + species.baseStats.def + species.baseStats.spd) <= 235
+ ) return 'Focus Sash';
+ if (this.dex.getEffectiveness('Rock', species) >= 1) return 'Heavy-Duty Boots';
+ if (
+ (moves.has('chillyreception') || (
+ role === 'Fast Support' &&
+ [...PIVOT_MOVES, 'defog', 'mortalspin', 'rapidspin'].some(m => moves.has(m)) &&
+ !types.includes('Flying') && ability !== 'Levitate'
+ ))
+ ) return 'Heavy-Duty Boots';
+
+ // Low Priority
+ if (
+ ability === 'Rough Skin' || (
+ ability === 'Regenerator' && (role === 'Bulky Support' || role === 'Bulky Attacker') &&
+ (species.baseStats.hp + species.baseStats.def) >= 180 && this.randomChance(1, 2)
+ ) || (
+ ability !== 'Regenerator' && !counter.get('setup') && counter.get('recovery') &&
+ this.dex.getEffectiveness('Fighting', species) < 1 &&
+ (species.baseStats.hp + species.baseStats.def) > 200 && this.randomChance(1, 2)
+ )
+ ) return 'Rocky Helmet';
+ if (moves.has('outrage') && counter.get('setup')) return 'Lum Berry';
+ if (moves.has('protect') && ability !== 'Speed Boost') return 'Leftovers';
+ if (
+ role === 'Fast Support' && isLead && !counter.get('recovery') && !counter.get('recoil') &&
+ (counter.get('hazards') || counter.get('setup')) &&
+ (species.baseStats.hp + species.baseStats.def + species.baseStats.spd) < 258
+ ) return 'Focus Sash';
+ if (
+ !counter.get('setup') && ability !== 'Levitate' && this.dex.getEffectiveness('Ground', species) >= 2
+ ) return 'Air Balloon';
+ if (['Bulky Attacker', 'Bulky Support', 'Bulky Setup'].some(m => role === (m))) return 'Leftovers';
+ if (species.id === 'pawmot' && moves.has('nuzzle')) return 'Leppa Berry';
+ if (role === 'Fast Support' || role === 'Fast Bulky Setup') {
+ return (counter.get('Physical') + counter.get('Special') >= 3 && !moves.has('nuzzle')) ? 'Life Orb' : 'Leftovers';
+ }
+ if (role === 'Tera Blast user' && DEFENSIVE_TERA_BLAST_USERS.includes(species.id)) return 'Leftovers';
+ if (
+ ['flamecharge', 'rapidspin', 'trailblaze'].every(m => !moves.has(m)) &&
+ ['Fast Attacker', 'Setup Sweeper', 'Tera Blast user', 'Wallbreaker'].some(m => role === (m))
+ ) return 'Life Orb';
+ return 'Leftovers';
+ }
+
+ getLevel(
+ species: Species,
+ isDoubles: boolean,
+ ): number {
+ if (this.adjustLevel) return this.adjustLevel;
+ // doubles levelling
+ if (isDoubles && this.randomDoublesSets[species.id]["level"]) return this.randomDoublesSets[species.id]["level"]!;
+ if (!isDoubles && this.randomSets[species.id]["level"]) return this.randomSets[species.id]["level"]!;
+ // Default to tier-based levelling
+ const tier = species.tier;
+ const tierScale: Partial> = {
+ Uber: 76,
+ OU: 80,
+ UUBL: 81,
+ UU: 82,
+ RUBL: 83,
+ RU: 84,
+ NUBL: 85,
+ NU: 86,
+ PUBL: 87,
+ PU: 88, "(PU)": 88, NFE: 88,
+ };
+ return tierScale[tier] || 80;
+ }
+
+ getForme(species: Species): string {
+ if (typeof species.battleOnly === 'string') {
+ // Only change the forme. The species has custom moves, and may have different typing and requirements.
+ return species.battleOnly;
+ }
+ if (species.cosmeticFormes) return this.sample([species.name].concat(species.cosmeticFormes));
+
+ // Consolidate mostly-cosmetic formes, at least for the purposes of Random Battles
+ if (['Dudunsparce', 'Magearna', 'Maushold', 'Polteageist', 'Sinistcha', 'Zarude'].includes(species.baseSpecies)) {
+ return this.sample([species.name].concat(species.otherFormes!));
+ }
+ if (species.baseSpecies === 'Basculin') return 'Basculin' + this.sample(['', '-Blue-Striped']);
+ if (species.baseSpecies === 'Pikachu') {
+ return 'Pikachu' + this.sample(
+ ['', '-Original', '-Hoenn', '-Sinnoh', '-Unova', '-Kalos', '-Alola', '-Partner', '-World']
+ );
+ }
+ return species.name;
+ }
+
+ randomSet(
+ s: string | Species,
+ teamDetails: RandomTeamsTypes.TeamDetails = {},
+ isLead = false,
+ isDoubles = false
+ ): RandomTeamsTypes.RandomSet {
+ const species = this.dex.species.get(s);
+ const forme = this.getForme(species);
+ const sets = this[`random${isDoubles ? 'Doubles' : ''}Sets`][species.id]["sets"];
+ const possibleSets: RandomTeamsTypes.RandomSetData[] = [];
+
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+
+ for (const set of sets) {
+ // Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy.
+ const abilities = set.abilities!;
+ if (
+ isLead && (abilities.includes('Protosynthesis') || abilities.includes('Quark Drive')) &&
+ set.role === 'Fast Bulky Setup'
+ ) continue;
+ // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented.
+ if ((teamDetails.teraBlast || ruleTable.has('terastalclause')) && set.role === 'Tera Blast user') {
+ continue;
+ }
+ possibleSets.push(set);
+ }
+ const set = this.sampleIfArray(possibleSets);
+ const role = set.role;
+ const movePool: string[] = [];
+ for (const movename of set.movepool) {
+ movePool.push(this.dex.moves.get(movename).id);
+ }
+ const teraTypes = set.teraTypes!;
+ let teraType = this.sampleIfArray(teraTypes);
+
+ let ability = '';
+ let item = undefined;
+
+ const evs = {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85};
+ const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};
+
+ const types = species.types;
+ const abilities = set.abilities!;
+
+ // Get moves
+ const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role);
+ const counter = this.queryMoves(moves, species, teraType, abilities);
+
+ // Get ability
+ ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role);
+
+ // Get items
+ // First, the priority items
+ item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role);
+ if (item === undefined) {
+ if (isDoubles) {
+ item = this.getDoublesItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role);
+ } else {
+ item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role);
+ }
+ }
+
+ // Get level
+ const level = this.getLevel(species, isDoubles);
+
+ // Prepare optimal HP
+ const srImmunity = ability === 'Magic Guard' || item === 'Heavy-Duty Boots';
+ let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);
+ // Crash damage move users want an odd HP to survive two misses
+ if (['axekick', 'highjumpkick', 'jumpkick', 'supercellslam'].some(m => moves.has(m))) srWeakness = 2;
+ while (evs.hp > 1) {
+ const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ if ((moves.has('substitute') && ['Sitrus Berry', 'Salac Berry'].includes(item)) || species.id === 'minior') {
+ // Two Substitutes should activate Sitrus Berry. Two switch-ins to Stealth Rock should activate Shields Down on Minior.
+ if (hp % 4 === 0) break;
+ } else if (
+ (moves.has('bellydrum') || moves.has('filletaway') || moves.has('shedtail')) &&
+ (item === 'Sitrus Berry' || ability === 'Gluttony')
+ ) {
+ // Belly Drum should activate Sitrus Berry
+ if (hp % 2 === 0) break;
+ } else if (moves.has('substitute') && moves.has('endeavor')) {
+ // Luvdisc should be able to Substitute down to very low HP
+ if (hp % 4 > 0) break;
+ } else {
+ // Maximize number of Stealth Rock switch-ins
+ if (srWeakness <= 0 || ability === 'Regenerator' || ['Leftovers', 'Life Orb'].includes(item)) break;
+ if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;
+ // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry
+ if (!isDoubles && item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;
+ }
+ evs.hp -= 4;
+ }
+
+ // Minimize confusion damage
+ const noAttackStatMoves = [...moves].every(m => {
+ const move = this.dex.moves.get(m);
+ if (move.damageCallback || move.damage) return true;
+ if (move.id === 'shellsidearm') return false;
+ // Physical Tera Blast
+ if (
+ move.id === 'terablast' && (species.id === 'porygon2' || ['Contrary', 'Defiant'].includes(ability) ||
+ moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa)
+ ) return false;
+ return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
+ });
+ if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime') {
+ evs.atk = 0;
+ ivs.atk = 0;
+ }
+
+ if (moves.has('gyroball') || moves.has('trickroom')) {
+ evs.spe = 0;
+ ivs.spe = 0;
+ }
+
+ // Enforce Tera Type after all set generation is done to prevent infinite generation
+ if (this.forceTeraType) teraType = this.forceTeraType;
+
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+ return {
+ name: species.baseSpecies,
+ species: forme,
+ gender: species.baseSpecies === 'Greninja' ? 'M' : species.gender,
+ shiny: this.randomChance(1, 1024),
+ level,
+ moves: shuffledMoves,
+ ability,
+ evs,
+ ivs,
+ item,
+ teraType,
+ role,
+ };
+ }
+
+ getPokemonPool(
+ type: string,
+ pokemonToExclude: RandomTeamsTypes.RandomSet[] = [],
+ isMonotype = false,
+ pokemonList: string[]
+ ): [{[k: string]: string[]}, string[]] {
+ const exclude = pokemonToExclude.map(p => toID(p.species));
+ const pokemonPool: {[k: string]: string[]} = {};
+ const baseSpeciesPool = [];
+ for (const pokemon of pokemonList) {
+ let species = this.dex.species.get(pokemon);
+ if (exclude.includes(species.id)) continue;
+ if (isMonotype) {
+ if (!species.types.includes(type)) continue;
+ if (typeof species.battleOnly === 'string') {
+ species = this.dex.species.get(species.battleOnly);
+ if (!species.types.includes(type)) continue;
+ }
+ }
+
+ if (species.baseSpecies in pokemonPool) {
+ pokemonPool[species.baseSpecies].push(pokemon);
+ } else {
+ pokemonPool[species.baseSpecies] = [pokemon];
+ }
+ }
+ // Include base species 1x if 1-3 formes, 2x if 4-6 formes, 3x if 7+ formes
+ for (const baseSpecies of Object.keys(pokemonPool)) {
+ // Squawkabilly has 4 formes, but only 2 functionally different formes, so only include it 1x
+ const weight = (baseSpecies === 'Squawkabilly') ? 1 : Math.min(Math.ceil(pokemonPool[baseSpecies].length / 3), 3);
+ for (let i = 0; i < weight; i++) baseSpeciesPool.push(baseSpecies);
+ }
+ return [pokemonPool, baseSpeciesPool];
+ }
+
+ randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json');
+ randomDoublesSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./doubles-sets.json');
+
+ randomTeam() {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const seed = this.prng.seed;
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+ const pokemon: RandomTeamsTypes.RandomSet[] = [];
+
+ // For Monotype
+ const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
+ const isDoubles = this.format.gameType !== 'singles';
+ const typePool = this.dex.types.names().filter(name => name !== "Stellar");
+ const type = this.forceMonotype || this.sample(typePool);
+
+ // PotD stuff
+ const usePotD = global.Config && Config.potd && ruleTable.has('potd');
+ const potd = usePotD ? this.dex.species.get(Config.potd) : null;
+
+ const baseFormes: {[k: string]: number} = {};
+
+ const typeCount: {[k: string]: number} = {};
+ const typeComboCount: {[k: string]: number} = {};
+ const typeWeaknesses: {[k: string]: number} = {};
+ const typeDoubleWeaknesses: {[k: string]: number} = {};
+ const teamDetails: RandomTeamsTypes.TeamDetails = {};
+ let numMaxLevelPokemon = 0;
+
+ const pokemonList = isDoubles ? Object.keys(this.randomDoublesSets) : Object.keys(this.randomSets);
+ const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);
+
+ let leadsRemaining = this.format.gameType === 'doubles' ? 2 : 1;
+ while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
+ const baseSpecies = this.sampleNoReplace(baseSpeciesPool);
+ let species = this.dex.species.get(this.sample(pokemonPool[baseSpecies]));
+ if (!species.exists) continue;
+
+ // Limit to one of each species (Species Clause)
+ if (baseFormes[species.baseSpecies]) continue;
+
+ // Treat Ogerpon formes and Terapagos like the Tera Blast user role; reject if team has one already
+ if (['ogerpon', 'ogerponhearthflame', 'terapagos'].includes(species.id) && teamDetails.teraBlast) continue;
+
+ // Illusion shouldn't be on the last slot
+ if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue;
+
+ const types = species.types;
+ const typeCombo = types.slice().sort().join();
+ const weakToFreezeDry = (
+ this.dex.getEffectiveness('Ice', species) > 0 ||
+ (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water'))
+ );
+ // Dynamically scale limits for different team sizes. The default and minimum value is 1.
+ const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
+
+ if (!isMonotype && !this.forceMonotype) {
+ let skip = false;
+
+ // Limit two of any type
+ for (const typeName of types) {
+ if (typeCount[typeName] >= 2 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (skip) continue;
+
+ // Limit three weak to any type, and one double weak to any type
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;
+ if (typeWeaknesses[typeName] >= 3 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0;
+ if (typeDoubleWeaknesses[typeName] >= 1 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ if (skip) continue;
+
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (
+ this.dex.getEffectiveness('Fire', species) === 0 &&
+ Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length
+ ) {
+ if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0;
+ if (typeWeaknesses['Fire'] >= 3 * limitFactor) continue;
+ }
+
+ // Limit four weak to Freeze-Dry
+ if (weakToFreezeDry) {
+ if (!typeWeaknesses['Freeze-Dry']) typeWeaknesses['Freeze-Dry'] = 0;
+ if (typeWeaknesses['Freeze-Dry'] >= 4 * limitFactor) continue;
+ }
+
+ // Limit one level 100 Pokemon
+ if (!this.adjustLevel && (this.getLevel(species, isDoubles) === 100) && numMaxLevelPokemon >= limitFactor) {
+ continue;
+ }
+ }
+
+ // Limit three of any type combination in Monotype
+ if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue;
+
+ // The Pokemon of the Day
+ if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd;
+
+ let set: RandomTeamsTypes.RandomSet;
+
+ if (leadsRemaining) {
+ if (
+ isDoubles && DOUBLES_NO_LEAD_POKEMON.includes(species.baseSpecies) ||
+ !isDoubles && NO_LEAD_POKEMON.includes(species.baseSpecies)
+ ) {
+ if (pokemon.length + leadsRemaining === this.maxTeamSize) continue;
+ set = this.randomSet(species, teamDetails, false, isDoubles);
+ pokemon.push(set);
+ } else {
+ set = this.randomSet(species, teamDetails, true, isDoubles);
+ pokemon.unshift(set);
+ leadsRemaining--;
+ }
+ } else {
+ set = this.randomSet(species, teamDetails, false, isDoubles);
+ pokemon.push(set);
+ }
+
+ // Don't bother tracking details for the last Pokemon
+ if (pokemon.length === this.maxTeamSize) break;
+
+ // Now that our Pokemon has passed all checks, we can increment our counters
+ baseFormes[species.baseSpecies] = 1;
+
+ // Increment type counters
+ for (const typeName of types) {
+ if (typeName in typeCount) {
+ typeCount[typeName]++;
+ } else {
+ typeCount[typeName] = 1;
+ }
+ }
+ if (typeCombo in typeComboCount) {
+ typeComboCount[typeCombo]++;
+ } else {
+ typeComboCount[typeCombo] = 1;
+ }
+
+ // Increment weakness counter
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ typeWeaknesses[typeName]++;
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ typeDoubleWeaknesses[typeName]++;
+ }
+ }
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) {
+ typeWeaknesses['Fire']++;
+ }
+ if (weakToFreezeDry) typeWeaknesses['Freeze-Dry']++;
+
+ // Increment level 100 counter
+ if (set.level === 100) numMaxLevelPokemon++;
+
+ // Track what the team has
+ if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1;
+ if (set.ability === 'Drought' || set.ability === 'Orichalcum Pulse' || set.moves.includes('sunnyday')) {
+ teamDetails.sun = 1;
+ }
+ if (set.ability === 'Sand Stream') teamDetails.sand = 1;
+ if (set.ability === 'Snow Warning' || set.moves.includes('snowscape') || set.moves.includes('chillyreception')) {
+ teamDetails.snow = 1;
+ }
+ if (set.moves.includes('healbell')) teamDetails.statusCure = 1;
+ if (set.moves.includes('spikes') || set.moves.includes('ceaselessedge')) {
+ teamDetails.spikes = (teamDetails.spikes || 0) + 1;
+ }
+ if (set.moves.includes('toxicspikes') || set.ability === 'Toxic Debris') teamDetails.toxicSpikes = 1;
+ if (set.moves.includes('stealthrock') || set.moves.includes('stoneaxe')) teamDetails.stealthRock = 1;
+ if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1;
+ if (set.moves.includes('defog')) teamDetails.defog = 1;
+ if (set.moves.includes('rapidspin') || set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1;
+ if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) {
+ teamDetails.screens = 1;
+ }
+ if (set.role === 'Tera Blast user' || ['ogerpon', 'ogerponhearthflame', 'terapagos'].includes(species.id)) {
+ teamDetails.teraBlast = 1;
+ }
+ }
+ if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { // large teams sometimes cannot be built
+ throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
+ }
+
+ return pokemon;
+ }
+
+ randomCCTeam(): RandomTeamsTypes.RandomSet[] {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const dex = this.dex;
+ const team = [];
+
+ const natures = this.dex.natures.all();
+ const items = this.dex.items.all();
+
+ const randomN = this.randomNPokemon(this.maxTeamSize, this.forceMonotype, undefined, undefined, true);
+
+ for (let forme of randomN) {
+ let species = dex.species.get(forme);
+ if (species.isNonstandard) species = dex.species.get(species.baseSpecies);
+
+ // Random legal item
+ let item = '';
+ let isIllegalItem;
+ let isBadItem;
+ if (this.gen >= 2) {
+ do {
+ item = this.sample(items).name;
+ isIllegalItem = this.dex.items.get(item).gen > this.gen || this.dex.items.get(item).isNonstandard;
+ isBadItem = item.startsWith("TR") || this.dex.items.get(item).isPokeball;
+ } while (isIllegalItem || (isBadItem && this.randomChance(19, 20)));
+ }
+
+ // Make sure forme is legal
+ if (species.battleOnly) {
+ if (typeof species.battleOnly === 'string') {
+ species = dex.species.get(species.battleOnly);
+ } else {
+ species = dex.species.get(this.sample(species.battleOnly));
+ }
+ forme = species.name;
+ } else if (species.requiredItems && !species.requiredItems.some(req => toID(req) === item)) {
+ if (!species.changesFrom) throw new Error(`${species.name} needs a changesFrom value`);
+ species = dex.species.get(species.changesFrom);
+ forme = species.name;
+ }
+
+ // Make sure that a base forme does not hold any forme-modifier items.
+ let itemData = this.dex.items.get(item);
+ if (itemData.forcedForme && forme === this.dex.species.get(itemData.forcedForme).baseSpecies) {
+ do {
+ itemData = this.sample(items);
+ item = itemData.name;
+ } while (
+ itemData.gen > this.gen ||
+ itemData.isNonstandard ||
+ (itemData.forcedForme && forme === this.dex.species.get(itemData.forcedForme).baseSpecies)
+ );
+ }
+
+ // Random legal ability
+ const abilities = Object.values(species.abilities).filter(a => this.dex.abilities.get(a).gen <= this.gen);
+ const ability: string = this.gen <= 2 ? 'No Ability' : this.sample(abilities);
+
+ // Four random unique moves from the movepool
+ let pool = ['struggle'];
+ if (forme === 'Smeargle') {
+ pool = this.dex.moves.all()
+ .filter(move => !(move.isNonstandard || move.isZ || move.isMax || move.realMove))
+ .map(m => m.id);
+ } else {
+ pool = [...this.dex.species.getMovePool(species.id)];
+ }
+
+ const moves = this.multipleSamplesNoReplace(pool, this.maxMoveCount);
+
+ // Random EVs
+ const evs: StatsTable = {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0};
+ const s: StatID[] = ["hp", "atk", "def", "spa", "spd", "spe"];
+ let evpool = 510;
+ do {
+ const x = this.sample(s);
+ const y = this.random(Math.min(256 - evs[x], evpool + 1));
+ evs[x] += y;
+ evpool -= y;
+ } while (evpool > 0);
+
+ // Random IVs
+ const ivs = {
+ hp: this.random(32),
+ atk: this.random(32),
+ def: this.random(32),
+ spa: this.random(32),
+ spd: this.random(32),
+ spe: this.random(32),
+ };
+
+ // Random nature
+ const nature = this.sample(natures).name;
+
+ // Level balance--calculate directly from stats rather than using some silly lookup table
+ const mbstmin = 1307; // Sunkern has the lowest modified base stat total, and that total is 807
+
+ let stats = species.baseStats;
+ // If Wishiwashi, use the school-forme's much higher stats
+ if (species.baseSpecies === 'Wishiwashi') stats = Dex.species.get('wishiwashischool').baseStats;
+ // If Terapagos, use Terastal-forme's stats
+ if (species.baseSpecies === 'Terapagos') stats = Dex.species.get('terapagosterastal').baseStats;
+
+ // Modified base stat total assumes 31 IVs, 85 EVs in every stat
+ let mbst = (stats["hp"] * 2 + 31 + 21 + 100) + 10;
+ mbst += (stats["atk"] * 2 + 31 + 21 + 100) + 5;
+ mbst += (stats["def"] * 2 + 31 + 21 + 100) + 5;
+ mbst += (stats["spa"] * 2 + 31 + 21 + 100) + 5;
+ mbst += (stats["spd"] * 2 + 31 + 21 + 100) + 5;
+ mbst += (stats["spe"] * 2 + 31 + 21 + 100) + 5;
+
+ let level;
+ if (this.adjustLevel) {
+ level = this.adjustLevel;
+ } else {
+ level = Math.floor(100 * mbstmin / mbst); // Initial level guess will underestimate
+
+ while (level < 100) {
+ mbst = Math.floor((stats["hp"] * 2 + 31 + 21 + 100) * level / 100 + 10);
+ // Since damage is roughly proportional to level
+ mbst += Math.floor(((stats["atk"] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100);
+ mbst += Math.floor((stats["def"] * 2 + 31 + 21 + 100) * level / 100 + 5);
+ mbst += Math.floor(((stats["spa"] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100);
+ mbst += Math.floor((stats["spd"] * 2 + 31 + 21 + 100) * level / 100 + 5);
+ mbst += Math.floor((stats["spe"] * 2 + 31 + 21 + 100) * level / 100 + 5);
+
+ if (mbst >= mbstmin) break;
+ level++;
+ }
+ }
+
+ // Random happiness
+ const happiness = this.random(256);
+
+ // Random shininess
+ const shiny = this.randomChance(1, 1024);
+
+ const set: RandomTeamsTypes.RandomSet = {
+ name: species.baseSpecies,
+ species: species.name,
+ gender: species.gender,
+ item,
+ ability,
+ moves,
+ evs,
+ ivs,
+ nature,
+ level,
+ happiness,
+ shiny,
+ };
+ if (this.gen === 9) {
+ // Tera type
+ if (this.forceTeraType) {
+ set.teraType = this.forceTeraType;
+ } else {
+ set.teraType = this.sample(this.dex.types.names());
+ }
+ }
+ team.push(set);
+ }
+
+ return team;
+ }
+
+ private getPools(requiredType?: string, minSourceGen?: number, ruleTable?: RuleTable, requireMoves = false) {
+ // Memoize pool and speciesPool because, at least during tests, they are constructed with the same parameters
+ // hundreds of times and are expensive to compute.
+ const isNotCustom = !ruleTable;
+ let pool: number[] = [];
+ let speciesPool: Species[] = [];
+ const ck = this.poolsCacheKey;
+ if (ck && this.cachedPool && this.cachedSpeciesPool &&
+ ck[0] === requiredType && ck[1] === minSourceGen && ck[2] === ruleTable && ck[3] === requireMoves) {
+ speciesPool = this.cachedSpeciesPool.slice();
+ pool = this.cachedPool.slice();
+ } else if (isNotCustom) {
+ speciesPool = [...this.dex.species.all()];
+ for (const species of speciesPool) {
+ if (species.isNonstandard && species.isNonstandard !== 'Unobtainable') continue;
+ if (requireMoves) {
+ const hasMovesInCurrentGen = this.dex.species.getMovePool(species.id).size;
+ if (!hasMovesInCurrentGen) continue;
+ }
+ if (requiredType && !species.types.includes(requiredType)) continue;
+ if (minSourceGen && species.gen < minSourceGen) continue;
+ const num = species.num;
+ if (num <= 0 || pool.includes(num)) continue;
+ pool.push(num);
+ }
+ this.poolsCacheKey = [requiredType, minSourceGen, ruleTable, requireMoves];
+ this.cachedPool = pool.slice();
+ this.cachedSpeciesPool = speciesPool.slice();
+ } else {
+ const EXISTENCE_TAG = ['past', 'future', 'lgpe', 'unobtainable', 'cap', 'custom', 'nonexistent'];
+ const nonexistentBanReason = ruleTable.check('nonexistent');
+ // Assume tierSpecies does not differ from species here (mega formes can be used without their stone, etc)
+ for (const species of this.dex.species.all()) {
+ if (requiredType && !species.types.includes(requiredType)) continue;
+
+ let banReason = ruleTable.check('pokemon:' + species.id);
+ if (banReason) continue;
+ if (banReason !== '') {
+ if (species.isMega && ruleTable.check('pokemontag:mega')) continue;
+
+ banReason = ruleTable.check('basepokemon:' + toID(species.baseSpecies));
+ if (banReason) continue;
+ if (banReason !== '' || this.dex.species.get(species.baseSpecies).isNonstandard !== species.isNonstandard) {
+ const nonexistentCheck = Tags.nonexistent.genericFilter!(species) && nonexistentBanReason;
+ let tagWhitelisted = false;
+ let tagBlacklisted = false;
+ for (const ruleid of ruleTable.tagRules) {
+ if (ruleid.startsWith('*')) continue;
+ const tagid = ruleid.slice(12) as ID;
+ const tag = Tags[tagid];
+ if ((tag.speciesFilter || tag.genericFilter)!(species)) {
+ const existenceTag = EXISTENCE_TAG.includes(tagid);
+ if (ruleid.startsWith('+')) {
+ if (!existenceTag && nonexistentCheck) continue;
+ tagWhitelisted = true;
+ break;
+ }
+ tagBlacklisted = true;
+ break;
+ }
+ }
+ if (tagBlacklisted) continue;
+ if (!tagWhitelisted) {
+ if (ruleTable.check('pokemontag:allpokemon')) continue;
+ }
+ }
+ }
+ speciesPool.push(species);
+ const num = species.num;
+ if (pool.includes(num)) continue;
+ pool.push(num);
+ }
+ this.poolsCacheKey = [requiredType, minSourceGen, ruleTable, requireMoves];
+ this.cachedPool = pool.slice();
+ this.cachedSpeciesPool = speciesPool.slice();
+ }
+ return {pool, speciesPool};
+ }
+
+ randomNPokemon(n: number, requiredType?: string, minSourceGen?: number, ruleTable?: RuleTable, requireMoves = false) {
+ // Picks `n` random pokemon--no repeats, even among formes
+ // Also need to either normalize for formes or select formes at random
+ // Unreleased are okay but no CAP
+ if (requiredType && !this.dex.types.get(requiredType).exists) {
+ throw new Error(`"${requiredType}" is not a valid type.`);
+ }
+
+ const {pool, speciesPool} = this.getPools(requiredType, minSourceGen, ruleTable, requireMoves);
+ const isNotCustom = !ruleTable;
+
+ const hasDexNumber: {[k: string]: number} = {};
+ for (let i = 0; i < n; i++) {
+ const num = this.sampleNoReplace(pool);
+ hasDexNumber[num] = i;
+ }
+
+ const formes: string[][] = [];
+ for (const species of speciesPool) {
+ if (!(species.num in hasDexNumber)) continue;
+ if (isNotCustom && (species.gen > this.gen ||
+ (species.isNonstandard && species.isNonstandard !== 'Unobtainable'))) continue;
+ if (requiredType && !species.types.includes(requiredType)) continue;
+ if (!formes[hasDexNumber[species.num]]) formes[hasDexNumber[species.num]] = [];
+ formes[hasDexNumber[species.num]].push(species.name);
+ }
+
+ if (formes.length < n) {
+ throw new Error(`Legal Pokemon forme count insufficient to support Max Team Size: (${formes.length} / ${n}).`);
+ }
+
+ const nPokemon = [];
+ for (let i = 0; i < n; i++) {
+ if (!formes[i].length) {
+ throw new Error(`Invalid pokemon gen ${this.gen}: ${JSON.stringify(formes)} numbers ${JSON.stringify(hasDexNumber)}`);
+ }
+ nPokemon.push(this.sample(formes[i]));
+ }
+ return nPokemon;
+ }
+
+ randomHCTeam(): PokemonSet[] {
+ const hasCustomBans = this.hasDirectCustomBanlistChanges();
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+ const hasNonexistentBan = hasCustomBans && ruleTable.check('nonexistent');
+ const hasNonexistentWhitelist = hasCustomBans && (hasNonexistentBan === '');
+
+ if (hasCustomBans) {
+ this.enforceNoDirectComplexBans();
+ }
+
+ // Item Pool
+ const doItemsExist = this.gen > 1;
+ let itemPool: Item[] = [];
+ if (doItemsExist) {
+ if (!hasCustomBans) {
+ itemPool = [...this.dex.items.all()].filter(item => (item.gen <= this.gen && !item.isNonstandard));
+ } else {
+ const hasAllItemsBan = ruleTable.check('pokemontag:allitems');
+ for (const item of this.dex.items.all()) {
+ let banReason = ruleTable.check('item:' + item.id);
+ if (banReason) continue;
+ if (banReason !== '' && item.id) {
+ if (hasAllItemsBan) continue;
+ if (item.isNonstandard) {
+ banReason = ruleTable.check('pokemontag:' + toID(item.isNonstandard));
+ if (banReason) continue;
+ if (banReason !== '' && item.isNonstandard !== 'Unobtainable') {
+ if (hasNonexistentBan) continue;
+ if (!hasNonexistentWhitelist) continue;
+ }
+ }
+ }
+ itemPool.push(item);
+ }
+ if (ruleTable.check('item:noitem')) {
+ this.enforceCustomPoolSizeNoComplexBans('item', itemPool, this.maxTeamSize, 'Max Team Size');
+ }
+ }
+ }
+
+ // Ability Pool
+ const doAbilitiesExist = (this.gen > 2) && (this.dex.currentMod !== 'gen7letsgo');
+ let abilityPool: Ability[] = [];
+ if (doAbilitiesExist) {
+ if (!hasCustomBans) {
+ abilityPool = [...this.dex.abilities.all()].filter(ability => (ability.gen <= this.gen && !ability.isNonstandard));
+ } else {
+ const hasAllAbilitiesBan = ruleTable.check('pokemontag:allabilities');
+ for (const ability of this.dex.abilities.all()) {
+ let banReason = ruleTable.check('ability:' + ability.id);
+ if (banReason) continue;
+ if (banReason !== '') {
+ if (hasAllAbilitiesBan) continue;
+ if (ability.isNonstandard) {
+ banReason = ruleTable.check('pokemontag:' + toID(ability.isNonstandard));
+ if (banReason) continue;
+ if (banReason !== '') {
+ if (hasNonexistentBan) continue;
+ if (!hasNonexistentWhitelist) continue;
+ }
+ }
+ }
+ abilityPool.push(ability);
+ }
+ if (ruleTable.check('ability:noability')) {
+ this.enforceCustomPoolSizeNoComplexBans('ability', abilityPool, this.maxTeamSize, 'Max Team Size');
+ }
+ }
+ }
+
+ // Move Pool
+ const setMoveCount = ruleTable.maxMoveCount;
+ let movePool: Move[] = [];
+ if (!hasCustomBans) {
+ movePool = [...this.dex.moves.all()].filter(move =>
+ (move.gen <= this.gen && !move.isNonstandard));
+ } else {
+ const hasAllMovesBan = ruleTable.check('pokemontag:allmoves');
+ for (const move of this.dex.moves.all()) {
+ let banReason = ruleTable.check('move:' + move.id);
+ if (banReason) continue;
+ if (banReason !== '') {
+ if (hasAllMovesBan) continue;
+ if (move.isNonstandard) {
+ banReason = ruleTable.check('pokemontag:' + toID(move.isNonstandard));
+ if (banReason) continue;
+ if (banReason !== '' && move.isNonstandard !== 'Unobtainable') {
+ if (hasNonexistentBan) continue;
+ if (!hasNonexistentWhitelist) continue;
+ }
+ }
+ }
+ movePool.push(move);
+ }
+ this.enforceCustomPoolSizeNoComplexBans('move', movePool, this.maxTeamSize * setMoveCount, 'Max Team Size * Max Move Count');
+ }
+
+ // Nature Pool
+ const doNaturesExist = this.gen > 2;
+ let naturePool: Nature[] = [];
+ if (doNaturesExist) {
+ if (!hasCustomBans) {
+ naturePool = [...this.dex.natures.all()];
+ } else {
+ const hasAllNaturesBan = ruleTable.check('pokemontag:allnatures');
+ for (const nature of this.dex.natures.all()) {
+ let banReason = ruleTable.check('nature:' + nature.id);
+ if (banReason) continue;
+ if (banReason !== '' && nature.id) {
+ if (hasAllNaturesBan) continue;
+ if (nature.isNonstandard) {
+ banReason = ruleTable.check('pokemontag:' + toID(nature.isNonstandard));
+ if (banReason) continue;
+ if (banReason !== '' && nature.isNonstandard !== 'Unobtainable') {
+ if (hasNonexistentBan) continue;
+ if (!hasNonexistentWhitelist) continue;
+ }
+ }
+ }
+ naturePool.push(nature);
+ }
+ // There is no 'nature:nonature' rule so do not constrain pool size
+ }
+ }
+
+ const randomN = this.randomNPokemon(this.maxTeamSize, this.forceMonotype, undefined,
+ hasCustomBans ? ruleTable : undefined);
+
+ const team = [];
+ for (const forme of randomN) {
+ // Choose forme
+ const species = this.dex.species.get(forme);
+
+ // Random unique item
+ let item = '';
+ let itemData;
+ let isBadItem;
+ if (doItemsExist) {
+ // We discard TRs and Balls with 95% probability because of their otherwise overwhelming presence
+ do {
+ itemData = this.sampleNoReplace(itemPool);
+ item = itemData?.name;
+ isBadItem = item.startsWith("TR") || itemData.isPokeball;
+ } while (isBadItem && this.randomChance(19, 20) && itemPool.length > this.maxTeamSize);
+ }
+
+ // Random unique ability
+ let ability = 'No Ability';
+ let abilityData;
+ if (doAbilitiesExist) {
+ abilityData = this.sampleNoReplace(abilityPool);
+ ability = abilityData?.name;
+ }
+
+ // Random unique moves
+ const m = [];
+ do {
+ const move = this.sampleNoReplace(movePool);
+ m.push(move.id);
+ } while (m.length < setMoveCount);
+
+ // Random EVs
+ const evs = {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0};
+ if (this.gen === 6) {
+ let evpool = 510;
+ do {
+ const x = this.sample(Dex.stats.ids());
+ const y = this.random(Math.min(256 - evs[x], evpool + 1));
+ evs[x] += y;
+ evpool -= y;
+ } while (evpool > 0);
+ } else {
+ for (const x of Dex.stats.ids()) {
+ evs[x] = this.random(256);
+ }
+ }
+
+ // Random IVs
+ const ivs: StatsTable = {
+ 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 = '';
+ if (doNaturesExist && (naturePool.length > 0)) {
+ nature = this.sample(naturePool).name;
+ }
+
+ // Level balance
+ const mbstmin = 1307;
+ const stats = species.baseStats;
+ let mbst = (stats['hp'] * 2 + 31 + 21 + 100) + 10;
+ mbst += (stats['atk'] * 2 + 31 + 21 + 100) + 5;
+ mbst += (stats['def'] * 2 + 31 + 21 + 100) + 5;
+ mbst += (stats['spa'] * 2 + 31 + 21 + 100) + 5;
+ mbst += (stats['spd'] * 2 + 31 + 21 + 100) + 5;
+ mbst += (stats['spe'] * 2 + 31 + 21 + 100) + 5;
+
+ let level;
+ if (this.adjustLevel) {
+ level = this.adjustLevel;
+ } else {
+ level = Math.floor(100 * mbstmin / mbst);
+ while (level < 100) {
+ mbst = Math.floor((stats['hp'] * 2 + 31 + 21 + 100) * level / 100 + 10);
+ mbst += Math.floor(((stats['atk'] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100);
+ mbst += Math.floor((stats['def'] * 2 + 31 + 21 + 100) * level / 100 + 5);
+ mbst += Math.floor(((stats['spa'] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100);
+ mbst += Math.floor((stats['spd'] * 2 + 31 + 21 + 100) * level / 100 + 5);
+ mbst += Math.floor((stats['spe'] * 2 + 31 + 21 + 100) * level / 100 + 5);
+ if (mbst >= mbstmin) break;
+ level++;
+ }
+ }
+
+ // Random happiness
+ const happiness = this.random(256);
+
+ // Random shininess
+ const shiny = this.randomChance(1, 1024);
+
+ const set: PokemonSet = {
+ name: species.baseSpecies,
+ species: species.name,
+ gender: species.gender,
+ item,
+ ability,
+ moves: m,
+ evs,
+ ivs,
+ nature,
+ level,
+ happiness,
+ shiny,
+ };
+ if (this.gen === 9) {
+ // Random Tera type
+ if (this.forceTeraType) {
+ set.teraType = this.forceTeraType;
+ } else {
+ set.teraType = this.sample(this.dex.types.names());
+ }
+ }
+ team.push(set);
+ }
+
+ return team;
+ }
+
+ randomFactorySets: {[format: string]: {[species: string]: BattleFactorySpecies}} = require('./factory-sets.json');
+
+ randomFactorySet(
+ species: Species, teamData: RandomTeamsTypes.FactoryTeamDetails, tier: string
+ ): RandomTeamsTypes.RandomFactorySet | null {
+ const id = toID(species.name);
+ const setList = this.randomFactorySets[tier][id].sets;
+
+ const itemsLimited = ['choicespecs', 'choiceband', 'choicescarf'];
+ const movesLimited: {[k: string]: string} = {
+ stealthrock: 'stealthRock',
+ stoneaxe: 'stealthRock',
+ spikes: 'spikes',
+ ceaselessedge: 'spikes',
+ toxicspikes: 'toxicSpikes',
+ rapidspin: 'hazardClear',
+ defog: 'hazardClear',
+ };
+ const abilitiesLimited: {[k: string]: string} = {
+ toxicdebris: 'toxicSpikes',
+ };
+
+ // Build a pool of eligible sets, given the team partners
+ // Also keep track of moves and items limited to one per team
+ const effectivePool: {
+ set: BattleFactorySet, moves?: string[], item?: string,
+ }[] = [];
+
+ for (const set of setList) {
+ let reject = false;
+
+ // limit to 1 dedicated tera user per team
+ if (set.wantsTera && teamData.wantsTeraCount) {
+ continue;
+ }
+
+ // reject disallowed items, specifically a second of any given choice item
+ const allowedItems: string[] = [];
+ for (const itemString of set.item) {
+ const itemId = toID(itemString);
+ if (itemsLimited.includes(itemId) && teamData.has[itemId]) continue;
+ allowedItems.push(itemString);
+ }
+ if (!allowedItems.length) continue;
+ const item = this.sample(allowedItems);
+
+ const abilityId = toID(this.sample(set.ability));
+
+ if (abilitiesLimited[abilityId] && teamData.has[abilitiesLimited[abilityId]]) continue;
+
+ const moves: string[] = [];
+ for (const move of set.moves) {
+ const allowedMoves: string[] = [];
+ for (const m of move) {
+ const moveId = toID(m);
+ if (movesLimited[moveId] && teamData.has[movesLimited[moveId]]) continue;
+ allowedMoves.push(m);
+ }
+ if (!allowedMoves.length) {
+ reject = true;
+ break;
+ }
+ moves.push(this.sample(allowedMoves));
+ }
+ if (reject) continue;
+ effectivePool.push({set, moves, item});
+ }
+
+ if (!effectivePool.length) {
+ if (!teamData.forceResult) return null;
+ for (const set of setList) {
+ effectivePool.push({set});
+ }
+ }
+
+ // Sets have individual weight, choose one with weighted random selection
+
+ let setData = this.sample(effectivePool); // Init with unweighted random set as fallback
+
+ const total = effectivePool.reduce((a, b) => a + b.set.weight, 0);
+ const setRand = this.random(total);
+
+ let cur = 0;
+ for (const set of effectivePool) {
+ cur += set.set.weight;
+ if (cur > setRand) {
+ setData = set; // Bingo!
+ break;
+ }
+ }
+
+ const moves = [];
+ for (const [i, moveSlot] of setData.set.moves.entries()) {
+ moves.push(setData.moves ? setData.moves[i] : this.sample(moveSlot));
+ }
+
+ const item = setData.item || this.sample(setData.set.item);
+
+ return {
+ name: species.baseSpecies,
+ species: (typeof species.battleOnly === 'string') ? species.battleOnly : species.name,
+ teraType: this.sample(setData.set.teraType),
+ gender: setData.set.gender || species.gender || (tier === 'OU' ? 'F' : ''), // F for Cute Charm Enamorus
+ item,
+ ability: this.sample(setData.set.ability),
+ shiny: setData.set.shiny || this.randomChance(1, 1024),
+ level: this.adjustLevel || (tier === "LC" ? 5 : 100),
+ happiness: 255,
+ evs: {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0, ...setData.set.evs},
+ ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31, ...setData.set.ivs},
+ nature: this.sample(setData.set.nature) || "Serious",
+ moves,
+ wantsTera: setData.set.wantsTera,
+ };
+ }
+
+
+ randomFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const forceResult = depth >= 12;
+
+ if (!this.factoryTier) {
+ // this.factoryTier = this.sample(['Uber', 'OU', 'UU', 'RU', 'NU', 'PU', 'LC']);
+ this.factoryTier = this.sample(['Uber', 'OU', 'UU', 'RU', 'NU', 'PU']);
+ }
+
+ const tierValues: {[k: string]: number} = {
+ Uber: 5,
+ OU: 4, UUBL: 4,
+ UU: 3, RUBL: 3,
+ RU: 2, NUBL: 2,
+ NU: 1, PUBL: 1,
+ PU: 0,
+ };
+
+ const pokemon = [];
+ const pokemonPool = Object.keys(this.randomFactorySets[this.factoryTier]);
+
+ const teamData: TeamData = {
+ typeCount: {},
+ typeComboCount: {},
+ baseFormes: {},
+ has: {},
+ wantsTeraCount: 0,
+ forceResult: forceResult,
+ weaknesses: {},
+ resistances: {},
+ };
+ const resistanceAbilities: {[k: string]: string[]} = {
+ dryskin: ['Water'], waterabsorb: ['Water'], stormdrain: ['Water'],
+ flashfire: ['Fire'], heatproof: ['Fire'], waterbubble: ['Fire'], wellbakedbody: ['Fire'],
+ lightningrod: ['Electric'], motordrive: ['Electric'], voltabsorb: ['Electric'],
+ sapsipper: ['Grass'],
+ thickfat: ['Ice', 'Fire'],
+ eartheater: ['Ground'], levitate: ['Ground'],
+ };
+ const movesLimited: {[k: string]: string} = {
+ stealthrock: 'stealthRock',
+ stoneaxe: 'stealthRock',
+ spikes: 'spikes',
+ ceaselessedge: 'spikes',
+ toxicspikes: 'toxicSpikes',
+ rapidspin: 'hazardClear',
+ defog: 'hazardClear',
+ };
+ const abilitiesLimited: {[k: string]: string} = {
+ toxicdebris: 'toxicSpikes',
+ };
+ const limitFactor = Math.ceil(this.maxTeamSize / 6);
+ /**
+ * Weighted random shuffle
+ * Uses the fact that for two uniform variables x1 and x2, x1^(1/w1) is larger than x2^(1/w2)
+ * with probability equal to w1/(w1+w2), which is what we want. See e.g. here https://arxiv.org/pdf/1012.0256.pdf,
+ * original paper is behind a paywall.
+ */
+ const shuffledSpecies = [];
+ for (const speciesName of pokemonPool) {
+ const sortObject = {
+ speciesName,
+ score: Math.pow(this.prng.next(), 1 / this.randomFactorySets[this.factoryTier][speciesName].weight),
+ };
+ shuffledSpecies.push(sortObject);
+ }
+ shuffledSpecies.sort((a, b) => a.score - b.score);
+
+ while (shuffledSpecies.length && pokemon.length < this.maxTeamSize) {
+ // repeated popping from weighted shuffle is equivalent to repeated weighted sampling without replacement
+ const species = this.dex.species.get(shuffledSpecies.pop()!.speciesName);
+ if (!species.exists) continue;
+
+ // Lessen the need of deleting sets of Pokemon after tier shifts
+ if (
+ this.factoryTier in tierValues && species.tier in tierValues &&
+ tierValues[species.tier] > tierValues[this.factoryTier]
+ ) continue;
+
+ if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;
+
+ // Limit to one of each species (Species Clause)
+ if (teamData.baseFormes[species.baseSpecies]) continue;
+
+ // Limit 2 of any type (most of the time)
+ const types = species.types;
+ let skip = false;
+ if (!this.forceMonotype) {
+ for (const type of types) {
+ if (teamData.typeCount[type] >= 2 * limitFactor && this.randomChance(4, 5)) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ if (skip) continue;
+
+ if (!teamData.forceResult && !this.forceMonotype) {
+ // Limit 3 of any weakness
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0 && this.dex.getImmunity(typeName, types)) {
+ if (teamData.weaknesses[typeName] >= 3 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ }
+ if (skip) continue;
+
+ const set = this.randomFactorySet(species, teamData, this.factoryTier);
+ if (!set) continue;
+
+ // Limit 1 of any type combination
+ let typeCombo = types.slice().sort().join();
+ if (set.ability === "Drought" || set.ability === "Drizzle") {
+ // Drought and Drizzle don't count towards the type combo limit
+ typeCombo = set.ability;
+ }
+ if (!this.forceMonotype && teamData.typeComboCount[typeCombo] >= limitFactor) continue;
+
+ // Okay, the set passes, add it to our team
+ pokemon.push(set);
+
+ // Now that our Pokemon has passed all checks, we can update team data:
+ for (const type of types) {
+ if (type in teamData.typeCount) {
+ teamData.typeCount[type]++;
+ } else {
+ teamData.typeCount[type] = 1;
+ }
+ }
+ if (typeCombo in teamData.typeComboCount) {
+ teamData.typeComboCount[typeCombo]++;
+ } else {
+ teamData.typeComboCount[typeCombo] = 1;
+ }
+
+ teamData.baseFormes[species.baseSpecies] = 1;
+
+ teamData.has[toID(set.item)] = 1;
+
+ if (set.wantsTera) {
+ if (!teamData.wantsTeraCount) teamData.wantsTeraCount = 0;
+ teamData.wantsTeraCount++;
+ }
+
+ for (const move of set.moves) {
+ const moveId = toID(move);
+ if (movesLimited[moveId]) {
+ teamData.has[movesLimited[moveId]] = 1;
+ }
+ }
+
+ const ability = this.dex.abilities.get(set.ability);
+ if (abilitiesLimited[ability.id]) {
+ teamData.has[abilitiesLimited[ability.id]] = 1;
+ }
+
+ for (const typeName of this.dex.types.names()) {
+ const typeMod = this.dex.getEffectiveness(typeName, types);
+ // Track resistances because we will require it for triple weaknesses
+ if (
+ typeMod < 0 ||
+ resistanceAbilities[ability.id]?.includes(typeName) ||
+ !this.dex.getImmunity(typeName, types)
+ ) {
+ // We don't care about the number of resistances, so just set to 1
+ teamData.resistances[typeName] = 1;
+ // Track weaknesses
+ } else if (typeMod > 0) {
+ teamData.weaknesses[typeName] = (teamData.weaknesses[typeName] || 0) + 1;
+ }
+ }
+ }
+ if (!teamData.forceResult && pokemon.length < this.maxTeamSize) return this.randomFactoryTeam(side, ++depth);
+
+ // Quality control we cannot afford for monotype
+ if (!teamData.forceResult && !this.forceMonotype) {
+ for (const type in teamData.weaknesses) {
+ // We reject if our team is triple weak to any type without having a resist
+ if (teamData.resistances[type]) continue;
+ if (teamData.weaknesses[type] >= 3 * limitFactor) return this.randomFactoryTeam(side, ++depth);
+ }
+ }
+ return pokemon;
+ }
+
+ randomBSSFactorySets: AnyObject = require("./bss-factory-sets.json");
+
+ randomBSSFactorySet(
+ species: Species, teamData: RandomTeamsTypes.FactoryTeamDetails
+ ): RandomTeamsTypes.RandomFactorySet | null {
+ const id = toID(species.name);
+ const setList = this.randomBSSFactorySets[id].sets;
+
+ const movesMax: {[k: string]: number} = {
+ batonpass: 1,
+ stealthrock: 1,
+ toxicspikes: 1,
+ trickroom: 1,
+ auroraveil: 1,
+ };
+ const weatherAbilities = ['drizzle', 'drought', 'snowwarning', 'sandstream'];
+ const terrainAbilities: {[k: string]: string} = {
+ electricsurge: "electric",
+ psychicsurge: "psychic",
+ grassysurge: "grassy",
+ seedsower: "grassy",
+ mistysurge: "misty",
+ };
+ const terrainItemsRequire: {[k: string]: string} = {
+ electricseed: "electric",
+ psychicseed: "psychic",
+ grassyseed: "grassy",
+ mistyseed: "misty",
+ };
+
+ const maxWantsTera = 2;
+
+ // Build a pool of eligible sets, given the team partners
+ // Also keep track of sets with moves the team requires
+ const effectivePool: {
+ set: BSSFactorySet, moveVariants?: number[], itemVariants?: number, abilityVariants?: number,
+ }[] = [];
+
+ for (const curSet of setList) {
+ let reject = false;
+
+ // limit to 2 dedicated tera users per team
+ if (curSet.wantsTera && teamData.wantsTeraCount && teamData.wantsTeraCount >= maxWantsTera) {
+ continue;
+ }
+
+ // reject 2+ weather setters
+ if (teamData.weather && weatherAbilities.includes(curSet.ability)) {
+ continue;
+ }
+
+ if (terrainAbilities[curSet.ability]) {
+ if (!teamData.terrain) teamData.terrain = [];
+ teamData.terrain.push(terrainAbilities[curSet.ability]);
+ }
+
+ for (const item of curSet.item) {
+ if (terrainItemsRequire[item] && !teamData.terrain?.includes(terrainItemsRequire[item])) {
+ reject = true; // reject any sets with a seed item possible and no terrain setter to activate it
+ break;
+ }
+ }
+
+ const curSetMoveVariants = [];
+ for (const move of curSet.moves) {
+ const variantIndex = this.random(move.length);
+ const moveId = toID(move[variantIndex]);
+ if (movesMax[moveId] && teamData.has[moveId] >= movesMax[moveId]) {
+ reject = true;
+ break;
+ }
+ curSetMoveVariants.push(variantIndex);
+ }
+ if (reject) continue;
+ const set = {set: curSet, moveVariants: curSetMoveVariants};
+ effectivePool.push(set);
+ }
+
+ if (!effectivePool.length) {
+ if (!teamData.forceResult) return null;
+ for (const curSet of setList) {
+ effectivePool.push({set: curSet});
+ }
+ }
+
+ // Sets have individual weight, choose one with weighted random selection
+
+ let setData = this.sample(effectivePool); // Init with unweighted random set as fallback
+
+ const total = effectivePool.reduce((a, b) => a + b.set.weight, 0);
+ const setRand = this.random(total);
+
+ let cur = 0;
+ for (const set of effectivePool) {
+ cur += set.set.weight;
+ if (cur > setRand) {
+ setData = set; // Bingo!
+ break;
+ }
+ }
+
+ const moves = [];
+ for (const [i, moveSlot] of setData.set.moves.entries()) {
+ moves.push(setData.moveVariants ? moveSlot[setData.moveVariants[i]] : this.sample(moveSlot));
+ }
+
+ return {
+ name: setData.set.species || species.baseSpecies,
+ species: setData.set.species,
+ teraType: (this.sampleIfArray(setData.set.teraType)),
+ gender: setData.set.gender || species.gender || (this.randomChance(1, 2) ? "M" : "F"),
+ item: this.sampleIfArray(setData.set.item) || "",
+ ability: this.sampleIfArray(setData.set.ability),
+ shiny: this.randomChance(1, 1024),
+ level: 50,
+ happiness: 255,
+ evs: {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0, ...setData.set.evs},
+ ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31, ...setData.set.ivs},
+ nature: setData.set.nature || "Serious",
+ moves,
+ wantsTera: setData.set.wantsTera,
+ };
+ }
+
+
+ randomBSSFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const forceResult = depth >= 4;
+
+ const pokemon = [];
+
+ const pokemonPool = Object.keys(this.randomBSSFactorySets);
+
+ const teamData: TeamData = {
+ typeCount: {},
+ typeComboCount: {},
+ baseFormes: {},
+ has: {},
+ wantsTeraCount: 0,
+ forceResult: forceResult,
+ weaknesses: {},
+ resistances: {},
+ };
+ const weatherAbilitiesSet: {[k: string]: string} = {
+ drizzle: "raindance",
+ drought: "sunnyday",
+ snowwarning: "hail",
+ sandstream: "sandstorm",
+ };
+ const resistanceAbilities: {[k: string]: string[]} = {
+ waterabsorb: ["Water"],
+ flashfire: ["Fire"],
+ lightningrod: ["Electric"],
+ voltabsorb: ["Electric"],
+ thickfat: ["Ice", "Fire"],
+ levitate: ["Ground"],
+ };
+ const limitFactor = Math.ceil(this.maxTeamSize / 6);
+ /**
+ * Weighted random shuffle
+ * Uses the fact that for two uniform variables x1 and x2, x1^(1/w1) is larger than x2^(1/w2)
+ * with probability equal to w1/(w1+w2), which is what we want. See e.g. here https://arxiv.org/pdf/1012.0256.pdf,
+ * original paper is behind a paywall.
+ */
+ const shuffledSpecies = [];
+ for (const speciesName of pokemonPool) {
+ const sortObject = {
+ speciesName,
+ score: Math.pow(this.prng.next(), 1 / this.randomBSSFactorySets[speciesName].weight),
+ };
+ shuffledSpecies.push(sortObject);
+ }
+ shuffledSpecies.sort((a, b) => a.score - b.score);
+
+ while (shuffledSpecies.length && pokemon.length < this.maxTeamSize) {
+ // repeated popping from weighted shuffle is equivalent to repeated weighted sampling without replacement
+ const species = this.dex.species.get(shuffledSpecies.pop()!.speciesName);
+ if (!species.exists) continue;
+
+ if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;
+
+ // Limit to one of each species (Species Clause)
+ if (teamData.baseFormes[species.baseSpecies]) continue;
+
+ // Limit 2 of any type (most of the time)
+ const types = species.types;
+ let skip = false;
+ if (!this.forceMonotype) {
+ for (const type of types) {
+ if (teamData.typeCount[type] >= 2 * limitFactor && this.randomChance(4, 5)) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ if (skip) continue;
+
+ const set = this.randomBSSFactorySet(species, teamData);
+ if (!set) continue;
+
+ // Limit 1 of any type combination
+ let typeCombo = types.slice().sort().join();
+ if (set.ability === "Drought" || set.ability === "Drizzle") {
+ // Drought and Drizzle don't count towards the type combo limit
+ typeCombo = set.ability;
+ }
+ if (!this.forceMonotype && teamData.typeComboCount[typeCombo] >= limitFactor) continue;
+
+ const itemData = this.dex.items.get(set.item);
+ if (teamData.has[itemData.id]) continue; // Item Clause
+
+ // Okay, the set passes, add it to our team
+ pokemon.push(set);
+
+ // Now that our Pokemon has passed all checks, we can update team data:
+ for (const type of types) {
+ if (type in teamData.typeCount) {
+ teamData.typeCount[type]++;
+ } else {
+ teamData.typeCount[type] = 1;
+ }
+ }
+ if (typeCombo in teamData.typeComboCount) {
+ teamData.typeComboCount[typeCombo]++;
+ } else {
+ teamData.typeComboCount[typeCombo] = 1;
+ }
+
+ teamData.baseFormes[species.baseSpecies] = 1;
+
+ teamData.has[itemData.id] = 1;
+
+ if (set.wantsTera) {
+ if (!teamData.wantsTeraCount) teamData.wantsTeraCount = 0;
+ teamData.wantsTeraCount++;
+ }
+
+ const abilityState = this.dex.abilities.get(set.ability);
+ if (abilityState.id in weatherAbilitiesSet) {
+ teamData.weather = weatherAbilitiesSet[abilityState.id];
+ }
+
+ for (const move of set.moves) {
+ const moveId = toID(move);
+ if (moveId in teamData.has) {
+ teamData.has[moveId]++;
+ } else {
+ teamData.has[moveId] = 1;
+ }
+ }
+
+ for (const typeName of this.dex.types.names()) {
+ // Cover any major weakness (3+) with at least one resistance
+ if (teamData.resistances[typeName] >= 1) continue;
+ if (resistanceAbilities[abilityState.id]?.includes(typeName) || !this.dex.getImmunity(typeName, types)) {
+ // Heuristic: assume that Pokémon with these abilities don't have (too) negative typing.
+ teamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;
+ if (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;
+ continue;
+ }
+ const typeMod = this.dex.getEffectiveness(typeName, types);
+ if (typeMod < 0) {
+ teamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;
+ if (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;
+ } else if (typeMod > 0) {
+ teamData.weaknesses[typeName] = (teamData.weaknesses[typeName] || 0) + 1;
+ }
+ }
+ }
+ if (!teamData.forceResult && pokemon.length < this.maxTeamSize) return this.randomBSSFactoryTeam(side, ++depth);
+
+ // Quality control we cannot afford for monotype
+ if (!teamData.forceResult && !this.forceMonotype) {
+ for (const type in teamData.weaknesses) {
+ if (teamData.weaknesses[type] >= 3 * limitFactor) return this.randomBSSFactoryTeam(side, ++depth);
+ }
+ }
+
+ return pokemon;
+ }
+
+ randomDraftFactoryMatchups: AnyObject = require("./draft-factory-matchups.json").matchups;
+ rdfMatchupIndex = -1;
+ rdfMatchupSide = -1;
+
+ randomDraftFactoryTeam(side: PlayerOptions): RandomTeamsTypes.RandomDraftFactorySet[] {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ if (this.rdfMatchupIndex === -1) this.rdfMatchupIndex = this.random(0, this.randomDraftFactoryMatchups.length);
+ if (this.rdfMatchupSide === -1) this.rdfMatchupSide = this.random(0, 2);
+
+ const matchup = this.randomDraftFactoryMatchups[this.rdfMatchupIndex];
+ const team = Teams.unpack(matchup[this.rdfMatchupSide]);
+ if (!team) throw new Error(`Invalid team for draft factory matchup ${this.rdfMatchupIndex}`);
+ this.rdfMatchupSide = 1 - this.rdfMatchupSide;
+ return team.map(set => {
+ let species = this.dex.species.get(set.species);
+ if (species.battleOnly) {
+ if (typeof species.battleOnly !== 'string') {
+ throw new Error(`Invalid species ${species.name} for draft factory matchup ${this.rdfMatchupIndex} team ${this.rdfMatchupSide}`);
+ }
+ species = this.dex.species.get(species.battleOnly);
+ }
+ return {
+ name: species.baseSpecies,
+ species: species.name,
+ gender: set.gender,
+ moves: set.moves,
+ ability: set.ability,
+ evs: set.evs,
+ ivs: set.ivs,
+ item: set.item,
+ level: this.adjustLevel || set.level,
+ shiny: !!set.shiny,
+ nature: set.nature,
+ teraType: set.teraType,
+ teraCaptain: set.name === 'Tera Captain',
+ };
+ });
+ }
+}
+
+export default RandomTeams;
diff --git a/data/random-battles/gen9baby/sets.json b/data/random-battles/gen9baby/sets.json
new file mode 100644
index 000000000000..a348c01c9ac5
--- /dev/null
+++ b/data/random-battles/gen9baby/sets.json
@@ -0,0 +1,3382 @@
+{
+ "aipom": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Brick Break", "Double-Edge", "Fake Out", "Fire Punch", "Gunk Shot", "Knock Off", "U-turn"],
+ "abilities": ["Pickup"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "arrokuda": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Crunch", "Flip Turn", "Psychic Fangs", "Waterfall"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "axew": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Claw", "Dragon Dance", "Iron Head", "Outrage", "Stomping Tantrum"],
+ "abilities": ["Mold Breaker"],
+ "teraTypes": ["Ground", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Iron Head", "Scale Shot", "Stomping Tantrum", "Swords Dance"],
+ "abilities": ["Mold Breaker"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "azurill": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Aqua Jet", "Belly Drum", "Body Slam", "Facade"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "bagon": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Claw", "Dragon Dance", "Fire Fang", "Iron Head", "Outrage"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Fire", "Steel"]
+ }
+ ]
+ },
+ "barboach": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Stone Edge", "Waterfall"],
+ "abilities": ["Oblivious"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "basculinwhitestriped": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Flip Turn", "Hydro Pump", "Ice Beam", "Wave Crash"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Aqua Jet", "Flip Turn", "Ice Beam", "Wave Crash"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "bellsprout": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Poison Jab", "Power Whip", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Dark", "Grass"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Knock Off", "Power Whip", "Sleep Powder", "Sludge Bomb", "Strength Sap", "Sucker Punch"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Dark", "Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Power Whip", "Sludge Bomb", "Sunny Day", "Weather Ball"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "bergmite": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Curse", "Icicle Spear", "Rapid Spin", "Recover", "Stone Edge"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "blitzle": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Body Slam", "Double-Edge", "Flame Charge", "Supercell Slam", "Thunder Wave", "Trailblaze", "Volt Switch"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Electric", "Fire", "Grass", "Normal"]
+ }
+ ]
+ },
+ "bonsly": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Rock Blast", "Spikes", "Stealth Rock", "Stone Edge", "Sucker Punch"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Dragon", "Fairy"]
+ }
+ ]
+ },
+ "bounsweet": {
+ "level": 9,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Dazzling Gleam", "Giga Drain", "Rapid Spin", "Synthesis", "Zen Headbutt"],
+ "abilities": ["Oblivious"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "bramblin": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Poltergeist", "Power Whip", "Rapid Spin", "Spikes", "Strength Sap"],
+ "abilities": ["Wind Rider"],
+ "teraTypes": ["Fairy", "Steel", "Water"]
+ }
+ ]
+ },
+ "bronzor": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Flash Cannon", "Hypnosis", "Psychic", "Stealth Rock"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Flash Cannon", "Psychic", "Shadow Ball"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Water"]
+ }
+ ]
+ },
+ "buizel": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Crunch", "Flip Turn", "Ice Spinner", "Wave Crash"],
+ "abilities": ["Swift Swim", "Water Veil"],
+ "teraTypes": ["Ice", "Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Crunch", "Ice Spinner", "Wave Crash"],
+ "abilities": ["Swift Swim", "Water Veil"],
+ "teraTypes": ["Ice", "Water"]
+ }
+ ]
+ },
+ "bulbasaur": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Giga Drain", "Knock Off", "Power Whip", "Sleep Powder", "Sludge Bomb", "Synthesis"],
+ "abilities": ["Chlorophyll", "Overgrow"],
+ "teraTypes": ["Dark", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Power Whip", "Sludge Bomb", "Sunny Day", "Weather Ball"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "cacnea": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Drain Punch", "Giga Drain", "Leaf Storm", "Poison Jab", "Spikes", "Sucker Punch", "Toxic Spikes"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bullet Seed", "Drain Punch", "Sucker Punch", "Swords Dance", "Thunder Punch"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Dark", "Electric", "Fighting", "Grass"]
+ }
+ ]
+ },
+ "capsakid": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Bullet Seed", "Crunch", "Leaf Storm", "Stomping Tantrum"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Dark", "Ground"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Giga Drain", "Leaf Storm", "Stomping Tantrum", "Super Fang", "Thief"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Poison", "Water"]
+ }
+ ]
+ },
+ "cetoddle": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Ice Shard", "Icicle Spear", "Knock Off", "Liquidation", "Yawn"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Ground", "Water"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Belly Drum", "Earthquake", "Ice Shard", "Icicle Spear"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Ground", "Ice"]
+ }
+ ]
+ },
+ "charcadet": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Clear Smog", "Flame Charge", "Lava Plume", "Will-O-Wisp"],
+ "abilities": ["Flame Body", "Flash Fire"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "charmander": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Brick Break", "Dragon Dance", "Flare Blitz", "Outrage", "Thunder Punch"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Dragon", "Electric", "Fighting"]
+ }
+ ]
+ },
+ "chespin": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Bullet Seed", "Drain Punch", "Rock Slide", "Spikes", "Synthesis"],
+ "abilities": ["Bulletproof"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "chewtle": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Crunch", "Ice Fang", "Liquidation", "Shell Smash"],
+ "abilities": ["Strong Jaw"],
+ "teraTypes": ["Dark", "Ice", "Steel"]
+ }
+ ]
+ },
+ "chikorita": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Slam", "Bullet Seed", "Double-Edge", "Swords Dance", "Synthesis"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Grass", "Normal", "Steel"]
+ }
+ ]
+ },
+ "chimchar": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Flare Blitz", "Knock Off", "Slack Off"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Dark", "Dragon"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Flare Blitz", "Gunk Shot", "Knock Off", "Swords Dance", "Thunder Punch", "U-turn"],
+ "abilities": ["Blaze", "Iron Fist"],
+ "teraTypes": ["Dark", "Electric", "Fire", "Poison"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Flamethrower", "Knock Off", "Slack Off", "Stealth Rock", "U-turn", "Will-O-Wisp"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Dragon", "Fairy"]
+ }
+ ]
+ },
+ "chinchou": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Discharge", "Ice Beam", "Scald", "Thunder Wave", "Volt Switch"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying", "Water"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Discharge", "Flip Turn", "Scald", "Volt Switch"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "chingling": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Knock Off", "Psychic", "Recover", "Thunder Wave"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fairy", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Dazzling Gleam", "Psychic", "Recover"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fairy", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Cosmic Power", "Dazzling Gleam", "Recover", "Stored Power"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "clauncher": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "Flip Turn", "Ice Beam", "Water Pulse"],
+ "abilities": ["Mega Launcher"],
+ "teraTypes": ["Dark", "Dragon", "Fighting", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "Flip Turn", "Ice Beam", "Water Pulse"],
+ "abilities": ["Mega Launcher"],
+ "teraTypes": ["Dark", "Dragon", "Fighting", "Water"]
+ }
+ ]
+ },
+ "cleffa": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Draining Kiss", "Fire Blast", "Psyshock"],
+ "abilities": ["Magic Guard"],
+ "teraTypes": ["Fire"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Alluring Voice", "Draining Kiss", "Encore", "Protect", "Thunder Wave", "Wish"],
+ "abilities": ["Magic Guard"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "corphish": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Aqua Jet", "Crabhammer", "Dragon Dance", "Knock Off"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "cottonee": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Dazzling Gleam", "Encore", "Giga Drain", "Stun Spore", "Taunt"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "crabrawler": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Earthquake", "Gunk Shot", "Ice Punch", "Knock Off", "Thunder Punch"],
+ "abilities": ["Iron Fist"],
+ "teraTypes": ["Dark", "Electric", "Ground", "Poison"]
+ }
+ ]
+ },
+ "cranidos": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earthquake", "Fire Punch", "Head Smash", "Rock Slide", "Zen Headbutt"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Psychic", "Rock"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Earthquake", "Fire Punch", "Rock Slide", "Swords Dance", "Zen Headbutt"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Ground", "Rock"]
+ }
+ ]
+ },
+ "croagunk": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Gunk Shot", "Knock Off"],
+ "abilities": ["Dry Skin"],
+ "teraTypes": ["Dark", "Fighting"]
+ }
+ ]
+ },
+ "cubchoo": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Blizzard", "Liquidation", "Play Rough", "Snowscape", "Surf"],
+ "abilities": ["Slush Rush"],
+ "teraTypes": ["Ice", "Water"]
+ }
+ ]
+ },
+ "cufant": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Iron Head", "Play Rough", "Rock Slide", "Stealth Rock", "Superpower"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "cutiefly": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Bug Buzz", "Moonblast", "Sticky Web", "Stun Spore", "U-turn"],
+ "abilities": ["Shield Dust"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Bug Buzz", "Moonblast", "Quiver Dance", "Tera Blast"],
+ "abilities": ["Shield Dust"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "cyndaquil": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Eruption", "Extrasensory", "Fire Blast", "Play Rough"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "deerling": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Bullet Seed", "Headbutt", "Synthesis", "Thunder Wave"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Ghost", "Normal"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Body Slam", "Bullet Seed", "Headbutt", "Synthesis"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Ghost", "Normal"]
+ }
+ ]
+ },
+ "deino": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Crunch", "Outrage", "Thunder Wave", "Work Up"],
+ "abilities": ["Hustle"],
+ "teraTypes": ["Poison"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Crunch", "Outrage", "Roar", "Thunder Wave"],
+ "abilities": ["Hustle"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "dewpider": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Giga Drain", "Ice Beam", "Leech Life", "Liquidation", "Sticky Web", "Surf"],
+ "abilities": ["Water Bubble"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "diglett": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Earthquake", "Stealth Rock", "Stone Edge", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Arena Trap"],
+ "teraTypes": ["Ground", "Rock"]
+ }
+ ]
+ },
+ "diglettalola": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Earthquake", "Iron Head", "Stealth Rock", "Stone Edge", "Swords Dance"],
+ "abilities": ["Sand Force", "Tangling Hair"],
+ "teraTypes": ["Ground", "Rock", "Steel"]
+ }
+ ]
+ },
+ "doduo": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Body Slam", "Brave Bird", "Double-Edge", "Knock Off", "Swords Dance"],
+ "abilities": ["Early Bird"],
+ "teraTypes": ["Dark", "Flying", "Normal"]
+ }
+ ]
+ },
+ "dratini": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Dragon Dance", "Extreme Speed", "Iron Head", "Outrage", "Rest"],
+ "abilities": ["Shed Skin"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "drifloon": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Defog", "Knock Off", "Pain Split", "Shadow Ball", "Thunder Wave", "Will-O-Wisp"],
+ "abilities": ["Aftermath"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Acrobatics", "Defog", "Knock Off", "Pain Split", "Shadow Ball", "Thunder Wave", "Will-O-Wisp"],
+ "abilities": ["Unburden"],
+ "teraTypes": ["Fairy", "Flying"]
+ }
+ ]
+ },
+ "drilbur": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Earthquake", "Rapid Spin", "Rock Slide", "Swords Dance"],
+ "abilities": ["Mold Breaker", "Sand Rush"],
+ "teraTypes": ["Ground", "Rock"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Poison Jab", "Rapid Spin", "Swords Dance"],
+ "abilities": ["Mold Breaker", "Sand Rush"],
+ "teraTypes": ["Ground", "Poison"]
+ }
+ ]
+ },
+ "drowzee": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "Draining Kiss", "Knock Off", "Psychic"],
+ "abilities": ["Inner Focus", "Insomnia"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Draining Kiss", "Encore", "Focus Blast", "Psychic", "Thunder Wave"],
+ "abilities": ["Inner Focus", "Insomnia"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "ducklett": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Aqua Jet", "Brave Bird", "Defog", "Roost", "Surf"],
+ "abilities": ["Hydration"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "dunsparce": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Slam", "Coil", "Earthquake", "Roost"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Ground", "Poison"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Glare", "Headbutt", "Roost"],
+ "abilities": ["Serene Grace"],
+ "teraTypes": ["Ghost", "Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Hyper Voice", "Roost", "Shadow Ball"],
+ "abilities": ["Rattled"],
+ "teraTypes": ["Fairy", "Ghost"]
+ }
+ ]
+ },
+ "duraludon": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Draco Meteor", "Dragon Pulse", "Flash Cannon", "Iron Defense"],
+ "abilities": ["Light Metal"],
+ "teraTypes": ["Fairy", "Fighting"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Body Press", "Draco Meteor", "Flash Cannon", "Thunderbolt"],
+ "abilities": ["Light Metal"],
+ "teraTypes": ["Dragon", "Electric", "Fighting", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Draco Meteor", "Dragon Pulse", "Flash Cannon", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Light Metal"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "duskull": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Leech Life", "Pain Split", "Poltergeist", "Shadow Sneak", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fairy", "Steel", "Water"]
+ }
+ ]
+ },
+ "eevee": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Slam", "Double-Edge", "Protect", "Shadow Ball", "Wish"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Ghost", "Normal"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Calm Mind", "Protect", "Tera Blast", "Wish"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "ekans": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Glare", "Gunk Shot", "Knock Off", "Toxic Spikes"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Coil", "Earthquake", "Gunk Shot", "Trailblaze"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Grass", "Ground"]
+ }
+ ]
+ },
+ "elekid": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Cross Chop", "Ice Punch", "Knock Off", "Psychic", "Supercell Slam", "Taunt", "Volt Switch"],
+ "abilities": ["Static", "Vital Spirit"],
+ "teraTypes": ["Dark", "Electric", "Fighting", "Ice"]
+ }
+ ]
+ },
+ "espurr": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dark Pulse", "Nasty Plot", "Psychic", "Thunderbolt"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Dark", "Electric", "Psychic"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Dark Pulse", "Nasty Plot", "Psychic", "Thunder Wave", "Thunderbolt", "Trick"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Dark", "Electric", "Psychic"]
+ }
+ ]
+ },
+ "exeggcute": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Giga Drain", "Moonlight", "Psychic", "Sleep Powder", "Stun Spore"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "feebas": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Haze", "Hypnosis", "Ice Beam", "Scale Shot", "Waterfall"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Dragon", "Ice"]
+ }
+ ]
+ },
+ "fennekin": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Encore", "Flamethrower", "Mud Shot", "Psychic", "Will-O-Wisp"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Dragon", "Fairy", "Ground"]
+ }
+ ]
+ },
+ "fidough": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Play Rough", "Protect", "Stomping Tantrum", "Wish"],
+ "abilities": ["Own Tempo"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "finizen": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Agility", "Boomburst", "Encore", "Ice Beam", "Surf"],
+ "abilities": ["Water Veil"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "finneon": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Alluring Voice", "Ice Beam", "Surf", "Thief", "U-turn"],
+ "abilities": ["Storm Drain", "Swift Swim"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "flabebe": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Moonblast", "Psychic", "Synthesis"],
+ "abilities": ["Flower Veil"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Calm Mind", "Moonblast", "Synthesis", "Tera Blast"],
+ "abilities": ["Flower Veil"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "fletchling": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Acrobatics", "Flare Blitz", "Swords Dance", "Tera Blast"],
+ "abilities": ["Gale Wings"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Brave Bird", "Defog", "Double-Edge", "Heat Wave", "Roost", "Taunt", "U-turn"],
+ "abilities": ["Gale Wings"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "flittle": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Protect", "Stored Power", "Substitute"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Calm Mind", "Protect", "Stored Power", "Substitute", "Tera Blast"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Fairy", "Fighting"]
+ }
+ ]
+ },
+ "fomantis": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Defog", "Leaf Storm", "Superpower", "Synthesis"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "foongus": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Clear Smog", "Foul Play", "Giga Drain", "Leaf Storm", "Sludge Bomb", "Spore", "Stun Spore"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Giga Drain", "Sludge Bomb", "Spore", "Synthesis"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "frigibax": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Crunch", "Icicle Spear", "Outrage", "Swords Dance"],
+ "abilities": ["Thermal Exchange"],
+ "teraTypes": ["Dragon", "Fairy", "Ice"]
+ }
+ ]
+ },
+ "froakie": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Ice Beam", "Spikes", "Surf", "Toxic Spikes", "U-turn"],
+ "abilities": ["Protean"],
+ "teraTypes": ["Ice", "Water"]
+ }
+ ]
+ },
+ "fuecoco": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Flamethrower", "Roar", "Slack Off", "Stomping Tantrum", "Will-O-Wisp"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Dragon", "Fairy"]
+ }
+ ]
+ },
+ "gastly": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dazzling Gleam", "Nasty Plot", "Shadow Ball", "Sludge Bomb", "Trick", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fairy", "Ghost", "Poison"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Dazzling Gleam", "Nasty Plot", "Shadow Ball", "Sludge Bomb", "Thunderbolt"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Fairy", "Ghost", "Poison"]
+ }
+ ]
+ },
+ "geodude": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Explosion", "Rock Blast", "Rock Polish", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "geodudealola": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Double-Edge", "Earthquake", "Explosion", "Rock Blast", "Rock Polish", "Stealth Rock", "Stone Edge", "Thunder Wave", "Volt Switch"],
+ "abilities": ["Galvanize"],
+ "teraTypes": ["Grass", "Ground"]
+ }
+ ]
+ },
+ "gible": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Earthquake", "Iron Head", "Scale Shot", "Swords Dance"],
+ "abilities": ["Rough Skin"],
+ "teraTypes": ["Ground", "Steel"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dragon Claw", "Earthquake", "Iron Head", "Outrage", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Rough Skin"],
+ "teraTypes": ["Dragon", "Ground", "Steel"]
+ }
+ ]
+ },
+ "gimmighoul": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Nasty Plot", "Power Gem", "Rest", "Shadow Ball", "Sleep Talk"],
+ "abilities": ["Rattled"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Nasty Plot", "Power Gem", "Shadow Ball", "Tera Blast"],
+ "abilities": ["Rattled"],
+ "teraTypes": ["Fairy", "Fighting"]
+ }
+ ]
+ },
+ "gimmighoulroaming": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Nasty Plot", "Power Gem", "Shadow Ball", "Substitute"],
+ "abilities": ["Run Away"],
+ "teraTypes": ["Ghost", "Rock"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Nasty Plot", "Shadow Ball", "Substitute", "Tera Blast"],
+ "abilities": ["Run Away"],
+ "teraTypes": ["Fairy", "Fighting"]
+ }
+ ]
+ },
+ "girafarig": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dazzling Gleam", "Nasty Plot", "Psychic", "Shadow Ball", "Thunderbolt"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Electric", "Fairy", "Ghost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Hyper Voice", "Nasty Plot", "Psychic", "Psyshock", "Thunderbolt"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "gligar": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dual Wingbeat", "Earthquake", "Knock Off", "Swords Dance"],
+ "abilities": ["Immunity"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Earthquake", "Knock Off", "Spikes", "Stealth Rock", "Toxic Spikes", "U-turn"],
+ "abilities": ["Immunity"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "glimmet": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Mud Shot", "Power Gem", "Sludge Wave", "Spikes", "Stealth Rock"],
+ "abilities": ["Toxic Debris"],
+ "teraTypes": ["Ghost", "Grass"]
+ }
+ ]
+ },
+ "golett": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dynamic Punch", "Earthquake", "Poltergeist", "Rock Tomb", "Stealth Rock"],
+ "abilities": ["No Guard"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "goomy": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dragon Pulse", "Rest", "Sleep Talk", "Sludge Bomb", "Thunderbolt"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Electric", "Poison", "Water"]
+ }
+ ]
+ },
+ "gothita": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dark Pulse", "Nasty Plot", "Psychic", "Thunderbolt", "Trick"],
+ "abilities": ["Shadow Tag"],
+ "teraTypes": ["Dark", "Electric", "Fairy"]
+ }
+ ]
+ },
+ "greavard": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Pain Split", "Play Rough", "Poltergeist", "Roar", "Shadow Sneak", "Yawn"],
+ "abilities": ["Fluffy"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "grimer": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Curse", "Drain Punch", "Gunk Shot", "Poison Jab", "Shadow Sneak"],
+ "abilities": ["Poison Touch"],
+ "teraTypes": ["Dark", "Fighting"]
+ }
+ ]
+ },
+ "grimeralola": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Curse", "Drain Punch", "Gunk Shot", "Knock Off", "Poison Jab"],
+ "abilities": ["Poison Touch"],
+ "teraTypes": ["Dark", "Fighting"]
+ }
+ ]
+ },
+ "grookey": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Drain Punch", "Grassy Glide", "Knock Off", "Swords Dance", "U-turn", "Wood Hammer"],
+ "abilities": ["Grassy Surge"],
+ "teraTypes": ["Grass"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Grassy Glide", "Knock Off", "U-turn", "Wood Hammer"],
+ "abilities": ["Grassy Surge"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "growlithe": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Close Combat", "Flamethrower", "Morning Sun", "Roar", "Wild Charge", "Will-O-Wisp"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dragon", "Fairy", "Fighting"]
+ }
+ ]
+ },
+ "growlithehisui": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Close Combat", "Flare Blitz", "Head Smash", "Morning Sun", "Stealth Rock", "Wild Charge", "Will-O-Wisp"],
+ "abilities": ["Rock Head"],
+ "teraTypes": ["Dragon", "Fairy"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Flare Blitz", "Head Smash", "Wild Charge"],
+ "abilities": ["Rock Head"],
+ "teraTypes": ["Fighting", "Fire", "Rock"]
+ }
+ ]
+ },
+ "grubbin": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Lunge", "Sticky Web", "Thunder Wave", "Volt Switch", "Wild Charge"],
+ "abilities": ["Swarm"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "gulpin": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Fire Punch", "Giga Drain", "Pain Split", "Sludge Bomb", "Thunder Wave", "Toxic Spikes"],
+ "abilities": ["Sticky Hold"],
+ "teraTypes": ["Dark", "Grass"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bullet Seed", "Fire Punch", "Gunk Shot", "Swords Dance"],
+ "abilities": ["Sticky Hold"],
+ "teraTypes": ["Fire", "Grass", "Poison"]
+ }
+ ]
+ },
+ "happiny": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Hyper Voice", "Rest", "Shadow Ball", "Thunder Wave"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Heal Bell", "Hyper Voice", "Rest", "Thunder Wave"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "hatenna": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Draining Kiss", "Mystical Fire", "Nuzzle", "Psychic"],
+ "abilities": ["Magic Bounce"],
+ "teraTypes": ["Electric", "Fairy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Draining Kiss", "Mystical Fire", "Psychic"],
+ "abilities": ["Magic Bounce"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "hippopotas": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Curse", "Earthquake", "Slack Off", "Stealth Rock", "Stone Edge", "Whirlwind", "Yawn"],
+ "abilities": ["Sand Stream"],
+ "teraTypes": ["Dragon", "Rock", "Steel"]
+ }
+ ]
+ },
+ "hoothoot": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "Defog", "Hurricane", "Hyper Voice", "Nasty Plot", "Roost"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "hoppip": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Acrobatics", "Encore", "Sleep Powder", "Strength Sap", "Stun Spore", "U-turn"],
+ "abilities": ["Chlorophyll", "Infiltrator"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "horsea": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Dragon Pulse", "Flip Turn", "Ice Beam", "Surf"],
+ "abilities": ["Sniper", "Swift Swim"],
+ "teraTypes": ["Dragon", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Pulse", "Ice Beam", "Rain Dance", "Surf"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Dragon", "Water"]
+ }
+ ]
+ },
+ "houndour": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Dark Pulse", "Flamethrower", "Nasty Plot", "Sludge Bomb", "Sucker Punch"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Dark", "Fire", "Poison"]
+ }
+ ]
+ },
+ "igglybuff": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Alluring Voice", "Encore", "Flamethrower", "Protect", "Thunder Wave", "Wish"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Slam", "Draining Kiss", "Protect", "Wish"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "impidimp": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Burning Jealousy", "Dark Pulse", "Dazzling Gleam", "Nasty Plot", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Dark", "Fairy", "Fire"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Dazzling Gleam", "Draining Kiss", "Light Screen", "Parting Shot", "Reflect", "Taunt", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Dark Pulse", "Dazzling Gleam", "Draining Kiss", "Parting Shot", "Sucker Punch", "Taunt", "Thunder Wave"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "inkay": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Hypnosis", "Knock Off", "Psycho Cut", "Rest", "Sleep Talk", "Superpower"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting", "Steel"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Knock Off", "Psycho Cut", "Superpower", "Trick", "Trick Room"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "jangmoo": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Iron Head", "Outrage"],
+ "abilities": ["Bulletproof"],
+ "teraTypes": ["Ground", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Earthquake", "Iron Head", "Scale Shot", "Swords Dance"],
+ "abilities": ["Bulletproof"],
+ "teraTypes": ["Ground", "Steel"]
+ }
+ ]
+ },
+ "joltik": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Giga Drain", "Leech Life", "Thunder", "Thunder Wave", "Volt Switch"],
+ "abilities": ["Compound Eyes"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "koffing": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Flamethrower", "Pain Split", "Sludge Bomb", "Toxic Spikes", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "kubfu": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Ice Punch", "Iron Head", "Swords Dance"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Fighting", "Steel"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Ice Punch", "Iron Head", "Swords Dance", "U-turn"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "larvesta": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Flare Blitz", "Leech Life", "Morning Sun", "U-turn", "Wild Charge", "Will-O-Wisp"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "larvitar": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Facade", "Rock Blast", "Stone Edge"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "lechonk": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Slam", "Bulldoze", "Curse", "Play Rough"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fairy", "Ground"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Slam", "Bullet Seed", "Double-Edge", "Play Rough", "Thief", "Yawn"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fairy", "Grass"]
+ }
+ ]
+ },
+ "litleo": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Flamethrower", "Hyper Voice", "Will-O-Wisp", "Work Up"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Fire", "Normal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Flamethrower", "Hyper Voice", "Solar Beam", "Sunny Day"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Fire", "Grass", "Normal"]
+ }
+ ]
+ },
+ "litten": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Flare Blitz", "Leech Life", "Swords Dance", "Trailblaze"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Bug", "Fire", "Grass"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Leech Life", "Overheat", "Parting Shot", "Will-O-Wisp"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dragon", "Fairy"]
+ }
+ ]
+ },
+ "litwick": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Energy Ball", "Flamethrower", "Pain Split", "Shadow Ball", "Will-O-Wisp"],
+ "abilities": ["Flame Body", "Flash Fire"],
+ "teraTypes": ["Fairy", "Ghost", "Grass"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Flamethrower", "Hex", "Pain Split", "Will-O-Wisp"],
+ "abilities": ["Flame Body", "Flash Fire"],
+ "teraTypes": ["Fairy", "Grass"]
+ }
+ ]
+ },
+ "lotad": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Giga Drain", "Ice Beam", "Surf", "Synthesis"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Giga Drain", "Ice Beam", "Rain Dance", "Surf"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "magby": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Belly Drum", "Cross Chop", "Fire Punch", "Mach Punch", "Thunder Punch"],
+ "abilities": ["Flame Body", "Vital Spirit"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Cross Chop", "Fire Blast", "Flare Blitz", "Thunder Punch", "Will-O-Wisp"],
+ "abilities": ["Flame Body", "Vital Spirit"],
+ "teraTypes": ["Electric", "Fire", "Grass"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Cross Chop", "Flare Blitz", "Overheat", "Thunder Punch"],
+ "abilities": ["Flame Body", "Vital Spirit"],
+ "teraTypes": ["Electric", "Fighting", "Fire"]
+ }
+ ]
+ },
+ "magnemite": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Flash Cannon", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Analytic", "Magnet Pull"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "makuhita": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Bullet Punch", "Drain Punch", "Earthquake", "Heavy Slam", "Knock Off", "Stone Edge"],
+ "abilities": ["Guts", "Thick Fat"],
+ "teraTypes": ["Dark", "Ground", "Steel"]
+ }
+ ]
+ },
+ "mankey": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Close Combat", "Earthquake", "Gunk Shot", "Stone Edge", "Throat Chop", "U-turn"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Dark", "Fighting", "Ground", "Poison", "Rock"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Earthquake", "Stone Edge", "Throat Chop"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Fighting", "Ground", "Rock"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Gunk Shot", "Stone Edge", "Throat Chop", "U-turn"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Dark", "Fighting", "Ground", "Poison", "Rock"]
+ }
+ ]
+ },
+ "mareanie": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Gunk Shot", "Liquidation", "Poison Jab", "Recover", "Toxic Spikes"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fairy", "Flying", "Grass", "Steel"]
+ }
+ ]
+ },
+ "mareep": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dazzling Gleam", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Static"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Agility", "Dazzling Gleam", "Tera Blast", "Thunderbolt"],
+ "abilities": ["Static"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "maschiff": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Crunch", "Hone Claws", "Play Rough", "Trailblaze"],
+ "abilities": ["Stakeout"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "meditite": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Trailblaze", "Zen Headbutt"],
+ "abilities": ["Pure Power"],
+ "teraTypes": ["Fighting", "Psychic", "Steel"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Ice Punch", "Poison Jab", "Zen Headbutt"],
+ "abilities": ["Pure Power"],
+ "teraTypes": ["Fighting", "Poison", "Psychic"]
+ }
+ ]
+ },
+ "meowth": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Double-Edge", "Fake Out", "Knock Off", "Play Rough", "Thunder Wave", "U-turn"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "meowthalola": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Gunk Shot", "Knock Off", "Parting Shot", "Play Rough", "Thunder Wave"],
+ "abilities": ["Rattled"],
+ "teraTypes": ["Fairy", "Poison"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dark Pulse", "Hypnosis", "Nasty Plot", "Power Gem", "Thunderbolt"],
+ "abilities": ["Rattled"],
+ "teraTypes": ["Dark", "Electric"]
+ }
+ ]
+ },
+ "meowthgalar": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Iron Head", "Knock Off", "Swords Dance", "Trailblaze"],
+ "abilities": ["Tough Claws"],
+ "teraTypes": ["Fairy", "Steel"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Iron Head", "Knock Off", "Play Rough", "Stealth Rock", "U-turn"],
+ "abilities": ["Tough Claws"],
+ "teraTypes": ["Fairy", "Water"]
+ }
+ ]
+ },
+ "mienfoo": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["High Jump Kick", "Knock Off", "Poison Jab", "Stone Edge", "Swords Dance"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Fake Out", "High Jump Kick", "Knock Off", "U-turn"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Steel"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["High Jump Kick", "Knock Off", "Poison Jab", "Stone Edge", "Swords Dance", "U-turn"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ }
+ ]
+ },
+ "milcery": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Acid Armor", "Dazzling Gleam", "Draining Kiss", "Recover", "Stored Power"],
+ "abilities": ["Aroma Veil"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "minccino": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bullet Seed", "Knock Off", "Tail Slap", "Tidy Up"],
+ "abilities": ["Skill Link"],
+ "teraTypes": ["Grass", "Normal"]
+ }
+ ]
+ },
+ "misdreavus": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Draining Kiss", "Shadow Ball", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dazzling Gleam", "Nasty Plot", "Pain Split", "Shadow Ball", "Thunder Wave", "Thunderbolt", "Trick", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "mudbray": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Close Combat", "Earthquake", "Heavy Slam", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Stamina"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "mudkip": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Slam", "Ice Beam", "Liquidation", "Rest", "Roar", "Sleep Talk", "Sludge Wave", "Yawn"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "munchlax": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Slam", "Crunch", "Earthquake", "Rest", "Sleep Talk"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fairy", "Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Slam", "Curse", "Rest", "Sleep Talk"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fairy", "Poison"]
+ }
+ ]
+ },
+ "murkrow": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dark Pulse", "Heat Wave", "Hurricane", "Nasty Plot", "Sucker Punch"],
+ "abilities": ["Super Luck"],
+ "teraTypes": ["Dark", "Fairy", "Flying", "Steel"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Brave Bird", "Sucker Punch", "Thunder Wave", "U-turn"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "nacli": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Curse", "Earthquake", "Recover", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Purifying Salt"],
+ "teraTypes": ["Dragon", "Fairy"]
+ }
+ ]
+ },
+ "noibat": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Defog", "Draco Meteor", "Heat Wave", "Hurricane", "Roost", "U-turn"],
+ "abilities": ["Infiltrator"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "nosepass": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Pain Split", "Power Gem", "Thunder Wave"],
+ "abilities": ["Magnet Pull"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Pain Split", "Power Gem", "Stealth Rock", "Thunder Wave", "Volt Switch"],
+ "abilities": ["Magnet Pull"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "numel": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Earthquake", "Fire Blast", "Growth", "Trailblaze"],
+ "abilities": ["Simple"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "nymble": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["First Impression", "Leech Life", "Sucker Punch", "U-turn"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Bug"]
+ }
+ ]
+ },
+ "oddish": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Giga Drain", "Sleep Powder", "Sludge Bomb", "Strength Sap", "Stun Spore"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "oshawott": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Aqua Jet", "Encore", "Flip Turn", "Ice Beam", "Knock Off", "Sacred Sword", "Surf", "X-Scissor"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Dragon", "Fighting", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Aqua Jet", "Knock Off", "Liquidation", "Sacred Sword", "Swords Dance"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Dark", "Fighting", "Water"]
+ }
+ ]
+ },
+ "pawmi": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Discharge", "Encore", "Nuzzle", "Play Rough", "Super Fang", "Thief", "Volt Switch"],
+ "abilities": ["Natural Cure", "Static"],
+ "teraTypes": ["Electric", "Fairy", "Grass"]
+ }
+ ]
+ },
+ "pawniard": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Iron Head", "Night Slash", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Defiant"],
+ "teraTypes": ["Dark", "Fairy", "Steel"]
+ }
+ ]
+ },
+ "petilil": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Giga Drain", "Leaf Storm", "Pollen Puff", "Sleep Powder", "Stun Spore", "Synthesis"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Poison", "Steel", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Giga Drain", "Leaf Storm", "Stun Spore", "Synthesis", "Tera Blast"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire", "Rock"]
+ }
+ ]
+ },
+ "phanpy": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Gunk Shot", "Ice Shard", "Knock Off", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Pickup"],
+ "teraTypes": ["Dragon", "Poison"]
+ }
+ ]
+ },
+ "phantump": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Horn Leech", "Poltergeist", "Rest", "Will-O-Wisp"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Fairy", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Horn Leech", "Poltergeist", "Protect", "Will-O-Wisp"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Fairy", "Water"]
+ }
+ ]
+ },
+ "pichu": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Encore", "Nuzzle", "Play Rough", "Surf", "Volt Switch", "Volt Tackle"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Encore", "Nasty Plot", "Surf", "Tera Blast", "Thunderbolt"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "pikipek": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Brave Bird", "Bullet Seed", "Knock Off", "Roost", "Swords Dance", "U-turn"],
+ "abilities": ["Pickup", "Skill Link"],
+ "teraTypes": ["Flying", "Grass", "Steel"]
+ }
+ ]
+ },
+ "pineco": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Lunge", "Rapid Spin", "Rock Blast", "Spikes", "Stealth Rock", "Toxic Spikes"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "piplup": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Flip Turn", "Haze", "Ice Beam", "Roost", "Surf", "Yawn"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "poliwag": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Belly Drum", "Body Slam", "Encore", "Hypnosis", "Waterfall"],
+ "abilities": ["Swift Swim", "Water Absorb"],
+ "teraTypes": ["Dragon", "Normal", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Belly Drum", "Body Slam", "Tera Blast", "Waterfall"],
+ "abilities": ["Swift Swim", "Water Absorb"],
+ "teraTypes": ["Dragon", "Fire", "Ground"]
+ }
+ ]
+ },
+ "poltchageist": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "Giga Drain", "Scald", "Shadow Ball", "Stun Spore"],
+ "abilities": ["Heatproof"],
+ "teraTypes": ["Fairy", "Steel", "Water"]
+ }
+ ]
+ },
+ "poochyena": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Crunch", "Play Rough", "Poison Fang", "Sucker Punch", "Super Fang", "Taunt", "Yawn"],
+ "abilities": ["Rattled"],
+ "teraTypes": ["Fairy", "Poison"]
+ }
+ ]
+ },
+ "popplio": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Encore", "Flip Turn", "Moonblast", "Surf", "Triple Axel"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Fairy", "Ice", "Steel", "Water"]
+ }
+ ]
+ },
+ "porygon": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Discharge", "Ice Beam", "Recover", "Tri Attack"],
+ "abilities": ["Download"],
+ "teraTypes": ["Electric", "Ghost", "Poison"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Agility", "Recover", "Shadow Ball", "Tera Blast"],
+ "abilities": ["Download"],
+ "teraTypes": ["Fairy", "Fighting"]
+ }
+ ]
+ },
+ "psyduck": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Encore", "Flip Turn", "Ice Beam", "Knock Off", "Surf", "Yawn"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "teraTypes": ["Fairy", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Ice Beam", "Nasty Plot", "Surf", "Trailblaze"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "teraTypes": ["Grass", "Steel", "Water"]
+ }
+ ]
+ },
+ "quaxly": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Brave Bird", "Encore", "Liquidation", "Rapid Spin", "Roost"],
+ "abilities": ["Moxie"],
+ "teraTypes": ["Dragon", "Steel"]
+ }
+ ]
+ },
+ "qwilfishhisui": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Crunch", "Gunk Shot", "Liquidation", "Swords Dance"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Poison", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Crunch", "Gunk Shot", "Spikes", "Taunt", "Toxic Spikes"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Poison"]
+ }
+ ]
+ },
+ "ralts": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Draining Kiss", "Knock Off", "Psychic", "Thunder Wave", "Will-O-Wisp"],
+ "abilities": ["Trace"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Draining Kiss", "Mystical Fire", "Psychic"],
+ "abilities": ["Trace"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "rellor": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Cosmic Power", "Gunk Shot", "Leech Life", "Recover"],
+ "abilities": ["Shed Skin"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "rhyhorn": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Megahorn", "Rock Blast", "Rock Polish", "Stealth Rock", "Stone Edge", "Swords Dance"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Dragon", "Fairy", "Flying", "Grass", "Water"]
+ }
+ ]
+ },
+ "riolu": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Close Combat", "Crunch", "Earthquake", "Ice Punch", "Swords Dance"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Dark", "Fighting", "Ground"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Copycat", "Crunch", "Ice Punch"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Dark", "Fighting"]
+ }
+ ]
+ },
+ "rockruff": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Play Rough", "Stealth Rock", "Stomping Tantrum", "Stone Edge", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Vital Spirit"],
+ "teraTypes": ["Fairy", "Ground", "Rock"]
+ }
+ ]
+ },
+ "rolycoly": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Power Gem", "Rapid Spin", "Spikes", "Stealth Rock", "Temper Flare", "Will-O-Wisp"],
+ "abilities": ["Flash Fire"],
+ "teraTypes": ["Ghost", "Steel"]
+ }
+ ]
+ },
+ "rookidee": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Brave Bird", "Defog", "Roost", "Taunt", "U-turn"],
+ "abilities": ["Unnerve"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "rowlet": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Brave Bird", "Leaf Blade", "Roost", "Swords Dance"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Brave Bird", "Defog", "Giga Drain", "Knock Off", "Roost"],
+ "abilities": ["Long Reach", "Overgrow"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "rufflet": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Aerial Ace", "Bulk Up", "Close Combat", "Roost"],
+ "abilities": ["Hustle"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "salandit": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Pulse", "Flamethrower", "Nasty Plot", "Sludge Bomb"],
+ "abilities": ["Corrosion"],
+ "teraTypes": ["Dragon", "Fire", "Poison"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Flamethrower", "Knock Off", "Sludge Bomb", "Thunder Wave", "Toxic Spikes", "Will-O-Wisp"],
+ "abilities": ["Corrosion"],
+ "teraTypes": ["Flying", "Water"]
+ }
+ ]
+ },
+ "sandile": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Crunch", "Earthquake", "Fire Fang", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Dark", "Flying", "Ground"]
+ }
+ ]
+ },
+ "sandshrew": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Knock Off", "Rapid Spin", "Spikes", "Stone Edge", "Swords Dance"],
+ "abilities": ["Sand Rush"],
+ "teraTypes": ["Dragon", "Steel", "Water"]
+ }
+ ]
+ },
+ "sandshrewalola": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Earthquake", "Ice Shard", "Icicle Spear", "Rapid Spin", "Swords Dance"],
+ "abilities": ["Slush Rush"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Icicle Spear", "Iron Head", "Knock Off", "Rapid Spin", "Stealth Rock"],
+ "abilities": ["Slush Rush"],
+ "teraTypes": ["Flying", "Water"]
+ }
+ ]
+ },
+ "sandygast": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earth Power", "Giga Drain", "Shadow Ball", "Shore Up", "Sludge Bomb", "Stealth Rock"],
+ "abilities": ["Water Compaction"],
+ "teraTypes": ["Fairy", "Poison", "Water"]
+ }
+ ]
+ },
+ "scorbunny": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Flare Blitz", "Gunk Shot", "High Jump Kick", "Sucker Punch", "U-turn"],
+ "abilities": ["Libero"],
+ "teraTypes": ["Fighting", "Fire"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Flare Blitz", "Gunk Shot", "High Jump Kick", "U-turn"],
+ "abilities": ["Libero"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "scraggy": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Knock Off", "Rest"],
+ "abilities": ["Shed Skin"],
+ "teraTypes": ["Poison"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Close Combat", "Dragon Dance", "Knock Off", "Poison Jab"],
+ "abilities": ["Intimidate", "Moxie"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "scyther": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bug Bite", "Close Combat", "Dual Wingbeat", "Swords Dance"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Close Combat", "Defog", "Dual Wingbeat", "U-turn"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "seedot": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Slam", "Bullet Seed", "Defog", "Sucker Punch", "Synthesis"],
+ "abilities": ["Chlorophyll", "Pickpocket"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "seel": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Flip Turn", "Haze", "Icicle Spear", "Surf", "Thief"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Aqua Jet", "Fake Out", "Icicle Spear", "Surf"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Poison", "Steel", "Water"]
+ }
+ ]
+ },
+ "sentret": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Slam", "Brick Break", "Double-Edge", "Knock Off", "Tidy Up"],
+ "abilities": ["Frisk"],
+ "teraTypes": ["Ghost", "Normal"]
+ }
+ ]
+ },
+ "sewaddle": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Giga Drain", "Iron Defense", "Lunge", "Sticky Web", "Synthesis"],
+ "abilities": ["Chlorophyll", "Swarm"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "shellder": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Icicle Spear", "Liquidation", "Rock Blast", "Shell Smash"],
+ "abilities": ["Skill Link"],
+ "teraTypes": ["Ice", "Rock", "Steel", "Water"]
+ }
+ ]
+ },
+ "shellos": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Clear Smog", "Ice Beam", "Recover", "Stealth Rock", "Surf", "Yawn"],
+ "abilities": ["Storm Drain"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "shieldon": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earth Power", "Flash Cannon", "Ice Beam", "Rock Blast", "Stealth Rock"],
+ "abilities": ["Sturdy"],
+ "teraTypes": ["Fairy", "Flying", "Ground"]
+ }
+ ]
+ },
+ "shinx": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Crunch", "Ice Fang", "Play Rough", "Roar", "Thunder Wave", "Volt Switch", "Wild Charge"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Crunch", "Facade", "Play Rough", "Trailblaze", "Wild Charge"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "shroodle": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Encore", "Gunk Shot", "Knock Off", "Parting Shot"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Dark"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Double-Edge", "Gunk Shot", "Knock Off", "Swords Dance"],
+ "abilities": ["Pickpocket"],
+ "teraTypes": ["Dark", "Normal", "Poison"]
+ }
+ ]
+ },
+ "shroomish": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Drain Punch", "Giga Drain", "Sludge Bomb", "Spore", "Stun Spore"],
+ "abilities": ["Effect Spore"],
+ "teraTypes": ["Poison", "Steel", "Water"]
+ }
+ ]
+ },
+ "shuppet": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dazzling Gleam", "Gunk Shot", "Pain Split", "Poltergeist", "Shadow Sneak", "Thunder Wave", "Trick", "Will-O-Wisp"],
+ "abilities": ["Cursed Body", "Insomnia"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Dazzling Gleam", "Nasty Plot", "Shadow Ball", "Thunderbolt", "Will-O-Wisp"],
+ "abilities": ["Cursed Body", "Insomnia"],
+ "teraTypes": ["Electric", "Fairy"]
+ }
+ ]
+ },
+ "silicobra": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Coil", "Earthquake", "Glare", "Rest", "Rock Blast", "Stealth Rock", "Stone Edge"],
+ "abilities": ["Shed Skin"],
+ "teraTypes": ["Dragon", "Steel"]
+ }
+ ]
+ },
+ "sinistea": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Giga Drain", "Shadow Ball", "Shell Smash", "Stored Power", "Will-O-Wisp"],
+ "abilities": ["Cursed Body"],
+ "teraTypes": ["Fairy", "Psychic"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Giga Drain", "Shadow Ball", "Shell Smash", "Tera Blast", "Will-O-Wisp"],
+ "abilities": ["Cursed Body"],
+ "teraTypes": ["Fairy", "Fighting"]
+ }
+ ]
+ },
+ "skiddo": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Horn Leech", "Milk Drink", "Rock Slide", "Stomping Tantrum"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Ground", "Water"]
+ }
+ ]
+ },
+ "skrelp": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Flip Turn", "Gunk Shot", "Hydro Pump", "Sludge Bomb", "Toxic Spikes"],
+ "abilities": ["Adaptability"],
+ "teraTypes": ["Poison", "Water"]
+ }
+ ]
+ },
+ "skwovet": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Belly Drum", "Body Slam", "Crunch", "Trailblaze"],
+ "abilities": ["Cheek Pouch"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "slakoth": {
+ "level": 9,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Body Slam", "Gunk Shot", "Hammer Arm", "Play Rough", "Throat Chop"],
+ "abilities": ["Truant"],
+ "teraTypes": ["Fairy", "Fighting", "Normal"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Body Slam", "Hammer Arm", "Slack Off", "Throat Chop"],
+ "abilities": ["Truant"],
+ "teraTypes": ["Ghost", "Poison"]
+ }
+ ]
+ },
+ "slowpoke": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Curse", "Liquidation", "Slack Off", "Thunder Wave", "Zen Headbutt"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fairy", "Poison"]
+ }
+ ]
+ },
+ "slowpokegalar": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Curse", "Earthquake", "Slack Off", "Thunder Wave", "Zen Headbutt"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fairy", "Ground"]
+ }
+ ]
+ },
+ "smoliv": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earth Power", "Giga Drain", "Protect", "Strength Sap"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Earth Power", "Giga Drain", "Leaf Storm", "Strength Sap", "Tera Blast"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Fairy", "Poison"]
+ }
+ ]
+ },
+ "slugma": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earth Power", "Lava Plume", "Recover", "Stealth Rock", "Will-O-Wisp", "Yawn"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Dragon", "Grass"]
+ }
+ ]
+ },
+ "sneasel": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Brick Break", "Ice Shard", "Knock Off", "Swords Dance", "Triple Axel"],
+ "abilities": ["Inner Focus", "Pickpocket"],
+ "teraTypes": ["Dark", "Fighting", "Ice"]
+ }
+ ]
+ },
+ "sneaselhisui": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Gunk Shot", "Swords Dance", "Throat Chop", "Toxic Spikes"],
+ "abilities": ["Inner Focus", "Pickpocket"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ }
+ ]
+ },
+ "snivy": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Glare", "Knock Off", "Leaf Storm", "Substitute", "Synthesis"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Grass", "Poison", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Glare", "Knock Off", "Leaf Storm", "Substitute", "Synthesis", "Tera Blast"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fire", "Rock"]
+ }
+ ]
+ },
+ "snom": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Bug Buzz", "Icy Wind", "Rest", "Sleep Talk"],
+ "abilities": ["Ice Scales"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "snorunt": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Crunch", "Ice Shard", "Icicle Spear", "Spikes"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "snover": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bullet Seed", "Ice Shard", "Icicle Spear", "Swords Dance"],
+ "abilities": ["Snow Warning"],
+ "teraTypes": ["Grass", "Ice", "Water"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Blizzard", "Bullet Seed", "Giga Drain", "Ice Shard", "Trailblaze"],
+ "abilities": ["Snow Warning"],
+ "teraTypes": ["Ice", "Water"]
+ }
+ ]
+ },
+ "snubbull": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "Encore", "Play Rough", "Thunder Wave"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Earthquake", "Play Rough", "Trailblaze"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "sobble": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Haze", "Hydro Pump", "Light Screen", "Reflect", "Surf", "U-turn"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "solosis": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "Psychic", "Recover", "Shadow Ball", "Thunder Wave"],
+ "abilities": ["Magic Guard"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "spinarak": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Knock Off", "Leech Life", "Poison Jab", "Sticky Web", "Sucker Punch", "Toxic Spikes"],
+ "abilities": ["Insomnia", "Swarm"],
+ "teraTypes": ["Dark", "Ghost", "Steel"]
+ }
+ ]
+ },
+ "spoink": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Calm Mind", "Dazzling Gleam", "Psychic", "Shadow Ball", "Thunder Wave", "Trick"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Fairy", "Ghost", "Psychic"]
+ }
+ ]
+ },
+ "sprigatito": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Bullet Seed", "Play Rough", "Shadow Claw", "Sucker Punch", "U-turn"],
+ "abilities": ["Protean"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "squirtle": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Flip Turn", "Ice Beam", "Rapid Spin", "Surf", "Yawn"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Ice Beam", "Shell Smash", "Surf", "Tera Blast"],
+ "abilities": ["Torrent"],
+ "teraTypes": ["Electric", "Grass"]
+ }
+ ]
+ },
+ "stantler": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Double-Edge", "Earthquake", "Hypnosis", "Megahorn", "Shadow Ball", "Thunder Wave", "Trick"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Bug", "Ghost", "Ground"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Calm Mind", "Earth Power", "Shadow Ball", "Tera Blast", "Thunderbolt"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "starly": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Brave Bird", "Double-Edge", "Heat Wave", "U-turn"],
+ "abilities": ["Reckless"],
+ "teraTypes": ["Flying", "Normal"]
+ }
+ ]
+ },
+ "stunky": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Fire Blast", "Gunk Shot", "Knock Off", "Sucker Punch", "Taunt", "Toxic Spikes"],
+ "abilities": ["Aftermath"],
+ "teraTypes": ["Dark", "Poison"]
+ }
+ ]
+ },
+ "sunkern": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Earth Power", "Solar Beam", "Sunny Day", "Weather Ball"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "surskit": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Bug Buzz", "Giga Drain", "Hydro Pump", "Ice Beam", "Sticky Web"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Ghost", "Ground", "Steel", "Water"]
+ }
+ ]
+ },
+ "swablu": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Slam", "Brave Bird", "Defog", "Haze", "Heat Wave", "Roost"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "swinub": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Ice Shard", "Icicle Spear", "Stealth Rock", "Trailblaze"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Ground", "Water"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Earthquake", "Ice Shard", "Icicle Spear", "Stealth Rock", "Trailblaze"],
+ "abilities": ["Thick Fat"],
+ "teraTypes": ["Ground", "Ice"]
+ }
+ ]
+ },
+ "tadbulb": {
+ "level": 8,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Acid Spray", "Discharge", "Muddy Water", "Thunder Wave", "Volt Switch"],
+ "abilities": ["Static"],
+ "teraTypes": ["Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Rain Dance", "Thunder", "Volt Switch", "Weather Ball"],
+ "abilities": ["Static"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "tandemaus": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Crunch", "Double-Edge", "Encore", "Low Sweep", "Switcheroo", "Thunder Wave", "U-turn"],
+ "abilities": ["Own Tempo", "Pickup"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "tarountula": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Circle Throw", "Knock Off", "Leech Life", "Spikes", "Sticky Web", "Toxic Spikes"],
+ "abilities": ["Stakeout"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "teddiursa": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Crunch", "Earthquake", "Facade", "Swords Dance"],
+ "abilities": ["Quick Feet"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "tentacool": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Flip Turn", "Ice Beam", "Knock Off", "Rapid Spin", "Sludge Bomb", "Surf", "Toxic Spikes"],
+ "abilities": ["Clear Body", "Liquid Ooze"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "tepig": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Flare Blitz", "Head Smash", "Superpower", "Wild Charge"],
+ "abilities": ["Blaze"],
+ "teraTypes": ["Electric", "Fighting", "Fire", "Rock"]
+ }
+ ]
+ },
+ "timburr": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Bulk Up", "Defog", "Drain Punch", "Knock Off", "Stone Edge"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Dark", "Steel"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Bulk Up", "Defog", "Drain Punch", "Knock Off", "Mach Punch"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "tinkatink": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Knock Off", "Play Rough", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Pickpocket"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "toedscool": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earth Power", "Giga Drain", "Knock Off", "Leaf Storm", "Rapid Spin", "Spikes", "Spore", "Toxic Spikes"],
+ "abilities": ["Mycelium Might"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "torchic": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Flare Blitz", "Protect", "Rock Slide", "Swords Dance"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Dragon", "Fire", "Rock"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Flare Blitz", "Overheat", "Protect", "Rock Slide"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Dragon", "Fire", "Rock"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Flare Blitz", "Protect", "Swords Dance", "Tera Blast"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Fighting", "Grass", "Ground"]
+ }
+ ]
+ },
+ "totodile": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Ice Punch", "Liquidation", "Trailblaze"],
+ "abilities": ["Sheer Force"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "trapinch": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earthquake", "First Impression", "Stone Edge", "Superpower"],
+ "abilities": ["Arena Trap"],
+ "teraTypes": ["Bug", "Fighting"]
+ }
+ ]
+ },
+ "treecko": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Drain Punch", "Giga Drain", "Leaf Storm", "Rock Slide", "Synthesis", "Thunder Punch"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Electric", "Fighting", "Grass", "Rock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Acrobatics", "Bullet Seed", "Drain Punch", "Swords Dance"],
+ "abilities": ["Unburden"],
+ "teraTypes": ["Flying"]
+ }
+ ]
+ },
+ "turtwig": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Slam", "Bullet Seed", "Crunch", "Earth Power", "Shell Smash"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Grass", "Ground"]
+ }
+ ]
+ },
+ "tynamo": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Knock Off", "Spark", "Tera Blast", "Thunder Wave"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Ground", "Ice"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Charge Beam", "Knock Off", "Spark", "Thunder Wave"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Steel"]
+ }
+ ]
+ },
+ "tyrogue": {
+ "level": 9,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "High Jump Kick", "Rapid Spin", "Rock Slide"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Fighting", "Rock"]
+ }
+ ]
+ },
+ "varoom": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Gunk Shot", "Iron Head", "Parting Shot", "Taunt", "Toxic Spikes"],
+ "abilities": ["Overcoat"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "venonat": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Leech Life", "Morning Sun", "Sleep Powder", "Stun Spore", "Toxic Spikes"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Steel", "Water"]
+ }
+ ]
+ },
+ "voltorb": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Explosion", "Foul Play", "Thief", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Aftermath", "Static"],
+ "teraTypes": ["Dark", "Electric"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Tera Blast", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Aftermath", "Static"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "voltorbhisui": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Giga Drain", "Leaf Storm", "Taunt", "Thief", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Aftermath", "Static"],
+ "teraTypes": ["Electric", "Grass"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Giga Drain", "Leaf Storm", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Aftermath", "Static"],
+ "teraTypes": ["Electric", "Grass"]
+ }
+ ]
+ },
+ "vullaby": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Brave Bird", "Defog", "Knock Off", "Roost", "U-turn"],
+ "abilities": ["Overcoat"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "vulpix": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Encore", "Energy Ball", "Extrasensory", "Fire Blast", "Healing Wish", "Hypnosis", "Nasty Plot", "Will-O-Wisp"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Grass"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Energy Ball", "Fire Blast", "Nasty Plot", "Tera Blast"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Rock"]
+ }
+ ]
+ },
+ "vulpixalola": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Aurora Veil", "Blizzard", "Freeze-Dry", "Nasty Plot"],
+ "abilities": ["Snow Warning"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Aurora Veil", "Blizzard", "Nasty Plot", "Tera Blast"],
+ "abilities": ["Snow Warning"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "wattrel": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Hurricane", "Roost", "Thunder Wave", "Thunderbolt", "U-turn"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "wiglett": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Aqua Jet", "Ice Beam", "Liquidation", "Stomping Tantrum", "Throat Chop"],
+ "abilities": ["Gooey"],
+ "teraTypes": ["Dark", "Ground", "Water"]
+ }
+ ]
+ },
+ "wingull": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Hurricane", "Knock Off", "Roost", "Surf"],
+ "abilities": ["Hydration"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "wooper": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Liquidation", "Recover", "Spikes", "Stealth Rock"],
+ "abilities": ["Unaware", "Water Absorb"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Curse", "Earthquake", "Liquidation", "Recover"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "wooperpaldea": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Curse", "Earthquake", "Gunk Shot", "Poison Jab", "Recover"],
+ "abilities": ["Unaware", "Water Absorb"],
+ "teraTypes": ["Flying", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Earthquake", "Gunk Shot", "Poison Jab", "Recover", "Spikes", "Stealth Rock", "Toxic Spikes"],
+ "abilities": ["Unaware", "Water Absorb"],
+ "teraTypes": ["Flying", "Steel"]
+ }
+ ]
+ },
+ "yanma": {
+ "level": 5,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Air Slash", "Bug Buzz", "Giga Drain", "Hypnosis", "Protect", "U-turn"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Bug", "Flying", "Grass"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Double-Edge", "Leech Life", "Protect", "Swords Dance", "Tera Blast"],
+ "abilities": ["Speed Boost"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "yungoos": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Crunch", "Double-Edge", "Stomping Tantrum", "U-turn", "Yawn"],
+ "abilities": ["Adaptability", "Stakeout"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "zorua": {
+ "level": 7,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Burning Jealousy", "Encore", "Extrasensory", "Knock Off", "Sludge Bomb", "Trick", "U-turn"],
+ "abilities": ["Illusion"],
+ "teraTypes": ["Poison"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dark Pulse", "Extrasensory", "Nasty Plot", "Sludge Bomb"],
+ "abilities": ["Illusion"],
+ "teraTypes": ["Poison"]
+ }
+ ]
+ },
+ "zoruahisui": {
+ "level": 6,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Bitter Malice", "Burning Jealousy", "Knock Off", "Trick", "U-turn", "Will-O-Wisp"],
+ "abilities": ["Illusion"],
+ "teraTypes": ["Fairy", "Ghost"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Bitter Malice", "Burning Jealousy", "Nasty Plot", "Tera Blast", "Will-O-Wisp"],
+ "abilities": ["Illusion"],
+ "teraTypes": ["Fairy", "Fighting"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen9baby/teams.ts b/data/random-battles/gen9baby/teams.ts
new file mode 100644
index 000000000000..1cc922763a17
--- /dev/null
+++ b/data/random-battles/gen9baby/teams.ts
@@ -0,0 +1,821 @@
+import {PRNG, PRNGSeed} from "../../../sim/prng";
+import {RandomTeams, MoveCounter} from "../gen9/teams";
+import {Utils} from '../../../lib';
+
+// First, some lists of moves that can be used for rules throughout set generation. Taken from regular gen9.
+
+// Moves that drop stats:
+const CONTRARY_MOVES = [
+ 'armorcannon', 'closecombat', 'leafstorm', 'makeitrain', 'overheat', 'spinout', 'superpower', 'vcreate',
+];
+
+// Hazard-setting moves
+const HAZARDS = [
+ 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes',
+];
+
+// Moves that switch the user out
+const PIVOT_MOVES = [
+ 'chillyreception', 'flipturn', 'partingshot', 'shedtail', 'teleport', 'uturn', 'voltswitch',
+];
+
+// Moves that boost Attack:
+const PHYSICAL_SETUP = [
+ 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'swordsdance', 'tidyup', 'victorydance',
+];
+
+// Moves that restore HP:
+const RECOVERY_MOVES = [
+ 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis',
+];
+
+// Setup (stat-boosting) moves
+const SETUP = [
+ 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse',
+ 'dragondance', 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch',
+ 'quiverdance', 'raindance', 'rockpolish', 'shellsmash', 'shiftgear', 'snowscape', 'sunnyday', 'swordsdance', 'tailglow', 'tidyup',
+ 'trailblaze', 'workup', 'victorydance',
+];
+
+// Some moves that only boost Speed:
+const SPEED_SETUP = [
+ 'agility', 'autotomize', 'flamecharge', 'rockpolish', 'trailblaze',
+];
+
+// Moves that would want to generate together
+const MOVE_PAIRS = [
+ ['lightscreen', 'reflect'],
+ ['sleeptalk', 'rest'],
+ ['protect', 'wish'],
+];
+
+export class RandomBabyTeams extends RandomTeams {
+ constructor(format: Format | string, prng: PRNG | PRNGSeed | null) {
+ super(format, prng);
+
+ // Overwrite enforcementcheckers where needed here
+ this.moveEnforcementCheckers['Bug'] = (movePool, moves, abilities, types, counter) => (
+ !counter.get('Bug')
+ );
+ this.moveEnforcementCheckers['Grass'] = (movePool, moves, abilities, types, counter, species) => (
+ !counter.get('Grass') && species.id !== 'rowlet'
+ );
+ }
+
+
+ cullMovePool(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): void {
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
+ if (moves.size === this.maxMoveCount - 2) {
+ const unpairedMoves = [...movePool];
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
+ }
+ }
+ if (unpairedMoves.length === 1) {
+ this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
+ }
+ }
+
+ // These moves are paired, and shouldn't appear if there isn't room for both.
+ if (moves.size === this.maxMoveCount - 1) {
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(movePool, movePool.indexOf(pair[0]));
+ this.fastPop(movePool, movePool.indexOf(pair[1]));
+ }
+ }
+ }
+
+ // Create list of all status moves to be used later
+ const statusMoves = this.cachedStatusMoves;
+
+ // Team-based move culls
+ if (teamDetails.screens && movePool.length >= this.maxMoveCount + 2) {
+ if (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect'));
+ if (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.stickyWeb) {
+ if (movePool.includes('stickyweb')) this.fastPop(movePool, movePool.indexOf('stickyweb'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.stealthRock) {
+ if (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.defog || teamDetails.rapidSpin) {
+ if (movePool.includes('defog')) this.fastPop(movePool, movePool.indexOf('defog'));
+ if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.toxicSpikes) {
+ if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.spikes && teamDetails.spikes >= 2) {
+ if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+
+ // General incompatibilities
+ const incompatiblePairs = [
+ // These moves don't mesh well with other aspects of the set
+ [SETUP, 'defog'],
+ [SETUP, PIVOT_MOVES],
+ [SETUP, HAZARDS],
+ [PHYSICAL_SETUP, PHYSICAL_SETUP],
+ [statusMoves, ['destinybond', 'healingwish', 'switcheroo', 'trick']],
+ ['curse', 'rapidspin'],
+
+ // These moves are redundant with each other
+ [
+ ['alluringvoice', 'dazzlinggleam', 'drainingkiss', 'moonblast'],
+ ['alluringvoice', 'dazzlinggleam', 'drainingkiss', 'moonblast'],
+ ],
+ [['bulletseed', 'gigadrain', 'leafstorm', 'seedbomb'], ['bulletseed', 'gigadrain', 'leafstorm', 'seedbomb']],
+ [['hypnosis', 'thunderwave', 'toxic', 'willowisp', 'yawn'], ['hypnosis', 'thunderwave', 'toxic', 'willowisp', 'yawn']],
+ ['roar', 'yawn'],
+ ['dragonclaw', 'outrage'],
+ ['dracometeor', 'dragonpulse'],
+ ['toxic', 'toxicspikes'],
+ ['rockblast', 'stoneedge'],
+ ['bodyslam', 'doubleedge'],
+ ['gunkshot', 'poisonjab'],
+ [['hydropump', 'liquidation'], 'surf'],
+ ];
+
+ for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
+ }
+
+ // Generate random moveset for a given species, role, tera type.
+ randomMoveset(
+ types: string[],
+ abilities: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ movePool: string[],
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): Set {
+ const moves = new Set();
+ let counter = this.queryMoves(moves, species, teraType, abilities);
+ this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role);
+
+ // If there are only four moves, add all moves and return early
+ if (movePool.length <= this.maxMoveCount) {
+ for (const moveid of movePool) {
+ moves.add(moveid);
+ }
+ return moves;
+ }
+
+ // Helper function for (STAB-)move enforcement later on
+ const runEnforcementChecker = (checkerName: string) => {
+ if (!this.moveEnforcementCheckers[checkerName]) return false;
+ return this.moveEnforcementCheckers[checkerName](
+ movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles, teraType, role
+ );
+ };
+
+ if (role === 'Tera Blast user') {
+ counter = this.addMove('terablast', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Add required move (e.g. Relic Song for Meloetta-P)
+ if (species.requiredMove) {
+ const move = this.dex.moves.get(species.requiredMove).id;
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Add other moves you really want to have, e.g. STAB, recovery, setup.
+
+ // Enforce Facade if Guts is a possible ability
+ if (movePool.includes('facade') && abilities.includes('Guts')) {
+ counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce Sticky Web
+ if (movePool.includes('stickyweb')) {
+ counter = this.addMove('stickyweb', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce Knock Off on most roles
+ if (movePool.includes('knockoff') && role !== 'Bulky Support') {
+ counter = this.addMove('knockoff', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce hazard removal on Bulky Support if the team doesn't already have it
+ if (role === 'Bulky Support' && !teamDetails.defog && !teamDetails.rapidSpin) {
+ if (movePool.includes('rapidspin')) {
+ counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ if (movePool.includes('defog')) {
+ counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Knock Off on pure Normal- and Fighting-types
+ if (types.length === 1 && (types.includes('Normal') || types.includes('Fighting'))) {
+ if (movePool.includes('knockoff')) {
+ counter = this.addMove('knockoff', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce STAB priority
+ if (role === 'Wallbreaker') {
+ const priorityMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (
+ types.includes(moveType) && (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) &&
+ (move.basePower || move.basePowerCallback)
+ ) {
+ priorityMoves.push(moveid);
+ }
+ }
+ if (priorityMoves.length) {
+ const moveid = this.sample(priorityMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce STAB
+ for (const type of types) {
+ // Check if a STAB move of that type should be required
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ while (runEnforcementChecker(type)) {
+ if (!stabMoves.length) break;
+ const moveid = this.sampleNoReplace(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Tera STAB
+ if (!counter.get('stabtera') && role !== 'Bulky Support') {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && teraType === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // If no STAB move was added, add a STAB move
+ if (!counter.get('stab')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce contrary moves
+ if (abilities.includes('Contrary')) {
+ const contraryMoves = movePool.filter(moveid => CONTRARY_MOVES.includes(moveid));
+ for (const moveid of contraryMoves) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce recovery
+ if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup'].includes(role)) {
+ const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));
+ if (recoveryMoves.length) {
+ const moveid = this.sample(recoveryMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce setup
+ if (role.includes('Setup') || role === 'Tera Blast user') {
+ // First, try to add a non-Speed setup move
+ const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && !SPEED_SETUP.includes(moveid));
+ if (nonSpeedSetupMoves.length) {
+ const moveid = this.sample(nonSpeedSetupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ } else {
+ // No non-Speed setup moves, so add any (Speed) setup move
+ const setupMoves = movePool.filter(moveid => SETUP.includes(moveid));
+ if (setupMoves.length) {
+ const moveid = this.sample(setupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+
+ // Enforce a move not on the noSTAB list
+ if (!counter.damagingMoves.size) {
+ // Choose an attacking move
+ const attackingMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);
+ }
+ if (attackingMoves.length) {
+ const moveid = this.sample(attackingMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce coverage move
+ if (!['Fast Support', 'Bulky Support'].includes(role) || species.id === 'magnemite') {
+ if (counter.damagingMoves.size === 1) {
+ // Find the type of the current attacking move
+ const currentAttackType = counter.damagingMoves.values().next().value.type;
+ // Choose an attacking move that is of different type to the current single attack
+ const coverageMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {
+ if (currentAttackType !== moveType) coverageMoves.push(moveid);
+ }
+ }
+ if (coverageMoves.length) {
+ const moveid = this.sample(coverageMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+
+ // Add (moves.size < this.maxMoveCount) as a condition if moves is getting larger than 4 moves.
+ // If you want moves to be favored but not required, add something like && this.randomChance(1, 2) to your condition.
+
+ // Choose remaining moves randomly from movepool and add them to moves list:
+ while (moves.size < this.maxMoveCount && movePool.length) {
+ if (moves.size + movePool.length <= this.maxMoveCount) {
+ for (const moveid of movePool) {
+ moves.add(moveid);
+ }
+ break;
+ }
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ for (const pair of MOVE_PAIRS) {
+ if (moveid === pair[0] && movePool.includes(pair[1])) {
+ counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ if (moveid === pair[1] && movePool.includes(pair[0])) {
+ counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+ return moves;
+ }
+
+ getAbility(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ if (abilities.length <= 1) return abilities[0];
+
+ // Hard-code abilities here
+ if (species.id === 'rowlet' && counter.get('Grass')) return 'Overgrow';
+ if (species.id === 'riolu') return moves.has('copycat') ? 'Prankster' : 'Inner Focus';
+ if (species.id === 'pikipek' && counter.get('skilllink')) return 'Skill Link';
+ if (species.id === 'psyduck' && teamDetails.rain) return 'Swift Swim';
+
+ const abilityAllowed: string[] = [];
+ // Obtain a list of abilities that are allowed (not culled)
+ for (const ability of abilities) {
+ if (!this.shouldCullAbility(
+ ability, types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role
+ )) {
+ abilityAllowed.push(ability);
+ }
+ }
+
+ // Pick a random allowed ability
+ if (abilityAllowed.length >= 1) return this.sample(abilityAllowed);
+
+ // If all abilities are rejected, prioritize weather abilities over non-weather abilities
+ if (!abilityAllowed.length) {
+ const weatherAbilities = abilities.filter(
+ a => ['Chlorophyll', 'Hydration', 'Sand Force', 'Sand Rush', 'Slush Rush', 'Solar Power', 'Swift Swim'].includes(a)
+ );
+ if (weatherAbilities.length) return this.sample(weatherAbilities);
+ }
+
+ // Pick a random ability
+ return this.sample(abilities);
+ }
+
+ getPriorityItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ) {
+ if (species.requiredItems) {
+ return this.sample(species.requiredItems);
+ }
+
+ if (moves.has('focusenergy')) return 'Scope Lens';
+ if (moves.has('thief')) return '';
+ if (moves.has('trick') || moves.has('switcheroo')) return 'Choice Scarf';
+
+ if (moves.has('acrobatics')) return ability === 'Unburden' ? 'Oran Berry' : '';
+ if (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';
+
+ if (ability === 'Guts' && moves.has('facade')) return 'Flame Orb';
+ if (ability === 'Quick Feet') return 'Toxic Orb';
+
+ if (['Harvest', 'Ripen', 'Unburden'].includes(ability) || moves.has('bellydrum')) return 'Oran Berry';
+ }
+
+ getItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ if (role === 'Fast Attacker' && (!counter.get('Status') || (counter.get('Status') === 1 && moves.has('destinybond')))) {
+ return 'Choice Scarf';
+ }
+ if (['Setup Sweeper', 'Wallbreaker'].includes(role)) {
+ return 'Life Orb';
+ }
+ return 'Eviolite';
+ }
+
+ getLevel(
+ species: Species,
+ ): number {
+ if (this.adjustLevel) return this.adjustLevel;
+ // This should frankly always work, but 10 is the default level in case something bad happens
+ return this.randomSets[species.id]?.level || 10;
+ }
+
+ getForme(species: Species): string {
+ if (typeof species.battleOnly === 'string') {
+ // Only change the forme. The species has custom moves, and may have different typing and requirements.
+ return species.battleOnly;
+ }
+ if (species.cosmeticFormes) return this.sample([species.name].concat(species.cosmeticFormes));
+
+ // Consolidate mostly-cosmetic formes, at least for the purposes of Random Battles
+ if (['Poltchageist', 'Sinistea'].includes(species.baseSpecies)) {
+ return this.sample([species.name].concat(species.otherFormes!));
+ }
+ return species.name;
+ }
+
+ randomSet(
+ s: string | Species,
+ teamDetails: RandomTeamsTypes.TeamDetails = {},
+ isLead = false,
+ isDoubles = false
+ ): RandomTeamsTypes.RandomSet {
+ const species = this.dex.species.get(s);
+ const forme = this.getForme(species);
+ const sets = this.randomSets[species.id]["sets"];
+ const possibleSets = [];
+
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+
+ for (const set of sets) {
+ // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented.
+ if ((teamDetails.teraBlast || ruleTable.has('terastalclause')) && set.role === 'Tera Blast user') {
+ continue;
+ }
+ possibleSets.push(set);
+ }
+ const set = this.sampleIfArray(possibleSets);
+ const role = set.role;
+ const movePool: string[] = [];
+ for (const movename of set.movepool) {
+ movePool.push(this.dex.moves.get(movename).id);
+ }
+ const teraTypes = set.teraTypes;
+ let teraType = this.sampleIfArray(teraTypes);
+
+ let ability = '';
+ let item = undefined;
+
+ const evs = {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85};
+ const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};
+
+ const types = species.types;
+ const abilities = set.abilities!;
+
+ // Get moves
+ const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType!, role);
+ const counter = this.queryMoves(moves, species, teraType!, abilities);
+
+ // Get ability
+ ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType!, role);
+
+ // Get items
+ // First, the priority items
+ item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType!, role);
+ if (item === undefined) {
+ item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType!, role);
+ }
+
+ // Get level
+ const level = this.getLevel(species);
+
+
+ // Prepare optimal HP for Belly Drum and Life Orb
+ let hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ let targetHP = hp;
+ const minimumHP = Math.floor(Math.floor(2 * species.baseStats.hp + 100) * level / 100 + 10);
+ if (item === "Life Orb") {
+ targetHP = Math.floor(hp / 10) * 10 - 1;
+ } else if (moves.has("bellydrum")) {
+ targetHP = Math.floor(hp / 2) * 2;
+ }
+ // If the difference is too extreme, don't adjust HP
+ if (hp > targetHP && hp - targetHP <= 3 && targetHP >= minimumHP) {
+ // If setting evs to 0 is sufficient, decrement evs, otherwise decrement ivs with evs set to 0
+ if (Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + 100) * level / 100 + 10) >= targetHP) {
+ evs.hp = 0;
+ hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ while (hp > targetHP) {
+ ivs.hp -= 1;
+ hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ }
+ } else {
+ while (hp > targetHP) {
+ evs.hp -= 4;
+ hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ }
+ }
+ }
+
+ // Minimize confusion damage
+ const noAttackStatMoves = [...moves].every(m => {
+ const move = this.dex.moves.get(m);
+ if (move.damageCallback || move.damage) return true;
+ if (move.id === 'shellsidearm') return false;
+ if (move.id === 'terablast' && (
+ species.id === 'porygon' || species.baseStats.atk > species.baseStats.spa)
+ ) return false;
+ return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
+ });
+
+ if (noAttackStatMoves) {
+ evs.atk = 0;
+ ivs.atk = 0;
+ }
+
+ if (moves.has('gyroball') || moves.has('trickroom')) {
+ evs.spe = 0;
+ ivs.spe = 0;
+ }
+
+ // Enforce Tera Type after all set generation is done to prevent infinite generation
+ if (this.forceTeraType) teraType = this.forceTeraType;
+
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+ return {
+ name: species.baseSpecies,
+ species: forme,
+ gender: species.gender,
+ shiny: this.randomChance(1, 1024),
+ level,
+ moves: shuffledMoves,
+ ability,
+ evs,
+ ivs,
+ item,
+ teraType,
+ role,
+ };
+ }
+
+ randomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json');
+
+ randomBabyTeam() {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const seed = this.prng.seed;
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+ const pokemon: RandomTeamsTypes.RandomSet[] = [];
+
+ // For Monotype
+ const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
+ const typePool = this.dex.types.names().filter(name => name !== "Stellar");
+ const type = this.forceMonotype || this.sample(typePool);
+
+ const baseFormes = new Set();
+
+ const typeCount = new Utils.Multiset();
+ const typeComboCount = new Utils.Multiset();
+ const typeWeaknesses = new Utils.Multiset();
+ const typeDoubleWeaknesses = new Utils.Multiset();
+ const teamDetails: RandomTeamsTypes.TeamDetails = {};
+
+ const pokemonList = Object.keys(this.randomSets);
+ const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);
+
+ while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
+ const baseSpecies = this.sampleNoReplace(baseSpeciesPool);
+ const species = this.dex.species.get(this.sample(pokemonPool[baseSpecies]));
+ if (!species.exists) continue;
+
+ // Limit to one of each species (Species Clause)
+ if (baseFormes.has(species.baseSpecies)) continue;
+
+ // Illusion shouldn't be on the last slot
+ if (species.baseSpecies === 'Zorua' && pokemon.length >= (this.maxTeamSize - 1)) continue;
+
+ const types = species.types;
+ const typeCombo = types.slice().sort().join();
+ const weakToFreezeDry = (
+ this.dex.getEffectiveness('Ice', species) > 0 ||
+ (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water'))
+ );
+ // Dynamically scale limits for different team sizes. The default and minimum value is 1.
+ const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
+
+ if (!isMonotype && !this.forceMonotype) {
+ let skip = false;
+
+ // Limit two of any type
+ for (const typeName of types) {
+ if (typeCount.get(typeName) >= 2 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (skip) continue;
+
+ // Limit three weak to any type, and one double weak to any type
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ if (typeWeaknesses.get(typeName) >= 3 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ if (typeDoubleWeaknesses.get(typeName) >= 1 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ if (skip) continue;
+
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (
+ this.dex.getEffectiveness('Fire', species) === 0 &&
+ Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length &&
+ typeWeaknesses.get('Fire') >= 3 * limitFactor
+ ) continue;
+
+ // Limit four weak to Freeze-Dry
+ if (weakToFreezeDry) {
+ if (typeWeaknesses.get('Freeze-Dry') >= 4 * limitFactor) continue;
+ }
+ }
+
+ // Limit three of any type combination in Monotype
+ if (!this.forceMonotype && isMonotype && typeComboCount.get(typeCombo) >= 3 * limitFactor) continue;
+
+ const set: RandomTeamsTypes.RandomSet = this.randomSet(species, teamDetails, false, false);
+ pokemon.push(set);
+
+
+ // Don't bother tracking details for the last Pokemon
+ if (pokemon.length === this.maxTeamSize) break;
+
+ // Now that our Pokemon has passed all checks, we can increment our counters
+ baseFormes.add(species.baseSpecies);
+
+ // Increment type counters
+ for (const typeName of types) {
+ typeCount.add(typeName);
+ }
+ typeComboCount.add(typeCombo);
+
+ // Increment weakness counter
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ typeWeaknesses.add(typeName);
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ typeDoubleWeaknesses.add(typeName);
+ }
+ }
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) {
+ typeWeaknesses.add('Fire');
+ }
+ if (weakToFreezeDry) typeWeaknesses.add('Freeze-Dry');
+
+ // Track what the team has
+ if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1;
+ if (set.ability === 'Drought' || set.moves.includes('sunnyday')) teamDetails.sun = 1;
+ if (set.ability === 'Sand Stream') teamDetails.sand = 1;
+ if (set.ability === 'Snow Warning' || set.moves.includes('snowscape') || set.moves.includes('chillyreception')) {
+ teamDetails.snow = 1;
+ }
+ if (set.moves.includes('spikes')) {
+ teamDetails.spikes = (teamDetails.spikes || 0) + 1;
+ }
+ if (set.moves.includes('stealthrock')) teamDetails.stealthRock = 1;
+ if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1;
+ if (set.moves.includes('toxicspikes') || set.ability === 'Toxic Debris') teamDetails.toxicSpikes = 1;
+ if (set.moves.includes('defog')) teamDetails.defog = 1;
+ if (set.moves.includes('rapidspin') || set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1;
+ if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) {
+ teamDetails.screens = 1;
+ }
+ if (set.role === 'Tera Blast user') {
+ teamDetails.teraBlast = 1;
+ }
+ }
+ // large teams sometimes cannot be built, and monotype is also at user's own risk
+ if (pokemon.length < this.maxTeamSize && pokemon.length < 12 && !isMonotype) {
+ throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
+ }
+
+ return pokemon;
+ }
+}
+
+export default RandomBabyTeams;
diff --git a/data/random-battles/gen9cap/sets.json b/data/random-battles/gen9cap/sets.json
new file mode 100644
index 000000000000..81980e0cbaee
--- /dev/null
+++ b/data/random-battles/gen9cap/sets.json
@@ -0,0 +1,612 @@
+{
+ "syclant": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earth Power", "Focus Blast", "Spikes", "Triple Axel", "U-turn"],
+ "abilities": ["Compound Eyes"],
+ "teraTypes": ["Fighting", "Ground"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Close Combat", "Earthquake", "Leech Life", "Swords Dance", "Triple Axel"],
+ "abilities": ["Compound Eyes"],
+ "teraTypes": ["Fighting", "Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bug Buzz", "Earth Power", "Ice Beam", "Tail Glow"],
+ "abilities": ["Mountaineer"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "revenankh": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Moonlight", "Poltergeist"],
+ "abilities": ["Triage"],
+ "teraTypes": ["Fairy", "Fighting", "Steel", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Bulk Up", "Drain Punch", "Poltergeist", "Shadow Sneak"],
+ "abilities": ["Triage"],
+ "teraTypes": ["Fairy", "Fighting", "Steel", "Water"]
+ }
+ ]
+ },
+ "pyroak": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earth Power", "Energy Ball", "Overheat", "Synthesis"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fire", "Ground"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Dragon Tail", "Earth Power", "Giga Drain", "Overheat"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fire", "Ground"]
+ }
+ ]
+ },
+ "fidgit": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Earth Power", "Encore", "Rapid Spin", "Sludge Bomb", "Spikes", "Stealth Rock", "Tailwind", "Toxic Spikes", "U-turn"],
+ "abilities": ["Frisk", "Persistent"],
+ "teraTypes": ["Flying", "Steel"]
+ }
+ ]
+ },
+ "stratagem": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Energy Ball", "Fire Blast", "Paleo Wave", "Trick"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fire", "Grass", "Rock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Energy Ball", "Fire Blast", "Meteor Beam", "Paleo Wave"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fire", "Grass", "Rock"]
+ }
+ ]
+ },
+ "arghonaut": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Recover", "Waterfall"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Circle Throw", "Knock Off", "Recover", "Spikes"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Dark", "Steel"]
+ }
+ ]
+ },
+ "kitsunoh": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Defog", "Encore", "Meteor Mash", "Poltergeist", "Strength Sap", "Trick", "U-turn", "Will-O-Wisp"],
+ "abilities": ["Trace"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Defog", "Encore", "Meteor Mash", "Poltergeist", "Strength Sap", "U-turn", "Will-O-Wisp"],
+ "abilities": ["Trace"],
+ "teraTypes": ["Dark", "Water"]
+ }
+ ]
+ },
+ "cyclohm": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Defog", "Discharge", "Draco Meteor", "Fire Blast", "Ice Beam", "Slack Off", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Shield Dust", "Static"],
+ "teraTypes": ["Electric", "Fairy", "Steel"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Discharge", "Draco Meteor", "Fire Blast", "Ice Beam", "Thunderbolt", "Volt Switch"],
+ "abilities": ["Shield Dust", "Static"],
+ "teraTypes": ["Electric", "Fairy", "Steel"]
+ }
+ ]
+ },
+ "colossoil": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Facade", "Headlong Rush", "Knock Off", "Rapid Spin", "Sucker Punch", "U-turn"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "krilowatt": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Ice Beam", "Surf", "Volt Switch", "Wild Charge"],
+ "abilities": ["Magic Guard"],
+ "teraTypes": ["Electric", "Flying"]
+ }
+ ]
+ },
+ "voodoom": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Aura Sphere", "Dark Pulse", "Flash Cannon", "Focus Blast", "Nasty Plot", "Vacuum Wave", "Volt Switch"],
+ "abilities": ["Lightning Rod", "Volt Absorb"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "tomohawk": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Aura Sphere", "Haze", "Hurricane", "Rapid Spin", "Roost"],
+ "abilities": ["Intimidate", "Prankster"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "necturna": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Horn Leech", "Shadow Claw", "Stone Edge", "Victory Dance"],
+ "abilities": ["Forewarn"],
+ "teraTypes": ["Fairy", "Rock", "Water"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Horn Leech", "Pain Split", "Rage Fist", "Toxic Spikes", "Will-O-Wisp"],
+ "abilities": ["Forewarn"],
+ "teraTypes": ["Fairy", "Water"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Horn Leech", "Pain Split", "Power Whip", "Shadow Claw", "Shadow Sneak", "Sticky Web", "Toxic Spikes", "Will-O-Wisp"],
+ "abilities": ["Forewarn"],
+ "teraTypes": ["Fairy", "Water"]
+ }
+ ]
+ },
+ "mollux": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Hydro Pump", "Lava Plume", "Rapid Spin", "Recover", "Sludge Bomb", "Thunder Wave"],
+ "abilities": ["Dry Skin"],
+ "teraTypes": ["Grass", "Water"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Eruption", "Hydro Pump", "Sludge Wave", "Trick"],
+ "abilities": ["Dry Skin"],
+ "teraTypes": ["Fire"]
+ }
+ ]
+ },
+ "aurumoth": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bug Buzz", "Focus Blast", "Psyshock", "Tail Glow"],
+ "abilities": ["No Guard", "Weak Armor"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Blizzard", "Bug Buzz", "Focus Blast", "Hydro Pump", "Overheat", "Psychic", "Psyshock", "Thunder"],
+ "abilities": ["No Guard"],
+ "teraTypes": ["Fighting", "Fire"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Dragon Dance", "Megahorn", "Zen Headbutt"],
+ "abilities": ["No Guard"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "malaconda": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Glare", "Knock Off", "Parting Shot", "Rapid Spin", "Solar Blade", "Synthesis", "Temper Flare"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Poison", "Water"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Knock Off", "Solar Blade", "Sucker Punch", "Synthesis"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Poison", "Water"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Knock Off", "Rapid Spin", "Solar Blade", "Sucker Punch", "Temper Flare", "U-turn"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Fire", "Poison"]
+ }
+ ]
+ },
+ "cawmodore": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Acrobatics", "Belly Drum", "Bullet Punch", "Drain Punch"],
+ "abilities": ["Volt Absorb"],
+ "teraTypes": ["Flying", "Water"]
+ }
+ ]
+ },
+ "volkraken": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Flamethrower", "Hydro Pump", "Overheat", "U-turn"],
+ "abilities": ["Analytic"],
+ "teraTypes": ["Fire", "Water"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Fire Blast", "Hydro Pump", "Scald", "U-turn"],
+ "abilities": ["Analytic"],
+ "teraTypes": ["Fire", "Water"]
+ }
+ ]
+ },
+ "plasmanta": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Discharge", "Encore", "Sludge Bomb", "Surf", "Taunt", "Thunderbolt"],
+ "abilities": ["Storm Drain"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "naviathan": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Facade", "Heavy Slam", "Wave Crash"],
+ "abilities": ["Guts"],
+ "teraTypes": ["Grass", "Normal"]
+ }
+ ]
+ },
+ "crucibelle": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Gunk Shot", "Knock Off", "Poison Jab", "Stone Edge", "U-turn", "Wood Hammer"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Grass"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Gunk Shot", "Knock Off", "Stealth Rock", "Stone Edge", "Toxic Spikes"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Grass"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Coil", "Gunk Shot", "Stone Edge", "Wood Hammer"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "kerfluffle": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Aura Sphere", "Encore", "Focus Blast", "Moonblast", "Parting Shot", "Psychic", "Vacuum Wave"],
+ "abilities": ["Natural Cure"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "pajantom": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earthquake", "Leech Life", "Outrage", "Spirit Shackle", "Taunt", "Toxic Spikes"],
+ "abilities": ["Comatose"],
+ "teraTypes": ["Fairy", "Ghost"]
+ }
+ ]
+ },
+ "jumbao": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Focus Blast", "Healing Wish", "Moonblast", "Solar Beam", "Synthesis"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Poison", "Water"]
+ },
+ {
+ "role": "Tera Blast user",
+ "movepool": ["Healing Wish", "Moonblast", "Solar Beam", "Synthesis", "Tera Blast"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Fire", "Ground"]
+ }
+ ]
+ },
+ "caribolt": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Horn Leech", "Hyper Drill", "Knock Off", "Quick Attack", "Swords Dance"],
+ "abilities": ["Galvanize"],
+ "teraTypes": ["Electric"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Double-Edge", "Horn Leech", "Rapid Spin", "Swords Dance"],
+ "abilities": ["Galvanize"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ },
+ "smokomodo": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Bone Rush", "Bulk Up", "Flame Charge", "Morning Sun"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Grass", "Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bone Rush", "Bulk Up", "Flame Wheel", "Scale Shot"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Dragon"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Bone Rush", "Clear Smog", "Defog", "Flame Wheel", "Morning Sun", "Stealth Rock", "Taunt", "Toxic", "Will-O-Wisp"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Grass", "Ground", "Water"]
+ }
+ ]
+ },
+ "snaelstrom": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Liquidation", "Rapid Spin", "Stealth Rock", "Sticky Web", "Toxic", "U-turn"],
+ "abilities": ["Poison Heal"],
+ "teraTypes": ["Electric", "Ground"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Liquidation", "Recover", "Spiky Shield", "Toxic"],
+ "abilities": ["Poison Heal"],
+ "teraTypes": ["Electric", "Ground"]
+ }
+ ]
+ },
+ "equilibra": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Doom Desire", "Earth Power", "Flash Cannon", "Pain Split", "Rapid Spin"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Steel", "Water"]
+ }
+ ]
+ },
+ "astrolotl": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Defog", "Draco Meteor", "Encore", "Fire Lash", "Spikes", "Thunder Wave", "Will-O-Wisp"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fairy", "Steel"]
+ }
+ ]
+ },
+ "miasmaw": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earthquake", "Megahorn", "Scale Shot", "Swords Dance"],
+ "abilities": ["Compound Eyes"],
+ "teraTypes": ["Dragon", "Steel"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Close Combat", "Earthquake", "Gunk Shot", "Scale Shot", "Swords Dance"],
+ "abilities": ["Compound Eyes"],
+ "teraTypes": ["Poison"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dragon Rush", "Earthquake", "First Impression", "U-turn"],
+ "abilities": ["Compound Eyes"],
+ "teraTypes": ["Bug", "Steel"]
+ }
+ ]
+ },
+ "chromera": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Boomburst", "Dark Pulse", "Recover", "Switcheroo", "Thunderbolt", "Toxic Spikes"],
+ "abilities": ["Color Change"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Boomburst", "Calm Mind", "Dark Pulse", "Recover"],
+ "abilities": ["Color Change"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "venomicon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Air Slash", "Body Press", "Hurricane", "Roost", "Sludge Bomb"],
+ "abilities": ["Stamina"],
+ "teraTypes": ["Fighting", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Air Slash", "Body Press", "Hurricane", "Knock Off", "Roost"],
+ "abilities": ["Stamina"],
+ "teraTypes": ["Fighting", "Steel"]
+ }
+ ]
+ },
+ "venomiconepilogue": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Brave Bird", "Coil", "Gunk Shot", "Roost", "Toxic Spikes"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Flying", "Poison", "Steel"]
+ }
+ ]
+ },
+ "saharaja": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Body Press", "Diamond Storm", "Earthquake", "Rapid Spin"],
+ "abilities": ["Serene Grace", "Water Absorb"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Body Press", "Diamond Storm", "Earthquake", "Pain Split"],
+ "abilities": ["Serene Grace", "Water Absorb"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Diamond Storm", "Earthquake", "Pain Split", "Rapid Spin", "Swords Dance"],
+ "abilities": ["Serene Grace", "Water Absorb"],
+ "teraTypes": ["Rock", "Steel"]
+ }
+ ]
+ },
+ "hemogoblin": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Extreme Speed", "Flare Blitz", "Moonlight"],
+ "abilities": ["Pixilate"],
+ "teraTypes": ["Fairy", "Water"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Explosion", "Extreme Speed", "Overheat", "Spikes", "Will-O-Wisp"],
+ "abilities": ["Pixilate"],
+ "teraTypes": ["Fairy", "Water"]
+ }
+ ]
+ },
+ "cresceidon": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Moonblast", "Recover", "Scald", "Thunder Wave"],
+ "abilities": ["Multiscale", "Rough Skin"],
+ "teraTypes": ["Poison", "Steel"]
+ }
+ ]
+ },
+ "chuggalong": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Clanging Scales", "Clangorous Soul", "Sludge Wave", "Surf"],
+ "abilities": ["Armor Tail"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "shox": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Glare", "Ice Beam", "Milk Drink", "Thunderbolt"],
+ "abilities": ["Electromorphosis"],
+ "teraTypes": ["Fairy", "Ghost", "Grass"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Glare", "Ice Beam", "Milk Drink", "Volt Switch"],
+ "abilities": ["Electromorphosis"],
+ "teraTypes": ["Flying", "Ghost"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Discharge", "Ice Beam", "Knock Off", "Milk Drink", "Thunderbolt"],
+ "abilities": ["Electromorphosis"],
+ "teraTypes": ["Fairy", "Ghost", "Grass"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen9cap/teams.ts b/data/random-battles/gen9cap/teams.ts
new file mode 100644
index 000000000000..d17bf8b5105b
--- /dev/null
+++ b/data/random-battles/gen9cap/teams.ts
@@ -0,0 +1,389 @@
+import {RandomTeams, MoveCounter} from "../gen9/teams";
+
+/** Pokemon who should never be in the lead slot */
+const NO_LEAD_POKEMON = [
+ 'Zacian', 'Zamazenta',
+];
+
+export class RandomCAPTeams extends RandomTeams {
+ getCAPAbility(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ // Hard-code abilities here
+ if (species.id === 'fidgit') return moves.has('tailwind') ? 'Persistent' : 'Frisk';
+ if (species.id === 'tomohawk') return moves.has('haze') ? 'Prankster' : 'Intimidate';
+ // Default to regular ability selection
+ return this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, false, teraType, role);
+ }
+
+ getCAPPriorityItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ) {
+ if (ability === 'Mountaineer') return 'Life Orb';
+ }
+
+ getLevel(
+ species: Species,
+ isDoubles: boolean,
+ ): number {
+ if (this.adjustLevel) return this.adjustLevel;
+ return (species.num > 0 ? this.randomSets[species.id]["level"] : this.randomCAPSets[species.id]["level"]) || 80;
+ }
+
+ randomCAPSet(
+ s: string | Species,
+ teamDetails: RandomTeamsTypes.TeamDetails = {},
+ isLead = false,
+ isDoubles = false
+ ): RandomTeamsTypes.RandomSet {
+ const species = this.dex.species.get(s);
+ // Generate Non-CAP Pokemon using the regular randomSet() method
+ if (species.num > 0) return this.randomSet(s, teamDetails, isLead, isDoubles);
+ const forme = this.getForme(species);
+ const sets = this.randomCAPSets[species.id]["sets"];
+ const possibleSets = [];
+
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+
+ for (const set of sets) {
+ // Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy.
+ const abilities = new Set(Object.values(species.abilities));
+ if (isLead && (abilities.has('Protosynthesis') || abilities.has('Quark Drive')) && set.role === 'Fast Bulky Setup') {
+ continue;
+ }
+ // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented.
+ if ((teamDetails.teraBlast || ruleTable.has('terastalclause')) && set.role === 'Tera Blast user') {
+ continue;
+ }
+ possibleSets.push(set);
+ }
+ const set = this.sampleIfArray(possibleSets);
+ const role = set.role;
+ const movePool: string[] = [];
+ for (const movename of set.movepool) {
+ movePool.push(this.dex.moves.get(movename).id);
+ }
+ const teraTypes = set.teraTypes;
+ let teraType = this.sampleIfArray(teraTypes);
+
+ let ability = '';
+ let item = undefined;
+
+ const evs = {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85};
+ const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};
+
+ const types = species.types;
+ const abilities = set.abilities!;
+
+ // Get moves
+ const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType!, role);
+ const counter = this.queryMoves(moves, species, teraType!, abilities);
+
+ // Get ability
+ ability = this.getCAPAbility(types, moves, abilities, counter, teamDetails, species, isLead, teraType!, role);
+
+ // Get items
+ // First, the priority items
+ item = this.getCAPPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, teraType!, role);
+ if (item === undefined) {
+ item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType!, role);
+ }
+ if (item === undefined) {
+ item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType!, role);
+ }
+
+ // Get level
+ const level = this.getLevel(species, isDoubles);
+
+ // Prepare optimal HP
+ const srImmunity = ability === 'Magic Guard' || item === 'Heavy-Duty Boots';
+ let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);
+ // Crash damage move users want an odd HP to survive two misses
+ if (['axekick', 'highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2;
+ while (evs.hp > 1) {
+ const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ if ((moves.has('substitute') && ['Sitrus Berry', 'Salac Berry'].includes(item))) {
+ // Two Substitutes should activate Sitrus Berry
+ if (hp % 4 === 0) break;
+ } else if ((moves.has('bellydrum') || moves.has('filletaway')) && (item === 'Sitrus Berry' || ability === 'Gluttony')) {
+ // Belly Drum should activate Sitrus Berry
+ if (hp % 2 === 0) break;
+ } else if (moves.has('substitute') && moves.has('endeavor')) {
+ // Luvdisc should be able to Substitute down to very low HP
+ if (hp % 4 > 0) break;
+ } else {
+ // Maximize number of Stealth Rock switch-ins
+ if (srWeakness <= 0 || ability === 'Regenerator' || ['Leftovers', 'Life Orb'].includes(item)) break;
+ if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;
+ // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry
+ if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;
+ }
+ evs.hp -= 4;
+ }
+
+ // Minimize confusion damage
+ const noAttackStatMoves = [...moves].every(m => {
+ const move = this.dex.moves.get(m);
+ if (move.damageCallback || move.damage) return true;
+ if (move.id === 'shellsidearm') return false;
+ // Magearna and doubles Dragonite, though these can work well as a general rule
+ if (move.id === 'terablast' && (
+ species.id === 'porygon2' || moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa)
+ ) return false;
+ return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
+ });
+ if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime') {
+ evs.atk = 0;
+ ivs.atk = 0;
+ }
+
+ if (moves.has('gyroball') || moves.has('trickroom')) {
+ evs.spe = 0;
+ ivs.spe = 0;
+ }
+
+ // Enforce Tera Type after all set generation is done to prevent infinite generation
+ if (this.forceTeraType) teraType = this.forceTeraType;
+
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+ return {
+ name: species.baseSpecies,
+ species: forme,
+ gender: species.baseSpecies === 'Greninja' ? 'M' : species.gender,
+ shiny: this.randomChance(1, 1024),
+ level,
+ moves: shuffledMoves,
+ ability,
+ evs,
+ ivs,
+ item,
+ teraType,
+ role,
+ };
+ }
+
+ randomCAPSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./sets.json');
+
+ randomTeam() {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const seed = this.prng.seed;
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+ const pokemon: RandomTeamsTypes.RandomSet[] = [];
+
+ // For Monotype
+ const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
+ const isDoubles = false;
+ const typePool = this.dex.types.names().filter(name => name !== "Stellar");
+ const type = this.forceMonotype || this.sample(typePool);
+
+ const baseFormes: {[k: string]: number} = {};
+
+ const typeCount: {[k: string]: number} = {};
+ const typeComboCount: {[k: string]: number} = {};
+ const typeWeaknesses: {[k: string]: number} = {};
+ const typeDoubleWeaknesses: {[k: string]: number} = {};
+ const teamDetails: RandomTeamsTypes.TeamDetails = {};
+ let numMaxLevelPokemon = 0;
+
+ const pokemonList = Object.keys(this.randomSets);
+ const capPokemonList = Object.keys(this.randomCAPSets);
+
+ const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);
+ const [capPokemonPool, capBaseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, capPokemonList);
+
+ let leadsRemaining = 1;
+ while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
+ let baseSpecies, species;
+ // Always generate a CAP Pokemon in slot 2; other slots can randomly generate CAP Pokemon.
+ if ((pokemon.length === 1 || this.randomChance(1, 5)) && capBaseSpeciesPool.length) {
+ baseSpecies = this.sampleNoReplace(capBaseSpeciesPool);
+ species = this.dex.species.get(this.sample(capPokemonPool[baseSpecies]));
+ } else {
+ baseSpecies = this.sampleNoReplace(baseSpeciesPool);
+ species = this.dex.species.get(this.sample(pokemonPool[baseSpecies]));
+ }
+ if (!species.exists) continue;
+
+ // Limit to one of each species (Species Clause)
+ if (baseFormes[species.baseSpecies]) continue;
+
+ // Treat Ogerpon formes and Terapagos like the Tera Blast user role; reject if team has one already
+ if ((species.baseSpecies === 'Ogerpon' || species.baseSpecies === 'Terapagos') && teamDetails.teraBlast) continue;
+
+ // Illusion shouldn't be on the last slot
+ if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue;
+
+ const types = species.types;
+ const typeCombo = types.slice().sort().join();
+ const weakToFreezeDry = (
+ this.dex.getEffectiveness('Ice', species) > 0 ||
+ (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water'))
+ );
+ // Dynamically scale limits for different team sizes. The default and minimum value is 1.
+ const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
+
+ if (!isMonotype && !this.forceMonotype) {
+ let skip = false;
+
+ // Limit two of any type
+ for (const typeName of types) {
+ if (typeCount[typeName] >= 2 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (skip) continue;
+
+ // Limit three weak to any type, and one double weak to any type
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;
+ if (typeWeaknesses[typeName] >= 3 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0;
+ if (typeDoubleWeaknesses[typeName] >= 1 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ if (skip) continue;
+
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (
+ this.dex.getEffectiveness('Fire', species) === 0 &&
+ Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length
+ ) {
+ if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0;
+ if (typeWeaknesses['Fire'] >= 3 * limitFactor) continue;
+ }
+
+ // Limit four weak to Freeze-Dry
+ if (weakToFreezeDry) {
+ if (!typeWeaknesses['Freeze-Dry']) typeWeaknesses['Freeze-Dry'] = 0;
+ if (typeWeaknesses['Freeze-Dry'] >= 4 * limitFactor) continue;
+ }
+
+ // Limit one level 100 Pokemon
+ if (!this.adjustLevel && (this.getLevel(species, isDoubles) === 100) && numMaxLevelPokemon >= limitFactor) {
+ continue;
+ }
+ }
+
+ // Limit three of any type combination in Monotype
+ if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue;
+
+ let set: RandomTeamsTypes.RandomSet;
+
+ if (leadsRemaining) {
+ if (NO_LEAD_POKEMON.includes(species.baseSpecies)) {
+ if (pokemon.length + leadsRemaining === this.maxTeamSize) continue;
+ set = this.randomCAPSet(species, teamDetails, false, isDoubles);
+ pokemon.push(set);
+ } else {
+ set = this.randomCAPSet(species, teamDetails, true, isDoubles);
+ pokemon.unshift(set);
+ leadsRemaining--;
+ }
+ } else {
+ set = this.randomCAPSet(species, teamDetails, false, isDoubles);
+ pokemon.push(set);
+ }
+
+ // Don't bother tracking details for the last Pokemon
+ if (pokemon.length === this.maxTeamSize) break;
+
+ // Now that our Pokemon has passed all checks, we can increment our counters
+ baseFormes[species.baseSpecies] = 1;
+
+ // Increment type counters
+ for (const typeName of types) {
+ if (typeName in typeCount) {
+ typeCount[typeName]++;
+ } else {
+ typeCount[typeName] = 1;
+ }
+ }
+ if (typeCombo in typeComboCount) {
+ typeComboCount[typeCombo]++;
+ } else {
+ typeComboCount[typeCombo] = 1;
+ }
+
+ // Increment weakness counter
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ typeWeaknesses[typeName]++;
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ typeDoubleWeaknesses[typeName]++;
+ }
+ }
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) {
+ typeWeaknesses['Fire']++;
+ }
+ if (weakToFreezeDry) typeWeaknesses['Freeze-Dry']++;
+
+ // Increment level 100 counter
+ if (set.level === 100) numMaxLevelPokemon++;
+
+ // Track what the team has
+ if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1;
+ if (set.ability === 'Drought' || set.ability === 'Orichalcum Pulse' || set.moves.includes('sunnyday')) {
+ teamDetails.sun = 1;
+ }
+ if (set.ability === 'Sand Stream') teamDetails.sand = 1;
+ if (set.ability === 'Snow Warning' || set.moves.includes('snowscape') || set.moves.includes('chillyreception')) {
+ teamDetails.snow = 1;
+ }
+ if (set.moves.includes('healbell')) teamDetails.statusCure = 1;
+ if (set.moves.includes('spikes') || set.moves.includes('ceaselessedge')) {
+ teamDetails.spikes = (teamDetails.spikes || 0) + 1;
+ }
+ if (set.moves.includes('toxicspikes') || set.ability === 'Toxic Debris') teamDetails.toxicSpikes = 1;
+ if (set.moves.includes('stealthrock') || set.moves.includes('stoneaxe')) teamDetails.stealthRock = 1;
+ if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1;
+ if (set.moves.includes('defog')) teamDetails.defog = 1;
+ if (set.moves.includes('rapidspin') || set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1;
+ if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) {
+ teamDetails.screens = 1;
+ }
+ if (set.role === 'Tera Blast user' || species.baseSpecies === "Ogerpon" || species.baseSpecies === "Terapagos") {
+ teamDetails.teraBlast = 1;
+ }
+ }
+ if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { // large teams sometimes cannot be built
+ throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
+ }
+
+ return pokemon;
+ }
+}
+
+export default RandomCAPTeams;
diff --git a/data/random-battles/randomroulette/teams.ts b/data/random-battles/randomroulette/teams.ts
new file mode 100644
index 000000000000..47379682cddb
--- /dev/null
+++ b/data/random-battles/randomroulette/teams.ts
@@ -0,0 +1,5 @@
+import RandomTeams from '../gen9/teams';
+
+export class RandomRandomRouletteTeams extends RandomTeams {}
+
+export default RandomRandomRouletteTeams;
diff --git a/data/mods/sharedpower/random-teams.ts b/data/random-battles/sharedpower/teams.ts
similarity index 68%
rename from data/mods/sharedpower/random-teams.ts
rename to data/random-battles/sharedpower/teams.ts
index db19a3c76ce9..0163a1bef994 100644
--- a/data/mods/sharedpower/random-teams.ts
+++ b/data/random-battles/sharedpower/teams.ts
@@ -1,4 +1,4 @@
-import RandomTeams from '../../random-teams';
+import RandomTeams from '../gen9/teams';
export class RandomSharedPowerTeams extends RandomTeams {}
diff --git a/data/random-sets.json b/data/random-sets.json
deleted file mode 100644
index b00736d25803..000000000000
--- a/data/random-sets.json
+++ /dev/null
@@ -1,4150 +0,0 @@
-{
- "charizard": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Earthquake", "Flamethrower", "Focus Blast", "Hurricane", "Will-O-Wisp"],
- "teraTypes": ["Fire", "Ground", "Water"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Dragon Dance", "Earthquake", "Flare Blitz", "Swords Dance", "Thunder Punch"],
- "teraTypes": ["Fire", "Ground"]
- }
- ]
- },
- "pikachu": {
- "level": 93,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Fake Out", "Play Rough", "Surf", "Volt Switch", "Volt Tackle"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "raichu": {
- "level": 88,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Encore", "Focus Blast", "Grass Knot", "Nasty Plot", "Nuzzle", "Surf", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Water", "Grass"]
- }
- ]
- },
- "raichualola": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Focus Blast", "Grass Knot", "Nasty Plot", "Psychic", "Psyshock", "Surf", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Water", "Grass", "Fighting"]
- }
- ]
- },
- "wigglytuff": {
- "level": 94,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Dazzling Gleam", "Fire Blast", "Light Screen", "Protect", "Reflect", "Stealth Rock", "Thunder Wave", "Wish"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "venomoth": {
- "level": 85,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Bug Buzz", "Quiver Dance", "Sleep Powder", "Sludge Bomb", "Substitute"],
- "teraTypes": ["Bug", "Poison"]
- }
- ]
- },
- "dugtrio": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Earthquake", "Memento", "Stealth Rock", "Stone Edge", "Sucker Punch", "Swords Dance"],
- "teraTypes": ["Ground", "Ghost", "Fairy", "Flying", "Dark"]
- }
- ]
- },
- "dugtrioalola": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Earthquake", "Iron Head", "Stealth Rock", "Stone Edge", "Sucker Punch", "Swords Dance"],
- "teraTypes": ["Ground", "Steel"]
- }
- ]
- },
- "persian": {
- "level": 92,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Aerial Ace", "Bite", "Body Slam", "Fake Out", "Foul Play", "Gunk Shot", "Switcheroo", "U-turn"],
- "teraTypes": ["Normal", "Poison", "Flying"]
- }
- ]
- },
- "persianalola": {
- "level": 87,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Dark Pulse", "Hypnosis", "Nasty Plot", "Power Gem", "Thunderbolt"],
- "teraTypes": ["Dark", "Electric"]
- }
- ]
- },
- "golduck": {
- "level": 90,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Encore", "Grass Knot", "Hydro Pump", "Ice Beam", "Nasty Plot", "Psyshock"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "annihilape": {
- "level": 77,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Bulk Up", "Drain Punch", "Rage Fist", "Rest"],
- "teraTypes": ["Ghost", "Water", "Fairy", "Steel"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Bulk Up", "Drain Punch", "Gunk Shot", "Rage Fist", "Stone Edge", "Taunt"],
- "teraTypes": ["Ghost", "Water", "Fairy", "Steel"]
- }
- ]
- },
- "arcanine": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Morning Sun", "Roar", "Wild Charge", "Will-O-Wisp"],
- "teraTypes": ["Fighting", "Normal"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Morning Sun", "Wild Charge"],
- "teraTypes": ["Fighting", "Normal"]
- }
- ]
- },
- "arcaninehisui": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Extreme Speed", "Flare Blitz", "Head Smash", "Morning Sun", "Wild Charge"],
- "teraTypes": ["Rock"]
- }
- ]
- },
- "slowbro": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Calm Mind", "Psyshock", "Slack Off", "Surf", "Thunder Wave"],
- "teraTypes": ["Water", "Fairy"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["Body Press", "Fire Blast", "Future Sight", "Ice Beam", "Psychic", "Surf"],
- "teraTypes": ["Fighting", "Water"]
- }
- ]
- },
- "slowbrogalar": {
- "level": 86,
- "sets": [
- {
- "role": "AV Pivot",
- "movepool": ["Earthquake", "Fire Blast", "Foul Play", "Psychic", "Shell Side Arm", "Surf"],
- "teraTypes": ["Ground", "Water", "Poison", "Dark"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Fire Blast", "Psyshock", "Sludge Bomb", "Trick", "Trick Room"],
- "teraTypes": ["Psychic", "Poison"]
- }
- ]
- },
- "muk": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Fire Punch", "Gunk Shot", "Haze", "Ice Punch", "Shadow Sneak", "Toxic", "Toxic Spikes"],
- "teraTypes": ["Poison", "Dark"]
- }
- ]
- },
- "mukalola": {
- "level": 84,
- "sets": [
- {
- "role": "AV Pivot",
- "movepool": ["Fire Punch", "Gunk Shot", "Ice Punch", "Knock Off", "Poison Jab"],
- "teraTypes": ["Dark"]
- }
- ]
- },
- "cloyster": {
- "level": 78,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Drill Run", "Icicle Spear", "Rock Blast", "Shell Smash"],
- "teraTypes": ["Ground"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Hydro Pump", "Icicle Spear", "Rock Blast", "Shell Smash"],
- "teraTypes": ["Ice", "Rock"]
- }
- ]
- },
- "gengar": {
- "level": 81,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Focus Blast", "Nasty Plot", "Shadow Ball", "Sludge Bomb", "Trick"],
- "teraTypes": ["Ghost"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Encore", "Focus Blast", "Shadow Ball", "Sludge Bomb", "Toxic Spikes", "Will-O-Wisp"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "hypno": {
- "level": 93,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Encore", "Focus Blast", "Foul Play", "Light Screen", "Psychic", "Reflect", "Thunder Wave"],
- "teraTypes": ["Dark", "Steel"]
- }
- ]
- },
- "electrode": {
- "level": 92,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Explosion", "Foul Play", "Taunt", "Thunder Wave", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Electric"]
- }
- ]
- },
- "electrodehisui": {
- "level": 88,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Energy Ball", "Leaf Storm", "Taunt", "Thunder Wave", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Grass"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Giga Drain", "Leech Seed", "Substitute", "Thunderbolt"],
- "teraTypes": ["Poison"]
- }
- ]
- },
- "scyther": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Aerial Ace", "Close Combat", "Pounce", "Swords Dance", "U-turn"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "tauros": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Body Slam", "Close Combat", "Earthquake", "Rock Slide", "Zen Headbutt"],
- "teraTypes": ["Normal", "Fighting", "Ground"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Close Combat", "Double-Edge", "Earthquake", "Stone Edge"],
- "teraTypes": ["Normal", "Fighting", "Ground"]
- }
- ]
- },
- "taurospaldeacombat": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Bulk Up", "Raging Bull", "Stone Edge", "Substitute"],
- "teraTypes": ["Fighting"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Iron Head", "Stone Edge"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "taurospaldeablaze": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Bulk Up", "Close Combat", "Raging Bull", "Substitute"],
- "teraTypes": ["Fire"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Close Combat", "Flare Blitz", "Stone Edge", "Wild Charge"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "taurospaldeaaqua": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Bulk Up", "Close Combat", "Liquidation", "Substitute"],
- "teraTypes": ["Water"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Aqua Jet", "Bulk Up", "Close Combat", "Liquidation", "Stone Edge", "Wave Crash"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "gyarados": {
- "level": 79,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Dragon Dance", "Earthquake", "Stone Edge", "Waterfall"],
- "teraTypes": ["Ground"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Dragon Dance", "Earthquake", "Tera Blast", "Waterfall"],
- "teraTypes": ["Flying"]
- }
- ]
- },
- "ditto": {
- "level": 87,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Transform"],
- "teraTypes": ["Flying", "Dark", "Fire", "Bug", "Water", "Ice", "Fighting", "Electric", "Psychic", "Poison", "Grass", "Ghost", "Ground", "Rock", "Fairy", "Steel", "Normal", "Dragon"]
- }
- ]
- },
- "vaporeon": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Calm Mind", "Ice Beam", "Protect", "Surf", "Wish"],
- "teraTypes": ["Ghost", "Ground"]
- }
- ]
- },
- "jolteon": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Calm Mind", "Hyper Voice", "Shadow Ball", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Electric", "Ghost"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Calm Mind", "Substitute", "Tera Blast", "Thunderbolt"],
- "teraTypes": ["Ice"]
- }
- ]
- },
- "flareon": {
- "level": 89,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Facade", "Flare Blitz", "Quick Attack", "Trailblaze", "Will-O-Wisp"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "articuno": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Air Slash", "Freeze-Dry", "Haze", "Hurricane", "Roost", "Substitute", "U-turn"],
- "teraTypes": ["Flying", "Steel", "Ground"]
- }
- ]
- },
- "articunogalar": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Air Slash", "Calm Mind", "Freezing Glare", "Hurricane", "Recover"],
- "teraTypes": ["Psychic", "Steel"]
- }
- ]
- },
- "zapdos": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Discharge", "Heat Wave", "Hurricane", "Roost", "U-turn"],
- "teraTypes": ["Electric"]
- }
- ]
- },
- "zapdosgalar": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Brave Bird", "Bulk Up", "Close Combat", "Stomping Tantrum", "U-turn"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "moltres": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Brave Bird", "Fire Blast", "Roost", "U-turn", "Will-O-Wisp"],
- "teraTypes": ["Fire", "Ground"]
- }
- ]
- },
- "moltresgalar": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Agility", "Fiery Wrath", "Hurricane", "Nasty Plot", "Rest"],
- "teraTypes": ["Dark"]
- }
- ]
- },
- "dragonite": {
- "level": 75,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Dragon Dance", "Earthquake", "Extreme Speed", "Fire Punch", "Outrage"],
- "teraTypes": ["Normal"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Dragon Dance", "Earthquake", "Outrage", "Tera Blast"],
- "teraTypes": ["Flying"]
- }
- ]
- },
- "mewtwo": {
- "level": 72,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Aura Sphere", "Fire Blast", "Nasty Plot", "Psystrike", "Recover", "Shadow Ball"],
- "teraTypes": ["Psychic", "Fighting", "Fire", "Ghost"]
- }
- ]
- },
- "mew": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Psychic", "Spikes", "Stealth Rock", "Taunt", "Thunder Wave", "Toxic Spikes", "Will-O-Wisp"],
- "teraTypes": ["Steel", "Fairy"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Brave Bird", "Close Combat", "Flare Blitz", "Leech Life", "Psychic Fangs", "Swords Dance"],
- "teraTypes": ["Fighting"]
- },
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Aura Sphere", "Dazzling Gleam", "Earth Power", "Fire Blast", "Nasty Plot", "Psyshock", "Shadow Ball"],
- "teraTypes": ["Psychic", "Fighting", "Fire", "Ghost", "Ground", "Fairy"]
- }
- ]
- },
- "typhlosion": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Eruption", "Fire Blast", "Focus Blast", "Shadow Ball"],
- "teraTypes": ["Fire", "Ghost"]
- }
- ]
- },
- "typhlosionhisui": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Calm Mind", "Flamethrower", "Shadow Ball", "Substitute", "Will-O-Wisp"],
- "teraTypes": ["Ghost"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Eruption", "Fire Blast", "Focus Blast", "Shadow Ball"],
- "teraTypes": ["Fire", "Ghost"]
- }
- ]
- },
- "ampharos": {
- "level": 88,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Agility", "Dazzling Gleam", "Focus Blast", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Electric", "Fairy"]
- }
- ]
- },
- "azumarill": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Aqua Jet", "Belly Drum", "Liquidation", "Play Rough"],
- "teraTypes": ["Water"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Aqua Jet", "Ice Spinner", "Liquidation", "Play Rough", "Superpower"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "sudowoodo": {
- "level": 91,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Earthquake", "Head Smash", "Spikes", "Stealth Rock", "Sucker Punch", "Wood Hammer"],
- "teraTypes": ["Rock", "Grass"]
- }
- ]
- },
- "jumpluff": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Acrobatics", "Leech Seed", "Strength Sap", "Substitute"],
- "teraTypes": ["Steel"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Acrobatics", "Encore", "Sleep Powder", "Strength Sap", "U-turn"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "sunflora": {
- "level": 98,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Dazzling Gleam", "Earth Power", "Leaf Storm", "Sludge Bomb"],
- "teraTypes": ["Grass", "Ground", "Fairy", "Poison"]
- }
- ]
- },
- "quagsire": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Ice Beam", "Liquidation", "Recover", "Spikes", "Toxic"],
- "teraTypes": ["Poison", "Steel", "Fairy"]
- }
- ]
- },
- "clodsire": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Curse", "Earthquake", "Gunk Shot", "Recover"],
- "teraTypes": ["Ground", "Flying"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Haze", "Poison Jab", "Recover", "Spikes", "Toxic", "Toxic Spikes"],
- "teraTypes": ["Ground", "Flying", "Steel"]
- }
- ]
- },
- "espeon": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Calm Mind", "Dazzling Gleam", "Morning Sun", "Psychic", "Shadow Ball", "Trick"],
- "teraTypes": ["Fairy", "Psychic"]
- }
- ]
- },
- "umbreon": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Foul Play", "Protect", "Thunder Wave", "Wish", "Yawn"],
- "teraTypes": ["Poison"]
- }
- ]
- },
- "slowking": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Chilly Reception", "Psyshock", "Slack Off", "Surf", "Thunder Wave"],
- "teraTypes": ["Water", "Fairy", "Dragon"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Fire Blast", "Hydro Pump", "Ice Beam", "Psychic", "Psyshock", "Trick Room"],
- "teraTypes": ["Water", "Psychic"]
- }
- ]
- },
- "slowkinggalar": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Chilly Reception", "Fire Blast", "Psyshock", "Slack Off", "Sludge Bomb", "Thunder Wave"],
- "teraTypes": ["Poison", "Dark"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["Fire Blast", "Future Sight", "Ice Beam", "Psyshock", "Sludge Bomb"],
- "teraTypes": ["Poison", "Psychic"]
- }
- ]
- },
- "girafarig": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Dazzling Gleam", "Nasty Plot", "Psychic", "Psyshock", "Shadow Ball", "Thunderbolt"],
- "teraTypes": ["Psychic", "Fairy", "Electric"]
- }
- ]
- },
- "forretress": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Body Press", "Iron Head", "Rapid Spin", "Spikes", "Stealth Rock", "Volt Switch"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "dunsparce": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Body Slam", "Coil", "Earthquake", "Roost"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "qwilfish": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Destiny Bond", "Gunk Shot", "Spikes", "Taunt", "Thunder Wave", "Toxic Spikes", "Waterfall"],
- "teraTypes": ["Water", "Dark"]
- }
- ]
- },
- "qwilfishhisui": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Crunch", "Gunk Shot", "Spikes", "Taunt", "Toxic Spikes"],
- "teraTypes": ["Poison", "Flying"]
- }
- ]
- },
- "overqwil": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Aqua Jet", "Crunch", "Gunk Shot", "Liquidation", "Swords Dance"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "scizor": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Bullet Punch", "Close Combat", "Defog", "U-turn"],
- "teraTypes": ["Steel"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Bullet Punch", "Close Combat", "Pounce", "Swords Dance"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "heracross": {
- "level": 82,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Close Combat", "Facade", "Throat Chop", "Trailblaze"],
- "teraTypes": ["Normal"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Earthquake", "Megahorn", "Stone Edge", "Throat Chop"],
- "teraTypes": ["Rock", "Bug", "Fighting"]
- }
- ]
- },
- "ursaring": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Body Slam", "Crunch", "Earthquake", "Rest", "Sleep Talk"],
- "teraTypes": ["Ground", "Ghost"]
- }
- ]
- },
- "delibird": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Brave Bird", "Drill Run", "Ice Shard", "Ice Spinner"],
- "teraTypes": ["Ice", "Flying", "Ground"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Freeze-Dry", "Memento", "Rapid Spin", "Spikes"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "houndoom": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Dark Pulse", "Fire Blast", "Nasty Plot", "Sludge Bomb", "Sucker Punch"],
- "teraTypes": ["Dark", "Poison", "Fire"]
- }
- ]
- },
- "donphan": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Ice Spinner", "Knock Off", "Rapid Spin", "Stealth Rock"],
- "teraTypes": ["Grass", "Ghost"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Earthquake", "Gunk Shot", "Ice Shard", "Ice Spinner", "Knock Off", "Rapid Spin", "Stone Edge"],
- "teraTypes": ["Ice", "Poison", "Dark"]
- }
- ]
- },
- "blissey": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Seismic Toss", "Soft-Boiled", "Stealth Rock", "Thunder Wave"],
- "teraTypes": ["Steel", "Fairy", "Ghost", "Poison"]
- }
- ]
- },
- "tyranitar": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Crunch", "Dragon Dance", "Earthquake", "Fire Punch", "Stone Edge"],
- "teraTypes": ["Rock", "Ghost"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Crunch", "Earthquake", "Fire Blast", "Ice Beam", "Stealth Rock", "Stone Edge", "Thunder Wave"],
- "teraTypes": ["Rock", "Poison"]
- }
- ]
- },
- "pelipper": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Hurricane", "Hydro Pump", "Ice Beam", "Knock Off", "Roost", "Surf", "U-turn"],
- "teraTypes": ["Water", "Ground"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Hurricane", "Hydro Pump", "Ice Beam", "Surf", "U-turn"],
- "teraTypes": ["Water", "Flying"]
- }
- ]
- },
- "gardevoir": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Calm Mind", "Focus Blast", "Healing Wish", "Moonblast", "Mystical Fire", "Psychic", "Psyshock", "Trick"],
- "teraTypes": ["Fairy", "Fire", "Fighting"]
- }
- ]
- },
- "masquerain": {
- "level": 88,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Bug Buzz", "Hurricane", "Hydro Pump", "Quiver Dance"],
- "teraTypes": ["Water"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Bug Buzz", "Hurricane", "Hydro Pump", "Ice Beam", "Sticky Web", "Stun Spore", "U-turn"],
- "teraTypes": ["Ground", "Steel"]
- }
- ]
- },
- "breloom": {
- "level": 81,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Bullet Seed", "Close Combat", "Mach Punch", "Rock Tomb", "Spore", "Swords Dance"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "vigoroth": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Body Slam", "Bulk Up", "Earthquake", "Slack Off", "Throat Chop"],
- "teraTypes": ["Ghost", "Ground"]
- }
- ]
- },
- "slaking": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Body Slam", "Earthquake", "Giga Impact", "Throat Chop"],
- "teraTypes": ["Normal", "Ground", "Ghost"]
- }
- ]
- },
- "hariyama": {
- "level": 88,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Bulk Up", "Bullet Punch", "Close Combat", "Facade", "Headlong Rush", "Knock Off"],
- "teraTypes": ["Normal"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["Bullet Punch", "Close Combat", "Headlong Rush", "Heavy Slam", "Knock Off"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "sableye": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Encore", "Foul Play", "Knock Off", "Recover", "Taunt", "Thunder Wave", "Will-O-Wisp"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "medicham": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Bullet Punch", "Close Combat", "Ice Punch", "Poison Jab", "Zen Headbutt"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "swalot": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Encore", "Ice Beam", "Pain Split", "Protect", "Sludge Bomb", "Toxic", "Toxic Spikes"],
- "teraTypes": ["Dark"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Earthquake", "Gunk Shot", "Seed Bomb", "Swords Dance"],
- "teraTypes": ["Poison", "Ground", "Grass", "Dark"]
- }
- ]
- },
- "camerupt": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Lava Plume", "Stealth Rock", "Yawn"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "torkoal": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Lava Plume", "Rapid Spin", "Solar Beam", "Stealth Rock", "Yawn"],
- "teraTypes": ["Dragon", "Fire"]
- }
- ]
- },
- "grumpig": {
- "level": 91,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Dazzling Gleam", "Earth Power", "Focus Blast", "Nasty Plot", "Psychic", "Psyshock", "Shadow Ball", "Trick"],
- "teraTypes": ["Psychic", "Fairy", "Ground", "Ghost", "Fighting"]
- }
- ]
- },
- "cacturne": {
- "level": 91,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Dark Pulse", "Focus Blast", "Leaf Storm", "Sucker Punch", "Toxic Spikes"],
- "teraTypes": ["Dark", "Poison", "Grass"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Drain Punch", "Seed Bomb", "Sucker Punch", "Swords Dance"],
- "teraTypes": ["Dark", "Fighting"]
- }
- ]
- },
- "altaria": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Brave Bird", "Defog", "Earthquake", "Haze", "Roost", "Will-O-Wisp"],
- "teraTypes": ["Steel"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Brave Bird", "Dragon Dance", "Earthquake", "Roost"],
- "teraTypes": ["Flying", "Ground"]
- }
- ]
- },
- "zangoose": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Facade", "Night Slash", "Quick Attack", "Swords Dance"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "seviper": {
- "level": 91,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Earthquake", "Flamethrower", "Giga Drain", "Glare", "Gunk Shot", "Switcheroo"],
- "teraTypes": ["Ground", "Fire", "Poison", "Grass"]
- }
- ]
- },
- "whiscash": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Liquidation", "Spikes", "Stealth Rock", "Stone Edge"],
- "teraTypes": ["Ground", "Steel"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Dragon Dance", "Earthquake", "Liquidation", "Stone Edge"],
- "teraTypes": ["Ground", "Water"]
- }
- ]
- },
- "banette": {
- "level": 93,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Gunk Shot", "Knock Off", "Shadow Claw", "Shadow Sneak", "Swords Dance", "Thunder Wave", "Will-O-Wisp"],
- "teraTypes": ["Poison", "Dark"]
- }
- ]
- },
- "tropius": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Air Slash", "Leech Seed", "Protect", "Substitute"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "glalie": {
- "level": 94,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Disable", "Earthquake", "Freeze-Dry", "Spikes", "Taunt"],
- "teraTypes": ["Poison", "Steel", "Water", "Ground"]
- }
- ]
- },
- "luvdisc": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Charm", "Ice Beam", "Protect", "Surf", "Wish"],
- "teraTypes": ["Dragon", "Ghost"]
- }
- ]
- },
- "salamence": {
- "level": 78,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Dragon Dance", "Dual Wingbeat", "Earthquake", "Outrage", "Roost"],
- "teraTypes": ["Flying", "Ground", "Dragon"]
- }
- ]
- },
- "kyogre": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Calm Mind", "Ice Beam", "Origin Pulse", "Thunder", "Water Spout"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "groudon": {
- "level": 74,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Lava Plume", "Precipice Blades", "Spikes", "Stealth Rock", "Stone Edge", "Thunder Wave"],
- "teraTypes": ["Fire", "Dragon", "Water", "Ghost"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Fire Punch", "Precipice Blades", "Stone Edge", "Swords Dance", "Thunder Wave"],
- "teraTypes": ["Ground", "Fire"]
- }
- ]
- },
- "rayquaza": {
- "level": 72,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Dragon Ascent", "Dragon Dance", "Earthquake", "Extreme Speed", "Swords Dance", "U-turn"],
- "teraTypes": ["Flying", "Normal"]
- }
- ]
- },
- "staraptor": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Brave Bird", "Close Combat", "Double-Edge", "Quick Attack", "U-turn"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "kricketune": {
- "level": 95,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Brick Break", "Pounce", "Sticky Web", "Taunt"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "luxray": {
- "level": 88,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Crunch", "Facade", "Play Rough", "Trailblaze", "Wild Charge"],
- "teraTypes": ["Normal"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["Crunch", "Ice Fang", "Play Rough", "Volt Switch", "Wild Charge"],
- "teraTypes": ["Electric", "Fairy"]
- }
- ]
- },
- "vespiquen": {
- "level": 96,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Air Slash", "Roost", "Spikes", "Toxic", "Toxic Spikes", "U-turn"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "pachirisu": {
- "level": 94,
- "sets": [
- {
- "role": "AV Pivot",
- "movepool": ["Nuzzle", "Super Fang", "Thunderbolt", "U-turn"],
- "teraTypes": ["Flying"]
- }
- ]
- },
- "floatzel": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Aqua Jet", "Crunch", "Ice Spinner", "Low Kick", "Wave Crash"],
- "teraTypes": ["Water"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Bulk Up", "Ice Spinner", "Liquidation", "Tera Blast"],
- "teraTypes": ["Electric", "Grass"]
- }
- ]
- },
- "gastrodon": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Clear Smog", "Earthquake", "Ice Beam", "Recover", "Stealth Rock", "Surf"],
- "teraTypes": ["Steel", "Poison"]
- }
- ]
- },
- "drifblim": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Air Slash", "Defog", "Shadow Ball", "Strength Sap", "Will-O-Wisp"],
- "teraTypes": ["Ghost", "Fairy"]
- },
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Air Slash", "Calm Mind", "Shadow Ball", "Strength Sap"],
- "teraTypes": ["Ghost", "Fairy"]
- }
- ]
- },
- "mismagius": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Dazzling Gleam", "Energy Ball", "Mystical Fire", "Nasty Plot", "Shadow Ball", "Thunderbolt", "Trick"],
- "teraTypes": ["Ghost", "Fire", "Fairy", "Electric"]
- }
- ]
- },
- "honchkrow": {
- "level": 86,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Brave Bird", "Heat Wave", "Sucker Punch", "U-turn"],
- "teraTypes": ["Dark", "Flying"]
- }
- ]
- },
- "skuntank": {
- "level": 87,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Crunch", "Fire Blast", "Gunk Shot", "Sucker Punch", "Taunt", "Toxic Spikes"],
- "teraTypes": ["Dark", "Poison"]
- }
- ]
- },
- "bronzong": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Hypnosis", "Iron Head", "Light Screen", "Psychic", "Reflect", "Stealth Rock"],
- "teraTypes": ["Water", "Electric"]
- }
- ]
- },
- "spiritomb": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Foul Play", "Pain Split", "Shadow Sneak", "Sucker Punch", "Will-O-Wisp"],
- "teraTypes": ["Dark"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Dark Pulse", "Rest", "Sleep Talk"],
- "teraTypes": ["Dark", "Steel"]
- }
- ]
- },
- "garchomp": {
- "level": 77,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Draco Meteor", "Earthquake", "Fire Blast", "Spikes", "Stealth Rock", "Stone Edge"],
- "teraTypes": ["Ground", "Steel"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Earthquake", "Fire Fang", "Outrage", "Stone Edge", "Swords Dance"],
- "teraTypes": ["Ground", "Dragon"]
- }
- ]
- },
- "lucario": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Extreme Speed", "Meteor Mash", "Stone Edge", "Swords Dance"],
- "teraTypes": ["Normal"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Aura Sphere", "Dark Pulse", "Flash Cannon", "Focus Blast", "Nasty Plot", "Vacuum Wave"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "hippowdon": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Slack Off", "Stealth Rock", "Stone Edge", "Whirlwind", "Yawn"],
- "teraTypes": ["Fairy", "Rock", "Steel"]
- }
- ]
- },
- "toxicroak": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Gunk Shot", "Ice Punch", "Sucker Punch", "Swords Dance"],
- "teraTypes": ["Dark", "Fighting"]
- }
- ]
- },
- "lumineon": {
- "level": 92,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Dazzling Gleam", "Encore", "Hydro Pump", "Ice Beam", "U-turn"],
- "teraTypes": ["Water", "Fairy"]
- }
- ]
- },
- "abomasnow": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Aurora Veil", "Blizzard", "Earthquake", "Ice Shard", "Wood Hammer"],
- "teraTypes": ["Ice", "Water"]
- }
- ]
- },
- "weavile": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Ice Shard", "Ice Spinner", "Low Kick", "Night Slash", "Swords Dance"],
- "teraTypes": ["Ice", "Fighting"]
- }
- ]
- },
- "sneasler": {
- "level": 76,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Dire Claw", "Gunk Shot", "Night Slash", "U-turn"],
- "teraTypes": ["Dark", "Fighting"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Acrobatics", "Close Combat", "Gunk Shot", "Swords Dance"],
- "teraTypes": ["Flying"]
- }
- ]
- },
- "magnezone": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Body Press", "Flash Cannon", "Mirror Coat", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Electric", "Water", "Flying"]
- }
- ]
- },
- "leafeon": {
- "level": 88,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Double-Edge", "Leaf Blade", "Substitute", "Swords Dance", "Synthesis", "X-Scissor"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "glaceon": {
- "level": 92,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Calm Mind", "Freeze-Dry", "Protect", "Wish", "Yawn"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "gallade": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Leaf Blade", "Night Slash", "Psycho Cut", "Sacred Sword", "Swords Dance"],
- "teraTypes": ["Fighting", "Grass", "Dark"]
- }
- ]
- },
- "froslass": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Destiny Bond", "Ice Beam", "Shadow Ball", "Spikes", "Taunt", "Will-O-Wisp"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "rotom": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Nasty Plot", "Shadow Ball", "Thunderbolt", "Trick", "Volt Switch", "Will-O-Wisp"],
- "teraTypes": ["Ghost", "Electric"]
- }
- ]
- },
- "rotomwash": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Discharge", "Hydro Pump", "Nasty Plot", "Trick", "Volt Switch", "Will-O-Wisp"],
- "teraTypes": ["Water", "Electric"]
- }
- ]
- },
- "rotomheat": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Nasty Plot", "Overheat", "Thunderbolt", "Trick", "Volt Switch", "Will-O-Wisp"],
- "teraTypes": ["Fire", "Electric"]
- }
- ]
- },
- "rotomfrost": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Blizzard", "Nasty Plot", "Thunderbolt", "Volt Switch", "Will-O-Wisp"],
- "teraTypes": ["Electric"]
- }
- ]
- },
- "rotomfan": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Air Slash", "Nasty Plot", "Thunderbolt", "Volt Switch", "Will-O-Wisp"],
- "teraTypes": ["Electric"]
- }
- ]
- },
- "rotommow": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Leaf Storm", "Nasty Plot", "Thunderbolt", "Trick", "Volt Switch", "Will-O-Wisp"],
- "teraTypes": ["Grass", "Electric"]
- }
- ]
- },
- "uxie": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Encore", "Light Screen", "Psychic", "Reflect", "Stealth Rock", "Thunder Wave", "U-turn", "Yawn"],
- "teraTypes": ["Steel", "Electric"]
- }
- ]
- },
- "mesprit": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Dazzling Gleam", "Energy Ball", "Healing Wish", "Ice Beam", "Nasty Plot", "Psychic", "Thunderbolt", "U-turn"],
- "teraTypes": ["Psychic", "Fairy", "Electric"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Encore", "Psychic", "Stealth Rock", "Thunder Wave", "Thunderbolt", "U-turn"],
- "teraTypes": ["Electric"]
- }
- ]
- },
- "azelf": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Explosion", "Fire Blast", "Psychic", "Stealth Rock", "Taunt", "U-turn"],
- "teraTypes": ["Psychic", "Fire"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Dazzling Gleam", "Energy Ball", "Fire Blast", "Nasty Plot", "Psychic", "Psyshock", "Trick", "U-turn"],
- "teraTypes": ["Psychic", "Fairy", "Fire"]
- }
- ]
- },
- "dialga": {
- "level": 75,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Draco Meteor", "Fire Blast", "Flash Cannon", "Stealth Rock", "Thunder Wave", "Thunderbolt"],
- "teraTypes": ["Dragon", "Steel", "Fire"]
- }
- ]
- },
- "dialgaorigin": {
- "level": 75,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Draco Meteor", "Fire Blast", "Flash Cannon", "Stealth Rock", "Thunder Wave"],
- "teraTypes": ["Dragon", "Steel", "Fire"]
- }
- ]
- },
- "palkia": {
- "level": 75,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Draco Meteor", "Fire Blast", "Hydro Pump", "Spacial Rend"],
- "teraTypes": ["Dragon", "Water"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Draco Meteor", "Fire Blast", "Hydro Pump", "Spacial Rend", "Thunder Wave"],
- "teraTypes": ["Dragon", "Water"]
- }
- ]
- },
- "palkiaorigin": {
- "level": 73,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Draco Meteor", "Fire Blast", "Hydro Pump", "Spacial Rend", "Thunder Wave"],
- "teraTypes": ["Dragon", "Water"]
- }
- ]
- },
- "heatran": {
- "level": 79,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earth Power", "Flash Cannon", "Lava Plume", "Magma Storm", "Stealth Rock"],
- "teraTypes": ["Flying", "Grass", "Steel"]
- }
- ]
- },
- "giratina": {
- "level": 76,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Dragon Tail", "Rest", "Shadow Ball", "Sleep Talk", "Will-O-Wisp"],
- "teraTypes": ["Ghost"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Dragon Pulse", "Rest", "Sleep Talk"],
- "teraTypes": ["Dragon"]
- }
- ]
- },
- "giratinaorigin": {
- "level": 74,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Defog", "Draco Meteor", "Dragon Tail", "Earthquake", "Outrage", "Shadow Ball", "Shadow Sneak", "Will-O-Wisp"],
- "teraTypes": ["Dragon", "Ghost"]
- }
- ]
- },
- "cresselia": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Moonblast", "Moonlight", "Psychic", "Psyshock", "Thunderbolt"],
- "teraTypes": ["Fairy", "Electric", "Poison", "Steel"]
- }
- ]
- },
- "arceus": {
- "level": 69,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Earthquake", "Extreme Speed", "Recover", "Shadow Claw", "Swords Dance"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "arceusbug": {
- "level": 72,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Calm Mind", "Earth Power", "Ice Beam", "Judgment"],
- "teraTypes": ["Ground"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover"],
- "teraTypes": ["Fire"]
- }
- ]
- },
- "arceusdark": {
- "level": 70,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover", "Sludge Bomb"],
- "teraTypes": ["Ghost", "Poison", "Fire"]
- }
- ]
- },
- "arceusdragon": {
- "level": 70,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Earthquake", "Extreme Speed", "Gunk Shot", "Outrage", "Swords Dance"],
- "teraTypes": ["Ground"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Sludge Bomb"],
- "teraTypes": ["Fire"]
- }
- ]
- },
- "arceuselectric": {
- "level": 70,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Ice Beam", "Judgment", "Recover"],
- "teraTypes": ["Electric", "Ice"]
- }
- ]
- },
- "arceusfairy": {
- "level": 70,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover"],
- "teraTypes": ["Steel", "Ground", "Fire"]
- }
- ]
- },
- "arceusfighting": {
- "level": 68,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Body Press", "Cosmic Power", "Recover", "Stored Power"],
- "teraTypes": ["Steel", "Psychic"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Calm Mind", "Judgment", "Recover", "Shadow Ball"],
- "teraTypes": ["Steel", "Ghost"]
- }
- ]
- },
- "arceusfire": {
- "level": 72,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Earthquake", "Extreme Speed", "Flare Blitz", "Liquidation", "Recover", "Swords Dance"],
- "teraTypes": ["Fire", "Ground", "Water"]
- },
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Calm Mind", "Earth Power", "Ice Beam", "Judgment", "Recover", "Thunderbolt"],
- "teraTypes": ["Ground", "Electric"]
- }
- ]
- },
- "arceusflying": {
- "level": 69,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover"],
- "teraTypes": ["Steel", "Ground"]
- }
- ]
- },
- "arceusghost": {
- "level": 70,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Focus Blast", "Hex", "Recover", "Will-O-Wisp"],
- "teraTypes": ["Fighting", "Normal"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Focus Blast", "Judgment", "Recover"],
- "teraTypes": ["Fighting", "Normal", "Ghost"]
- }
- ]
- },
- "arceusgrass": {
- "level": 72,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Calm Mind", "Earth Power", "Ice Beam", "Judgment"],
- "teraTypes": ["Ground"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover"],
- "teraTypes": ["Fire"]
- }
- ]
- },
- "arceusground": {
- "level": 70,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Fire Blast", "Ice Beam", "Judgment", "Recover"],
- "teraTypes": ["Ground", "Dragon"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Earthquake", "Extreme Speed", "Stone Edge", "Swords Dance"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "arceusice": {
- "level": 72,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover", "Thunderbolt"],
- "teraTypes": ["Electric", "Ground"]
- }
- ]
- },
- "arceuspoison": {
- "level": 72,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Earthquake", "Flare Blitz", "Gunk Shot", "Liquidation", "Recover", "Swords Dance"],
- "teraTypes": ["Ground", "Fire", "Water"]
- }
- ]
- },
- "arceuspsychic": {
- "level": 68,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Body Press", "Cosmic Power", "Recover", "Stored Power"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "arceusrock": {
- "level": 72,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover"],
- "teraTypes": ["Ground", "Dragon"]
- }
- ]
- },
- "arceussteel": {
- "level": 70,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover", "Will-O-Wisp"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "arceuswater": {
- "level": 70,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Ice Beam", "Judgment", "Recover", "Taunt", "Will-O-Wisp"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "samurott": {
- "level": 88,
- "sets": [
- {
- "role": "AV Pivot",
- "movepool": ["Aqua Jet", "Grass Knot", "Hydro Pump", "Ice Beam", "Knock Off", "Megahorn", "Sacred Sword"],
- "teraTypes": ["Water", "Dark"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Aqua Jet", "Knock Off", "Liquidation", "Megahorn", "Sacred Sword", "Swords Dance"],
- "teraTypes": ["Water", "Dark"]
- }
- ]
- },
- "samurotthisui": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Aqua Jet", "Ceaseless Edge", "Razor Shell", "Sucker Punch", "Swords Dance", "X-Scissor"],
- "teraTypes": ["Water", "Dark"]
- }
- ]
- },
- "lilligant": {
- "level": 86,
- "sets": [
- {
- "role": "Tera Blast user",
- "movepool": ["Giga Drain", "Pollen Puff", "Quiver Dance", "Sleep Powder", "Tera Blast"],
- "teraTypes": ["Fire", "Rock"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Petal Dance", "Pollen Puff", "Quiver Dance", "Sleep Powder"],
- "teraTypes": ["Grass"]
- }
- ]
- },
- "lilliganthisui": {
- "level": 80,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Close Combat", "Ice Spinner", "Leaf Blade", "Sleep Powder", "Victory Dance"],
- "teraTypes": ["Fighting"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Close Combat", "Defog", "Ice Spinner", "Leaf Blade", "Sleep Powder"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "basculin": {
- "level": 86,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Aqua Jet", "Crunch", "Head Smash", "Psychic Fangs", "Wave Crash"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "basculinbluestriped": {
- "level": 86,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Aqua Jet", "Crunch", "Head Smash", "Psychic Fangs", "Wave Crash"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "basculegion": {
- "level": 69,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Aqua Jet", "Head Smash", "Last Respects", "Wave Crash"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "basculegionf": {
- "level": 70,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Hydro Pump", "Ice Beam", "Last Respects", "Wave Crash"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "krookodile": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Bulk Up", "Crunch", "Earthquake", "Gunk Shot", "Stealth Rock", "Stone Edge"],
- "teraTypes": ["Poison", "Ground"]
- }
- ]
- },
- "zoroark": {
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Dark Pulse", "Flamethrower", "Focus Blast", "Nasty Plot", "Sludge Bomb", "Trick", "U-turn"],
- "teraTypes": ["Poison"]
- }
- ]
- },
- "zoroarkhisui": {
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Bitter Malice", "Flamethrower", "Focus Blast", "Hyper Voice", "Nasty Plot", "Shadow Ball", "Trick", "U-turn"],
- "teraTypes": ["Normal", "Fighting"]
- }
- ]
- },
- "gothitelle": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Nasty Plot", "Psychic", "Shadow Ball", "Thunderbolt", "Trick"],
- "teraTypes": ["Psychic", "Ghost", "Electric"]
- }
- ]
- },
- "sawsbuck": {
- "level": 88,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Double-Edge", "Headbutt", "Horn Leech", "Stomping Tantrum", "Swords Dance"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "amoonguss": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Clear Smog", "Giga Drain", "Sludge Bomb", "Spore", "Toxic"],
- "teraTypes": ["Steel", "Water"]
- }
- ]
- },
- "alomomola": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Body Slam", "Liquidation", "Mirror Coat", "Protect", "Wish"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "eelektross": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Coil", "Drain Punch", "Fire Punch", "Liquidation", "Wild Charge"],
- "teraTypes": ["Electric", "Fighting"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["Close Combat", "Flamethrower", "Giga Drain", "Thunderbolt", "U-turn"],
- "teraTypes": ["Electric"]
- }
- ]
- },
- "haxorus": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Dragon Dance", "Earthquake", "Iron Head", "Outrage"],
- "teraTypes": ["Fighting", "Ground", "Steel"]
- }
- ]
- },
- "beartic": {
- "level": 90,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Aqua Jet", "Close Combat", "Earthquake", "Icicle Crash", "Snowscape", "Swords Dance"],
- "teraTypes": ["Fighting", "Ice", "Ground"]
- }
- ]
- },
- "cryogonal": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Flash Cannon", "Freeze-Dry", "Haze", "Rapid Spin", "Recover"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "braviary": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Brave Bird", "Bulk Up", "Close Combat", "Roost"],
- "teraTypes": ["Flying", "Fighting"]
- }
- ]
- },
- "braviaryhisui": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Agility", "Heat Wave", "Hurricane", "Psychic"],
- "teraTypes": ["Psychic", "Fairy", "Steel", "Fire"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Calm Mind", "Defog", "Esper Wing", "Heat Wave", "Hurricane", "U-turn"],
- "teraTypes": ["Psychic", "Fairy", "Steel"]
- }
- ]
- },
- "hydreigon": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Dark Pulse", "Draco Meteor", "Fire Blast", "Flash Cannon", "Nasty Plot", "U-turn"],
- "teraTypes": ["Dark", "Dragon", "Fire", "Steel"]
- }
- ]
- },
- "volcarona": {
- "level": 77,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Bug Buzz", "Fiery Dance", "Fire Blast", "Giga Drain", "Morning Sun", "Quiver Dance"],
- "teraTypes": ["Fire", "Grass", "Water"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Bug Buzz", "Fiery Dance", "Fire Blast", "Giga Drain", "Quiver Dance", "Tera Blast"],
- "teraTypes": ["Ground", "Water"]
- }
- ]
- },
- "tornadus": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Bleakwind Storm", "Focus Blast", "Grass Knot", "Heat Wave", "Nasty Plot", "U-turn"],
- "teraTypes": ["Flying", "Fire"]
- }
- ]
- },
- "tornadustherian": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Bleakwind Storm", "Focus Blast", "Grass Knot", "Heat Wave", "Nasty Plot", "U-turn"],
- "teraTypes": ["Flying", "Fire"]
- }
- ]
- },
- "thundurus": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Focus Blast", "Grass Knot", "Nasty Plot", "Sludge Bomb", "Taunt", "Thunder Wave", "Thunderbolt", "U-turn"],
- "teraTypes": ["Electric", "Grass"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Focus Blast", "Nasty Plot", "Tera Blast", "Thunderbolt"],
- "teraTypes": ["Flying"]
- }
- ]
- },
- "thundurustherian": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Focus Blast", "Grass Knot", "Nasty Plot", "Psychic", "Sludge Bomb", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Electric", "Psychic", "Poison"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Focus Blast", "Nasty Plot", "Tera Blast", "Thunderbolt"],
- "teraTypes": ["Flying"]
- }
- ]
- },
- "landorus": {
- "level": 76,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Earth Power", "Focus Blast", "Nasty Plot", "Psychic", "Rock Slide", "Sludge Bomb", "Stealth Rock"],
- "teraTypes": ["Ground", "Psychic", "Poison"]
- }
- ]
- },
- "landorustherian": {
- "level": 78,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Earthquake", "Stealth Rock", "Stone Edge", "Taunt", "U-turn"],
- "teraTypes": ["Ground"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Earthquake", "Stone Edge", "Swords Dance", "Tera Blast"],
- "teraTypes": ["Flying"]
- }
- ]
- },
- "meloetta": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Calm Mind", "Focus Blast", "Hyper Voice", "Psyshock", "U-turn"],
- "teraTypes": ["Normal", "Psychic", "Fighting"]
- }
- ]
- },
- "chesnaught": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Body Press", "Leech Seed", "Spikes", "Spiky Shield", "Synthesis", "Wood Hammer"],
- "teraTypes": ["Steel", "Water"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Body Press", "Iron Defense", "Synthesis", "Trailblaze"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "delphox": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Fire Blast", "Focus Blast", "Grass Knot", "Nasty Plot", "Psyshock"],
- "teraTypes": ["Fire", "Psychic", "Grass", "Fighting"]
- }
- ]
- },
- "greninja": {
- "level": 81,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Dark Pulse", "Grass Knot", "Gunk Shot", "Hydro Pump", "Ice Beam", "Toxic Spikes", "U-turn"],
- "teraTypes": ["Water", "Dark", "Poison"]
- }
- ]
- },
- "talonflame": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Brave Bird", "Defog", "Overheat", "Roost", "Taunt", "U-turn", "Will-O-Wisp"],
- "teraTypes": ["Water", "Ground"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Brave Bird", "Flare Blitz", "Swords Dance", "Tera Blast"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "vivillon": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Bug Buzz", "Energy Ball", "Hurricane", "Quiver Dance", "Sleep Powder", "Substitute"],
- "teraTypes": ["Flying"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Hurricane", "Quiver Dance", "Sleep Powder", "Substitute", "Tera Blast"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "pyroar": {
- "level": 88,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Dark Pulse", "Fire Blast", "Hyper Voice", "Will-O-Wisp", "Work Up"],
- "teraTypes": ["Fire"]
- }
- ]
- },
- "florges": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Moonblast", "Protect", "Wish"],
- "teraTypes": ["Steel"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Calm Mind", "Moonblast", "Synthesis", "Tera Blast"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "gogoat": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Bulk Up", "Earthquake", "Horn Leech", "Milk Drink"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "dragalge": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Draco Meteor", "Focus Blast", "Sludge Bomb", "Thunderbolt", "Toxic", "Toxic Spikes"],
- "teraTypes": ["Dragon", "Poison"]
- }
- ]
- },
- "clawitzer": {
- "level": 86,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "U-turn", "Water Pulse"],
- "teraTypes": ["Dark", "Dragon", "Fighting"]
- }
- ]
- },
- "sylveon": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Hyper Voice", "Protect", "Wish"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "hawlucha": {
- "level": 82,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Acrobatics", "Brave Bird", "Close Combat", "Stone Edge", "Swords Dance"],
- "teraTypes": ["Fighting", "Flying"]
- }
- ]
- },
- "dedenne": {
- "level": 88,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Dazzling Gleam", "Nuzzle", "Super Fang", "Thunderbolt", "U-turn"],
- "teraTypes": ["Electric"]
- }
- ]
- },
- "carbink": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Body Press", "Moonblast", "Power Gem", "Spikes", "Stealth Rock"],
- "teraTypes": ["Fighting"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Body Press", "Light Screen", "Moonblast", "Reflect", "Stealth Rock"],
- "teraTypes": ["Water", "Steel"]
- }
- ]
- },
- "goodra": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Draco Meteor", "Dragon Tail", "Earthquake", "Fire Blast", "Power Whip", "Sludge Bomb", "Thunderbolt"],
- "teraTypes": ["Dragon", "Ground", "Fire", "Grass", "Poison", "Electric"]
- }
- ]
- },
- "goodrahisui": {
- "level": 84,
- "sets": [
- {
- "role": "AV Pivot",
- "movepool": ["Draco Meteor", "Dragon Tail", "Earthquake", "Fire Blast", "Heavy Slam", "Hydro Pump", "Thunderbolt"],
- "teraTypes": ["Dragon", "Ground", "Fire", "Steel", "Water", "Electric"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Body Press", "Curse", "Heavy Slam", "Rest"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "klefki": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Magnet Rise", "Play Rough", "Spikes", "Thunder Wave"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "avalugg": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Avalanche", "Body Press", "Curse", "Rapid Spin", "Recover"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "avalugghisui": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Avalanche", "Body Press", "Curse", "Recover", "Stone Edge"],
- "teraTypes": ["Poison", "Flying"]
- }
- ]
- },
- "noivern": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Boomburst", "Draco Meteor", "Flamethrower", "Hurricane", "Roost", "U-turn"],
- "teraTypes": ["Normal"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Defog", "Draco Meteor", "Flamethrower", "Roost", "Taunt"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "diancie": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Body Press", "Diamond Storm", "Earth Power", "Moonblast", "Stealth Rock"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "hoopa": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Focus Blast", "Nasty Plot", "Psyshock", "Shadow Ball", "Substitute", "Trick"],
- "teraTypes": ["Psychic", "Ghost", "Fighting"]
- }
- ]
- },
- "hoopaunbound": {
- "level": 80,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Drain Punch", "Gunk Shot", "Hyperspace Fury", "Trick", "Zen Headbutt"],
- "teraTypes": ["Dark", "Fighting", "Poison"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Focus Blast", "Gunk Shot", "Hyperspace Fury", "Psychic", "Trick"],
- "teraTypes": ["Fighting", "Poison"]
- }
- ]
- },
- "volcanion": {
- "level": 79,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Earth Power", "Flame Charge", "Flamethrower", "Haze", "Sludge Bomb", "Steam Eruption"],
- "teraTypes": ["Water", "Fire", "Ground"]
- }
- ]
- },
- "decidueye": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Defog", "Knock Off", "Leaf Storm", "Roost", "Spirit Shackle", "U-turn"],
- "teraTypes": ["Dark", "Ghost", "Grass"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Leaf Blade", "Shadow Sneak", "Spirit Shackle", "Swords Dance"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "decidueyehisui": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Defog", "Leaf Blade", "Sucker Punch", "Swords Dance", "Synthesis", "Triple Arrows", "U-turn"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "gumshoos": {
- "level": 92,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Body Slam", "Crunch", "Earthquake", "Psychic Fangs", "U-turn"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "crabominable": {
- "level": 90,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Close Combat", "Drain Punch", "Earthquake", "Gunk Shot", "Ice Hammer"],
- "teraTypes": ["Fighting", "Ground"]
- }
- ]
- },
- "oricorio": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Defog", "Hurricane", "Quiver Dance", "Revelation Dance", "Roost"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "oricoriopompom": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Defog", "Hurricane", "Quiver Dance", "Revelation Dance", "Roost"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "oricoriopau": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Defog", "Hurricane", "Quiver Dance", "Revelation Dance", "Roost"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "oricoriosensu": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Defog", "Hurricane", "Quiver Dance", "Revelation Dance", "Roost"],
- "teraTypes": ["Ghost", "Fighting"]
- }
- ]
- },
- "lycanroc": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Accelerock", "Close Combat", "Crunch", "Drill Run", "Psychic Fangs", "Stealth Rock", "Stone Edge", "Swords Dance", "Taunt"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "lycanrocmidnight": {
- "level": 88,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Psychic Fangs", "Stealth Rock", "Stone Edge", "Swords Dance"],
- "teraTypes": ["Rock", "Fighting"]
- }
- ]
- },
- "lycanrocdusk": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Accelerock", "Close Combat", "Crunch", "Drill Run", "Psychic Fangs", "Stone Edge", "Swords Dance"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "toxapex": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Haze", "Liquidation", "Recover", "Toxic", "Toxic Spikes"],
- "teraTypes": ["Steel", "Flying", "Grass", "Fairy"]
- }
- ]
- },
- "mudsdale": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Body Press", "Earthquake", "Heavy Slam", "Stealth Rock", "Stone Edge"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "lurantis": {
- "level": 91,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Defog", "Leaf Storm", "Pollen Puff", "Synthesis"],
- "teraTypes": ["Steel", "Water"]
- }
- ]
- },
- "salazzle": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Flamethrower", "Protect", "Substitute", "Toxic"],
- "teraTypes": ["Water", "Flying"]
- }
- ]
- },
- "tsareena": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["High Jump Kick", "Play Rough", "Power Whip", "Rapid Spin", "Synthesis", "U-turn"],
- "teraTypes": ["Fighting", "Steel"]
- }
- ]
- },
- "oranguru": {
- "level": 91,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Focus Blast", "Nasty Plot", "Psychic", "Psyshock", "Thunderbolt"],
- "teraTypes": ["Psychic", "Electric", "Fighting"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Focus Blast", "Hyper Voice", "Psyshock", "Thunderbolt", "Trick", "Trick Room"],
- "teraTypes": ["Psychic", "Electric", "Fighting"]
- }
- ]
- },
- "passimian": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Earthquake", "Gunk Shot", "Knock Off", "Rock Slide", "U-turn"],
- "teraTypes": ["Dark"]
- }
- ]
- },
- "palossand": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earth Power", "Hypnosis", "Shadow Ball", "Shore Up", "Stealth Rock"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "komala": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Body Slam", "Earthquake", "Gunk Shot", "Play Rough", "Rapid Spin", "Sucker Punch", "Superpower", "U-turn", "Wood Hammer"],
- "teraTypes": ["Normal", "Ground", "Poison", "Fairy", "Fighting", "Grass"]
- }
- ]
- },
- "mimikyu": {
- "level": 79,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Drain Punch", "Play Rough", "Shadow Claw", "Shadow Sneak", "Swords Dance", "Wood Hammer"],
- "teraTypes": ["Fighting", "Grass", "Fairy", "Ghost"]
- }
- ]
- },
- "bruxish": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Aqua Jet", "Crunch", "Ice Fang", "Psychic Fangs", "Swords Dance", "Wave Crash"],
- "teraTypes": ["Dark", "Psychic"]
- }
- ]
- },
- "magearna": {
- "level": 78,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Aura Sphere", "Flash Cannon", "Fleur Cannon", "Pain Split", "Spikes", "Volt Switch"],
- "teraTypes": ["Fairy", "Steel", "Fighting", "Water"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Flash Cannon", "Fleur Cannon", "Shift Gear"],
- "teraTypes": ["Water", "Steel", "Fairy", "Flying"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Fleur Cannon", "Iron Head", "Shift Gear", "Tera Blast", "Thunderbolt"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "rillaboom": {
- "level": 82,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Acrobatics", "Knock Off", "Stomping Tantrum", "Swords Dance", "Wood Hammer"],
- "teraTypes": ["Flying", "Grass"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Knock Off", "Stomping Tantrum", "U-turn", "Wood Hammer"],
- "teraTypes": ["Grass"]
- }
- ]
- },
- "cinderace": {
- "level": 78,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Court Change", "Gunk Shot", "High Jump Kick", "Pyro Ball", "Sucker Punch", "U-turn"],
- "teraTypes": ["Fire", "Fighting", "Poison"]
- }
- ]
- },
- "inteleon": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Air Slash", "Dark Pulse", "Hydro Pump", "Ice Beam", "Surf", "U-turn"],
- "teraTypes": ["Water"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Hydro Pump", "Ice Beam", "Tera Blast", "U-turn"],
- "teraTypes": ["Electric", "Grass"]
- }
- ]
- },
- "greedent": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Body Slam", "Crunch", "Earthquake", "Fire Fang", "Psychic Fangs", "Swords Dance"],
- "teraTypes": ["Ground", "Psychic"]
- }
- ]
- },
- "corviknight": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Body Press", "Brave Bird", "Bulk Up", "Defog", "Roost"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "drednaw": {
- "level": 80,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Crunch", "Earthquake", "Liquidation", "Shell Smash", "Stone Edge"],
- "teraTypes": ["Water", "Ground", "Dark"]
- }
- ]
- },
- "coalossal": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Overheat", "Rapid Spin", "Spikes", "Stealth Rock", "Stone Edge", "Will-O-Wisp"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "flapple": {
- "level": 87,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Dragon Dance", "Grav Apple", "Outrage", "Sucker Punch", "U-turn"],
- "teraTypes": ["Dragon", "Grass"]
- }
- ]
- },
- "appletun": {
- "level": 92,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Apple Acid", "Draco Meteor", "Dragon Pulse", "Leech Seed", "Recover"],
- "teraTypes": ["Grass", "Steel"]
- }
- ]
- },
- "sandaconda": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Coil", "Earthquake", "Glare", "Rest", "Stone Edge"],
- "teraTypes": ["Dragon", "Steel"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Glare", "Rest", "Stealth Rock", "Stone Edge"],
- "teraTypes": ["Dragon", "Water"]
- }
- ]
- },
- "barraskewda": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Aqua Jet", "Close Combat", "Crunch", "Liquidation", "Poison Jab", "Psychic Fangs"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "toxtricity": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Boomburst", "Overdrive", "Shift Gear", "Sludge Bomb", "Volt Switch"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "toxtricitylowkey": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Boomburst", "Overdrive", "Sludge Bomb", "Toxic Spikes", "Volt Switch"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "polteageist": {
- "level": 79,
- "sets": [
- {
- "role": "Tera Blast user",
- "movepool": ["Giga Drain", "Shadow Ball", "Shell Smash", "Stored Power", "Strength Sap", "Tera Blast"],
- "teraTypes": ["Fighting"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Giga Drain", "Shadow Ball", "Shell Smash", "Stored Power", "Strength Sap"],
- "teraTypes": ["Psychic"]
- }
- ]
- },
- "hatterene": {
- "level": 87,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Dazzling Gleam", "Mystical Fire", "Psychic", "Psyshock", "Trick", "Trick Room"],
- "teraTypes": ["Psychic", "Fairy", "Fire"]
- }
- ]
- },
- "grimmsnarl": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Light Screen", "Parting Shot", "Reflect", "Spirit Break", "Thunder Wave"],
- "teraTypes": ["Fairy"]
- },
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Bulk Up", "Crunch", "Rest", "Spirit Break", "Sucker Punch", "Thunder Wave"],
- "teraTypes": ["Dark"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Parting Shot", "Spirit Break", "Sucker Punch", "Taunt", "Thunder Wave"],
- "teraTypes": ["Fairy"]
- }
- ]
- },
- "perrserker": {
- "level": 88,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Close Combat", "Crunch", "Iron Head", "Stealth Rock", "U-turn"],
- "teraTypes": ["Steel", "Fighting"]
- }
- ]
- },
- "falinks": {
- "level": 87,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Close Combat", "Megahorn", "No Retreat", "Poison Jab", "Rock Slide"],
- "teraTypes": ["Fighting", "Ghost"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Close Combat", "No Retreat", "Poison Jab", "Tera Blast"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "pincurchin": {
- "level": 94,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Discharge", "Hydro Pump", "Spikes", "Sucker Punch", "Toxic Spikes"],
- "teraTypes": ["Electric", "Water"]
- }
- ]
- },
- "frosmoth": {
- "level": 83,
- "sets": [
- {
- "role": "Tera Blast user",
- "movepool": ["Bug Buzz", "Giga Drain", "Hurricane", "Ice Beam", "Quiver Dance", "Tera Blast"],
- "teraTypes": ["Ground"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Bug Buzz", "Giga Drain", "Hurricane", "Ice Beam", "Quiver Dance"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "stonjourner": {
- "level": 90,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Earthquake", "Heavy Slam", "Rock Polish", "Stealth Rock", "Stone Edge"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "eiscue": {
- "level": 85,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Belly Drum", "Ice Spinner", "Iron Head", "Liquidation", "Substitute", "Zen Headbutt"],
- "teraTypes": ["Water"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Belly Drum", "Ice Spinner", "Liquidation", "Substitute", "Tera Blast"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "indeedee": {
- "level": 88,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Calm Mind", "Dazzling Gleam", "Healing Wish", "Hyper Voice", "Psychic", "Psyshock", "Shadow Ball"],
- "teraTypes": ["Psychic"]
- }
- ]
- },
- "indeedeef": {
- "level": 89,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Calm Mind", "Dazzling Gleam", "Healing Wish", "Hyper Voice", "Psychic", "Psyshock", "Shadow Ball"],
- "teraTypes": ["Psychic"]
- }
- ]
- },
- "copperajah": {
- "level": 86,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Earthquake", "Iron Head", "Play Rough", "Rock Slide", "Stealth Rock", "Superpower"],
- "teraTypes": ["Steel", "Fairy"]
- }
- ]
- },
- "dragapult": {
- "level": 78,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Draco Meteor", "Fire Blast", "Shadow Ball", "Thunderbolt", "U-turn"],
- "teraTypes": ["Ghost", "Dragon"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Dragon Dance", "Dragon Darts", "Fire Blast", "Tera Blast"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "zacian": {
- "level": 70,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Crunch", "Play Rough", "Psychic Fangs", "Swords Dance", "Wild Charge"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "zaciancrowned": {
- "level": 65,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Behemoth Blade", "Close Combat", "Play Rough", "Swords Dance"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "zamazenta": {
- "level": 72,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Close Combat", "Crunch", "Iron Head", "Psychic Fangs", "Stone Edge", "Wild Charge"],
- "teraTypes": ["Fighting", "Dark"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Body Press", "Crunch", "Iron Defense", "Iron Head", "Rest", "Stone Edge"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "zamazentacrowned": {
- "level": 70,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Behemoth Bash", "Body Press", "Crunch", "Iron Defense", "Psychic Fangs", "Stone Edge"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "eternatus": {
- "level": 69,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Dynamax Cannon", "Fire Blast", "Recover", "Sludge Bomb"],
- "teraTypes": ["Dragon", "Fire"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Dynamax Cannon", "Flamethrower", "Recover", "Toxic", "Toxic Spikes"],
- "teraTypes": ["Dragon", "Water"]
- }
- ]
- },
- "urshifu": {
- "level": 75,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Poison Jab", "Sucker Punch", "Swords Dance", "U-turn", "Wicked Blow"],
- "teraTypes": ["Dark", "Fighting"]
- }
- ]
- },
- "urshifurapidstrike": {
- "level": 76,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Aqua Jet", "Close Combat", "Ice Spinner", "Surging Strikes", "Swords Dance", "U-turn"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "zarude": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Close Combat", "Crunch", "Power Whip", "Swords Dance", "Synthesis"],
- "teraTypes": ["Dark", "Grass", "Fighting"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Crunch", "Power Whip", "U-turn"],
- "teraTypes": ["Dark", "Grass", "Fighting"]
- }
- ]
- },
- "regieleki": {
- "level": 77,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Explosion", "Rapid Spin", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Electric"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Rapid Spin", "Tera Blast", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Ice"]
- }
- ]
- },
- "regidrago": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Draco Meteor", "Dragon Dance", "Earthquake", "Fire Fang", "Outrage"],
- "teraTypes": ["Dragon"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Dragon Claw", "Dragon Dance", "Earthquake", "Tera Blast"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "glastrier": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Close Combat", "Heavy Slam", "Icicle Crash", "Stomping Tantrum", "Swords Dance"],
- "teraTypes": ["Fighting", "Steel"]
- }
- ]
- },
- "spectrier": {
- "level": 75,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Dark Pulse", "Nasty Plot", "Shadow Ball", "Substitute", "Will-O-Wisp"],
- "teraTypes": ["Ghost", "Dark"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Nasty Plot", "Shadow Ball", "Substitute", "Tera Blast", "Will-O-Wisp"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "calyrex": {
- "level": 92,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Calm Mind", "Encore", "Giga Drain", "Leech Seed", "Psychic", "Psyshock"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "calyrexice": {
- "level": 73,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Agility", "Close Combat", "Glacial Lance", "Stomping Tantrum", "Trick Room", "Zen Headbutt"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "calyrexshadow": {
- "level": 64,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Astral Barrage", "Nasty Plot", "Pollen Puff", "Psyshock", "Trick"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "wyrdeer": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Body Slam", "Earthquake", "Megahorn", "Psychic", "Thunder Wave", "Thunderbolt"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "kleavor": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Close Combat", "Defog", "Stone Axe", "Swords Dance", "U-turn", "X-Scissor"],
- "teraTypes": ["Bug", "Rock", "Fighting"]
- }
- ]
- },
- "ursaluna": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Crunch", "Facade", "Headlong Rush", "Protect", "Swords Dance"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "enamorus": {
- "level": 80,
- "sets": [
- {
- "role": "Tera Blast user",
- "movepool": ["Play Rough", "Superpower", "Taunt", "Tera Blast"],
- "teraTypes": ["Flying"]
- },
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Calm Mind", "Earth Power", "Moonblast", "Substitute"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "enamorustherian": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Earth Power", "Moonblast", "Mystical Fire", "Psychic", "Superpower"],
- "teraTypes": ["Fairy", "Ground"]
- }
- ]
- },
- "meowscarada": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Flower Trick", "Knock Off", "Thunder Punch", "Toxic Spikes", "U-turn"],
- "teraTypes": ["Grass", "Dark"]
- }
- ]
- },
- "skeledirge": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Flame Charge", "Roar", "Shadow Ball", "Slack Off", "Torch Song"],
- "teraTypes": ["Ghost", "Water", "Fairy"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Hex", "Slack Off", "Torch Song", "Will-O-Wisp"],
- "teraTypes": ["Ghost", "Water", "Fairy"]
- }
- ]
- },
- "quaquaval": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Aqua Step", "Close Combat", "Ice Spinner", "Rapid Spin", "Roost", "U-turn"],
- "teraTypes": ["Water", "Fighting"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Aqua Step", "Close Combat", "Ice Spinner", "Roost", "Swords Dance"],
- "teraTypes": ["Water", "Fighting"]
- }
- ]
- },
- "oinkologne": {
- "level": 92,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Body Press", "Body Slam", "Stomping Tantrum", "Stuff Cheeks"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "oinkolognef": {
- "level": 92,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Body Press", "Body Slam", "Stomping Tantrum", "Stuff Cheeks"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "dudunsparce": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Glare", "Headbutt", "Roost"],
- "teraTypes": ["Ghost", "Ground"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Boomburst", "Calm Mind", "Earth Power", "Roost", "Shadow Ball"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "dudunsparcethreesegment": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Glare", "Headbutt", "Roost"],
- "teraTypes": ["Ghost", "Ground"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Boomburst", "Calm Mind", "Earth Power", "Roost", "Shadow Ball"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "spidops": {
- "level": 93,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Circle Throw", "Spikes", "Sticky Web", "Toxic Spikes", "U-turn"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "lokix": {
- "level": 82,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Axe Kick", "First Impression", "Leech Life", "Sucker Punch"],
- "teraTypes": ["Bug"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Axe Kick", "First Impression", "Sucker Punch", "U-turn"],
- "teraTypes": ["Bug"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Leech Life", "Sucker Punch", "Swords Dance", "Throat Chop"],
- "teraTypes": ["Dark"]
- }
- ]
- },
- "rabsca": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Bug Buzz", "Earth Power", "Psychic", "Revival Blessing", "Trick Room"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "houndstone": {
- "level": 73,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Body Press", "Last Respects", "Trick", "Will-O-Wisp"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "espathra": {
- "level": 80,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Dazzling Gleam", "Lumina Crash", "Shadow Ball", "U-turn"],
- "teraTypes": ["Psychic", "Fairy", "Ghost"]
- },
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Calm Mind", "Dazzling Gleam", "Protect", "Roost", "Stored Power", "Substitute"],
- "teraTypes": ["Fairy"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Dazzling Gleam", "Lumina Crash", "Roost", "Tera Blast"],
- "teraTypes": ["Fire", "Fighting"]
- }
- ]
- },
- "farigiraf": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Foul Play", "Hyper Voice", "Protect", "Wish"],
- "teraTypes": ["Dark"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Future Sight", "Hyper Voice", "Protect", "Wish"],
- "teraTypes": ["Ground", "Water", "Fairy"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["Dazzling Gleam", "Earthquake", "Foul Play", "Future Sight", "Hyper Voice", "Psychic"],
- "teraTypes": ["Dark"]
- }
- ]
- },
- "wugtrio": {
- "level": 90,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Aqua Jet", "Liquidation", "Memento", "Stomping Tantrum", "Sucker Punch", "Throat Chop"],
- "teraTypes": ["Water", "Dark"]
- }
- ]
- },
- "dondozo": {
- "level": 79,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Curse", "Liquidation", "Rest", "Sleep Talk", "Wave Crash"],
- "teraTypes": ["Fairy", "Ground", "Dragon"]
- }
- ]
- },
- "veluza": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Aqua Cutter", "Aqua Jet", "Night Slash", "Psycho Cut"],
- "teraTypes": ["Water"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Aqua Cutter", "Fillet Away", "Night Slash", "Psycho Cut"],
- "teraTypes": ["Water", "Psychic", "Dark"]
- }
- ]
- },
- "palafin": {
- "level": 77,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Bulk Up", "Close Combat", "Flip Turn", "Ice Punch", "Jet Punch", "Wave Crash"],
- "teraTypes": ["Water", "Fighting"]
- }
- ]
- },
- "arboliva": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Dazzling Gleam", "Earth Power", "Energy Ball", "Hyper Voice", "Strength Sap"],
- "teraTypes": ["Grass", "Fairy", "Ground"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Hyper Voice", "Leech Seed", "Protect", "Substitute"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "scovillain": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Flamethrower", "Leech Seed", "Protect", "Substitute"],
- "teraTypes": ["Steel", "Water"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Flamethrower", "Giga Drain", "Leaf Storm", "Overheat"],
- "teraTypes": ["Fire", "Grass"]
- }
- ]
- },
- "bellibolt": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Muddy Water", "Slack Off", "Thunder Wave", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Electric", "Water"]
- }
- ]
- },
- "revavroom": {
- "level": 83,
- "sets": [
- {
- "role": "Tera Blast user",
- "movepool": ["Gunk Shot", "Iron Head", "Shift Gear", "Tera Blast"],
- "teraTypes": ["Water", "Ground"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Gunk Shot", "Haze", "Parting Shot", "Spin Out", "Toxic", "Toxic Spikes"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "orthworm": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Body Press", "Coil", "Iron Tail", "Rest"],
- "teraTypes": ["Fighting", "Electric"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Body Press", "Iron Head", "Rest", "Shed Tail", "Spikes", "Stealth Rock"],
- "teraTypes": ["Electric", "Poison"]
- }
- ]
- },
- "maushold": {
- "level": 76,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Bite", "Encore", "Population Bomb", "Tidy Up"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "mausholdfour": {
- "level": 76,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Bite", "Encore", "Population Bomb", "Tidy Up"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "cetitan": {
- "level": 82,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Liquidation", "Play Rough"],
- "teraTypes": ["Water", "Fairy"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Belly Drum", "Earthquake", "Ice Shard", "Icicle Crash"],
- "teraTypes": ["Ice"]
- }
- ]
- },
- "baxcalibur": {
- "level": 76,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Earthquake", "Glaive Rush", "Ice Shard", "Icicle Crash"],
- "teraTypes": ["Dragon", "Ground"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Dragon Dance", "Earthquake", "Glaive Rush", "Icicle Crash"],
- "teraTypes": ["Dragon", "Ground"]
- }
- ]
- },
- "tatsugiri": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Draco Meteor", "Hydro Pump", "Nasty Plot", "Rapid Spin", "Surf"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "cyclizar": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Draco Meteor", "Knock Off", "Rapid Spin", "Shed Tail", "Taunt"],
- "teraTypes": ["Dragon", "Steel", "Ghost"]
- }
- ]
- },
- "pawmot": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Double Shock", "Ice Punch", "Revival Blessing", "Volt Switch"],
- "teraTypes": ["Electric"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Close Combat", "Ice Punch", "Nuzzle", "Revival Blessing", "Thunder Punch"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "kilowattrel": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Hurricane", "Roost", "Thunder Wave", "Thunderbolt", "U-turn"],
- "teraTypes": ["Flying", "Electric"]
- }
- ]
- },
- "bombirdier": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Brave Bird", "Hone Claws", "Knock Off", "Stone Edge", "Sucker Punch", "U-turn"],
- "teraTypes": ["Rock"]
- }
- ]
- },
- "squawkabilly": {
- "level": 87,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Brave Bird", "Facade", "Protect", "Quick Attack", "U-turn"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "squawkabillywhite": {
- "level": 88,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Brave Bird", "Double-Edge", "Foul Play", "Parting Shot", "Quick Attack"],
- "teraTypes": ["Flying", "Dark", "Normal"]
- }
- ]
- },
- "squawkabillyblue": {
- "level": 87,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Brave Bird", "Facade", "Protect", "Quick Attack", "U-turn"],
- "teraTypes": ["Normal"]
- }
- ]
- },
- "squawkabillyyellow": {
- "level": 88,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Brave Bird", "Double-Edge", "Foul Play", "Parting Shot", "Quick Attack"],
- "teraTypes": ["Flying", "Dark", "Normal"]
- }
- ]
- },
- "flamigo": {
- "level": 83,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Brave Bird", "Close Combat", "Swords Dance", "Throat Chop", "U-turn"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "klawf": {
- "level": 89,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Crabhammer", "High Horsepower", "Knock Off", "Stealth Rock", "Stone Edge"],
- "teraTypes": ["Water", "Ground", "Dark", "Rock"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Crabhammer", "High Horsepower", "Knock Off", "Stone Edge", "Swords Dance"],
- "teraTypes": ["Water", "Ground", "Dark", "Rock"]
- }
- ]
- },
- "garganacl": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Body Press", "Curse", "Recover", "Stone Edge"],
- "teraTypes": ["Fighting", "Fairy", "Dragon"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Earthquake", "Protect", "Recover", "Salt Cure"],
- "teraTypes": ["Ghost"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Body Press", "Recover", "Salt Cure", "Stealth Rock", "Stone Edge"],
- "teraTypes": ["Ghost"]
- }
- ]
- },
- "glimmora": {
- "level": 78,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Earth Power", "Energy Ball", "Mortal Spin", "Power Gem", "Sludge Wave", "Spikes", "Stealth Rock", "Toxic"],
- "teraTypes": ["Ground"]
- }
- ]
- },
- "grafaiai": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Gunk Shot", "Knock Off", "Super Fang", "Switcheroo", "U-turn"],
- "teraTypes": ["Dark"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Encore", "Knock Off", "Protect", "Substitute", "Toxic"],
- "teraTypes": ["Dark"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Encore", "Gunk Shot", "Knock Off", "Parting Shot"],
- "teraTypes": ["Dark"]
- }
- ]
- },
- "dachsbun": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Body Press", "Play Rough", "Protect", "Wish"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "mabosstiff": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Crunch", "Fire Fang", "Play Rough", "Psychic Fangs", "Wild Charge"],
- "teraTypes": ["Dark", "Fairy"]
- }
- ]
- },
- "brambleghast": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Power Whip", "Rapid Spin", "Shadow Sneak", "Spikes", "Strength Sap"],
- "teraTypes": ["Steel", "Water", "Fairy"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Leech Seed", "Phantom Force", "Power Whip", "Substitute"],
- "teraTypes": ["Steel", "Water", "Fairy"]
- }
- ]
- },
- "gholdengo": {
- "level": 78,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Focus Blast", "Make It Rain", "Nasty Plot", "Recover", "Shadow Ball", "Trick"],
- "teraTypes": ["Steel", "Ghost"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Make It Rain", "Recover", "Shadow Ball", "Thunder Wave"],
- "teraTypes": ["Dark", "Water", "Steel"]
- }
- ]
- },
- "greattusk": {
- "level": 78,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Ice Spinner", "Rapid Spin"],
- "teraTypes": ["Ground", "Fighting"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Close Combat", "Headlong Rush", "Ice Spinner", "Knock Off", "Rapid Spin", "Stealth Rock"],
- "teraTypes": ["Ground", "Dark"]
- }
- ]
- },
- "brutebonnet": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Close Combat", "Crunch", "Seed Bomb", "Spore", "Sucker Punch"],
- "teraTypes": ["Dark", "Fighting"]
- }
- ]
- },
- "sandyshocks": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Earth Power", "Spikes", "Stealth Rock", "Thunder Wave", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Electric", "Ground"]
- },
- {
- "role": "Tera Blast user",
- "movepool": ["Earth Power", "Tera Blast", "Thunderbolt", "Volt Switch"],
- "teraTypes": ["Flying", "Ice"]
- }
- ]
- },
- "screamtail": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Encore", "Play Rough", "Protect", "Thunder Wave", "Wish"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "fluttermane": {
- "level": 74,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Calm Mind", "Moonblast", "Mystical Fire", "Psyshock", "Shadow Ball", "Thunderbolt"],
- "teraTypes": ["Ghost", "Fairy", "Fire", "Electric", "Psychic"]
- }
- ]
- },
- "slitherwing": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Bulk Up", "Close Combat", "Earthquake", "Flame Charge", "Leech Life", "Wild Charge"],
- "teraTypes": ["Fighting", "Electric"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Close Combat", "Earthquake", "First Impression", "Flare Blitz", "U-turn", "Wild Charge"],
- "teraTypes": ["Bug", "Fighting", "Electric"]
- }
- ]
- },
- "roaringmoon": {
- "level": 74,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Crunch", "Dragon Dance", "Earthquake", "Outrage", "Roost"],
- "teraTypes": ["Dark", "Dragon", "Ground"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Crunch", "Iron Head", "Outrage", "U-turn"],
- "teraTypes": ["Dark", "Dragon", "Steel"]
- }
- ]
- },
- "walkingwake": {
- "level": 80,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Draco Meteor", "Flamethrower", "Hurricane", "Hydro Pump"],
- "teraTypes": ["Water", "Fire"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Draco Meteor", "Flamethrower", "Hydro Steam", "Sunny Day"],
- "teraTypes": ["Fire"]
- }
- ]
- },
- "irontreads": {
- "level": 78,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Earthquake", "Iron Head", "Knock Off", "Rapid Spin", "Stealth Rock", "Stone Edge", "Volt Switch"],
- "teraTypes": ["Ground", "Steel"]
- }
- ]
- },
- "ironmoth": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Discharge", "Energy Ball", "Fiery Dance", "Fire Blast", "Sludge Wave", "U-turn"],
- "teraTypes": ["Fire", "Grass"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Energy Ball", "Fiery Dance", "Morning Sun", "Sludge Wave", "Toxic Spikes", "U-turn"],
- "teraTypes": ["Fire", "Grass"]
- }
- ]
- },
- "ironhands": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Close Combat", "Drain Punch", "Fake Out", "Heavy Slam", "Ice Punch", "Thunder Punch", "Volt Switch", "Wild Charge"],
- "teraTypes": ["Electric"]
- }
- ]
- },
- "ironjugulis": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Dark Pulse", "Earth Power", "Fire Blast", "Hurricane", "Hydro Pump", "U-turn"],
- "teraTypes": ["Dark", "Flying", "Ground"]
- }
- ]
- },
- "ironthorns": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Earthquake", "Spikes", "Stealth Rock", "Stone Edge", "Thunder Punch", "Volt Switch"],
- "teraTypes": ["Grass", "Water"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Dragon Dance", "Earthquake", "Ice Punch", "Stone Edge", "Wild Charge"],
- "teraTypes": ["Rock", "Ground"]
- }
- ]
- },
- "ironbundle": {
- "level": 76,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Encore", "Flip Turn", "Freeze-Dry", "Hydro Pump", "Ice Beam", "Substitute"],
- "teraTypes": ["Water", "Ice"]
- }
- ]
- },
- "ironvaliant": {
- "level": 79,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Close Combat", "Knock Off", "Spirit Break", "Swords Dance"],
- "teraTypes": ["Dark", "Fighting"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Calm Mind", "Close Combat", "Moonblast", "Psychic"],
- "teraTypes": ["Fighting", "Fairy"]
- }
- ]
- },
- "ironleaves": {
- "level": 81,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Close Combat", "Leaf Blade", "Psyblade", "Swords Dance"],
- "teraTypes": ["Fighting"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Close Combat", "Leaf Blade", "Megahorn", "Psyblade", "Wild Charge"],
- "teraTypes": ["Fighting"]
- }
- ]
- },
- "tinglu": {
- "level": 78,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Ruination", "Spikes", "Stealth Rock", "Throat Chop", "Whirlwind"],
- "teraTypes": ["Ground", "Ghost", "Poison"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Body Press", "Earthquake", "Heavy Slam", "Ruination", "Stone Edge", "Throat Chop"],
- "teraTypes": ["Ground", "Fighting", "Steel", "Poison"]
- }
- ]
- },
- "chienpao": {
- "level": 73,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Crunch", "Ice Shard", "Ice Spinner", "Sacred Sword", "Sucker Punch", "Swords Dance"],
- "teraTypes": ["Dark", "Ice", "Fighting"]
- }
- ]
- },
- "wochien": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Energy Ball", "Knock Off", "Leech Seed", "Protect", "Ruination", "Stun Spore"],
- "teraTypes": ["Poison"]
- }
- ]
- },
- "chiyu": {
- "level": 77,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Dark Pulse", "Fire Blast", "Nasty Plot", "Psychic", "Will-O-Wisp"],
- "teraTypes": ["Dark", "Fire"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Dark Pulse", "Flamethrower", "Overheat", "Psychic"],
- "teraTypes": ["Dark", "Fire"]
- }
- ]
- },
- "koraidon": {
- "level": 66,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Collision Course", "Flare Blitz", "Outrage", "Swords Dance", "U-turn"],
- "teraTypes": ["Fire"]
- }
- ]
- },
- "miraidon": {
- "level": 66,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Calm Mind", "Draco Meteor", "Electro Drift", "Substitute"],
- "teraTypes": ["Electric"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Draco Meteor", "Electro Drift", "Overheat", "Volt Switch"],
- "teraTypes": ["Electric"]
- }
- ]
- },
- "tinkaton": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Encore", "Gigaton Hammer", "Knock Off", "Play Rough", "Stealth Rock", "Thunder Wave"],
- "teraTypes": ["Steel"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Gigaton Hammer", "Knock Off", "Play Rough", "Swords Dance"],
- "teraTypes": ["Steel"]
- }
- ]
- },
- "armarouge": {
- "level": 82,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Armor Cannon", "Aura Sphere", "Energy Ball", "Focus Blast", "Psyshock"],
- "teraTypes": ["Fire", "Fighting", "Psychic", "Grass"]
- }
- ]
- },
- "ceruledge": {
- "level": 78,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Bitter Blade", "Close Combat", "Shadow Sneak", "Swords Dance"],
- "teraTypes": ["Fire", "Fighting"]
- }
- ]
- },
- "toedscruel": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earth Power", "Giga Drain", "Knock Off", "Leaf Storm", "Rapid Spin", "Spore", "Toxic"],
- "teraTypes": ["Water"]
- }
- ]
- },
- "kingambit": {
- "level": 77,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Iron Head", "Kowtow Cleave", "Stealth Rock", "Sucker Punch", "Swords Dance"],
- "teraTypes": ["Dark", "Flying"]
- }
- ]
- }
-}
diff --git a/data/random-teams.ts b/data/random-teams.ts
deleted file mode 100644
index 1dd4892acd30..000000000000
--- a/data/random-teams.ts
+++ /dev/null
@@ -1,2202 +0,0 @@
-import {Dex, toID} from '../sim/dex';
-import {Utils} from '../lib';
-import {PRNG, PRNGSeed} from '../sim/prng';
-import {RuleTable} from '../sim/dex-formats';
-import {Tags} from './tags';
-
-export interface TeamData {
- typeCount: {[k: string]: number};
- typeComboCount: {[k: string]: number};
- baseFormes: {[k: string]: number};
- megaCount?: number;
- zCount?: number;
- has: {[k: string]: number};
- forceResult: boolean;
- weaknesses: {[k: string]: number};
- resistances: {[k: string]: number};
- weather?: string;
- eeveeLimCount?: number;
- gigantamax?: boolean;
-}
-export interface BattleFactorySpecies {
- flags: {limEevee?: 1};
- sets: BattleFactorySet[];
-}
-interface BattleFactorySet {
- species: string;
- item: string;
- ability: string;
- nature: string;
- moves: string[];
- evs?: Partial;
- ivs?: Partial;
-}
-export class MoveCounter extends Utils.Multiset {
- damagingMoves: Set;
- stabCounter: number;
- ironFist: number;
-
- constructor() {
- super();
- this.damagingMoves = new Set();
- this.stabCounter = 0;
- this.ironFist = 0;
- }
-
- get(key: string): number {
- return super.get(key) || 0;
- }
-}
-
-type MoveEnforcementChecker = (
- movePool: string[], moves: Set, abilities: Set, types: string[],
- counter: MoveCounter, species: Species, teamDetails: RandomTeamsTypes.TeamDetails,
- isLead: boolean, isDoubles: boolean, teraType: string, role: string,
-) => boolean;
-
-// Moves that restore HP:
-const RecoveryMove = [
- 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis',
-];
-// Moves that drop stats:
-const ContraryMoves = [
- 'armorcannon', 'closecombat', 'leafstorm', 'makeitrain', 'overheat', 'spinout', 'superpower', 'vcreate',
-];
-// Moves that boost Attack:
-const PhysicalSetup = [
- 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'swordsdance', 'tidyup', 'victorydance',
-];
-// Moves which boost Special Attack:
-const SpecialSetup = [
- 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', 'torchsong',
-];
-// Moves that boost Attack AND Special Attack:
-const MixedSetup = [
- 'clangoroussoul', 'growth', 'happyhour', 'holdhands', 'noretreat', 'shellsmash', 'workup',
-];
-// Some moves that only boost Speed:
-const SpeedSetup = [
- 'agility', 'autotomize', 'rockpolish',
-];
-// Conglomerate for ease of access
-const Setup = [
- 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'coil', 'curse', 'dragondance', 'flamecharge',
- 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', 'quiverdance', 'rockpolish',
- 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'tidyup', 'trailblaze', 'workup', 'victorydance',
-];
-// Moves that shouldn't be the only STAB moves:
-const NoStab = [
- 'accelerock', 'aquajet', 'beakblast', 'bounce', 'breakingswipe', 'chatter', 'chloroblast', 'clearsmog', 'dragontail', 'eruption',
- 'explosion', 'fakeout', 'flamecharge', 'flipturn', 'iceshard', 'icywind', 'incinerate', 'machpunch', 'meteorbeam',
- 'mortalspin', 'pluck', 'pursuit', 'quickattack', 'rapidspin', 'reversal', 'selfdestruct', 'shadowsneak',
- 'skydrop', 'snarl', 'suckerpunch', 'uturn', 'watershuriken', 'vacuumwave', 'voltswitch', 'waterspout',
-];
-// Hazard-setting moves
-const Hazards = [
- 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes',
-];
-
-// Moves that should be paired together when possible
-const MovePairs = [
- ['lightscreen', 'reflect'],
- ['sleeptalk', 'rest'],
- ['protect', 'wish'],
- ['leechseed', 'protect'],
-];
-
-/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */
-const priorityPokemon = [
- 'banette', 'breloom', 'brutebonnet', 'cacturne', 'giratinaorigin', 'lycanrocdusk', 'mimikyu', 'scizor',
-];
-
-/** Pokemon who should never be in the lead slot */
-const noLeadPokemon = [
- 'Basculegion', 'Houndstone', 'Rillaboom', 'Zacian', 'Zamazenta',
-];
-
-function sereneGraceBenefits(move: Move) {
- return move.secondary?.chance && move.secondary.chance > 20 && move.secondary.chance < 100;
-}
-
-export class RandomTeams {
- dex: ModdedDex;
- gen: number;
- factoryTier: string;
- format: Format;
- prng: PRNG;
- noStab: string[];
- readonly maxTeamSize: number;
- readonly adjustLevel: number | null;
- readonly maxMoveCount: number;
- readonly forceMonotype: string | undefined;
-
- /**
- * Checkers for move enforcement based on types or other factors
- *
- * returns true to try to force the move type, false otherwise.
- */
- moveEnforcementCheckers: {[k: string]: MoveEnforcementChecker};
-
- constructor(format: Format | string, prng: PRNG | PRNGSeed | null) {
- format = Dex.formats.get(format);
- this.dex = Dex.forFormat(format);
- this.gen = this.dex.gen;
- this.noStab = NoStab;
-
- const ruleTable = Dex.formats.getRuleTable(format);
- this.maxTeamSize = ruleTable.maxTeamSize;
- this.adjustLevel = ruleTable.adjustLevel;
- this.maxMoveCount = ruleTable.maxMoveCount;
- const forceMonotype = ruleTable.valueRules.get('forcemonotype');
- this.forceMonotype = forceMonotype && this.dex.types.get(forceMonotype).exists ?
- this.dex.types.get(forceMonotype).name : undefined;
-
- this.factoryTier = '';
- this.format = format;
- this.prng = prng && !Array.isArray(prng) ? prng : new PRNG(prng);
-
- this.moveEnforcementCheckers = {
- Bug: (movePool) => movePool.includes('megahorn'),
- Dark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'),
- Dragon: (movePool, moves, abilities, types, counter) => (
- !counter.get('Dragon') &&
- !movePool.includes('dualwingbeat')
- ),
- Electric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'),
- Fairy: (movePool, moves, abilities, types, counter) => !counter.get('Fairy'),
- Fighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'),
- Fire: (movePool, moves, abilities, types, counter, species) => !counter.get('Fire'),
- Flying: (movePool, moves, abilities, types, counter) => !counter.get('Flying'),
- Ghost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'),
- Grass: (movePool, moves, abilities, types, counter, species) => (
- !counter.get('Grass') && (
- movePool.includes('leafstorm') || species.baseStats.atk >= 100 ||
- types.includes('Electric') || abilities.has('Seed Sower')
- )
- ),
- Ground: (movePool, moves, abilities, types, counter) => !counter.get('Ground'),
- Ice: (movePool, moves, abilities, types, counter) => (movePool.includes('freezedry') || !counter.get('Ice')),
- Normal: (movePool, moves, types, counter) => (movePool.includes('boomburst') || movePool.includes('hypervoice')),
- Poison: (movePool, moves, abilities, types, counter) => {
- if (types.includes('Ground')) return false;
- return !counter.get('Poison');
- },
- Psychic: (movePool, moves, abilities, types, counter) => {
- if (counter.get('Psychic')) return false;
- if (movePool.includes('calmmind') || movePool.includes('psychicfangs') || movePool.includes('psychocut')) return true;
- return abilities.has('Psychic Surge') || types.includes('Fire') || types.includes('Electric');
- },
- Rock: (movePool, moves, abilities, types, counter, species) => !counter.get('Rock') && species.baseStats.atk >= 80,
- Steel: (movePool, moves, abilities, types, counter, species) => {
- if (species.baseStats.atk <= 95 && !movePool.includes('makeitrain')) return false;
- return !counter.get('Steel');
- },
- Water: (movePool, moves, abilities, types, counter, species) => {
- if (types.includes('Ground')) return false;
- return !counter.get('Water');
- },
- };
- }
-
- setSeed(prng?: PRNG | PRNGSeed) {
- this.prng = prng && !Array.isArray(prng) ? prng : new PRNG(prng);
- }
-
- getTeam(options?: PlayerOptions | null): PokemonSet[] {
- const generatorName = (
- typeof this.format.team === 'string' && this.format.team.startsWith('random')
- ) ? this.format.team + 'Team' : '';
- // @ts-ignore
- return this[generatorName || 'randomTeam'](options);
- }
-
- randomChance(numerator: number, denominator: number) {
- return this.prng.randomChance(numerator, denominator);
- }
-
- sample(items: readonly T[]): T {
- return this.prng.sample(items);
- }
-
- sampleIfArray(item: T | T[]): T {
- if (Array.isArray(item)) {
- return this.sample(item);
- }
- return item;
- }
-
- random(m?: number, n?: number) {
- return this.prng.next(m, n);
- }
-
- /**
- * Remove an element from an unsorted array significantly faster
- * than .splice
- */
- fastPop(list: any[], index: number) {
- // If an array doesn't need to be in order, replacing the
- // element at the given index with the removed element
- // is much, much faster than using list.splice(index, 1).
- const length = list.length;
- if (index < 0 || index >= list.length) {
- // sanity check
- throw new Error(`Index ${index} out of bounds for given array`);
- }
-
- const element = list[index];
- list[index] = list[length - 1];
- list.pop();
- return element;
- }
-
- /**
- * Remove a random element from an unsorted array and return it.
- * Uses the battle's RNG if in a battle.
- */
- sampleNoReplace(list: any[]) {
- const length = list.length;
- if (length === 0) return null;
- const index = this.random(length);
- return this.fastPop(list, index);
- }
-
- /**
- * Removes n random elements from an unsorted array and returns them.
- * If n is less than the array's length, randomly removes and returns all the elements
- * in the array (so the returned array could have length < n).
- */
- multipleSamplesNoReplace(list: T[], n: number): T[] {
- const samples = [];
- while (samples.length < n && list.length) {
- samples.push(this.sampleNoReplace(list));
- }
-
- return samples;
- }
-
- /**
- * Check if user has directly tried to ban/unban/restrict things in a custom battle.
- * Doesn't count bans nested inside other formats/rules.
- */
- private hasDirectCustomBanlistChanges() {
- if (this.format.banlist.length || this.format.restricted.length || this.format.unbanlist.length) return true;
- if (!this.format.customRules) return false;
- for (const rule of this.format.customRules) {
- for (const banlistOperator of ['-', '+', '*']) {
- if (rule.startsWith(banlistOperator)) return true;
- }
- }
- return false;
- }
-
- /**
- * Inform user when custom bans are unsupported in a team generator.
- */
- protected enforceNoDirectCustomBanlistChanges() {
- if (this.hasDirectCustomBanlistChanges()) {
- throw new Error(`Custom bans are not currently supported in ${this.format.name}.`);
- }
- }
-
- /**
- * Inform user when complex bans are unsupported in a team generator.
- */
- protected enforceNoDirectComplexBans() {
- if (!this.format.customRules) return false;
- for (const rule of this.format.customRules) {
- if (rule.includes('+') && !rule.startsWith('+')) {
- throw new Error(`Complex bans are not currently supported in ${this.format.name}.`);
- }
- }
- }
-
- /**
- * Validate set element pool size is sufficient to support size requirements after simple bans.
- */
- private enforceCustomPoolSizeNoComplexBans(
- effectTypeName: string,
- basicEffectPool: BasicEffect[],
- requiredCount: number,
- requiredCountExplanation: string
- ) {
- if (basicEffectPool.length >= requiredCount) return;
- throw new Error(`Legal ${effectTypeName} count is insufficient to support ${requiredCountExplanation} (${basicEffectPool.length} / ${requiredCount}).`);
- }
-
- queryMoves(
- moves: Set | null,
- species: Species,
- teraType: string,
- abilities: Set = new Set(),
- ): MoveCounter {
- // This is primarily a helper function for random setbuilder functions.
- const counter = new MoveCounter();
- const types = species.types;
- if (!moves?.size) return counter;
-
- const categories = {Physical: 0, Special: 0, Status: 0};
-
- // Iterate through all moves we've chosen so far and keep track of what they do:
- for (const moveid of moves) {
- const move = this.dex.moves.get(moveid);
-
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (move.damage || move.damageCallback) {
- // Moves that do a set amount of damage:
- counter.add('damage');
- counter.damagingMoves.add(move);
- } else {
- // Are Physical/Special/Status moves:
- categories[move.category]++;
- }
- // Moves that have a low base power:
- if (moveid === 'lowkick' || (move.basePower && move.basePower <= 60 && moveid !== 'rapidspin')) {
- counter.add('technician');
- }
- // Moves that hit up to 5 times:
- if (move.multihit && Array.isArray(move.multihit) && move.multihit[1] === 5) counter.add('skilllink');
- if (move.recoil || move.hasCrashDamage) counter.add('recoil');
- if (move.drain) counter.add('drain');
- // Moves which have a base power, but aren't super-weak:
- if (move.basePower > 30 || move.multihit || move.basePowerCallback) {
- if (!this.noStab.includes(moveid) || priorityPokemon.includes(species.id) && move.priority > 0) {
- counter.add(moveType);
- if (types.includes(moveType)) counter.stabCounter++;
- if (teraType === moveType) counter.add('stabtera');
- }
- if (move.flags['bite']) counter.add('strongjaw');
- if (move.flags['punch']) counter.ironFist++;
- if (move.flags['sound']) counter.add('sound');
- if (move.priority > 0 || (moveid === 'grassyglide' && abilities.has('Grassy Surge'))) {
- counter.add('priority');
- }
- counter.damagingMoves.add(move);
- }
- // Moves with secondary effects:
- if (move.secondary || move.hasSheerForce) {
- counter.add('sheerforce');
- if (sereneGraceBenefits(move)) {
- counter.add('serenegrace');
- }
- }
- // Moves with low accuracy:
- if (move.accuracy && move.accuracy !== true && move.accuracy < 90) counter.add('inaccurate');
-
- // Moves that change stats:
- if (RecoveryMove.includes(moveid)) counter.add('recovery');
- if (ContraryMoves.includes(moveid)) counter.add('contrary');
- if (PhysicalSetup.includes(moveid)) counter.add('physicalsetup');
- if (SpecialSetup.includes(moveid)) counter.add('specialsetup');
- if (MixedSetup.includes(moveid)) counter.add('mixedsetup');
- if (SpeedSetup.includes(moveid)) counter.add('speedsetup');
- if (Setup.includes(moveid)) counter.add('setup');
- if (Hazards.includes(moveid)) counter.add('hazards');
- }
-
- counter.set('Physical', Math.floor(categories['Physical']));
- counter.set('Special', Math.floor(categories['Special']));
- counter.set('Status', categories['Status']);
- return counter;
- }
-
- cullMovePool(
- types: string[],
- moves: Set,
- abilities: Set,
- counter: MoveCounter,
- movePool: string[],
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- teraType: string,
- role: string,
- ): void {
- if (moves.size + movePool.length <= this.maxMoveCount) return;
- // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
- if (moves.size === this.maxMoveCount - 2) {
- const unpairedMoves = [...movePool];
- for (const pair of MovePairs) {
- if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
- this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
- this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
- }
- }
- if (unpairedMoves.length === 1) {
- this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
- }
- }
-
- // These moves are paired, and shouldn't appear if there is not room for them both.
- if (moves.size === this.maxMoveCount - 1) {
- for (const pair of MovePairs) {
- if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
- this.fastPop(movePool, movePool.indexOf(pair[0]));
- this.fastPop(movePool, movePool.indexOf(pair[1]));
- }
- }
- }
-
- // Develop additional move lists
- const pivotingMoves = ['chillyreception', 'flipturn', 'partingshot', 'shedtail', 'teleport', 'uturn', 'voltswitch'];
- const statusMoves = this.dex.moves.all()
- .filter(move => move.category === 'Status')
- .map(move => move.id);
-
- // Team-based move culls
- if (teamDetails.stickyWeb) {
- if (movePool.includes('stickyweb')) this.fastPop(movePool, movePool.indexOf('stickyweb'));
- if (moves.size + movePool.length <= this.maxMoveCount) return;
- }
- if (teamDetails.stealthRock) {
- if (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock'));
- if (moves.size + movePool.length <= this.maxMoveCount) return;
- }
- if (teamDetails.defog || teamDetails.rapidSpin) {
- if (movePool.includes('defog')) this.fastPop(movePool, movePool.indexOf('defog'));
- if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin'));
- if (moves.size + movePool.length <= this.maxMoveCount) return;
- }
- if (teamDetails.toxicSpikes && teamDetails.toxicSpikes >= 2) {
- if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes'));
- if (moves.size + movePool.length <= this.maxMoveCount) return;
- }
- if (teamDetails.spikes && teamDetails.spikes >= 2) {
- if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes'));
- if (moves.size + movePool.length <= this.maxMoveCount) return;
- }
-
- // These moves don't mesh well with other aspects of the set
- this.incompatibleMoves(moves, movePool, statusMoves, ['healingwish', 'switcheroo', 'trick']);
- if (species.id !== "scyther" && species.id !== "scizor") {
- this.incompatibleMoves(moves, movePool, Setup, pivotingMoves);
- }
- this.incompatibleMoves(moves, movePool, Setup, Hazards);
- this.incompatibleMoves(moves, movePool, Setup, ['defog', 'nuzzle', 'toxic', 'waterspout', 'yawn', 'haze']);
- this.incompatibleMoves(moves, movePool, PhysicalSetup, PhysicalSetup);
- this.incompatibleMoves(moves, movePool, SpecialSetup, 'thunderwave');
- this.incompatibleMoves(moves, movePool, 'substitute', pivotingMoves);
- this.incompatibleMoves(moves, movePool, SpeedSetup, ['aquajet', 'rest', 'trickroom']);
- this.incompatibleMoves(moves, movePool, 'curse', 'rapidspin');
- this.incompatibleMoves(moves, movePool, 'dragondance', 'dracometeor');
- this.incompatibleMoves(moves, movePool, 'healingwish', 'uturn');
-
-
- // These attacks are redundant with each other
- this.incompatibleMoves(moves, movePool, 'psychic', 'psyshock');
- this.incompatibleMoves(moves, movePool, 'surf', 'hydropump');
- this.incompatibleMoves(moves, movePool, 'liquidation', 'wavecrash');
- this.incompatibleMoves(moves, movePool, ['airslash', 'bravebird', 'hurricane'], ['airslash', 'bravebird', 'hurricane']);
- this.incompatibleMoves(moves, movePool, ['knockoff', 'bite'], 'foulplay');
- this.incompatibleMoves(moves, movePool, 'doubleedge', 'headbutt');
- this.incompatibleMoves(moves, movePool, 'fireblast', ['fierydance', 'flamethrower']);
- this.incompatibleMoves(moves, movePool, 'lavaplume', 'magmastorm');
- this.incompatibleMoves(moves, movePool, 'thunderpunch', 'wildcharge');
- this.incompatibleMoves(moves, movePool, 'gunkshot', ['direclaw', 'poisonjab']);
- this.incompatibleMoves(moves, movePool, 'aurasphere', 'focusblast');
- this.incompatibleMoves(moves, movePool, 'closecombat', 'drainpunch');
- this.incompatibleMoves(moves, movePool, 'bugbite', 'pounce');
- this.incompatibleMoves(moves, movePool, 'bittermalice', 'shadowball');
- this.incompatibleMoves(moves, movePool, ['dragonpulse', 'spacialrend'], 'dracometeor');
-
-
- // These status moves are redundant with each other
- this.incompatibleMoves(moves, movePool, ['taunt', 'strengthsap'], 'encore');
- this.incompatibleMoves(moves, movePool, 'taunt', 'disable');
- this.incompatibleMoves(moves, movePool, 'toxic', 'willowisp');
- this.incompatibleMoves(moves, movePool, ['thunderwave', 'toxic', 'willowisp'], 'toxicspikes');
- this.incompatibleMoves(moves, movePool, 'thunderwave', 'yawn');
-
- // This space reserved for assorted hardcodes that otherwise make little sense out of context
- if (species.id === "dugtrio") {
- this.incompatibleMoves(moves, movePool, statusMoves, 'memento');
- }
- if (species.id === "cyclizar") {
- this.incompatibleMoves(moves, movePool, 'taunt', 'knockoff');
- }
- // Landorus
- this.incompatibleMoves(moves, movePool, 'nastyplot', 'rockslide');
- // Persian and Grafaiai
- this.incompatibleMoves(moves, movePool, 'switcheroo', ['fakeout', 'superfang']);
- // Beartic
- this.incompatibleMoves(moves, movePool, 'snowscape', 'swordsdance');
- // Cryogonal
- if (!teamDetails.defog && !teamDetails.rapidSpin && species.id === 'cryogonal') {
- if (movePool.includes('haze')) this.fastPop(movePool, movePool.indexOf('haze'));
- }
- // Magnezone
- this.incompatibleMoves(moves, movePool, 'bodypress', 'mirrorcoat');
- // Amoonguss, though this can work well as a general rule later
- this.incompatibleMoves(moves, movePool, 'toxic', 'clearsmog');
- }
-
- // Checks for and removes incompatible moves, starting with the first move in movesA.
- incompatibleMoves(
- moves: Set,
- movePool: string[],
- movesA: string | string[],
- movesB: string | string[],
- ): void {
- const moveArrayA = (Array.isArray(movesA)) ? movesA : [movesA];
- const moveArrayB = (Array.isArray(movesB)) ? movesB : [movesB];
- if (moves.size + movePool.length <= this.maxMoveCount) return;
- for (const moveid1 of moves) {
- if (moveArrayB.includes(moveid1)) {
- for (const moveid2 of moveArrayA) {
- if (moveid1 !== moveid2 && movePool.includes(moveid2)) {
- this.fastPop(movePool, movePool.indexOf(moveid2));
- if (moves.size + movePool.length <= this.maxMoveCount) return;
- }
- }
- }
- if (moveArrayA.includes(moveid1)) {
- for (const moveid2 of moveArrayB) {
- if (moveid1 !== moveid2 && movePool.includes(moveid2)) {
- this.fastPop(movePool, movePool.indexOf(moveid2));
- if (moves.size + movePool.length <= this.maxMoveCount) return;
- }
- }
- }
- }
- }
-
- // Adds a move to the moveset, returns the MoveCounter
- addMove(
- move: string,
- moves: Set,
- types: string[],
- abilities: Set,
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- movePool: string[],
- teraType: string,
- role: string,
- ): MoveCounter {
- moves.add(move);
- this.fastPop(movePool, movePool.indexOf(move));
- const counter = this.queryMoves(moves, species, teraType, abilities);
- this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role);
- return counter;
- }
-
- // Returns the type of a given move for STAB/coverage enforcement purposes
- getMoveType(move: Move, species: Species, abilities: Set, teraType: string): string {
- if (move.id === 'terablast') return teraType;
- if (['judgment', 'revelationdance'].includes(move.id)) return species.types[0];
-
- if (move.name === "Raging Bull" && species.name.startsWith("Tauros-Paldea")) {
- if (species.name.endsWith("Combat")) return "Fighting";
- if (species.name.endsWith("Blaze")) return "Fire";
- if (species.name.endsWith("Aqua")) return "Water";
- }
-
- const moveType = move.type;
- if (moveType === 'Normal') {
- if (abilities.has('Aerilate')) return 'Flying';
- if (abilities.has('Galvanize')) return 'Electric';
- if (abilities.has('Pixilate')) return 'Fairy';
- if (abilities.has('Refrigerate')) return 'Ice';
- }
- return moveType;
- }
-
- // Generate random moveset for a given species, role, tera type.
- randomMoveset(
- types: string[],
- abilities: Set,
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- movePool: string[],
- teraType: string,
- role: string,
- ): Set {
- const moves = new Set();
- let counter = this.queryMoves(moves, species, teraType, abilities);
- this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role);
-
- // If there are only four moves, add all moves and return early
- if (movePool.length <= this.maxMoveCount) {
- for (const moveid of movePool) {
- moves.add(moveid);
- }
- return moves;
- }
-
- const runEnforcementChecker = (checkerName: string) => {
- if (!this.moveEnforcementCheckers[checkerName]) return false;
- return this.moveEnforcementCheckers[checkerName](
- movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles, teraType, role
- );
- };
-
- if (role === "Tera Blast user") {
- counter = this.addMove('terablast', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- // Add required move (e.g. Relic Song for Meloetta-P)
- if (species.requiredMove) {
- const move = this.dex.moves.get(species.requiredMove).id;
- counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
-
- // Add other moves you really want to have, e.g. STAB, recovery, setup.
-
- // Enforce Facade if Guts is a possible ability
- if (movePool.includes('facade') && abilities.has('Guts')) {
- counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
-
- // Enforce Sticky Web
- if (movePool.includes('stickyweb')) {
- counter = this.addMove('stickyweb', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
-
- // Enforce Revival Blessing
- if (movePool.includes('revivalblessing')) {
- counter = this.addMove('revivalblessing', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
-
- // Enforce Salt Cure
- if (movePool.includes('saltcure')) {
- counter = this.addMove('saltcure', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
-
- // Enforce Toxic on Grafaiai
- if (movePool.includes('toxic') && species.id === 'grafaiai') {
- counter = this.addMove('toxic', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
-
- // Enforce STAB priority
- if (role === 'Bulky Attacker' || role === 'Bulky Setup' || priorityPokemon.includes(species.id)) {
- const priorityMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (types.includes(moveType) && move.priority > 0 && move.category !== 'Status') {
- priorityMoves.push(moveid);
- }
- }
- if (priorityMoves.length) {
- const moveid = this.sample(priorityMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce STAB
- for (const type of types) {
- // Check if a STAB move of that type should be required
- const stabMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (type === moveType &&
- (move.basePower > 30 || move.multihit || move.basePowerCallback) &&
- (!this.noStab.includes(moveid) || abilities.has('Technician') && moveid === 'machpunch')) {
- stabMoves.push(moveid);
- }
- }
- while (runEnforcementChecker(type)) {
- if (!stabMoves.length) break;
- const moveid = this.sampleNoReplace(stabMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // If no STAB move was added in the previous step, add a STAB move
- if (!counter.stabCounter) {
- const stabMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower > 30 || move.multihit || move.basePowerCallback) &&
- types.includes(moveType)) {
- stabMoves.push(moveid);
- }
- }
- if (stabMoves.length) {
- const moveid = this.sample(stabMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce Tera STAB
- if (!counter.get('stabtera') && role !== "Bulky Support" && species.baseSpecies !== 'Dudunsparce') {
- const stabMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower > 30 || move.multihit || move.basePowerCallback)) {
- if (teraType === moveType) {
- stabMoves.push(moveid);
- }
- }
- }
- if (stabMoves.length) {
- const moveid = this.sample(stabMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce recovery
- if (["Bulky Support", "Bulky Attacker", "Bulky Setup"].includes(role)) {
- const recoveryMoves = movePool.filter(moveid => RecoveryMove.includes(moveid));
- if (recoveryMoves.length) {
- const moveid = this.sample(recoveryMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce setup
- if (role.includes('Setup') || role === 'Tera Blast user') {
- // First, try to add a non-Speed setup move
- const nonSpeedSetupMoves = movePool.filter(moveid => Setup.includes(moveid) && !SpeedSetup.includes(moveid));
- if (nonSpeedSetupMoves.length) {
- const moveid = this.sample(nonSpeedSetupMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- } else {
- // No non-Speed setup moves, so add any (Speed) setup move
- const setupMoves = movePool.filter(moveid => Setup.includes(moveid));
- if (setupMoves.length) {
- const moveid = this.sample(setupMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- }
-
- // Enforce coverage move
- if (!['AV Pivot', 'Fast Support', 'Bulky Support'].includes(role)) {
- if (counter.damagingMoves.size <= 1) {
- // Find the type of the current attacking move
- let currentAttackType: string;
- for (const moveid of moves) {
- const move = this.dex.moves.get(moveid);
- if (move.basePower > 30 || move.multihit || move.basePowerCallback) {
- const moveType = this.getMoveType(move, species, abilities, teraType);
- currentAttackType = moveType;
- }
- }
- // Choose an attacking move that is of different type to the current single attack
- const coverageMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower > 30 || move.multihit || move.basePowerCallback)) {
- if (currentAttackType! !== moveType) coverageMoves.push(moveid);
- }
- }
- if (coverageMoves.length) {
- const moveid = this.sample(coverageMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- }
-
- // Add (moves.size < this.maxMoveCount) as a condition if moves is getting larger than 4 moves.
- // If you want moves to be favored but not required, add something like && this.randomChance(1, 2) to your condition.
-
- // Choose remaining moves randomly from movepool and add them to moves list:
- while (moves.size < this.maxMoveCount && movePool.length) {
- if (moves.size + movePool.length <= this.maxMoveCount) {
- for (const moveid of movePool) {
- moves.add(moveid);
- }
- break;
- }
- const moveid = this.sample(movePool);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- for (const pair of MovePairs) {
- if (moveid === pair[0] && movePool.includes(pair[1])) {
- counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- if (moveid === pair[1] && movePool.includes(pair[0])) {
- counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- }
- return moves;
- }
-
- shouldCullAbility(
- ability: string,
- types: string[],
- moves: Set,
- abilities: Set,
- counter: MoveCounter,
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- teraType: string,
- role: string,
- ): boolean {
- if ([
- 'Armor Tail', 'Battle Bond', 'Early Bird', 'Flare Boost', 'Gluttony', 'Harvest', 'Hydration', 'Ice Body', 'Immunity',
- 'Moody', 'Own Tempo', 'Pressure', 'Quick Feet', 'Rain Dish', 'Sand Veil', 'Snow Cloak', 'Steadfast', 'Steam Engine',
- ].includes(ability)) return true;
-
- switch (ability) {
- // Abilities which are primarily useful for certain moves
- case 'Contrary': case 'Serene Grace': case 'Skill Link': case 'Strong Jaw':
- return !counter.get(toID(ability));
- case 'Chlorophyll':
- return (!moves.has('sunnyday') && !teamDetails.sun && species.id !== 'lilligant');
- case 'Cloud Nine':
- return (species.id !== 'golduck');
- case 'Competitive':
- return (species.id === 'kilowattrel');
- case 'Compound Eyes': case 'No Guard':
- return !counter.get('inaccurate');
- case 'Cursed Body':
- return abilities.has('Infiltrator');
- case 'Defiant':
- return (!counter.get('Physical') || (abilities.has('Prankster') && (moves.has('thunderwave') || moves.has('taunt'))));
- case 'Flash Fire':
- return (
- ['Flame Body', 'Intimidate', 'Rock Head', 'Weak Armor'].some(m => abilities.has(m)) &&
- this.dex.getEffectiveness('Fire', species) < 0
- );
- case 'Guts':
- return (!moves.has('facade') && !moves.has('sleeptalk'));
- case 'Hustle':
- return (counter.get('Physical') < 2);
- case 'Infiltrator':
- return (isDoubles && abilities.has('Clear Body'));
- case 'Insomnia':
- return (role === 'Wallbreaker');
- case 'Intimidate':
- if (abilities.has('Hustle')) return true;
- if (abilities.has('Sheer Force') && !!counter.get('sheerforce')) return true;
- return (abilities.has('Stakeout'));
- case 'Iron Fist':
- return !counter.ironFist;
- case 'Justified':
- return !counter.get('Physical');
- case 'Mold Breaker':
- return (abilities.has('Sharpness') || abilities.has('Unburden'));
- case 'Moxie':
- return (!counter.get('Physical') || moves.has('stealthrock'));
- case 'Natural Cure':
- return species.id === 'pawmot';
- case 'Overgrow':
- return !counter.get('Grass');
- case 'Prankster':
- return !counter.get('Status');
- case 'Reckless':
- return !counter.get('recoil');
- case 'Rock Head':
- return !counter.get('recoil');
- case 'Sand Force': case 'Sand Rush':
- return !teamDetails.sand;
- case 'Sap Sipper':
- return species.id === 'wyrdeer';
- case 'Seed Sower':
- return role === 'Bulky Support';
- case 'Shed Skin':
- return species.id === 'seviper';
- case 'Sheer Force':
- const braviaryCase = (species.id === 'braviaryhisui' && role === 'Wallbreaker');
- const abilitiesCase = (abilities.has('Guts') || abilities.has('Sharpness'));
- return (!counter.get('sheerforce') || moves.has('bellydrum') || braviaryCase || abilitiesCase);
- case 'Slush Rush':
- return !teamDetails.snow;
- case 'Sniper':
- return abilities.has('Torrent');
- case 'Solar Power':
- return (!teamDetails.sun || !counter.get('Special'));
- case 'Sturdy':
- return !!counter.get('recoil');
- case 'Swarm':
- return (!counter.get('Bug') || !!counter.get('recovery'));
- case 'Sweet Veil':
- return types.includes('Grass');
- case 'Swift Swim':
- return (!moves.has('raindance') && !teamDetails.rain);
- case 'Synchronize':
- return (species.id !== 'umbreon' && species.id !== 'rabsca');
- case 'Technician':
- return (!counter.get('technician') || abilities.has('Punk Rock'));
- case 'Tinted Lens':
- return (species.id === 'braviaryhisui' && role === 'Fast Support');
- case 'Unburden':
- return (abilities.has('Prankster') || !counter.get('setup'));
- case 'Volt Absorb':
- if (abilities.has('Iron Fist') && counter.ironFist >= 2) return true;
- return (this.dex.getEffectiveness('Electric', species) < -1);
- case 'Water Absorb':
- return species.id === 'quagsire';
- case 'Weak Armor':
- return moves.has('shellsmash');
- }
-
- return false;
- }
-
-
- getAbility(
- types: string[],
- moves: Set,
- abilities: Set,
- counter: MoveCounter,
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- teraType: string,
- role: string,
- ): string {
- const abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a));
- Utils.sortBy(abilityData, abil => -abil.rating);
-
- if (abilityData.length <= 1) return abilityData[0].name;
-
- // Hard-code abilities here
- if (species.id === 'arcaninehisui') return 'Rock Head';
- if (species.id === 'staraptor') return 'Reckless';
- if (species.id === 'scovillain') return 'Chlorophyll';
- if (species.id === 'vespiquen') return 'Pressure';
- if (species.id === 'enamorus' && moves.has('calmmind')) return 'Cute Charm';
- if (species.id === 'cetitan' && role === 'Wallbreaker') return 'Sheer Force';
- if (species.id === 'klawf' && role === 'Setup Sweeper') return 'Anger Shell';
- if (abilities.has('Cud Chew') && moves.has('substitute')) return 'Cud Chew';
- if (abilities.has('Guts') && (moves.has('facade') || moves.has('sleeptalk'))) return 'Guts';
- if (abilities.has('Harvest') && moves.has('substitute')) return 'Harvest';
- if (species.id === 'hypno') return 'Insomnia';
- if (abilities.has('Serene Grace') && moves.has('headbutt')) return 'Serene Grace';
- if (abilities.has('Technician') && counter.get('technician')) return 'Technician';
- if (abilities.has('Own Tempo') && moves.has('petaldance')) return 'Own Tempo';
- if (abilities.has('Slush Rush') && moves.has('snowscape')) return 'Slush Rush';
- if (abilities.has('Soundproof') && moves.has('substitute')) return 'Soundproof';
-
- let abilityAllowed: Ability[] = [];
- // Obtain a list of abilities that are allowed (not culled)
- for (const ability of abilityData) {
- if (ability.rating >= 1 && !this.shouldCullAbility(
- ability.name, types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role
- )) {
- abilityAllowed.push(ability);
- }
- }
-
- // If all abilities are culled, re-allow all
- if (!abilityAllowed.length) abilityAllowed = abilityData;
-
- if (abilityAllowed.length === 1) return abilityAllowed[0].name;
- // Sort abilities by rating with an element of randomness
- // All three abilities can be chosen
- if (abilityAllowed[2] && abilityAllowed[0].rating - 0.5 <= abilityAllowed[2].rating) {
- if (abilityAllowed[1].rating <= abilityAllowed[2].rating) {
- if (this.randomChance(1, 2)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]];
- } else {
- if (this.randomChance(1, 3)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]];
- }
- if (abilityAllowed[0].rating <= abilityAllowed[1].rating) {
- if (this.randomChance(2, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];
- } else {
- if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];
- }
- } else {
- // Third ability cannot be chosen
- if (abilityAllowed[0].rating <= abilityAllowed[1].rating) {
- if (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];
- } else if (abilityAllowed[0].rating - 0.5 <= abilityAllowed[1].rating) {
- if (this.randomChance(1, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];
- }
- }
-
- // After sorting, choose the first ability
- return abilityAllowed[0].name;
- }
-
- getPriorityItem(
- ability: string,
- types: string[],
- moves: Set,
- counter: MoveCounter,
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- teraType: string,
- role: string,
- ) {
- if (species.requiredItems) {
- // Z-Crystals aren't available in Gen 9, so require Plates
- if (species.baseSpecies === 'Arceus') {
- return species.requiredItems[0];
- }
- return this.sample(species.requiredItems);
- }
- if (role === 'AV Pivot') return 'Assault Vest';
- if (
- !isLead && role === 'Bulky Setup' &&
- (ability === 'Quark Drive' || ability === 'Protosynthesis')
- ) {
- return 'Booster Energy';
- }
- if (species.id === 'pikachu') return 'Light Ball';
- if (species.id === 'regieleki') return 'Magnet';
- if (species.id === 'pincurchin') return 'Shuca Berry';
- if (species.id === 'lokix') {
- return (role === 'Fast Attacker') ? 'Silver Powder' : 'Life Orb';
- }
- if (species.id === 'toxtricity' && moves.has('shiftgear')) return 'Throat Spray';
- if (species.baseSpecies === 'Magearna' && role === 'Tera Blast user') return 'Weakness Policy';
- if (moves.has('lastrespects')) return 'Choice Scarf';
- if (ability === 'Imposter' || (species.id === 'magnezone' && moves.has('bodypress'))) return 'Choice Scarf';
- if (moves.has('bellydrum') && moves.has('substitute')) return 'Salac Berry';
- if (
- ['Cheek Pouch', 'Cud Chew', 'Harvest'].some(m => ability === m) ||
- moves.has('bellydrum') || moves.has('filletaway')
- ) {
- return 'Sitrus Berry';
- }
- if (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) {
- if (species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && role !== 'Wallbreaker') {
- return 'Choice Scarf';
- } else {
- return (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs';
- }
- }
- if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {
- return (types.includes('Fire') || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb';
- }
- if (
- (ability === 'Magic Guard' && counter.damagingMoves.size > 1) ||
- (ability === 'Sheer Force' && counter.get('sheerforce'))
- ) {
- return 'Life Orb';
- }
- if (ability === 'Anger Shell') return this.sample(['Rindo Berry', 'Passho Berry', 'Scope Lens', 'Sitrus Berry']);
- if (moves.has('shellsmash')) return 'White Herb';
- if (moves.has('populationbomb')) return 'Wide Lens';
- if (moves.has('courtchange')) return 'Heavy-Duty Boots';
- if (moves.has('stuffcheeks')) return this.randomChance(1, 2) ? 'Liechi Berry' : 'Salac Berry';
- if (ability === 'Unburden') return moves.has('closecombat') ? 'White Herb' : 'Sitrus Berry';
- if (moves.has('acrobatics')) return ability === 'Grassy Surge' ? 'Grassy Seed' : '';
- if (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';
- if (
- moves.has('rest') && !moves.has('sleeptalk') &&
- ability !== 'Natural Cure' && ability !== 'Shed Skin'
- ) {
- return 'Chesto Berry';
- }
- if (species.id === 'scyther') return (isLead && !moves.has('uturn')) ? 'Eviolite' : 'Heavy-Duty Boots';
- if (species.nfe) return 'Eviolite';
- if (this.dex.getEffectiveness('Rock', species) >= 2) return 'Heavy-Duty Boots';
- }
-
- /** Item generation specific to Random Doubles */
- // This will be changed and used later, once doubles is actually coming out.
- getDoublesItem(
- ability: string,
- types: string[],
- moves: Set,
- counter: MoveCounter,
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- teraType: string,
- role: string,
- ) {
- const defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd;
-
- if (
- (['dragonenergy', 'eruption', 'waterspout'].some(m => moves.has(m))) &&
- counter.damagingMoves.size >= 4
- ) return 'Choice Scarf';
- if (moves.has('blizzard') && ability !== 'Snow Warning' && !teamDetails.snow) return 'Blunder Policy';
- if (this.dex.getEffectiveness('Rock', species) >= 2 && !types.includes('Flying')) return 'Heavy-Duty Boots';
- if (counter.get('Physical') >= 4 && ['fakeout', 'feint', 'rapidspin', 'suckerpunch'].every(m => !moves.has(m)) && (
- types.includes('Dragon') || types.includes('Fighting') || types.includes('Rock') ||
- moves.has('flipturn') || moves.has('uturn')
- )) {
- return (
- !counter.get('priority') && ability !== 'Speed Boost' &&
- species.baseStats.spe >= 60 && species.baseStats.spe <= 100 &&
- this.randomChance(1, 2)
- ) ? 'Choice Scarf' : 'Choice Band';
- }
- if (
- (
- counter.get('Special') >= 4 &&
- (types.includes('Dragon') || types.includes('Fighting') || types.includes('Rock') || moves.has('voltswitch'))
- ) || (
- (counter.get('Special') >= 3 && (moves.has('flipturn') || moves.has('uturn'))) &&
- !moves.has('acidspray') && !moves.has('electroweb')
- )
- ) {
- return (
- species.baseStats.spe >= 60 && species.baseStats.spe <= 100 && this.randomChance(1, 2)
- ) ? 'Choice Scarf' : 'Choice Specs';
- }
- // This one is intentionally below the Choice item checks.
- if ((defensiveStatTotal < 250 && ability === 'Regenerator') || species.name === 'Pheromosa') return 'Life Orb';
- if (counter.damagingMoves.size >= 4 && defensiveStatTotal >= 275) return 'Assault Vest';
- if (
- counter.damagingMoves.size >= 3 &&
- species.baseStats.spe >= 60 &&
- ability !== 'Multiscale' && ability !== 'Sturdy' &&
- [
- 'acidspray', 'clearsmog', 'electroweb', 'fakeout', 'feint', 'icywind',
- 'incinerate', 'naturesmadness', 'rapidspin', 'snarl', 'uturn',
- ].every(m => !moves.has(m))
- ) return (ability === 'Defeatist' || defensiveStatTotal >= 275) ? 'Sitrus Berry' : 'Life Orb';
- }
-
- getItem(
- ability: string,
- types: string[],
- moves: Set,
- counter: MoveCounter,
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- teraType: string,
- role: string,
- ): string | undefined {
- if (
- (counter.get('Physical') >= 4 ||
- (counter.get('Physical') >= 3 && moves.has('memento'))) &&
- ['fakeout', 'firstimpression', 'flamecharge', 'rapidspin', 'ruination', 'superfang'].every(m => !moves.has(m))
- ) {
- const scarfReqs = (
- role !== 'Wallbreaker' &&
- (species.baseStats.atk >= 100 || ability === 'Huge Power' || ability === 'Pure Power') &&
- species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
- ability !== 'Speed Boost' && !counter.get('priority') && !moves.has('aquastep')
- );
- return (scarfReqs && this.randomChance(1, 2)) ? 'Choice Scarf' : 'Choice Band';
- }
- if (
- (counter.get('Special') >= 4) ||
- (counter.get('Special') >= 3 && ['flipturn', 'partingshot', 'uturn'].some(m => moves.has(m)))
- ) {
- const scarfReqs = (
- role !== 'Wallbreaker' &&
- species.baseStats.spa >= 100 &&
- species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
- ability !== 'Speed Boost' && ability !== 'Tinted Lens' && !counter.get('Physical')
- );
- return (scarfReqs && this.randomChance(1, 2)) ? 'Choice Scarf' : 'Choice Specs';
- }
- if (!counter.get('Status') && role !== 'Fast Attacker' && role !== 'Wallbreaker') return 'Assault Vest';
- if (counter.get('speedsetup') && this.dex.getEffectiveness('Ground', species) < 1) return 'Weakness Policy';
- if (species.id === 'urshifurapidstrike') return 'Punching Glove';
- if (species.id === 'palkia') return 'Lustrous Orb';
- if (moves.has('substitute') || ability === 'Moody') return 'Leftovers';
- if (moves.has('stickyweb') && isLead) return 'Focus Sash';
- if (
- ((!teamDetails.defog && !teamDetails.rapidSpin) || (!counter.get('setup') && role !== 'Wallbreaker')) &&
- this.dex.getEffectiveness('Rock', species) >= 1
- ) return 'Heavy-Duty Boots';
- if (
- role === 'Fast Support' &&
- ['defog', 'rapidspin', 'uturn', 'voltswitch'].some(m => moves.has(m)) &&
- !types.includes('Flying') && ability !== 'Levitate'
- ) return 'Heavy-Duty Boots';
-
- // Low Priority
- if (moves.has('outrage')) return 'Lum Berry';
- if (
- (species.id === 'garchomp' && role === 'Fast Support') ||
- (ability === 'Regenerator' && types.includes('Water') && species.baseStats.def >= 110 && this.randomChance(1, 3))
- ) return 'Rocky Helmet';
- if (
- role === 'Fast Support' && isLead &&
- !counter.get('recovery') && !counter.get('recoil') && !moves.has('protect') &&
- (species.baseStats.hp + species.baseStats.def + species.baseStats.spd) < 258
- ) return 'Focus Sash';
- if (
- role !== 'Fast Attacker' && role !== 'Tera Blast user' && ability !== 'Levitate' &&
- this.dex.getEffectiveness('Ground', species) >= 2
- ) return 'Air Balloon';
- if (['Bulky Attacker', 'Bulky Support', 'Bulky Setup'].some(m => role === (m))) return 'Leftovers';
- if (role === 'Fast Support' || role === 'Fast Bulky Setup') {
- return (counter.damagingMoves.size >= 3 && !moves.has('nuzzle')) ? 'Life Orb' : 'Leftovers';
- }
- if (role === 'Tera Blast user' && counter.get('recovery') && counter.damagingMoves.size < 3) return 'Leftovers';
- if (
- ['flamecharge', 'rapidspin'].every(m => !moves.has(m)) &&
- ['Fast Attacker', 'Setup Sweeper', 'Tera Blast user', 'Wallbreaker'].some(m => role === (m))
- ) return 'Life Orb';
- if (isDoubles) return 'Sitrus Berry';
- return 'Leftovers';
- }
-
- getLevel(
- species: Species,
- isDoubles: boolean,
- ): number {
- if (this.adjustLevel) return this.adjustLevel;
- // doubles levelling
- if (isDoubles && this.randomDoublesSets[species.id]["level"]) return this.randomDoublesSets[species.id]["level"];
- if (!isDoubles && this.randomSets[species.id]["level"]) return this.randomSets[species.id]["level"];
- // Default to tier-based levelling
- const tier = species.tier;
- const tierScale: Partial> = {
- Uber: 76,
- OU: 80,
- UUBL: 81,
- UU: 82,
- RUBL: 83,
- RU: 84,
- NUBL: 85,
- NU: 86,
- PUBL: 87,
- PU: 88, "(PU)": 88, NFE: 88,
- };
- return tierScale[tier] || 80;
- }
-
- randomSet(
- species: string | Species,
- teamDetails: RandomTeamsTypes.TeamDetails = {},
- isLead = false,
- isDoubles = false
- ): RandomTeamsTypes.RandomSet {
- species = this.dex.species.get(species);
- let forme = species.name;
-
- if (typeof species.battleOnly === 'string') {
- // Only change the forme. The species has custom moves, and may have different typing and requirements.
- forme = species.battleOnly;
- }
- if (species.cosmeticFormes) {
- forme = this.sample([species.name].concat(species.cosmeticFormes));
- }
- const sets = (this as any)[`random${isDoubles ? 'Doubles' : ''}Sets`][species.id]["sets"];
- const possibleSets = [];
- for (const set of sets) {
- if (teamDetails.teraBlast && set.role === "Tera Blast user") {
- continue;
- }
- possibleSets.push(set);
- }
- const set = this.sampleIfArray(possibleSets);
- const role = set.role;
- const movePool: string[] = [];
- for (const movename of set.movepool) {
- movePool.push(this.dex.moves.get(movename).id);
- }
- const teraTypes = set.teraTypes;
- const teraType = this.sampleIfArray(teraTypes);
-
- if (this.format.gameType === 'multi' || this.format.gameType === 'freeforall') {
- // Random Multi Battle uses doubles move pools, but Ally Switch fails in multi battles
- // Random Free-For-All also uses doubles move pools, for now
- const allySwitch = movePool.indexOf('allyswitch');
- if (allySwitch > -1) {
- if (movePool.length > this.maxMoveCount) {
- this.fastPop(movePool, allySwitch);
- } else {
- // Ideally, we'll never get here, but better to have a move that usually does nothing than one that always does
- movePool[allySwitch] = 'sleeptalk';
- }
- }
- }
- let ability = '';
- let item = undefined;
-
- const evs = {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85};
- const ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};
-
- const types = species.types;
- const abilities = new Set(Object.values(species.abilities));
- if (species.unreleasedHidden) abilities.delete(species.abilities.H);
-
- // Get moves
- const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role);
- const counter = this.queryMoves(moves, species, teraType, abilities);
-
- // Get ability
- ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role);
-
- // Get items
- // First, the priority items
- item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role);
- if (item === undefined && isDoubles) {
- item = this.getDoublesItem(ability, types, moves, counter, teamDetails, species, teraType, role);
- }
- if (item === undefined) {
- item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role);
- }
-
- // fallback
- if (item === undefined) item = isDoubles ? 'Sitrus Berry' : 'Leftovers';
-
- if (species.baseSpecies === 'Pikachu') {
- forme = 'Pikachu' + this.sample(['', '-Original', '-Hoenn', '-Sinnoh', '-Unova', '-Kalos', '-Alola', '-Partner', '-World']);
- }
-
- // Get level
- const level = this.getLevel(species, isDoubles);
-
- // Prepare optimal HP
- const srImmunity = ability === 'Magic Guard' || item === 'Heavy-Duty Boots';
- const srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);
- while (evs.hp > 1) {
- const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
- if ((moves.has('substitute') && ['Sitrus Berry', 'Salac Berry'].includes(item))) {
- // Two Substitutes should activate Sitrus Berry
- if (hp % 4 === 0) break;
- } else if ((moves.has('bellydrum') || moves.has('filletaway')) && (item === 'Sitrus Berry' || ability === 'Gluttony')) {
- // Belly Drum should activate Sitrus Berry
- if (hp % 2 === 0) break;
- } else {
- // Maximize number of Stealth Rock switch-ins
- if (srWeakness <= 0 || hp % (4 / srWeakness) > 0 || ['Leftovers', 'Life Orb'].includes(item)) break;
- }
- evs.hp -= 4;
- }
-
- // Minimize confusion damage
- const noAttackStatMoves = [...moves].every(m => {
- const move = this.dex.moves.get(m);
- if (move.damageCallback || move.damage) return true;
- if (move.id === 'shellsidearm') return false;
- // Magearna, though this can work well as a general rule
- if (move.id === 'terablast' && moves.has('shiftgear')) return false;
- return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
- });
- if (noAttackStatMoves && !moves.has('transform')) {
- evs.atk = 0;
- ivs.atk = 0;
- }
-
- if (moves.has('gyroball') || moves.has('trickroom')) {
- evs.spe = 0;
- ivs.spe = 0;
- }
-
- // shuffle moves to add more randomness to camomons
- const shuffledMoves = Array.from(moves);
- this.prng.shuffle(shuffledMoves);
- return {
- name: species.baseSpecies,
- species: forme,
- gender: species.gender,
- shiny: this.randomChance(1, 1024),
- level,
- moves: shuffledMoves,
- ability,
- evs,
- ivs,
- item,
- teraType,
- role,
- };
- }
-
- getPokemonPool(
- type: string,
- pokemonToExclude: RandomTeamsTypes.RandomSet[] = [],
- isMonotype = false,
- isDoubles = false,
- ) {
- const exclude = pokemonToExclude.map(p => toID(p.species));
- const pokemonPool = [];
- const baseSpeciesPool: string[] = [];
- if (isDoubles) {
- for (const pokemon of Object.keys(this.randomDoublesSets)) {
- let species = this.dex.species.get(pokemon);
- if (species.gen > this.gen || exclude.includes(species.id)) continue;
- if (isMonotype) {
- if (!species.types.includes(type)) continue;
- if (typeof species.battleOnly === 'string') {
- species = this.dex.species.get(species.battleOnly);
- if (!species.types.includes(type)) continue;
- }
- }
- pokemonPool.push(pokemon);
- if (!baseSpeciesPool.includes(species.baseSpecies)) baseSpeciesPool.push(species.baseSpecies);
- }
- } else {
- for (const pokemon of Object.keys(this.randomSets)) {
- let species = this.dex.species.get(pokemon);
- if (species.gen > this.gen || exclude.includes(species.id)) continue;
- if (isMonotype) {
- if (!species.types.includes(type)) continue;
- if (typeof species.battleOnly === 'string') {
- species = this.dex.species.get(species.battleOnly);
- if (!species.types.includes(type)) continue;
- }
- }
- pokemonPool.push(pokemon);
- if (!baseSpeciesPool.includes(species.baseSpecies)) baseSpeciesPool.push(species.baseSpecies);
- }
- }
- return [pokemonPool, baseSpeciesPool];
- }
-
- // TODO: Make types for this
- randomSets: AnyObject = require('./random-sets.json');
- randomDoublesSets: AnyObject = require('./random-sets.json'); // Doubles sets are the same as singles for now
-
- randomTeam() {
- this.enforceNoDirectCustomBanlistChanges();
-
- const seed = this.prng.seed;
- const ruleTable = this.dex.formats.getRuleTable(this.format);
- const pokemon: RandomTeamsTypes.RandomSet[] = [];
-
- // For Monotype
- const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
- const isDoubles = this.format.gameType !== 'singles';
- const typePool = this.dex.types.names();
- const type = this.forceMonotype || this.sample(typePool);
-
- // PotD stuff
- const usePotD = global.Config && Config.potd && ruleTable.has('potd');
- const potd = usePotD ? this.dex.species.get(Config.potd) : null;
-
- const baseFormes: {[k: string]: number} = {};
-
- const tierCount: {[k: string]: number} = {};
- const typeCount: {[k: string]: number} = {};
- const typeComboCount: {[k: string]: number} = {};
- const typeWeaknesses: {[k: string]: number} = {};
- const teamDetails: RandomTeamsTypes.TeamDetails = {};
- const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, isDoubles);
-
- let generatedLead = false;
- while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
- const baseSpecies = this.sampleNoReplace(baseSpeciesPool);
- const currentSpeciesPool: Species[] = [];
- for (const poke of pokemonPool) {
- const species = this.dex.species.get(poke);
- if (species.baseSpecies === baseSpecies) currentSpeciesPool.push(species);
- }
- let species = this.sample(currentSpeciesPool);
- if (!species.exists) continue;
- // Illusion shouldn't be on the last slot
- if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue;
-
- // If Zoroark is in the team, ensure its level is balanced
- // Level range differs for each forme of Zoroark
- if (
- pokemon.some(pkmn => pkmn.species === 'Zoroark') &&
- pokemon.length >= (this.maxTeamSize - 1) &&
- (this.getLevel(species, isDoubles) < 76 || this.getLevel(species, isDoubles) > 94) &&
- !this.adjustLevel
- ) {
- continue;
- }
-
- if (
- pokemon.some(pkmn => pkmn.species === 'Zoroark-Hisui') &&
- pokemon.length >= (this.maxTeamSize - 1) &&
- (this.getLevel(species, isDoubles) < 72 || this.getLevel(species, isDoubles) > 86) &&
- !this.adjustLevel
- ) {
- continue;
- }
-
- const tier = species.tier;
- const types = species.types;
- const typeCombo = types.slice().sort().join();
- // Dynamically scale limits for different team sizes. The default and minimum value is 1.
- const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
-
- // Limit one Pokemon per tier, two for Monotype
- // Disable this for now, since it is still a new gen
- // Unless you want to have a lot of Ubers!
- // if (
- // (tierCount[tier] >= (this.forceMonotype || isMonotype ? 2 : 1) * limitFactor) &&
- // !this.randomChance(1, Math.pow(5, tierCount[tier]))
- // ) {
- // continue;
- // }
-
- if (!isMonotype && !this.forceMonotype) {
- let skip = false;
-
- // Limit two of any type
- for (const typeName of types) {
- if (typeCount[typeName] >= 2 * limitFactor) {
- skip = true;
- break;
- }
- }
- if (skip) continue;
-
- // Limit three weak to any type
- for (const typeName of this.dex.types.names()) {
- // it's weak to the type
- if (this.dex.getEffectiveness(typeName, species) > 0) {
- if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;
- if (typeWeaknesses[typeName] >= 3 * limitFactor) {
- skip = true;
- break;
- }
- }
- }
- if (skip) continue;
- }
-
- // Limit one of any type combination, two in Monotype
- if (!this.forceMonotype && typeComboCount[typeCombo] >= (isMonotype ? 2 : 1) * limitFactor) continue;
-
- // The Pokemon of the Day
- if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd;
-
- let set: RandomTeamsTypes.RandomSet;
-
- if (!generatedLead) {
- if (noLeadPokemon.includes(species.baseSpecies)) {
- if (pokemon.length + 1 === this.maxTeamSize) continue;
- set = this.randomSet(species, teamDetails, false, isDoubles);
- pokemon.push(set);
- } else {
- set = this.randomSet(species, teamDetails, true, isDoubles);
- pokemon.unshift(set);
- generatedLead = true;
- if (typeof teamDetails.illusion === 'number') teamDetails.illusion++;
- }
- } else {
- set = this.randomSet(species, teamDetails, false, isDoubles);
- pokemon.push(set);
- }
-
- if (pokemon.length === this.maxTeamSize) {
- // Set Zoroark's level to be the same as the last Pokemon
- const illusion = teamDetails.illusion;
- if (illusion) pokemon[illusion - 1].level = pokemon[this.maxTeamSize - 1].level;
-
- // Don't bother tracking details for the last Pokemon
- break;
- }
-
- // Now that our Pokemon has passed all checks, we can increment our counters
- baseFormes[species.baseSpecies] = 1;
-
- // Increment tier counter
- if (tierCount[tier]) {
- tierCount[tier]++;
- } else {
- tierCount[tier] = 1;
- }
-
- // Increment type counters
- for (const typeName of types) {
- if (typeName in typeCount) {
- typeCount[typeName]++;
- } else {
- typeCount[typeName] = 1;
- }
- }
- if (typeCombo in typeComboCount) {
- typeComboCount[typeCombo]++;
- } else {
- typeComboCount[typeCombo] = 1;
- }
-
- // Increment weakness counter
- for (const typeName of this.dex.types.names()) {
- // it's weak to the type
- if (this.dex.getEffectiveness(typeName, species) > 0) {
- typeWeaknesses[typeName]++;
- }
- }
-
- // Track what the team has
- if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1;
- if (set.ability === 'Drought' || set.ability === 'Orichalcum Pulse' || set.moves.includes('sunnyday')) {
- teamDetails.sun = 1;
- }
- if (set.ability === 'Sand Stream') teamDetails.sand = 1;
- if (set.ability === 'Snow Warning' || set.moves.includes('snowscape') || set.moves.includes('chillyreception')) {
- teamDetails.snow = 1;
- }
- if (set.moves.includes('spikes') || set.moves.includes('ceaselessedge')) {
- teamDetails.spikes = (teamDetails.spikes || 0) + 1;
- }
- if (set.moves.includes('toxicspikes') || set.ability === 'Toxic Debris') {
- teamDetails.toxicSpikes = (teamDetails.toxicSpikes || 0) + 1;
- }
- if (set.moves.includes('stealthrock') || set.moves.includes('stoneaxe')) teamDetails.stealthRock = 1;
- if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1;
- if (set.moves.includes('defog') || set.moves.includes('tidyup')) teamDetails.defog = 1;
- if (set.moves.includes('rapidspin') || set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1;
- if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) {
- teamDetails.screens = 1;
- }
- if (set.role === 'Tera Blast user') teamDetails.teraBlast = 1;
-
- // For setting Zoroark's level
- if (set.ability === 'Illusion') teamDetails.illusion = pokemon.length;
- }
- if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { // large teams sometimes cannot be built
- throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
- }
-
- return pokemon;
- }
-
- randomCCTeam(): RandomTeamsTypes.RandomSet[] {
- this.enforceNoDirectCustomBanlistChanges();
-
- const dex = this.dex;
- const team = [];
-
- const natures = this.dex.natures.all();
- const items = this.dex.items.all();
-
- const randomN = this.randomNPokemon(this.maxTeamSize, this.forceMonotype, undefined, undefined, true);
-
- for (let forme of randomN) {
- let species = dex.species.get(forme);
- if (species.isNonstandard) species = dex.species.get(species.baseSpecies);
-
- // Random legal item
- let item = '';
- let isIllegalItem;
- let isBadItem;
- if (this.gen >= 2) {
- do {
- item = this.sample(items).name;
- isIllegalItem = this.dex.items.get(item).gen > this.gen || this.dex.items.get(item).isNonstandard;
- isBadItem = item.startsWith("TR") || this.dex.items.get(item).isPokeball;
- } while (isIllegalItem || (isBadItem && this.randomChance(19, 20)));
- }
-
- // Make sure forme is legal
- if (species.battleOnly) {
- if (typeof species.battleOnly === 'string') {
- species = dex.species.get(species.battleOnly);
- } else {
- species = dex.species.get(this.sample(species.battleOnly));
- }
- forme = species.name;
- } else if (species.requiredItems && !species.requiredItems.some(req => toID(req) === item)) {
- if (!species.changesFrom) throw new Error(`${species.name} needs a changesFrom value`);
- species = dex.species.get(species.changesFrom);
- forme = species.name;
- }
-
- // Make sure that a base forme does not hold any forme-modifier items.
- let itemData = this.dex.items.get(item);
- if (itemData.forcedForme && forme === this.dex.species.get(itemData.forcedForme).baseSpecies) {
- do {
- itemData = this.sample(items);
- item = itemData.name;
- } while (
- itemData.gen > this.gen ||
- itemData.isNonstandard ||
- (itemData.forcedForme && forme === this.dex.species.get(itemData.forcedForme).baseSpecies)
- );
- }
-
- // Random legal ability
- const abilities = Object.values(species.abilities).filter(a => this.dex.abilities.get(a).gen <= this.gen);
- const ability: string = this.gen <= 2 ? 'No Ability' : this.sample(abilities);
-
- // Four random unique moves from the movepool
- let pool = ['struggle'];
- if (forme === 'Smeargle') {
- pool = this.dex.moves
- .all()
- .filter(move => !(move.isNonstandard || move.isZ || move.isMax || move.realMove))
- .map(m => m.id);
- } else {
- const formes = ['gastrodoneast', 'pumpkaboosuper', 'zygarde10'];
- let learnset = this.dex.species.getLearnset(species.id);
- let learnsetSpecies = species;
- if (formes.includes(species.id) || !learnset) {
- learnsetSpecies = this.dex.species.get(species.baseSpecies);
- learnset = this.dex.species.getLearnset(learnsetSpecies.id);
- }
- if (learnset) {
- pool = Object.keys(learnset).filter(
- moveid => learnset![moveid].find(learned => learned.startsWith(String(this.gen)))
- );
- }
- if (learnset && learnsetSpecies === species && species.changesFrom) {
- learnset = this.dex.species.getLearnset(toID(species.changesFrom));
- for (const moveid in learnset) {
- if (!pool.includes(moveid) && learnset[moveid].some(source => source.startsWith(String(this.gen)))) {
- pool.push(moveid);
- }
- }
- }
- const evoRegion = learnsetSpecies.evoRegion && learnsetSpecies.gen !== this.gen;
- while (learnsetSpecies.prevo) {
- learnsetSpecies = this.dex.species.get(learnsetSpecies.prevo);
- for (const moveid in learnset) {
- if (!pool.includes(moveid) &&
- learnset[moveid].some(source => source.startsWith(String(this.gen)) && !evoRegion)) {
- pool.push(moveid);
- }
- }
- }
- }
-
- const moves = this.multipleSamplesNoReplace(pool, this.maxMoveCount);
-
- // Random EVs
- const evs: StatsTable = {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0};
- const s: StatID[] = ["hp", "atk", "def", "spa", "spd", "spe"];
- let evpool = 510;
- do {
- const x = this.sample(s);
- const y = this.random(Math.min(256 - evs[x], evpool + 1));
- evs[x] += y;
- evpool -= y;
- } while (evpool > 0);
-
- // Random IVs
- const ivs = {
- hp: this.random(32),
- atk: this.random(32),
- def: this.random(32),
- spa: this.random(32),
- spd: this.random(32),
- spe: this.random(32),
- };
-
- // Random nature
- const nature = this.sample(natures).name;
-
- // Level balance--calculate directly from stats rather than using some silly lookup table
- const mbstmin = 1307; // Sunkern has the lowest modified base stat total, and that total is 807
-
- let stats = species.baseStats;
- // If Wishiwashi, use the school-forme's much higher stats
- if (species.baseSpecies === 'Wishiwashi') stats = Dex.species.get('wishiwashischool').baseStats;
-
- // Modified base stat total assumes 31 IVs, 85 EVs in every stat
- let mbst = (stats["hp"] * 2 + 31 + 21 + 100) + 10;
- mbst += (stats["atk"] * 2 + 31 + 21 + 100) + 5;
- mbst += (stats["def"] * 2 + 31 + 21 + 100) + 5;
- mbst += (stats["spa"] * 2 + 31 + 21 + 100) + 5;
- mbst += (stats["spd"] * 2 + 31 + 21 + 100) + 5;
- mbst += (stats["spe"] * 2 + 31 + 21 + 100) + 5;
-
- let level;
- if (this.adjustLevel) {
- level = this.adjustLevel;
- } else {
- level = Math.floor(100 * mbstmin / mbst); // Initial level guess will underestimate
-
- while (level < 100) {
- mbst = Math.floor((stats["hp"] * 2 + 31 + 21 + 100) * level / 100 + 10);
- // Since damage is roughly proportional to level
- mbst += Math.floor(((stats["atk"] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100);
- mbst += Math.floor((stats["def"] * 2 + 31 + 21 + 100) * level / 100 + 5);
- mbst += Math.floor(((stats["spa"] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100);
- mbst += Math.floor((stats["spd"] * 2 + 31 + 21 + 100) * level / 100 + 5);
- mbst += Math.floor((stats["spe"] * 2 + 31 + 21 + 100) * level / 100 + 5);
-
- if (mbst >= mbstmin) break;
- level++;
- }
- }
-
- // Random happiness
- const happiness = this.random(256);
-
- // Random shininess
- const shiny = this.randomChance(1, 1024);
-
- const set: RandomTeamsTypes.RandomSet = {
- name: species.baseSpecies,
- species: species.name,
- gender: species.gender,
- item,
- ability,
- moves,
- evs,
- ivs,
- nature,
- level,
- happiness,
- shiny,
- };
- if (this.gen === 9) {
- // Tera type
- set.teraType = this.sample(this.dex.types.all()).name;
- }
- team.push(set);
- }
-
- return team;
- }
-
- randomNPokemon(n: number, requiredType?: string, minSourceGen?: number, ruleTable?: RuleTable, requireMoves = false) {
- // Picks `n` random pokemon--no repeats, even among formes
- // Also need to either normalize for formes or select formes at random
- // Unreleased are okay but no CAP
- const last = [0, 151, 251, 386, 493, 649, 721, 807, 898, 1010][this.gen];
-
- if (n <= 0 || n > last) throw new Error(`n must be a number between 1 and ${last} (got ${n})`);
- if (requiredType && !this.dex.types.get(requiredType).exists) {
- throw new Error(`"${requiredType}" is not a valid type.`);
- }
-
- const isNotCustom = !ruleTable;
-
- const pool: number[] = [];
- let speciesPool: Species[] = [];
- if (isNotCustom) {
- speciesPool = [...this.dex.species.all()];
- for (const species of speciesPool) {
- if (species.isNonstandard && species.isNonstandard !== 'Unobtainable') continue;
- if (requireMoves) {
- const hasMovesInCurrentGen = Object.values(this.dex.species.getLearnset(species.id) || {})
- .some(sources => sources.some(source => source.startsWith('9')));
- if (!hasMovesInCurrentGen) continue;
- }
- if (requiredType && !species.types.includes(requiredType)) continue;
- if (minSourceGen && species.gen < minSourceGen) continue;
- const num = species.num;
- if (num <= 0 || pool.includes(num)) continue;
- if (num > last) break;
- pool.push(num);
- }
- } else {
- const EXISTENCE_TAG = ['past', 'future', 'lgpe', 'unobtainable', 'cap', 'custom', 'nonexistent'];
- const nonexistentBanReason = ruleTable.check('nonexistent');
- // Assume tierSpecies does not differ from species here (mega formes can be used without their stone, etc)
- for (const species of this.dex.species.all()) {
- if (requiredType && !species.types.includes(requiredType)) continue;
-
- let banReason = ruleTable.check('pokemon:' + species.id);
- if (banReason) continue;
- if (banReason !== '') {
- if (species.isMega && ruleTable.check('pokemontag:mega')) continue;
-
- banReason = ruleTable.check('basepokemon:' + toID(species.baseSpecies));
- if (banReason) continue;
- if (banReason !== '' || this.dex.species.get(species.baseSpecies).isNonstandard !== species.isNonstandard) {
- const nonexistentCheck = Tags.nonexistent.genericFilter!(species) && nonexistentBanReason;
- let tagWhitelisted = false;
- let tagBlacklisted = false;
- for (const ruleid of ruleTable.tagRules) {
- if (ruleid.startsWith('*')) continue;
- const tagid = ruleid.slice(12);
- const tag = Tags[tagid];
- if ((tag.speciesFilter || tag.genericFilter)!(species)) {
- const existenceTag = EXISTENCE_TAG.includes(tagid);
- if (ruleid.startsWith('+')) {
- if (!existenceTag && nonexistentCheck) continue;
- tagWhitelisted = true;
- break;
- }
- tagBlacklisted = true;
- break;
- }
- }
- if (tagBlacklisted) continue;
- if (!tagWhitelisted) {
- if (ruleTable.check('pokemontag:allpokemon')) continue;
- }
- }
- }
- speciesPool.push(species);
- const num = species.num;
- if (pool.includes(num)) continue;
- pool.push(num);
- }
- }
-
- const hasDexNumber: {[k: string]: number} = {};
- for (let i = 0; i < n; i++) {
- const num = this.sampleNoReplace(pool);
- hasDexNumber[num] = i;
- }
-
- const formes: string[][] = [];
- for (const species of speciesPool) {
- if (!(species.num in hasDexNumber)) continue;
- if (isNotCustom && (species.gen > this.gen ||
- (species.isNonstandard && species.isNonstandard !== 'Unobtainable'))) continue;
- if (!formes[hasDexNumber[species.num]]) formes[hasDexNumber[species.num]] = [];
- formes[hasDexNumber[species.num]].push(species.name);
- }
-
- if (formes.length < n) {
- throw new Error(`Legal Pokemon forme count insufficient to support Max Team Size: (${formes.length} / ${n}).`);
- }
-
- const nPokemon = [];
- for (let i = 0; i < n; i++) {
- if (!formes[i].length) {
- throw new Error(`Invalid pokemon gen ${this.gen}: ${JSON.stringify(formes)} numbers ${JSON.stringify(hasDexNumber)}`);
- }
- nPokemon.push(this.sample(formes[i]));
- }
- return nPokemon;
- }
-
- randomHCTeam(): PokemonSet[] {
- const hasCustomBans = this.hasDirectCustomBanlistChanges();
- const ruleTable = this.dex.formats.getRuleTable(this.format);
- const hasNonexistentBan = hasCustomBans && ruleTable.check('nonexistent');
- const hasNonexistentWhitelist = hasCustomBans && (hasNonexistentBan === '');
-
- if (hasCustomBans) {
- this.enforceNoDirectComplexBans();
- }
-
- // Item Pool
- const doItemsExist = this.gen > 1;
- let itemPool: Item[] = [];
- if (doItemsExist) {
- if (!hasCustomBans) {
- itemPool = [...this.dex.items.all()].filter(item => (item.gen <= this.gen && !item.isNonstandard));
- } else {
- const hasAllItemsBan = ruleTable.check('pokemontag:allitems');
- for (const item of this.dex.items.all()) {
- let banReason = ruleTable.check('item:' + item.id);
- if (banReason) continue;
- if (banReason !== '' && item.id) {
- if (hasAllItemsBan) continue;
- if (item.isNonstandard) {
- banReason = ruleTable.check('pokemontag:' + toID(item.isNonstandard));
- if (banReason) continue;
- if (banReason !== '' && item.isNonstandard !== 'Unobtainable') {
- if (hasNonexistentBan) continue;
- if (!hasNonexistentWhitelist) continue;
- }
- }
- }
- itemPool.push(item);
- }
- if (ruleTable.check('item:noitem')) {
- this.enforceCustomPoolSizeNoComplexBans('item', itemPool, this.maxTeamSize, 'Max Team Size');
- }
- }
- }
-
- // Ability Pool
- const doAbilitiesExist = (this.gen > 2) && (this.dex.currentMod !== 'gen7letsgo');
- let abilityPool: Ability[] = [];
- if (doAbilitiesExist) {
- if (!hasCustomBans) {
- abilityPool = [...this.dex.abilities.all()].filter(ability => (ability.gen <= this.gen && !ability.isNonstandard));
- } else {
- const hasAllAbilitiesBan = ruleTable.check('pokemontag:allabilities');
- for (const ability of this.dex.abilities.all()) {
- let banReason = ruleTable.check('ability:' + ability.id);
- if (banReason) continue;
- if (banReason !== '') {
- if (hasAllAbilitiesBan) continue;
- if (ability.isNonstandard) {
- banReason = ruleTable.check('pokemontag:' + toID(ability.isNonstandard));
- if (banReason) continue;
- if (banReason !== '') {
- if (hasNonexistentBan) continue;
- if (!hasNonexistentWhitelist) continue;
- }
- }
- }
- abilityPool.push(ability);
- }
- if (ruleTable.check('ability:noability')) {
- this.enforceCustomPoolSizeNoComplexBans('ability', abilityPool, this.maxTeamSize, 'Max Team Size');
- }
- }
- }
-
- // Move Pool
- const setMoveCount = ruleTable.maxMoveCount;
- let movePool: Move[] = [];
- if (!hasCustomBans) {
- movePool = [...this.dex.moves.all()].filter(move =>
- (move.gen <= this.gen && !move.isNonstandard));
- } else {
- const hasAllMovesBan = ruleTable.check('pokemontag:allmoves');
- for (const move of this.dex.moves.all()) {
- let banReason = ruleTable.check('move:' + move.id);
- if (banReason) continue;
- if (banReason !== '') {
- if (hasAllMovesBan) continue;
- if (move.isNonstandard) {
- banReason = ruleTable.check('pokemontag:' + toID(move.isNonstandard));
- if (banReason) continue;
- if (banReason !== '' && move.isNonstandard !== 'Unobtainable') {
- if (hasNonexistentBan) continue;
- if (!hasNonexistentWhitelist) continue;
- }
- }
- }
- movePool.push(move);
- }
- this.enforceCustomPoolSizeNoComplexBans('move', movePool, this.maxTeamSize * setMoveCount, 'Max Team Size * Max Move Count');
- }
-
- // Nature Pool
- const doNaturesExist = this.gen > 2;
- let naturePool: Nature[] = [];
- if (doNaturesExist) {
- if (!hasCustomBans) {
- naturePool = [...this.dex.natures.all()];
- } else {
- const hasAllNaturesBan = ruleTable.check('pokemontag:allnatures');
- for (const nature of this.dex.natures.all()) {
- let banReason = ruleTable.check('nature:' + nature.id);
- if (banReason) continue;
- if (banReason !== '' && nature.id) {
- if (hasAllNaturesBan) continue;
- if (nature.isNonstandard) {
- banReason = ruleTable.check('pokemontag:' + toID(nature.isNonstandard));
- if (banReason) continue;
- if (banReason !== '' && nature.isNonstandard !== 'Unobtainable') {
- if (hasNonexistentBan) continue;
- if (!hasNonexistentWhitelist) continue;
- }
- }
- }
- naturePool.push(nature);
- }
- // There is no 'nature:nonature' rule so do not constrain pool size
- }
- }
-
- const randomN = this.randomNPokemon(this.maxTeamSize, this.forceMonotype, undefined,
- hasCustomBans ? ruleTable : undefined);
-
- const team = [];
- for (const forme of randomN) {
- // Choose forme
- const species = this.dex.species.get(forme);
-
- // Random unique item
- let item = '';
- let itemData;
- let isBadItem;
- if (doItemsExist) {
- // We discard TRs and Balls with 95% probability because of their otherwise overwhelming presence
- do {
- itemData = this.sampleNoReplace(itemPool);
- item = itemData?.name;
- isBadItem = item.startsWith("TR") || itemData.isPokeball;
- } while (isBadItem && this.randomChance(19, 20) && itemPool.length > this.maxTeamSize);
- }
-
- // Random unique ability
- let ability = 'No Ability';
- let abilityData;
- if (doAbilitiesExist) {
- abilityData = this.sampleNoReplace(abilityPool);
- ability = abilityData?.name;
- }
-
- // Random unique moves
- const m = [];
- do {
- const move = this.sampleNoReplace(movePool);
- m.push(move.id);
- } while (m.length < setMoveCount);
-
- // Random EVs
- const evs = {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0};
- if (this.gen === 6) {
- let evpool = 510;
- do {
- const x = this.sample(Dex.stats.ids());
- const y = this.random(Math.min(256 - evs[x], evpool + 1));
- evs[x] += y;
- evpool -= y;
- } while (evpool > 0);
- } else {
- for (const x of Dex.stats.ids()) {
- evs[x] = this.random(256);
- }
- }
-
- // Random IVs
- const ivs: StatsTable = {
- 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 = '';
- if (doNaturesExist && (naturePool.length > 0)) {
- nature = this.sample(naturePool).name;
- }
-
- // Level balance
- const mbstmin = 1307;
- const stats = species.baseStats;
- let mbst = (stats['hp'] * 2 + 31 + 21 + 100) + 10;
- mbst += (stats['atk'] * 2 + 31 + 21 + 100) + 5;
- mbst += (stats['def'] * 2 + 31 + 21 + 100) + 5;
- mbst += (stats['spa'] * 2 + 31 + 21 + 100) + 5;
- mbst += (stats['spd'] * 2 + 31 + 21 + 100) + 5;
- mbst += (stats['spe'] * 2 + 31 + 21 + 100) + 5;
-
- let level;
- if (this.adjustLevel) {
- level = this.adjustLevel;
- } else {
- level = Math.floor(100 * mbstmin / mbst);
- while (level < 100) {
- mbst = Math.floor((stats['hp'] * 2 + 31 + 21 + 100) * level / 100 + 10);
- mbst += Math.floor(((stats['atk'] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100);
- mbst += Math.floor((stats['def'] * 2 + 31 + 21 + 100) * level / 100 + 5);
- mbst += Math.floor(((stats['spa'] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100);
- mbst += Math.floor((stats['spd'] * 2 + 31 + 21 + 100) * level / 100 + 5);
- mbst += Math.floor((stats['spe'] * 2 + 31 + 21 + 100) * level / 100 + 5);
- if (mbst >= mbstmin) break;
- level++;
- }
- }
-
- // Random happiness
- const happiness = this.random(256);
-
- // Random shininess
- const shiny = this.randomChance(1, 1024);
-
- const set: PokemonSet = {
- name: species.baseSpecies,
- species: species.name,
- gender: species.gender,
- item,
- ability,
- moves: m,
- evs,
- ivs,
- nature,
- level,
- happiness,
- shiny,
- };
- if (this.gen === 9) {
- // Random Tera type
- set.teraType = this.sample(this.dex.types.all()).name;
- }
- team.push(set);
- }
-
- return team;
- }
-}
-
-export default RandomTeams;
diff --git a/data/rulesets.ts b/data/rulesets.ts
index 3afa00696b41..4196b578d0ec 100644
--- a/data/rulesets.ts
+++ b/data/rulesets.ts
@@ -1,11 +1,9 @@
// Note: These are the rules that formats use
-import {Utils} from "../lib";
-import {Pokemon} from "../sim/pokemon";
-import {Teams} from "../sim/teams";
+import type {Learnset} from "../sim/dex-species";
// The list of formats is stored in config/formats.js
-export const Rulesets: {[k: string]: FormatData} = {
+export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
// Rulesets
///////////////////////////////////////////////////////////////////
@@ -31,9 +29,9 @@ export const Rulesets: {[k: string]: FormatData} = {
flatrules: {
effectType: 'ValidatorRule',
name: 'Flat Rules',
- desc: "The in-game Flat Rules: Adjust Level Down 50, Species Clause, Item Clause, -Mythical, -Restricted Legendary, Bring 6 Pick 3-6 depending on game type.",
- ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Item Clause', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'],
- banlist: ['Mythical', 'Restricted Legendary'],
+ desc: "The in-game Flat Rules: Adjust Level Down 50, Species Clause, Item Clause = 1, -Mythical, -Restricted Legendary, Bring 6 Pick 3-6 depending on game type.",
+ ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'],
+ banlist: ['Mythical', 'Restricted Legendary', 'Greninja-Bond'],
},
limittworestricted: {
effectType: 'ValidatorRule',
@@ -80,7 +78,7 @@ export const Rulesets: {[k: string]: FormatData} = {
desc: "The standard ruleset for all Smogon OMs (Almost Any Ability, STABmons, etc.)",
ruleset: [
'Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod', 'Overflow Stat Mod',
- // 'Min Source Gen = 9', - crashes for some reason
+ 'Min Source Gen = 9',
],
},
standardnatdex: {
@@ -90,7 +88,6 @@ export const Rulesets: {[k: string]: FormatData} = {
ruleset: [
'Obtainable', '+Unobtainable', '+Past', 'Sketch Post-Gen 7 Moves', 'Team Preview', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause',
],
- unbanlist: ['Adamant Crystal', 'Griseous Core', 'Lustrous Globe', 'Bleakwind Storm', 'Lunar Blessing', 'Mystical Power', 'Sandsear Storm', 'Wildbolt Storm'],
onValidateSet(set) {
const species = this.dex.species.get(set.species);
if (species.natDexTier === 'Illegal') {
@@ -112,7 +109,7 @@ export const Rulesets: {[k: string]: FormatData} = {
if (this.ruleTable.has(`+move:${move.id}`)) continue;
const problem = `${set.name}'s move ${move.name} does not exist in the National Dex.`;
if (this.ruleTable.has('omunobtainablemoves')) {
- const outOfBattleSpecies = this.getValidationSpecies(set)[0];
+ const {outOfBattleSpecies} = this.getValidationSpecies(set);
if (!this.omCheckCanLearn(move, outOfBattleSpecies, this.allSources(outOfBattleSpecies), set, problem)) continue;
}
return [problem];
@@ -132,10 +129,17 @@ export const Rulesets: {[k: string]: FormatData} = {
return [`${set.name}'s item ${item.name} does not exist in Gen ${this.dex.gen}.`];
}
},
+ onBegin() {
+ for (const pokemon of this.getAllPokemon()) {
+ if (pokemon.species.isMega || pokemon.species.isPrimal || pokemon.species.forme === "Ultra") {
+ pokemon.canTerastallize = null;
+ }
+ }
+ },
},
- draft: {
+ standarddraft: {
effectType: 'ValidatorRule',
- name: 'Draft',
+ name: 'Standard Draft',
desc: "The custom Draft League ruleset",
ruleset: [
'Obtainable', '+Unreleased', '+CAP', 'Sketch Post-Gen 7 Moves', 'Team Preview', 'Sleep Clause Mod', 'OHKO Clause', 'Evasion Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod',
@@ -413,7 +417,12 @@ export const Rulesets: {[k: string]: FormatData} = {
effectType: 'ValidatorRule',
name: 'Paldea Pokedex',
desc: "Only allows Pokémon native to the Paldea region (SV)",
- banlist: ['Meowth-Galar', 'Tauros-Base', 'Wooper-Base', 'Zorua-Hisui', 'Zoroark-Hisui'],
+ banlist: [
+ 'Arcanine-Hisui', 'Avalugg-Hisui', 'Basculin-White-Striped', 'Braviary-Hisui', 'Diglett-Alola', 'Dugtrio-Alola', 'Electrode-Hisui', 'Gimmighoul-Roaming',
+ 'Goodra-Hisui', 'Grimer-Alola', 'Growlithe-Hisui', 'Lilligant-Hisui', 'Meowth-Galar', 'Muk-Alola', 'Persian-Alola', 'Qwilfish-Hisui', 'Raichu-Alola',
+ 'Sliggoo-Hisui', 'Slowbro-Galar', 'Slowking-Galar', 'Slowpoke-Galar', 'Sneasel-Hisui', 'Voltorb-Hisui', 'Tauros-Base', 'Wooper-Base', 'Zorua-Hisui',
+ 'Zoroark-Hisui',
+ ],
onValidateSet(set, format) {
const paldeaDex = [
"Sprigatito", "Floragato", "Meowscarada", "Fuecoco", "Crocalor", "Skeledirge", "Quaxly", "Quaxwell", "Quaquaval", "Lechonk", "Oinkologne", "Tarountula", "Spidops", "Nymble", "Lokix", "Hoppip", "Skiploom", "Jumpluff", "Fletchling", "Fletchinder", "Talonflame", "Pawmi", "Pawmo", "Pawmot", "Houndour", "Houndoom", "Yungoos", "Gumshoos", "Skwovet", "Greedent", "Sunkern", "Sunflora", "Kricketot", "Kricketune", "Scatterbug", "Spewpa", "Vivillon", "Combee", "Vespiquen", "Rookidee", "Corvisquire", "Corviknight", "Happiny", "Chansey", "Blissey", "Azurill", "Marill", "Azumarill", "Surskit", "Masquerain", "Buizel", "Floatzel", "Wooper", "Clodsire", "Psyduck", "Golduck", "Chewtle", "Drednaw", "Igglybuff", "Jigglypuff", "Wigglytuff", "Ralts", "Kirlia", "Gardevoir", "Gallade", "Drowzee", "Hypno", "Gastly", "Haunter", "Gengar", "Tandemaus", "Maushold", "Pichu", "Pikachu", "Raichu", "Fidough", "Dachsbun", "Slakoth", "Vigoroth", "Slaking", "Bounsweet", "Steenee", "Tsareena", "Smoliv", "Dolliv", "Arboliva", "Bonsly", "Sudowoodo", "Rockruff", "Lycanroc", "Rolycoly", "Carkol", "Coalossal", "Shinx", "Luxio", "Luxray", "Starly", "Staravia", "Staraptor", "Oricorio", "Mareep", "Flaaffy", "Ampharos", "Petilil", "Lilligant", "Shroomish", "Breloom", "Applin", "Flapple", "Appletun", "Spoink", "Grumpig", "Squawkabilly", "Misdreavus", "Mismagius", "Makuhita", "Hariyama", "Crabrawler", "Crabominable", "Salandit", "Salazzle", "Phanpy", "Donphan", "Cufant", "Copperajah", "Gible", "Gabite", "Garchomp", "Nacli", "Naclstack", "Garganacl", "Wingull", "Pelipper", "Magikarp", "Gyarados", "Arrokuda", "Barraskewda", "Basculin", "Gulpin", "Swalot", "Meowth", "Persian", "Drifloon", "Drifblim", "Flabe\u0301be\u0301", "Floette", "Florges", "Diglett", "Dugtrio", "Torkoal", "Numel", "Camerupt", "Bronzor", "Bronzong", "Axew", "Fraxure", "Haxorus", "Mankey", "Primeape", "Annihilape", "Meditite", "Medicham", "Riolu", "Lucario", "Charcadet", "Armarouge", "Ceruledge", "Barboach", "Whiscash", "Tadbulb", "Bellibolt", "Goomy", "Sliggoo", "Goodra", "Croagunk", "Toxicroak", "Wattrel", "Kilowattrel", "Eevee", "Vaporeon", "Jolteon", "Flareon", "Espeon", "Umbreon", "Leafeon", "Glaceon", "Sylveon", "Dunsparce", "Dudunsparce", "Deerling", "Sawsbuck", "Girafarig", "Farigiraf", "Grimer", "Muk", "Maschiff", "Mabosstiff", "Toxel", "Toxtricity", "Dedenne", "Pachirisu", "Shroodle", "Grafaiai", "Stantler", "Foongus", "Amoonguss", "Voltorb", "Electrode", "Magnemite", "Magneton", "Magnezone", "Ditto", "Growlithe", "Arcanine", "Teddiursa", "Ursaring", "Zangoose", "Seviper", "Swablu", "Altaria", "Skiddo", "Gogoat", "Tauros", "Litleo", "Pyroar", "Stunky", "Skuntank", "Zorua", "Zoroark", "Sneasel", "Weavile", "Murkrow", "Honchkrow", "Gothita", "Gothorita", "Gothitelle", "Sinistea", "Polteageist", "Mimikyu", "Klefki", "Indeedee", "Bramblin", "Brambleghast", "Toedscool", "Toedscruel", "Tropius", "Fomantis", "Lurantis", "Klawf", "Capsakid", "Scovillain", "Cacnea", "Cacturne", "Rellor", "Rabsca", "Venonat", "Venomoth", "Pineco", "Forretress", "Scyther", "Scizor", "Heracross", "Flittle", "Espathra", "Hippopotas", "Hippowdon", "Sandile", "Krokorok", "Krookodile", "Silicobra", "Sandaconda", "Mudbray", "Mudsdale", "Larvesta", "Volcarona", "Bagon", "Shelgon", "Salamence", "Tinkatink", "Tinkatuff", "Tinkaton", "Hatenna", "Hattrem", "Hatterene", "Impidimp", "Morgrem", "Grimmsnarl", "Wiglett", "Wugtrio", "Bombirdier", "Finizen", "Palafin", "Varoom", "Revavroom", "Cyclizar", "Orthworm", "Sableye", "Shuppet", "Banette", "Falinks", "Hawlucha", "Spiritomb", "Noibat", "Noivern", "Dreepy", "Drakloak", "Dragapult", "Glimmet", "Glimmora", "Rotom", "Greavard", "Houndstone", "Oranguru", "Passimian", "Komala", "Larvitar", "Pupitar", "Tyranitar", "Stonjourner", "Eiscue", "Pincurchin", "Sandygast", "Palossand", "Slowpoke", "Slowbro", "Slowking", "Shellos", "Gastrodon", "Shellder", "Cloyster", "Qwilfish", "Luvdisc", "Finneon", "Lumineon", "Bruxish", "Alomomola", "Skrelp", "Dragalge", "Clauncher", "Clawitzer", "Tynamo", "Eelektrik", "Eelektross", "Mareanie", "Toxapex", "Flamigo", "Dratini", "Dragonair", "Dragonite", "Snom", "Frosmoth", "Snover", "Abomasnow", "Delibird", "Cubchoo", "Beartic", "Snorunt", "Glalie", "Froslass", "Cryogonal", "Cetoddle", "Cetitan", "Bergmite", "Avalugg", "Rufflet", "Braviary", "Pawniard", "Bisharp", "Kingambit", "Deino", "Zweilous", "Hydreigon", "Veluza", "Dondozo", "Tatsugiri", "Great Tusk", "Scream Tail", "Brute Bonnet", "Flutter Mane", "Slither Wing", "Sandy Shocks", "Iron Treads", "Iron Bundle", "Iron Hands", "Iron Jugulis", "Iron Moth", "Iron Thorns", "Frigibax", "Arctibax", "Baxcalibur", "Gimmighoul", "Gholdengo", "Wo-Chien", "Chien-Pao", "Ting-Lu", "Chi-Yu", "Roaring Moon", "Iron Valiant", "Koraidon", "Miraidon",
@@ -425,6 +434,46 @@ export const Rulesets: {[k: string]: FormatData} = {
}
},
},
+ kitakamipokedex: {
+ effectType: 'ValidatorRule',
+ name: 'Kitakami Pokedex',
+ desc: "Only allows Pokémon native to the Kitakami region (SV DLC1)",
+ banlist: [
+ 'Wooper-Paldea', 'Raichu-Alola', 'Vulpix-Alola', 'Ninetales-Alola', 'Growlithe-Hisui', 'Arcanine-Hisui',
+ 'Geodude-Alola', 'Graveler-Alola', 'Golem-Alola', 'Sandshrew-Alola', 'Sandslash-Alola', 'Weezing-Galar',
+ 'Sneasel-Hisui', 'Sliggoo-Hisui', 'Goodra-Hisui', 'Basculin-Red-Striped', 'Basculin-Blue-Striped', 'Ursaluna-Base',
+ ],
+ onValidateSet(set, format) {
+ const kitakamiDex = [
+ "Spinarak", "Ariados", "Yanma", "Yanmega", "Wooper", "Quagsire", "Poochyena", "Mightyena", "Volbeat", "Illumise", "Corphish", "Crawdaunt", "Sewaddle", "Swadloon", "Leavanny", "Cutiefly", "Ribombee", "Ekans", "Arbok", "Pichu", "Pikachu", "Raichu", "Bellsprout", "Weepinbell", "Victreebel", "Sentret", "Furret", "Starly", "Staravia", "Staraptor", "Fomantis", "Lurantis", "Applin", "Flapple", "Appletun", "Dipplin", "Vulpix", "Ninetales", "Poliwag", "Poliwhirl", "Poliwrath", "Politoed", "Magikarp", "Gyarados", "Hoothoot", "Noctowl", "Aipom", "Ambipom", "Heracross", "Swinub", "Piloswine", "Mamoswine", "Stantler", "Seedot", "Nuzleaf", "Shiftry", "Ralts", "Kirlia", "Gardevoir", "Gallade", "Kricketot", "Kricketune", "Pachirisu", "Riolu", "Lucario", "Petilil", "Lilligant", "Phantump", "Trevenant", "Rockruff", "Lycanroc", "Skwovet", "Greedent", "Toedscool", "Toedscruel", "Poltchageist", "Sinistcha", "Growlithe", "Arcanine", "Geodude", "Graveler", "Golem", "Bonsly", "Sudowoodo", "Timburr", "Gurdurr", "Conkeldurr", "Noibat", "Noivern", "Arrokuda", "Barraskewda", "Hatenna", "Hattrem", "Hatterene", "Morpeko", "Orthworm", "Tandemaus", "Maushold", "Mankey", "Primeape", "Annihilape", "Munchlax", "Snorlax", "Lotad", "Lombre", "Ludicolo", "Nosepass", "Probopass", "Shinx", "Luxio", "Luxray", "Grubbin", "Charjabug", "Vikavolt", "Oricorio", "Sandshrew", "Sandslash", "Gastly", "Haunter", "Gengar", "Gligar", "Gliscor", "Houndour", "Houndoom", "Spoink", "Grumpig", "Vullaby", "Mandibuzz", "Mudbray", "Mudsdale", "Jangmo-o", "Hakamo-o", "Kommo-o", "Bombirdier", "Koffing", "Weezing", "Mienfoo", "Mienshao", "Duskull", "Dusclops", "Dusknoir", "Chingling", "Chimecho", "Slugma", "Magcargo", "Litwick", "Lampent", "Chandelure", "Surskit", "Masquerain", "Cleffa", "Clefairy", "Clefable", "Bronzor", "Bronzong", "Glimmet", "Glimmora", "Feebas", "Milotic", "Dunsparce", "Dudunsparce", "Barboach", "Whiscash", "Gible", "Gabite", "Garchomp", "Carbink", "Salandit", "Salazzle", "Sneasel", "Weavile", "Snorunt", "Glalie", "Froslass", "Tynamo", "Eelektrik", "Eelektross", "Goomy", "Sliggoo", "Goodra", "Ducklett", "Swanna", "Chewtle", "Drednaw", "Cramorant", "Pawniard", "Bisharp", "Kingambit", "Mimikyu", "Impidimp", "Morgrem", "Grimmsnarl", "Indeedee", "Basculin", "Basculegion", "Ursaluna", "Okidogi", "Munkidori", "Fezandipiti", "Ogerpon",
+ ];
+ const species = this.dex.species.get(set.species || set.name);
+ if (!kitakamiDex.includes(species.baseSpecies) && !kitakamiDex.includes(species.name) &&
+ !this.ruleTable.has('+' + species.id)) {
+ return [`${species.baseSpecies} is not in the Kitakami Pokédex.`];
+ }
+ },
+ },
+ blueberrypokedex: {
+ effectType: 'ValidatorRule',
+ name: 'Blueberry Pokedex',
+ desc: "Only allows Pokémon native to the Blueberry Academy (SV DLC2)",
+ banlist: [
+ 'Diglett-Base', 'Dugtrio-Base', 'Grimer-Base', 'Muk-Base', 'Slowpoke-Base', 'Slowbro-Base', 'Slowking-Base',
+ 'Geodude-Base', 'Graveler-Base', 'Golem-Base', 'Qwilfish-Base', 'Sandshrew-Base', 'Sandslash-Base',
+ 'Vulpix-Base', 'Ninetales-Base', 'Typhlosion-Hisui', 'Samurott-Hisui', 'Greninja-Bond', 'Decidueye-Hisui',
+ ],
+ onValidateSet(set, format) {
+ const blueberryDex = [
+ "Doduo", "Dodrio", "Exeggcute", "Exeggutor", "Rhyhorn", "Rhydon", "Rhyperior", "Venonat", "Venomoth", "Elekid", "Electabuzz", "Electivire", "Magby", "Magmar", "Magmortar", "Happiny", "Chansey", "Blissey", "Scyther", "Scizor", "Kleavor", "Tauros", "Blitzle", "Zebstrika", "Girafarig", "Farigiraf", "Sandile", "Krokorok", "Krookodile", "Rellor", "Rabsca", "Rufflet", "Braviary", "Vullaby", "Mandibuzz", "Litleo", "Pyroar", "Deerling", "Sawsbuck", "Smeargle", "Rotom", "Milcery", "Alcremie", "Trapinch", "Vibrava", "Flygon", "Pikipek", "Trumbeak", "Toucannon", "Tentacool", "Tentacruel", "Horsea", "Seadra", "Kingdra", "Bruxish", "Cottonee", "Whimsicott", "Comfey", "Slakoth", "Vigoroth", "Slaking", "Oddish", "Gloom", "Vileplume", "Bellossom", "Diglett", "Dugtrio", "Grimer", "Muk", "Zangoose", "Seviper", "Crabrawler", "Crabominable", "Oricorio", "Slowpoke", "Slowbro", "Slowking", "Chinchou", "Lanturn", "Inkay", "Malamar", "Luvdisc", "Finneon", "Lumineon", "Alomomola", "Torkoal", "Fletchling", "Fletchinder", "Talonflame", "Dewpider", "Araquanid", "Tyrogue", "Hitmonlee", "Hitmonchan", "Hitmontop", "Geodude", "Graveler", "Golem", "Drilbur", "Excadrill", "Gothita", "Gothorita", "Gothitelle", "Espurr", "Meowstic", "Minior", "Cranidos", "Rampardos", "Shieldon", "Bastiodon", "Minccino", "Cinccino", "Skarmory", "Swablu", "Altaria", "Magnemite", "Magneton", "Magnezone", "Plusle", "Minun", "Scraggy", "Scrafty", "Golett", "Golurk", "Numel", "Camerupt", "Sinistea", "Polteageist", "Porygon", "Porygon2", "Porygon-Z", "Joltik", "Galvantula", "Tynamo", "Eelektrik", "Eelektross", "Beldum", "Metang", "Metagross", "Axew", "Fraxure", "Haxorus", "Seel", "Dewgong", "Lapras", "Qwilfish", "Overqwil", "Solosis", "Duosion", "Reuniclus", "Snubbull", "Granbull", "Cubchoo", "Beartic", "Sandshrew", "Sandslash", "Vulpix", "Ninetales", "Snover", "Abomasnow", "Duraludon", "Archaludon", "Hydrapple", "Bulbasaur", "Ivysaur", "Venusaur", "Charmander", "Charmeleon", "Charizard", "Squirtle", "Wartortle", "Blastoise", "Chikorita", "Bayleef", "Meganium", "Cyndaquil", "Quilava", "Typhlosion", "Totodile", "Croconaw", "Feraligatr", "Treecko", "Grovyle", "Sceptile", "Torchic", "Combusken", "Blaziken", "Mudkip", "Marshtomp", "Swampert", "Turtwig", "Grotle", "Torterra", "Chimchar", "Monferno", "Infernape", "Piplup", "Prinplup", "Empoleon", "Snivy", "Servine", "Serperior", "Tepig", "Pignite", "Emboar", "Oshawott", "Dewott", "Samurott", "Chespin", "Quilladin", "Chesnaught", "Fennekin", "Braixen", "Delphox", "Froakie", "Frogadier", "Greninja", "Rowlet", "Dartrix", "Decidueye", "Litten", "Torracat", "Incineroar", "Popplio", "Brionne", "Primarina", "Grookey", "Thwackey", "Rillaboom", "Scorbunny", "Raboot", "Cinderace", "Sobble", "Drizzile", "Inteleon", "Gouging Fire", "Raging Bolt", "Iron Crown", "Iron Boulder", "Terapagos", "Walking Wake", "Iron Leaves",
+ ];
+ const species = this.dex.species.get(set.species || set.name);
+ if (!blueberryDex.includes(species.baseSpecies) && !blueberryDex.includes(species.name) &&
+ !this.ruleTable.has('+' + species.id)) {
+ return [`${species.baseSpecies} is not in the Blueberry Pokédex.`];
+ }
+ },
+ },
potd: {
effectType: 'Rule',
name: 'PotD',
@@ -450,6 +499,10 @@ export const Rulesets: {[k: string]: FormatData} = {
) {
throw new Error(`Invalid type "${type.name}" in Generation ${this.dex.gen}`);
}
+ if (type.name === 'Stellar') {
+ throw new Error(`There are no Stellar-type Pok\u00e9mon.`);
+ }
+ return type.name;
},
onValidateSet(set) {
const species = this.dex.species.get(set.species);
@@ -459,6 +512,51 @@ export const Rulesets: {[k: string]: FormatData} = {
}
},
},
+ forcemonocolor: {
+ effectType: 'ValidatorRule',
+ name: 'Force Monocolor',
+ desc: `Forces all teams to have Pokémon of the same color. Usage: Force Monocolor = [Color], e.g. "Force Monocolor = Blue"`,
+ hasValue: true,
+ onValidateRule(value) {
+ const validColors = ["Black", "Blue", "Brown", "Gray", "Green", "Pink", "Purple", "Red", "White", "Yellow"];
+ if (!validColors.map(this.dex.toID).includes(this.dex.toID(value))) {
+ throw new Error(`Invalid color "${value}"`);
+ }
+ },
+ onValidateSet(set) {
+ const color = this.toID(this.ruleTable.valueRules.get('forcemonocolor'));
+ let dex = this.dex;
+ if (dex.gen < 5) {
+ dex = dex.forGen(5);
+ }
+ const species = dex.species.get(set.species);
+ if (this.toID(species.color) !== color) {
+ return [`${set.species} must be the color ${color}.`];
+ }
+ },
+ },
+ forceteratype: {
+ effectType: 'ValidatorRule',
+ name: 'Force Tera Type',
+ desc: `Forces all Pokémon to have the same Tera Type. Usage: Force Tera Type = [Type], e.g. "Force Tera Type = Dragon"`,
+ hasValue: true,
+ onValidateRule(value) {
+ if (this.dex.gen !== 9) {
+ throw new Error(`Terastallization doesn't exist outside of Generation 9.`);
+ }
+ const type = this.dex.types.get(value);
+ if (!type.exists) throw new Error(`Misspelled type "${value}"`);
+ if (type.isNonstandard) {
+ throw new Error(`Invalid type "${type.name}" in Generation ${this.dex.gen}.`);
+ }
+ },
+ onValidateSet(set) {
+ const type = this.dex.types.get(this.ruleTable.valueRules.get('forceteratype')!);
+ if (this.toID(set.teraType) !== type.id) {
+ return [`${set.species} must have its Tera Type set to ${type.name}.`];
+ }
+ },
+ },
forceselect: {
effectType: 'ValidatorRule',
name: 'Force Select',
@@ -533,9 +631,12 @@ export const Rulesets: {[k: string]: FormatData} = {
onTeamPreview() {
this.add('clearpoke');
for (const pokemon of this.getAllPokemon()) {
- const details = pokemon.details.replace(', shiny', '')
- .replace(/(Arceus|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce)(-[a-zA-Z?-]+)?/g, '$1-*')
+ let details = pokemon.details.replace(', shiny', '')
.replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*'); // Hacked-in Crowned formes will be revealed
+ if (!this.ruleTable.has('speciesrevealclause')) {
+ details = details
+ .replace(/(Greninja|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce)(-[a-zA-Z?-]+)?/g, '$1-*');
+ }
this.add('poke', pokemon.side.id, details, '');
}
this.makeRequest('teampreview');
@@ -579,7 +680,6 @@ export const Rulesets: {[k: string]: FormatData} = {
name: 'Little Cup',
desc: "Only allows Pokémon that can evolve and don't have any prior evolutions",
ruleset: ['Max Level = 5'],
- banlist: ['Stantler'],
onValidateSet(set) {
const species = this.dex.species.get(set.species || set.name);
if (species.prevo && this.dex.species.get(species.prevo).gen <= this.gen) {
@@ -590,25 +690,88 @@ export const Rulesets: {[k: string]: FormatData} = {
}
},
},
+ timerstarting: {
+ effectType: 'Rule',
+ name: 'Timer Starting',
+ desc: "Amount of time given at the start of the battle in seconds",
+ hasValue: 'positive-integer',
+ // hardcoded in server/room-battle.ts
+ },
+ dctimer: {
+ effectType: 'Rule',
+ name: 'DC Timer',
+ desc: "Enables or disables the disconnection timer",
+ // hardcoded in server/room-battle.ts
+ },
+ dctimerbank: {
+ effectType: 'Rule',
+ name: 'DC Timer Bank',
+ desc: "Enables or disables the disconnection timer bank",
+ // hardcoded in server/room-battle.ts
+ },
+ timergrace: {
+ effectType: 'Rule',
+ name: 'Timer Grace',
+ desc: "Grace period between timer activation and when total time starts ticking down.",
+ hasValue: 'positive-integer',
+ // hardcoded in server/room-battle.ts
+ },
+ timeraddperturn: {
+ effectType: 'Rule',
+ name: 'Timer Add Per Turn',
+ desc: "Amount of additional time given per turn in seconds",
+ hasValue: 'integer',
+ // hardcoded in server/room-battle.ts
+ },
+ timermaxperturn: {
+ effectType: 'Rule',
+ name: 'Timer Max Per Turn',
+ desc: "Maximum amount of time allowed per turn in seconds",
+ hasValue: 'positive-integer',
+ // hardcoded in server/room-battle.ts
+ },
+ timermaxfirstturn: {
+ effectType: 'Rule',
+ name: 'Timer Max First Turn',
+ desc: "Maximum amount of time allowed for the first turn in seconds",
+ hasValue: 'positive-integer',
+ // hardcoded in server/room-battle.ts
+ },
+ timeoutautochoose: {
+ effectType: 'Rule',
+ name: 'Timeout Auto Choose',
+ desc: "Enables or disables automatic selection of moves when a player times out",
+ // hardcoded in server/room-battle.ts
+ },
+ timeraccelerate: {
+ effectType: 'Rule',
+ name: 'Timer Accelerate',
+ desc: "Enables or disables timer acceleration",
+ // hardcoded in server/room-battle.ts
+ },
blitz: {
effectType: 'Rule',
name: 'Blitz',
// THIS 100% INTENTIONALLY SAYS TEN SECONDS PER TURN
- // IGNORE maxPerTurn. addPerTurn IS 5, TRANSLATING TO AN INCREMENT OF 10.
+ // IGNORE Max Per Turn. Add Per Turn IS 5, TRANSLATING TO AN INCREMENT OF 10.
desc: "Super-fast 'Blitz' timer giving 30 second Team Preview and 10 seconds per turn.",
onBegin() {
this.add('rule', 'Blitz: Super-fast timer');
},
- timer: {starting: 15, addPerTurn: 5, maxPerTurn: 15, maxFirstTurn: 40, grace: 30},
+ ruleset: [
+ 'Timer Starting = 15', 'Timer Grace = 30',
+ 'Timer Add Per Turn = 5', 'Timer Max Per Turn = 15', 'Timer Max First Turn = 40',
+ ],
},
vgctimer: {
effectType: 'Rule',
name: 'VGC Timer',
desc: "VGC's timer: 90 second Team Preview, 7 minutes Your Time, 1 minute per turn",
- timer: {
- starting: 7 * 60, addPerTurn: 0, maxPerTurn: 55, maxFirstTurn: 90,
- grace: 90, timeoutAutoChoose: true, dcTimerBank: false,
- },
+ ruleset: [
+ 'Timer Starting = 420', 'Timer Grace = 90',
+ 'Timer Add Per Turn = 0', 'Timer Max Per Turn = 55', 'Timer Max First Turn = 90',
+ 'Timeout Auto Choose', 'DC Timer Bank',
+ ],
},
speciesclause: {
effectType: 'ValidatorRule',
@@ -652,47 +815,31 @@ export const Rulesets: {[k: string]: FormatData} = {
effectType: 'ValidatorRule',
name: 'Item Clause',
desc: "Prevents teams from having more than one Pokémon with the same item",
+ hasValue: 'positive-integer',
onBegin() {
- this.add('rule', 'Item Clause: Limit one of each item');
+ this.add('rule', `Item Clause: Limit ${this.ruleTable.valueRules.get('itemclause') || 1} of each item`);
},
- onValidateTeam(team) {
- const itemTable = new Set